Как отключить обмен в Elasticsearch на Kubernetes? - PullRequest
0 голосов
/ 01 сентября 2018

Согласно официальным документам , отключение подкачки - одно из лучших улучшений производительности, доступных Elasticsearch.

Однако его сложно настроить. Я провел несколько часов, исследуя и пытаясь различными способами отключить обмен, используя официальный образ докера ES на Kubernetes.

При установке bootstrap.memory_lock: true в качестве переменной env образ не загружается с ошибкой: Unable to lock JVM Memory: error=12, reason=Cannot allocate memory. This can result in part of the JVM being swapped out. Increase RLIMIT_MEMLOCK, soft limit: 65536, hard limit: 65536. Как указывают документы, это отчасти ожидаемо. Я даже установил пользовательский /etc/security/limits.conf с настройками, но это не удалось.

Каков рекомендуемый способ отключения подкачки при использовании официального образа es на k8s?

А вот соответствующие разделы моего ямля

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: elastic-data
spec:
  serviceName: elastic-data
  replicas: 1
  template:
    spec:
      securityContext:
        runAsUser: 0
        fsGroup: 0
      containers:
      - name: elastic-data
        image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.0
        env:
        - name: ES_JAVA_OPTS
          value: "-Xms2g -Xmx2g"
        - name: cluster.name
          value: "elastic-devs"
        - name: node.name
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: discovery.zen.ping.unicast.hosts
          value: "elastic-master.default.svc.cluster.local"
        - name: node.master
          value: "false"
        - name: node.ingest
          value: "false"
        - name: node.data
          value: "true"
        - name: network.host
          value: "0.0.0.0"
        - name: path.data
          value: /usr/share/elasticsearch/data
        - name: indices.memory.index_buffer_size
          value: "512MB"
        - name: bootstrap.memory_lock
          value: "true"
        resources:
          requests:
            memory: "3Gi"
          limits:
            memory: "3Gi"
        ports:
        - containerPort: 9300
          name: transport
        - containerPort: 9200
          name: http
        volumeMounts:
        - name: data-volume
          mountPath: /usr/share/elasticsearch/data
        - name: swappiness-config
          mountPath: /etc/security/limits.conf
          subPath: limits.conf
      volumes:
      - name: data-volume
        persistentVolumeClaim:
          claimName: pvc-es
     - name: swappiness-config
       configMap:
         name: swappiness-config
         items:
          - key: limits.conf
             path: limits.conf

limits.conf

elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
elasticsearch hard nofile 65536
elasticsearch soft nofile 65536

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Я думаю, что ulimits в моем yaml не были распознаны, поэтому я последовал этому посту и создал изображение с пользовательской точкой входа, которая устанавливает настройки.

0 голосов
/ 03 сентября 2018

Какой тип изображения вы используете? Если его оптимизированная для контейнера ОС (cos) попытается переключиться на образы на основе Ubuntu

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...