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 优先。
- 大型企业、强定制与合规:二进制安装优先。
基线规范建议#
- 统一版本管理与镜像仓库规划。
- 提前设计网络与存储方案。
- 建立高可用控制面架构。
- 制定升级、备份与故障恢复策略。
练习#
- 使用 kubeadm 在测试环境创建 1 主 1 从集群,记录
kubeadm token create --print-join-command的加入命令。 - 在二进制安装实验环境中修改
--service-cluster-ip-range并验证 Service 是否可达。 - 选一个托管集群,创建节点池并将实例扩容到 5 台,记录操作步骤与节点状态变化。