第一步:三台机器都执行(彻底清理旧现场)
# 彻底清理旧集群 + 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