一、结论

先说结论,centos和ubuntu可以混合部署k8s,且版本不同

二、写在前面的废话

最近学习k8s,刚开始自己电脑上使用虚拟机,因为电脑配置一般,开两台虚拟机后比较卡顿,所以切换到阿里云环境。这里必须说一下的是阿里云提供三个月的免费试用,最多可提供4台服务器,这对于一般学习k8s来说,足够了。

刚开始基于centos7.9搭建了1.28.4版本的k8s,但是CKA考试是ubuntu系统,于是计划将服务器的系统更换为ubuntu20.04(对考试来说基本没有差别,纯属瞎折腾)。因为更换系统后要重新配置网络、机器名、初始化环境等操作,比较繁琐。所以在将两台服务器系统更换为ubuntu并搭建了1.28.0版本的k8s后,突然冒出是否可将原来已安装k8s相关组件的centos系统加入k8s集群。于是开始了以下尝试。

三、环境说明

机器名操作系统IP版本备注
k8s-master01Ubuntu20.04172.28.217.42k8s:v1.28.0;containerd:1.6.26现k8s集群master节点
k8s-node01Ubuntu20.04172.28.217.44k8s:v1.28.0;containerd:1.6.26现k8s集群node节点
k8s-node02CentOS7.9172.28.217.43k8s:v1.28.2;containerd:1.6.25原k8s集群node节点

现有k8s集群如下:

任务目标:将系统为centos的k8s-node02节点(已安装kubeadm-1.28.2、kubelet-1.28.2、kubectl-1.28.2、containerd-1.6.25)加入现有k8s集群。

四、具体步骤

具体网络配置、机器名设置、hosts文件设置、免密登陆等这里不再赘述。

1.重置k8s-node02节点(centos系统),并根据提示删除相关目录

[root@k8s-node02 ~]# kubeadm reset
[root@k8s-node01 ~]# rm -Rf .kube/*
[root@k8s-node01 ~]# ipvsadm --clear
[root@k8s-node01 ~]# rm -rf /etc/cni/net.d

2.主节点创建加入集群命令

root@k8s-master01:~# kubeadm token create --print-join-command

3.k8s-node02节点加入集群

报错: [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist

排查原因:没有加载 br_netfilter 模块。

解决如下:

[root@k8s-node02 ~]# modprobe br_netfilter

[root@k8s-node02 ~]# sysctl -p /etc/sysctl.d/k8s.conf
vm.swappiness = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

重新加入成功:

此时可在控制节点查看节点信息,但是新加入节点一直是 NotReady 状态:

查看pod创建情况,发现 calico-node  和 kube-proxy pod在k8s-node02节点上没有创建成功:

查看pod未创建成功原因(省略部分截图):

报错:Failed to create pod sandbox: open /run/systemd/resolve/resolv.conf: no such file or directory

原因:k8s-node02(centos系统)节点未安装systemd-resolved。

PS:原来基于centos搭建k8s集群时,所有节点都未安装systemd-resolved,集群搭建成功。此处不知为何,可能是使用ubuntu搭建集群的系统都安装了systemd-resolved的原因,具体还需再确认,如有知道原因的可以评论,感谢!

k8s-node02节点安装systemd-resolved:

控制节点查看,pod已在k8s-node02节点正常启动:

问题:k8s-node02节点任然是 NotReady 状态

查看k8s-node02节点信息(省略部分截图):

报错信息: container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized

解决:重启k8s-node02节点containerd服务。

PS:尽管问题解决了,但是其中原理还是不太清楚,还需研究。如有知道的可评论,感谢!

再次查看节点,全部为Read状态,问题解决。重启三台服务器后,k8s集群正常。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐