Skip to content

ElasticSearch 数据塞满如何操作?

当 ElasticSearch 内存占满时,可以选择扩容或者删除数据来解决:

你可以运行如下命令查看 ES 节点的资源占比。

kubectl get pod -n mcamel-system | grep common-es-cluster-masters-es | awk '{print $1}' | xargs -I {} kubectl exec {} -n mcamel-system -c elasticsearch -- df -h | grep /usr/share/elasticsearch/data

扩容

在主机节点还有资源的情况下, 扩容 是一种常见的方案,也就是提高 PVC 的容量。

  1. 先运行以下命令获取 es-data-0 节点的 PVC 配置,请以实际的环境的 PVC 为准。

    kubectl edit -n mcamel-system pvc elasticsearch-data-mcamel-common-es-cluster-masters-es-data-0
    
  2. 然后修改以下 storage 字段(需要使用的存储类 SC 可以扩容)

    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 35Gi # (1)!
    
    1. 这个数值需调整

删除数据

当 ElasticSearch 内存占满时,你还可以删除 index 数据释放资源。

你可以参考以下步骤进入 Kibana 页面,手动执行删除操作。

  1. 首先明确 Kibana Pod 是否存在并且正常运行:

    kubectl get po -n mcamel-system |grep mcamel-common-es-cluster-masters-kb
    
  2. 若不存在,则手动设置 replica 为 1,并且等待服务正常运行;若存在,则跳过该步骤

    kubectl scale -n mcamel-system deployment mcamel-common-es-cluster-masters-kb --replicas 1
    
  3. 修改 Kibana 的 Service 为 NodePort 暴露访问方式

    kubectl patch svc -n mcamel-system mcamel-common-es-cluster-masters-kb-http -p '{"spec":{"type":"NodePort"}}'
    
    # 修改完成后查看 NodePort。此例的端口为 30128,则访问方式为 https://{集群中的节点IP}:30128
    [root@insight-master1 ~]# kubectl get svc -n mcamel-system |grep mcamel-common-es-cluster-masters-kb-http
    mcamel-common-es-cluster-masters-kb-http   NodePort    10.233.51.174   <none>   5601:30128/TCP    108m
    
  4. 获取 ElasticSearch 的 Secret,用于登录 Kibana(用户名为 elastic)

    kubectl get secrets -n mcamel-system mcamel-common-es-cluster-masters-es-elastic-user -o jsonpath="{.data.elastic}" |base64 -d
    
  5. 进入 Kibana -> Stack Management -> Index Management ,打开 Include hidden indices 选项,即可见所有的 index。 根据 index 的序号大小,保留序号大的 index,删除序号小的 index。