这是《Docker 与 Kubernetes 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 生产集群通常使用托管 Kubernetes、kubeadm 或企业发行版。本章覆盖 kubeadm 学习环境、验证命令和容量规划。
10.1 集群规划
最小测试集群:
1 control-plane node
2 worker nodes
生产建议:
3 或更多 control-plane 节点
worker 按业务隔离
etcd 使用低延迟 SSD
控制面与工作负载分离
必须规划:
- 节点规格;
- Pod CIDR 与 Service CIDR;
- 网络插件;
- DNS;
- 存储;
- 镜像仓库;
- 证书有效期;
- 升级窗口。
10.2 kubeadm 初始化
准备主机后安装 kubelet、kubeadm、kubectl 和 containerd。
控制面:
sudo kubeadm init \
--pod-network-cidr 10.244.0.0/16 \
--service-cidr 10.96.0.0/12 \
--upload-certs
配置 kubectl:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
节点加入:
sudo kubeadm join control-plane:6443 \
--token <token> \
--discovery-token-ca-cert-hash sha256:<hash>
10.3 安装 CNI
以 Calico 或 Flannel 为例,安装前确认版本兼容性:
kubectl apply -f cni-manifest.yaml
没有 CNI 时 Pod 会停留 ContainerCreating 或 Pending。
10.4 验证集群
kubectl get nodes -o wide
kubectl get pods -A
kubectl cluster-info
kubectl get componentstatuses
运行测试:
kubectl run nginx --image=nginx:1.27 --restart=Never
kubectl get pod nginx -w
10.5 常见问题
| 问题 | 排查 |
|---|---|
| NotReady | kubelet、CNI、证书 |
| Pending | 调度器、资源、污点 |
| ImagePullBackOff | 镜像仓库、网络 |
| CrashLoopBackOff | 应用、配置、探针 |
| join 失败 | token、端口、时间 |
10.6 生产选择
| 方案 | 特点 |
|---|---|
| 云托管 | 控制面托管,Node 管理 |
| kubeadm | 自管常见方案 |
| 发行版 | 企业集成 |
| 轻量发行版 | 边缘或实验 |
生产自建要额外承担证书、etcd 备份、升级、网络、存储、监控和灾备。
本章小结
搭建集群前先规划网络、存储、规格和升级路径。kubeadm 适合理解集群组成,生产应优先评估托管或成熟发行版,并验证节点、CNI、DNS 和工作负载健康。
思考题
- 为什么 etcd 要用低延迟磁盘?
- Pod CIDR 和 Service CIDR 冲突会怎样?
- 没有 CNI 时 Pod 会怎样?
- 节点 NotReady 如何排查?
- 自建和托管集群的运维边界是什么?