在京东云(JD Cloud)环境下搭建高可用 Kubernetes 集群,通常有两种主流方案:
- 使用京东云托管容器服务(TKE):推荐方式,自动化程度高,原生支持高可用。
- 自建 Kubernetes 集群(如 kubeadm + VPC):适合需要完全控制、定制化或迁移现有集群的场景。
下面重点介绍如何通过私有网络(VPC)自建高可用 Kubernetes 集群,涵盖架构设计、组件选型、部署步骤和高可用保障要点。
一、整体架构设计(高可用核心原则)
1. 多可用区部署(Multi-AZ)
- 将 Master 节点分布在至少 3个不同可用区(AZ),避免单点故障。
- Worker 节点也分布在不同 AZ,结合负载均衡实现跨 AZ 流量分发。
2. 控制平面高可用
- 使用 etcd 集群(奇数个节点,推荐 3 或 5 个),每个 etcd 实例独立部署。
- kube-apiserver 通过前端负载均衡器(如京东云 CLB)暴露,后端挂载多个 apiserver 实例。
- kube-scheduler、kube-controller-manager 启用 Leader Election,确保只有一个主节点活跃。
3. 数据平面高可用
- Worker 节点分布在不同 AZ。
- 使用 NodePort / LoadBalancer / Ingress Controller 暴露服务,结合京东云 CLB 实现流量均衡。
- 存储建议使用京东云分布式块存储(CBS)或对象存储(COS),避免本地磁盘依赖。
4. 网络规划
- 使用 VPC + 子网 隔离环境。
- 建议划分:
master-subnet:用于控制平面节点worker-subnet:用于工作节点- 各子网位于不同可用区
- 启用 VPC 内 DNS 解析(如 CoreDNS 或京东云云解析内网版)
二、前置准备
1. 京东云资源准备
| 资源 | 说明 |
|---|---|
| VPC | 创建专属虚拟私有云 |
| 子网 | 至少 3 个子网,分别位于 3 个 AZ |
| 安全组 | 开放必要端口(6443, 2379-2380, 10250, 30000-32767 等) |
| CLB(经典负载均衡) | 用于 apiserver 高可用接入点 |
| CBS(云硬盘) | 为 etcd 提供持久化存储(可选) |
| EIP(弹性公网 IP) | 如需网络访问(生产环境建议通过 NAT/跳板机) |
2. 服务器准备
- 至少 3 台 Master 节点(推荐 4C8G 以上)
- 至少 2~3 台 Worker 节点(根据 workload 调整)
- 操作系统:Ubuntu 20.04/22.04 或 CentOS 7.9+
- 预装 Docker/containerd、kubeadm、kubectl、kubelet
三、部署步骤(以 kubeadm 为例)
步骤 1:初始化第一个 Master 节点
# 在所有节点执行
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo systemctl enable --now kubelet
配置 kubeadm config.yaml(关键:指定 CIDR、API Server 地址、etcd 外部端点等)
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.28.0
controlPlaneEndpoint: "CLB_IP:6443" # 替换为京东云 CLB 的 VIP
networking:
podSubnet: "10.244.0.0/16"
serviceSubnet: "10.96.0.0/12"
etcd:
external:
servers:
- https://<master1-ip>:2379
- https://<master2-ip>:2379
- https://<master3-ip>:2379
caFile: /etc/kubernetes/pki/etcd/ca.crt
certFile: /etc/kubernetes/pki/etcd/server.crt
keyFile: /etc/kubernetes/pki/etcd/server.key
⚠️ 注意:如果使用外部 etcd,需提前手动部署 etcd 集群并生成证书;也可使用 kubeadm 内置 etcd(更简单,但需保证 master 节点稳定)。
初始化集群
sudo kubeadm init --config kubeadm-config.yaml --upload-certs
记录输出的 kubeadm join ... 命令和 --certificate-key。
步骤 2:加入其他 Master 节点
在每个新 Master 节点上执行:
sudo kubeadm join <CLB_IP>:6443
--token <token>
--discovery-token-ca-cert-hash sha256:<hash>
--control-plane
--certificate-key <cert-key>
步骤 3:加入 Worker 节点
sudo kubeadm join <CLB_IP>:6443
--token <token>
--discovery-token-ca-cert-hash sha256:<hash>
步骤 4:安装 CNI 插件(Calico 示例)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
验证节点状态:
kubectl get nodes
kubectl get pods -n kube-system
四、高可用保障措施
1. 控制平面高可用
- ✅ 多 Master + CLB 前缀
- ✅ etcd 集群(3 或 5 节点)
- ✅ 自动故障转移(kube-controller-manager 和 scheduler 已启用 leader election)
2. 网络高可用
- ✅ Calico/BGP 模式支持跨 AZ 路由
- ✅ 或使用 Flannel + VXLAN(性能略低但兼容性好)
- ✅ 京东云 CLB 健康检查确保只转发到正常 apiserver
3. 存储高可用
- ✅ 使用京东云 CBS 动态供给(通过 CSI 驱动)
- ✅ 或对接京东云 COS 作为备份/归档
4. 监控与日志
- ✅ 部署 Prometheus + Grafana(通过 Helm Chart)
- ✅ 部署 EFK/ELK 或京东云 SLS 日志服务
- ✅ 设置告警规则(CPU、内存、Pod 重启、etcd 延迟等)
5. 备份与恢复
- ✅ 定期备份 etcd 数据:
ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-snapshot.db --endpoints=https://<master1-ip>:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key - ✅ 使用 Velero 备份应用状态和 PVC
五、替代方案:使用京东云 TKE(推荐)
如果你希望减少运维负担,强烈建议使用 京东云托管容器服务(TKE):
- 自动创建高可用控制平面(多 AZ etcd + apiserver)
- 一键添加节点池(支持多 AZ、自动扩缩容)
- 内置网络插件(VPC CNI)、存储插件(CBS/COS)
- 集成监控、日志、安全扫描
- 支持混合云、多云场景
官网文档:https://www.jdcloud.com/cn/products/tke
六、常见问题排查
| 问题 | 解决方案 |
|---|---|
| Node NotReady | 检查 kubelet 日志、CNI 插件是否正常启动 |
| API Server 不可达 | 检查 CLB 健康检查、安全组规则、etcd 连通性 |
| Pod 无法调度 | 检查资源配额、污点/容忍、CNI 网络分配 |
| etcd 集群脑裂 | 检查网络延迟、时钟同步、磁盘 I/O |
总结
在京东云 VPC 中自建高可用 Kubernetes 集群的核心在于:
✅ 多可用区部署
✅ 控制平面冗余(etcd + apiserver + CLB)
✅ 稳定可靠的 CNI 和存储方案
✅ 完善的监控与备份机制
对于大多数企业用户,优先推荐使用京东云 TKE 托管服务,可大幅降低运维复杂度并提升高可用性保障。自建集群适用于有特殊定制需求、合规要求或成本敏感场景。
如需详细 YAML 模板、Helm Chart 或自动化脚本(Ansible/Terraform),可进一步提供具体需求。
CLOUD技术笔记