在 Debian 上启动与停止 Kubernetes 集群
一、前置检查
- 确认已禁用 Swap:执行 sudo swapoff -a,并在 /etc/fstab 中注释 swap 行,否则 kubelet 无法启动。
- 确认容器运行时已就绪:如使用 containerd,执行 sudo systemctl restart containerd;如使用 Docker,执行 sudo systemctl start docker。
- 确认 kubelet 开机自启:执行 sudo systemctl enable --now kubelet。
- 如启用防火墙,放行 Kubernetes 相关端口(例如 6443/tcp、10250/tcp 等)。
二、启动集群
- 控制平面(Master)节点
- 初始化集群(示例使用 Flannel,Pod CIDR 为 10.244.0.0/16):
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
- 配置 kubectl:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 安装网络插件(Flannel):
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 验证:
kubectl get nodes
kubectl cluster-info
- 工作节点(Worker)加入
- 使用 kubeadm init 输出中的 kubeadm join 命令加入集群(命令通常 24 小时 有效,过期需在主节点重新生成):
sudo kubeadm join :6443 --token --discovery-token-ca-cert-hash sha256:
- 可选验证应用
- 部署测试应用:
kubectl create deployment nginx-app --image=nginx --replicas=2
kubectl expose deployment nginx-app --name=nginx-web-svc --type=NodePort --port=80 --target-port=80
kubectl get pods,svc
curl http://:
三、停止与维护操作
- 安全排空节点(维护前)
- 驱逐节点上可调度 Pod(忽略 DaemonSet):
kubectl drain <节点名> --ignore-daemonsets
- 禁止新 Pod 调度到该节点:
kubectl cordon <节点名>
- 恢复节点
- 恢复调度:
kubectl uncordon <节点名>
- 从集群移除节点
- 删除节点对象:
kubectl delete node <节点名>
- 重置单节点(如需清理本机 K8s 状态)
- 重置节点:
sudo kubeadm reset -f
- 清理 CNI 与 kubelet 数据目录:
sudo rm -rf /etc/cni/net.d /var/lib/kubelet /etc/kubernetes
- 如使用 Docker,清理容器与镜像:
sudo docker system prune -af
sudo docker rmi -f $(docker images | grep k8s.io | awk ‘{print $3}’)
四、常见问题与排查
- 节点 NotReady:多因未安装 CNI 网络插件,安装 Flannel/Calico 后再次检查 kubectl get nodes。
- kubelet 无法启动:检查是否关闭 Swap、containerd/docker 是否运行、以及 /etc/fstab 是否仍启用 swap。
- 加入集群失败:确认 token 未过期(默认 24 小时),必要时在主节点重新生成 kubeadm join 命令。
- 端口或网络不通:确认防火墙已放行 6443/tcp、10250/tcp 等端口,节点间网络互通。
- 时间不同步:部署 NTP 或 chrony 同步时间,避免证书校验失败。