温馨提示×

Debian上K8s集群的启动与停止

小樊
32
2025-12-26 20:50:11
栏目: 智能运维

在 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/tcp10250/tcp 等)。

二、启动集群

  • 控制平面(Master)节点
    1. 初始化集群(示例使用 Flannel,Pod CIDR 为 10.244.0.0/16):
      sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    2. 配置 kubectl:
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    3. 安装网络插件(Flannel):
      kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    4. 验证:
      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 无法启动:检查是否关闭 Swapcontainerd/docker 是否运行、以及 /etc/fstab 是否仍启用 swap。
  • 加入集群失败:确认 token 未过期(默认 24 小时),必要时在主节点重新生成 kubeadm join 命令。
  • 端口或网络不通:确认防火墙已放行 6443/tcp10250/tcp 等端口,节点间网络互通。
  • 时间不同步:部署 NTP 或 chrony 同步时间,避免证书校验失败。

0