京东云环境下如何通过私有网络搭建高可用Kubernetes集群?

在京东云(JD Cloud)环境下搭建高可用 Kubernetes 集群,通常有两种主流方案:

  1. 使用京东云托管容器服务(TKE):推荐方式,自动化程度高,原生支持高可用。
  2. 自建 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),可进一步提供具体需求。