You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:18:03