ECK部署Elasticsearch如何正确删除指定nodeset节点组?
正确删除ECK Elasticsearch NodeSet的操作方法
你直接移除NodeSet配置后apply不生效,是因为ECK Operator为了避免数据丢失,默认不会直接删除还持有Pod/分片的NodeSet,需要按以下流程操作:
1. 迁移目标NodeSet上的所有分片
首先排除ES集群对default2节点的分片分配,将现有分片全部迁移到其他节点:
- 先本地转发ES服务端口:
kubectl port-forward svc/ichat-els-deployment-es-http 9200
- 新开终端执行分片排除规则,ES的elastic用户密码可以从Secret
ichat-els-deployment-es-elastic-user中获取:
curl -u elastic:<替换为你的ES密码> -XPUT "http://localhost:9200/_cluster/settings" -H "Content-Type: application/json" -d' { "persistent": { "cluster.routing.allocation.exclude._name": "ichat-els-deployment-es-default2-*" } }'
- 等待分片迁移完成,执行以下命令无输出则代表default2节点上已无任何分片:
curl -u elastic:<替换为你的ES密码> -XGET "http://localhost:9200/_cat/shards" | grep default2
2. 缩容目标NodeSet实例数为0
不要直接删除default2的配置块,先将它的count显式设置为0,修改后的配置如下:
# 其余配置保持不变,仅调整default2的count参数 - name: default2 count: 0 config: node.store.allow_mmap: false volumeClaimTemplates: - metadata: name: elasticsearch-data spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi
修改完成后重新apply配置:
kubectl apply -f <你的ES配置文件路径>
等待几分钟后执行kubectl get pods确认default2对应的Pod已经完全终止。
3. 移除NodeSet配置并清理残留
待default2的Pod全部删除后,再将配置文件中整个default2的NodeSet块删除,重新apply配置,Operator会自动清理对应NodeSet的关联资源。
如果不需要保留default2节点的历史数据,可以手动删除关联的PVC:
kubectl delete pvc -l elasticsearch.k8s.elastic.co/statefulset-name=ichat-els-deployment-es-default2
最后别忘了清理之前设置的分片排除规则,避免影响后续集群分片分配:
curl -u elastic:<替换为你的ES密码> -XPUT "http://localhost:9200/_cluster/settings" -H "Content-Type: application/json" -d' { "persistent": { "cluster.routing.allocation.exclude._name": null } }'
异常排查
如果按照以上步骤操作后Pod仍未删除,可以查看Operator日志定位问题:
kubectl logs -n elastic-system statefulset.apps/elastic-operator
内容的提问来源于stack exchange,提问作者Saligia
相关产品推荐
相关产品推荐

