Docker KubernetesNotes

第 10 章:集群搭建

zjc 于 2026-01-10 发布

这是《Docker 与 Kubernetes 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 生产集群通常使用托管 Kubernetes、kubeadm 或企业发行版。本章覆盖 kubeadm 学习环境、验证命令和容量规划。

10.1 集群规划

最小测试集群:

1 control-plane node
2 worker nodes

生产建议:

3 或更多 control-plane 节点
worker 按业务隔离
etcd 使用低延迟 SSD
控制面与工作负载分离

必须规划:

  1. 节点规格;
  2. Pod CIDR 与 Service CIDR;
  3. 网络插件;
  4. DNS;
  5. 存储;
  6. 镜像仓库;
  7. 证书有效期;
  8. 升级窗口。

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 会停留 ContainerCreatingPending

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 和工作负载健康。

思考题

  1. 为什么 etcd 要用低延迟磁盘?
  2. Pod CIDR 和 Service CIDR 冲突会怎样?
  3. 没有 CNI 时 Pod 会怎样?
  4. 节点 NotReady 如何排查?
  5. 自建和托管集群的运维边界是什么?