在使用kubeadm init初始化k8s集群中的master主节点时,总是出错。这个地方卡了我很长时间,遇到了好几个不一样的错误,有的问题在网上也没有找到什么有效的解决方案,所以特此记录一下。以下错误均是在使用kubeadm init
语句初始化k8s集群过程中出现的问题。
第一次初始化集群时,我的初始化master节点kubeadm init语句为:
kubeadm init --kubernetes-version=v1.10.0 \
--apiserver-advertise-address=50.50.50.50 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
错误一
this version of kubeadm only supports deploying clusters with the control plane version >= 1.17.0. Current version: v1.10.0
错误原因:因为刚开始安装kubelet kubeadm kubectl的时候,我使用的命令是yum install -y kubelet kubeadm kubectl
,这个命令确实能安装kubernetes的这3个组件。但是这个安装下载命令有一个问题,就是没有指定kubelet kubeadm kubectl的版本,所以该命令一般会默认下载最新高版本的组件。与之类似的还有docker的安装命令yum install docker-ce -y
,这条命令会默认安装最新版的docker。
因为有的时候我们要考虑各组件之间的版本兼容性,比如安装k8s的这3个组件的时候就要考虑k8s组件的版本是否与docker,Centos的版本相匹配。
出现上述错误的原因是我的kubeadm是1.17版本的,而本地的docker仓库中的相关镜像是1.10版本的,所以安装的时候安装命令中的kubernetes-version=v1.10.0
会导致错误,镜像版本与kubeadm组件要求的版本不匹配,故报错。
这个时候,大家可能会有疑问,kubernetes-version=v1.10.0
不放在在kubeadm init初始化集群命令中可不可以?首先,我先这样说,可以,但是可以的前提是你要科学上网(因为本地docker仓库中没有镜像的话就会从google的官网下载)或者说你的本地docker仓库中刚好有符合kubeadm组件要求的镜像。但是,我的建议是放上这一句,那为什么呢,我给大家举个例子。
怎样查看kubeadm组件要求的镜像的版本呢?(说明:下图是我成功部署的k8s集群中的信息,我所使用的kubeadm的版本是kubeadm-1.14.2
)使用如下的命令,可以看到kubeadm-1.14.2
组件所要求的镜像。
kubeadm config images list
我没有科学上网,所以我借助阿里的镜像源下载了相关的镜像,使用docker images
查看如下:
因为我当时没有使用kubeadm config images list
查看kubeadm-1.14.2
所要求的镜像,所以我觉得使用registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.14.2
等1.14.2的版本肯定可以,因为这和已安装的kubeadm版本一致。然后我是用了kubeadm init --kubernetes-version=v1.14.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
执行k8s集群的初始化,假如我不指定kubernetes-version=v1.14.2
,那么我