16.2.1 集群安装方式与工具选择(kubeadm、二进制、托管)

本节围绕 Kubernetes 集群安装的三种主流路径进行对比与选择:kubeadm、二进制安装、托管集群(云厂商托管)。目标是基于规模、团队能力、合规与运维成本选型,并提供可执行示例、排错与练习。

安装方式概览与适用场景#

  • kubeadm:官方推荐的半自动化安装工具,适合中小规模、自建机房或云上自主管理的集群。
  • 二进制安装:完全自定义,可深度调整组件参数和部署结构,适合大型集群、强合规或定制化需求。
  • 托管集群(ACK/EKS/GKE 等):云厂商托管控制面,适合降低运维成本、快速上线。

原理草图(控制面责任划分)#

文章图片

选择维度与决策建议#

  • 团队能力:经验不足优先 kubeadm 或托管;具备深度运维能力可选二进制。
  • 合规与定制:安全与审计要求高、需自定义组件参数,优先二进制。
  • 成本与效率:快速上线优先托管;兼顾成本与控制优先 kubeadm。
  • 规模与生命周期:短期项目可托管;长期核心业务建议自建。

kubeadm 安装要点(含示例、命令解释与排错)#

示例:快速搭建单控制面集群(基于 Ubuntu)#

# 1) 安装运行时(containerd 示例)
sudo apt-get update
sudo apt-get install -y containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd && sudo systemctl enable containerd

# 2) 安装 kubeadm/kubelet/kubectl(版本一致)
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key \
  | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] \
  https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" \
  | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

# 3) 初始化控制面(指定 Pod 网段)
sudo kubeadm init --kubernetes-version v1.28.2 --pod-network-cidr=10.244.0.0/16

# 4) 配置 kubectl
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 5) 安装网络插件(Flannel 示例)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

命令解释
- kubeadm init:生成证书、静态 Pod 清单、初始化控制面。
- --pod-network-cidr:必须与 CNI 插件一致。
- kubectl apply:部署 CNI 网络。

常见问题排错#

# 1) Pod 一直 Pending:检查 CNI 是否部署成功
kubectl get pods -n kube-system

# 2) 节点 NotReady:查看 kubelet 日志
sudo journalctl -u kubelet -f

# 3) 拉镜像失败:确认镜像仓库可达
sudo crictl pull registry.k8s.io/pause:3.9

二进制安装要点(含核心配置示例)#

组件分布与配置原则#

  • apiserver、controller-manager、scheduler 手动管理 systemd
  • etcd 独立集群
  • 证书和 kubeconfig 手工生成

示例:kube-apiserver systemd 服务(节选)#

/etc/systemd/system/kube-apiserver.service

[Unit]
Description=Kubernetes API Server
After=network.target

[Service]
ExecStart=/usr/local/bin/kube-apiserver \
  --advertise-address=10.0.0.10 \
  --etcd-servers=https://10.0.0.11:2379,https://10.0.0.12:2379 \
  --service-cluster-ip-range=10.96.0.0/12 \
  --client-ca-file=/etc/kubernetes/pki/ca.crt \
  --tls-cert-file=/etc/kubernetes/pki/apiserver.crt \
  --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
Restart=always

[Install]
WantedBy=multi-user.target

命令解释
- --etcd-servers:指定 etcd 集群地址
- --client-ca-file:校验客户端证书
- --service-cluster-ip-range:Service 虚拟网段

二进制安装排错示例#

# 查看 apiserver 是否监听 6443
ss -lntp | grep 6443

# 检查证书有效期
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates

# 检查 etcd 健康
ETCDCTL_API=3 etcdctl --endpoints=https://10.0.0.11:2379 \
  --cacert=/etc/etcd/ca.crt --cert=/etc/etcd/server.crt \
  --key=/etc/etcd/server.key endpoint health

托管集群要点(含 CLI 示例)#

示例:阿里云 ACK 创建集群(命令行)#

# 需要已配置 aliyun CLI 和凭据
aliyun cs CreateKubernetesCluster --name ack-demo \
  --cluster-spec ack.pro.small \
  --region cn-hangzhou \
  --num-of-nodes 3 \
  --node-vswitch-ids vsw-xxx \
  --pod-cidr 10.244.0.0/16 \
  --service-cidr 10.96.0.0/12

托管集群排错示例#

# 查询集群状态
aliyun cs DescribeClusterDetail --ClusterId <cluster-id>

# 节点池异常
aliyun cs DescribeClusterNodes --ClusterId <cluster-id>

选型建议示例#

  • 中小企业、快速上线:托管集群优先。
  • 有一定运维团队、成本敏感:kubeadm 优先。
  • 大型企业、强定制与合规:二进制安装优先。

基线规范建议#

  • 统一版本管理与镜像仓库规划。
  • 提前设计网络与存储方案。
  • 建立高可用控制面架构。
  • 制定升级、备份与故障恢复策略。

练习#

  1. 使用 kubeadm 在测试环境创建 1 主 1 从集群,记录 kubeadm token create --print-join-command 的加入命令。
  2. 在二进制安装实验环境中修改 --service-cluster-ip-range 并验证 Service 是否可达。
  3. 选一个托管集群,创建节点池并将实例扩容到 5 台,记录操作步骤与节点状态变化。