刚接触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上虚拟化的,如果这有什么不同的话。
任何帮助将不胜感激!
1条答案
按热度按时间vngu2lb81#
再找一找就找到了。配置必须通过运行工作节点的Talos主机上的machineconfig补丁进行编辑。
编辑到Talos machineconfig yaml
使用
talosctl -n <IP> apply-config -f <yaml> --talosconfg=<config>
。在那之后,部署似乎工作得很好。