如何使用 Helm 在 Kubernetes 上部署高可用 ETCD 集群?

摘要:# ETCD 集群部署指南 (v3.6.4) > 基于 Kubernetes + Helm 部署高可用 ETCD 集群 ## 目录 - [一、常规部署步骤](#一常规部署步骤) - [二、检查集群状态
# ETCD 集群部署指南 (v3.6.4) > 基于 Kubernetes + Helm 部署高可用 ETCD 集群 --- ## 目录 - [一、常规部署步骤](#一常规部署步骤) - [二、检查集群状态](#二检查集群状态) - [三、集群数据验证](#三集群数据验证) - [四、values.yaml 配置详解](#四valuesyaml-配置详解) - [五、LoadBalancer 创建](#五loadbalancer-创建) - [六、监控配置](#六监控配置) - [七、ArgoCD 管理](#七argocd-管理) --- ## 一、常规部署步骤 ### 1.1 添加 Helm 仓库 ```bash # 添加 Bitnami 仓库(维护最完善的 etcd Helm Chart) helm repo add bitnami https://charts.bitnami.com/bitnami # 更新仓库索引 helm repo update ``` ### 1.2 创建命名空间和 Secret ```bash # 创建命名空间 kubectl create ns etcd-dev # 创建密码 Secret(替代 values.yaml 中的明文密码) kubectl create secret generic etcd-rbac-secret -n etcd-dev \ --from-literal=password=运维配置 ``` ### 1.3 拉取 Chart 并部署 ```bash # 拉取 charts 至本地 helm pull bitnami/etcd --untar # 备份默认 values.yaml 文件,创建自定义 etcd-values.yaml # 建议在执行部署升级命令之前添加 --dry-run --debug 参数验证 values.yaml 文件正确性 # 部署命令 helm install etcd ./etcd -f ./etcd/values.yaml -n etcd-dev # 升级命令 helm upgrade etcd ./etcd -f ./etcd/values.yaml -n etcd-dev ``` --- ## 二、检查集群状态 ### 2.1 查看 Pod 和 Service 状态 ```bash # 查看 pod, svc 状态 kubectl get pods -n etcd-dev kubectl get svc -n etcd-dev ``` ### 2.2 进入 Pod 检查集群 ```bash # 进入 pod,使用 etcdctl 命令查看 kubectl exec -it etcd-0 -n etcd-dev -- /bin/sh # 查看集群成员 etcdctl member list # 检查集群健康状态(高可用核心验证) etcdctl --user=root:认证密码 endpoint health \ --endpoints=http://etcd-0.etcd-headless.etcd-dev.svc.cluster.local:2379,http://etcd-1.etcd-headless.etcd-dev.svc.cluster.local:2379,http://etcd-2.etcd-headless.etcd-dev.svc.cluster.local:2379 ``` --- ## 三、集群数据验证 ### 3.1 写入测试数据 ```bash # 在 etcd-0 POD 节点创建数据 etcdctl --user root:认证密码 put a 1 ``` ### 3.2 在所有节点验证 ```bash # 在所有 POD 节点查询,都能查询到说明集群正常 etcdctl --user root:认证密码 get a # 预期输出 # a # 1 ``` --- ## 四、values.yaml 配置详解 ### 4.1 镜像配置 ```yaml # 1. 镜像仓库修改,原 docker.io 镜像地址不可用 image: registry: public.ecr.aws repository: bitnami/etcd tag: 3.6.4-debian-12-r3 ``` ### 4.2 RBAC 认证配置 ```yaml # 2. rbac 认证账号密钥配置 auth: rbac: create: true allowNoneAuthentication: false
阅读全文