elasticsearch pod中的其他容器不维护init容器中的vm.max_map_count设置

anhgbhbe  于 2023-10-17  发布在  ElasticSearch
关注(0)|答案(1)|浏览(98)

刚接触kubernetes,正在尝试运行一个elasticsearch容器。我已经让logstash和kibana在pod中运行良好,但是elasticsearch一直因为vm.max_map_count问题而崩溃。

{"@timestamp":"2023-10-06T01:10:53.624Z", "log.level":"ERROR", "message":"node validation exception\n[1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.\nbootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"main","log.logger":"org.elasticsearch.bootstrap.Elasticsearch","elasticsearch.node.name":"elk-stack-545f7d5996-bkbtc","elasticsearch.cluster.name":"docker-cluster"}

从其他帖子来看,这应该是一个非常简单的使用init容器的修复。我已经设置了一个运行良好,但我仍然遇到了错误。我尝试提升elasticsearch容器并在其中运行命令,而不是init容器,但当我这样做时,我会遇到只读问题。我觉得我一定是误解了什么,错过了什么应该是一个明显的解决方案。
初始化容器yaml

initContainers:
      - name: max-map-count-setter-elasticsearch
        image: busybox:1.28
        command: ['sysctl', '-w', 'vm.max_map_count=262144']
        securityContext: 
          privileged: true

ElasticSearch容器yaml

- name: elasticsearch
        image: docker.elastic.co/elasticsearch/elasticsearch:8.10.2
        resources:
          requests:
            memory: 2Gi
          limits:
            memory: 2Gi
        ports:
        - containerPort: 9200
        - containerPort: 9300
        securityContext: 
          allowPrivilegeEscalation: true
          capabilities:
            drop: ["ALL"]
          runAsNonRoot: true
          seccompProfile:
            type: RuntimeDefault

使用kubectl exec访问容器终端时vm.max_map_count的值

elasticsearch@elk-stack-545f7d5996-jsqsn:~$ sysctl vm.max_map_count
vm.max_map_count = 65530

直接在容器上运行命令也会产生只读错误。
集群本身是3个节点(1个控制平面,2个工作节点),运行在talos上。它也是在Proxmox上虚拟化的,如果这有什么不同的话。
任何帮助将不胜感激!

vngu2lb8

vngu2lb81#

再找一找就找到了。配置必须通过运行工作节点的Talos主机上的machineconfig补丁进行编辑。
编辑到Talos machineconfig yaml

sysctls:
  vm.max_map_count: 262144

使用talosctl -n <IP> apply-config -f <yaml> --talosconfg=<config>
在那之后,部署似乎工作得很好。

相关问题