Elasticsearch 云原生化:使用 ECK 部署集群

1. ECK 简介

ECK(Elastic Cloud on Kubernetes)是 Elastic 官方提供的 Kubernetes Operator,用于自动化部署和管理 Elasticsearch、Kibana 等组件。核心优势:

  • 声明式配置:通过 YAML 定义集群状态
  • 自动化运维:自愈、扩缩容、证书管理
  • 云原生集成:无缝对接 Kubernetes 生态
2. 部署前提
  • Kubernetes 集群:版本 ≥ 1.18(推荐 1.22+)
  • 存储类:支持动态卷供应(如 AWS EBS, GCP PD)
  • 资源配额:建议节点 ≥ 4vCPU/8GB RAM
  • 工具准备
    kubectl version --short  # 验证 CLI
    helm version              # Helm 3(可选)
    

3. 安装 ECK Operator

步骤 1:添加 Helm 仓库

helm repo add elastic https://helm.elastic.co
helm repo update

步骤 2:部署 Operator

helm install eck-operator elastic/eck-operator -n elastic-system --create-namespace

验证安装:

kubectl get pods -n elastic-system  # 预期状态:Running

4. 部署 Elasticsearch 集群

配置文件 es-cluster.yaml

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: production-cluster
spec:
  version: 8.7.0
  nodeSets:
  - name: default
    count: 3
    config:
      node.roles: ["master", "data"]  # 混合节点
    podTemplate:
      spec:
        containers:
        - name: elasticsearch
          resources:
            requests:
              memory: 4Gi
              cpu: 2
            limits:
              memory: 8Gi
              cpu: 4
    volumeClaimTemplates:
    - metadata:
        name: elasticsearch-data
      spec:
        storageClassName: standard  # 替换为实际存储类
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 50Gi

应用配置

kubectl apply -f es-cluster.yaml

监控状态

kubectl get elasticsearch  # 等待状态变为 Ready
kubectl get pods -l elasticsearch.k8s.elastic.co/cluster-name=production-cluster

5. 访问集群

获取凭据

kubectl get secret production-cluster-es-elastic-user -o go-template='{{.data.elastic | base64decode}}'

端口转发(临时测试):

kubectl port-forward service/production-cluster-es-http 9200

访问 https://localhost:9200(使用生成的用户名/密码)

6. 关键运维操作
  • 扩缩容:修改 YAML 中 nodeSets.count 并重新 apply
  • 升级版本:修改 spec.version 后 apply,ECK 自动滚动更新
  • 备份配置
    spec:
      snapshotRepositories:
        - name: backup-repo
          type: gcs  # 支持 S3/Azure/GCS
          settings:
            bucket: "my-es-backups"
    

7. 最佳实践
  • 分离角色:生产环境拆分 master/data/ingest 节点组
  • 资源隔离:通过 nodeSelector 绑定到专用节点
  • 网络优化:启用 spec.http.service.spec.type: LoadBalancer
  • 监控集成:部署 Elastic Agent 收集指标

故障排查命令

kubectl logs -f <pod-name> -c elasticsearch  # 查看日志
kubectl describe elasticsearch production-cluster  # 检查事件

通过 ECK 实现 Elasticsearch 的云原生化,可显著降低运维复杂度,同时保障集群的高可用性与弹性。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐