京东云服务器部署K8s集群的完整步骤是什么?

在京东云(JD Cloud)上部署 Kubernetes(K8s)集群,通常推荐使用官方提供的 ACK(阿里云版 K8s 的对应产品是京东云的“容器服务”),或者使用 Cloud Provider Integration 手动搭建。考虑到稳定性和运维效率,首选方案是使用京东云托管的容器服务(Container Service for Kubernetes, CSK),它支持一键创建、自动升级和完善的监控告警。

以下是基于京东云托管容器服务(推荐)和手动安装 KubeKey/Kubeadm(高级/自定义需求)两种场景的完整步骤指南。


方案一:使用京东云托管容器服务(CSK)—— 推荐

这是最稳定、维护成本最低的方式,适合生产环境。

1. 准备工作

  • 注册与实名认证:确保已在京东云完成账号注册和实名认证。
  • 开通服务:登录 京东云控制台,搜索并进入“容器服务”或“容器引擎”。
  • 网络规划
    • 准备一个 VPC(专有网络)
    • 划分好 子网(Subnet),用于放置节点。
    • 配置好 安全组,开放必要端口(如 6443, 2379-2380 等)。
  • 资源配额:确认账户内有足够的 ECS 实例配额和带宽预算。

2. 创建集群

  1. 在容器服务控制台点击 “创建集群”
  2. 基础信息
    • 选择地域(Region)和可用区(Zone)。
    • 设置集群名称、版本(建议选择最新稳定版 LTS)。
    • 选择 VPC 和子网。
  3. 节点配置
    • 选择节点类型(ECS 实例规格,如 t5, c5 等)。
    • 设置节点数量(至少 3 个用于高可用 Master 节点,或 1 个 Master + 多个 Worker)。
    • 配置系统盘和数据盘大小。
    • 选择镜像来源(通常默认即可)。
  4. 网络插件
    • 选择 CNI 插件(推荐 TerwayFlannel)。Terway 性能更好,支持弹性网卡;Flannel 兼容性广。
  5. 其他配置
    • 开启监控告警(对接云监控)。
    • 配置日志服务(SLS),用于收集 Pod 日志。
  6. 确认并创建
    • 检查配置无误后提交订单,等待集群初始化(通常需要 10-15 分钟)。

3. 连接与管理

  • 集群创建完成后,在控制台点击 “查看详情”
  • 下载 kubeconfig 文件(或使用控制台内置的 Web Shell)。
  • 将 kubeconfig 配置到本地:
    mkdir -p $HOME/.kube
    cp /path/to/kubeconfig $HOME/.kube/config
    chmod 600 $HOME/.kube/config
  • 验证集群状态:
    kubectl get nodes
    kubectl get pods --all-namespaces

方案二:手动在京东云 ECS 上部署 K8s(使用 KubeKey 或 Kubeadm)

适用于需要深度定制、特殊网络拓扑或学习原理的场景。

1. 基础设施准备

  • 购买 ECS 实例
    • Master 节点:建议 3 台(奇数),配置至少 2 核 4G(生产建议更高),系统盘 40G+。
    • Worker 节点:根据负载需求购买,配置可灵活调整。
    • 操作系统:推荐 CentOS 7.9 或 Ubuntu 20.04/22.04(需内核版本 >= 3.10)。
  • 网络与安全组配置
    • 所有节点必须在同一个 VPC 内,且处于同一子网(或互通的子网)。
    • 安全组规则
      • 允许 TCP 6443 (API Server)
      • 允许 TCP 2379-2380 (Etcd)
      • 允许 TCP 10250 (Kubelet)
      • 允许 UDP 8472 (Flannel VXLAN,若使用 Flannel)
      • 允许 ICMP (Ping)
      • 允许 SSH (22) 仅从管理机访问。
  • DNS 配置:确保所有节点能解析域名,建议修改 /etc/hosts 绑定内部 IP 和主机名。

2. 系统环境初始化(在所有节点执行)

以 CentOS 为例:

# 1. 关闭防火墙和 SELinux
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 2. 关闭 Swap 分区(K8s 要求)
swapoff -a
sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab

# 3. 加载内核模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
overlay
EOF
modprobe br_netfilter

# 4. 配置内核参数
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system

# 5. 安装容器运行时 (Docker 或 Containerd)
# 这里以 Docker 为例(需安装旧版 docker-ce 19.03+ 或新版 containerd)
# 注意:京东云镜像源可能较慢,建议使用国内提速源
yum install -y docker-ce docker-ce-cli containerd.io
systemctl enable --now docker

3. 部署 K8s 集群(使用 KubeKey 简化流程)

相比 kubeadm initKubeKey 工具更适合在批量机器上自动化部署。

  1. 准备主控机:在一台 ECS 上安装 Python 和 pip。
  2. 安装 KubeKey
    curl -sfL https://get.kubesphere.io/v2 | sh -s v2.1.0
  3. 生成配置文件
    ./kk create config --with-kubernetes v1.28.0 --with-docker

    编辑生成的 config.yaml

    • nodes: 下填入所有 Master 和 Worker 的内网 IP。
    • kubernetes: 下配置 API Server 地址(通常填第一个 Master 的内网 IP)。
  4. 执行部署
    # 首次部署
    ./kk deploy cluster my-cluster --yes

    该命令会自动分发二进制文件、初始化 Etcd、启动 API Server 并加入 Worker 节点。

4. 配置负载均衡(可选但推荐)

如果未使用托管服务,需自行配置 SLB(负载均衡)来暴露 API Server 或 Ingress。

  • 在京东云控制台购买 SLB
  • 监听端口 6443,后端服务器指向 Master 节点。
  • 更新 kubeconfig 中的 server 地址为 SLB 的公网/内网 IP。

关键注意事项

  1. 网络安全
    • 严禁将 Kubernetes API Server (6443) 直接暴露在公网,除非做了严格的白名单限制。
    • 务必配置好安全组规则,避免 Etcd 端口泄露导致数据被篡改。
  2. 时间同步
    • K8s 对时间非常敏感,请确保所有节点通过 NTP 服务保持时间同步(京东云 ECS 默认已开启 NTP,建议检查 chronyd 状态)。
  3. 存储与网络
    • 如果使用持久化存储(PV/PVC),京东云提供 CBS(云硬盘)CFS(文件存储) 作为后端 StorageClass。
    • 网络插件选择 Terway 时,Pod IP 会直接使用 VPC IP,无需 NAT,性能更优。
  4. 备份与恢复
    • 定期备份 Etcd 数据(托管服务通常自动备份,自建需脚本定时备份)。
    • 保存好 kubeconfigetcd 证书文件。

总结

对于绝大多数用户,直接在京东云控制台使用“容器服务”创建集群是最佳选择,它能屏蔽底层复杂的网络和安全配置,并提供原生的监控、日志和升级能力。只有在有特殊网络隔离、特定内核参数需求或学习目的时,才建议采用手动部署方案。