kubeadm重新构建k8s集群注意事项

背景环境信息

  • 操作系统 Debian 10 buster
  • 1个控制节点(192.168.1.2) + 2个Worker节点(192.168.1.[2、3])
  • Kubernetes版本为最新的1.27.3
  • 容器运行时选containerd
  • 网络插件CNI为Calico
  • Pod子网10.244.0.0/16

kubeadm init初始化集群很顺利,按照教程配置.kube目录,拷贝配置文件,安装网络插件,部署nginx也能访 问,但就是在启动Nginx时发现配置转发的集群内主机名找不到,这还是同一个Namespace下的。

初步判断可能是集群DNS问题,启动busybox进入命令行模式,看了一下/etc/resolv.conf没问题,直接ping其它pod IP发现ping不通,ping互联网IP发现也ping不通,这完全就是无网的状态啊~

这情况有点不对,一顿折腾之后问题解决,核心关键点就在于这三台虚机节点我曾经用kubeadm初始化过一个集群,但我在kubeadm reset时,没有根据提示完成最后关键遗留操作

  • 执行下ipvsadm --clear,如果没有这个命令就apt install ipvsadm安装一下

  • 删除/etc/cni/net.d这个目录

  • 如果有$HOME/.kube这个目录就删除,通常Worker节点都没有这个目录

  • 清除iptables规则iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X,这个命令是用于配置Linux操作系统中的iptables防火墙规则:

    • iptables -F: 这个命令用于清除所有的防火墙规则,包括所有的链(chains)中的规则。-F选项表示"flush"(清除)规则。
    • iptables -t nat -F: 这个命令用于清除"nat"表中的规则,"nat"表用于网络地址转换(Network Address Translation,NAT)。-t nat选项表示指定使用"nat"表。
    • iptables -t mangle -F: 这个命令用于清除"mangle"表中的规则,"mangle"表用于修改数据包的特定字段。-t mangle选项表示指定使用"mangle"表。
    • iptables -X: 这个命令用于删除用户自定义的链(chains)。-X选项表示删除链。

    通过这个命令组合,首先清除了所有防火墙规则,然后清除了"nat"表和"mangle"表中的规则,并最后删除了所有用户自定义的链。这样做可以将防火墙规则恢复到默认状态,以便重新配置规则。

经过以上4个关键步骤,再推荐一下重启一下节点,然后重新kubeadm init初始化集群,问题解决~

分享

TITLE: kubeadm重新构建k8s集群注意事项

LINK: https://www.qttc.net/554-kubeadm-rebuild-cluster-caveats.html

NOTE: 原创内容,转载请注明出自琼台博客