一、结论
先说结论,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-master01 | Ubuntu20.04 | 172.28.217.42 | k8s:v1.28.0;containerd:1.6.26 | 现k8s集群master节点 |
k8s-node01 | Ubuntu20.04 | 172.28.217.44 | k8s:v1.28.0;containerd:1.6.26 | 现k8s集群node节点 |
k8s-node02 | CentOS7.9 | 172.28.217.43 | k8s: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集群正常。