第一步:三台机器都执行(彻底清理旧现场)

# 彻底清理旧集群 + iptables + kubeconfig
kubeadm reset -f
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
ipvsadm --clear 2>/dev/null || true
rm -rf $HOME/.kube
rm -rf /etc/cni/net.d/ /var/lib/cni/ /var/lib/kubelet/pods
ip link del cni0 2>/dev/null || true
ip link del flannel.1 2>/dev/null || true
systemctl restart docker
systemctl restart kubelet
echo "本机清理完成"

第二步:只在 master 节点执行(全新 init)

kubeadm init \
  --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
  --kubernetes-version v1.16.0 \
  --apiserver-advertise-address 192.168.136.134 \
  --pod-network-cidr=10.244.0.0/16

等它成功后,会输出类似这样三行(务必复制保存!):

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

立刻在 master 上敲这三行,让 kubectl 能用。

第三步:两台 node 节点执行(加入集群)

用 master 刚才 init 成功时打印的那条 join 命令(大概长这样):

kubeadm join 192.168.136.134:6443 --token wgy53x.wuw69a72pjnb84wu \
    --discovery-token-ca-cert-hash sha256:088a676be80f0de664cddcb9ead899d8bb35f5326e47ac6b30d37c23e6ce9fa8

第四步:只在 master 节点执行(装 Flannel 网络插件,一步到位)

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.10.0/Documentation/kube-flannel.yml

30 秒后全部 Ready!

终极验证(在 master 上敲)

kubectl get nodes -o wide

当部署如Flannel的科学上网环境失败时

1. 一键删干净所有旧 Flannel

kubectl delete daemonset -n kube-system -l app=flannel —force —grace-period=0 kubectl delete configmap -n kube-system kube-flannel-cfg —ignore-not-found=true

2. 三台机器各敲一次(清理残留网卡和容器)

docker ps -qf name=flannel | xargs -r docker rm -f ip link del flannel.1 2>/dev/null || true systemctl restart kubelet

3. 重新部署 Flannel(30 秒全 Ready)

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.10.0/Documentation/kube-flannel.yml

重启kubelet

systemctl restart docker && systemctl restart kubelet