【笔记】记一次因go版本问题导致K8S控制节点初始化不成功的过程

0.背景

        最近在使用kubeadm搭建一套新的k8s集群的过程中,控制节点一直初始化不成功。卡点在当kubeadm启动kubelet后,一直报错显示无法连接6443端口。根据这个报错信息第一时间想到可能是kube-apiserver的问题,docker ps一看,发现果然kube-apiserver的镜像没有起来。百思不得其解,最终通过不断地尝试,发现原来是docker使用的go版本与kubeadm使用的go版本不一致导致,以下是整个过程的复现。

1.部署过程复现

        首先从kubernetes官网上下载下来kubeadm、kubectl、kubelet三个初始化k8s控制节点及部署k8s集群的核心组件,并将它们放置在/usr/bin/目录下,如图1。其中kubeadm的版本如图2所示,可以看到,它使用的go版本是1.20.11。

图1

图2

       从图3我们可以看到,该机器的docker以及dockerd版本为18.09.1,使用的go版本为1.10.6

图3

        此时,如果我们我们运行以下命令,会出现图4的报错。

kubeadm init --apiserver-advertise-address 10.0.0.9 --pod-network-cidr=10.244.0.0/16 -v=9

图4

        根据报错信息,我初步判断是因为kube-apiserver没有启动(因为6443端口连接被拒绝) ,查看docker服务的日志信息,发现如下报错。

 dockerd: time="2023-11-26T03:16:03.619906121+08:00" level=error msg="failed to get event" error="rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = \"transport: Error while dialing dial unix:///run/containerd/containerd.sock: timeout\"" module=libcontainerd namespace=moby  

图5

        虽然不是很明白图5的报错是什么意思,但感觉可能和rpc有关,于是灵光一闪,想到会不会是因为docker使用的go版本与kubeadm使用的go版本不兼容导致的(由rpc想到客户端服务端进行调用)。于是将docker版本切换为20.10.9,该docker版本使用的go版本为1.16.8,如图6所示。

图6

        完成切换后,重置前面的所有操作

sudo rm -rf /etc/kubernetes/
sudo rm -rf /var/lib/etcd
sudo rm -rf /var/lib/kubelet
sudo systemctl restart docker
sudo kubeadm reset

        重新使用kubeadm进行初始化,即可初始化成功(如图7),我们也可以看到,所有k8s组件也都正常启动了(图8),通过kubectl get nodes命令,我们也可以成功获取控制节点的信息了。

kubeadm init --apiserver-advertise-address 10.0.0.9 --pod-network-cidr=10.244.0.0/16 -v=9 

图7

图8

图9

2.总结

        在本次部署过程问题就出在kubeadm以及其使用的其他k8s组件的go版本与机器上的docker使用的go版本不一致。解决方法也比较简单,切换docker版本即可。需要注意的是,本文中是docker使用的go版本过低导致,但这不代表只要版本足够高就能避免该问题,也许会出现go版本过高而导致相同的问题出现。那么关于具体的版本兼容性问题,就需要读者自行去探索了。赶快试一试吧!

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值