k8s-集群初始化kubeadm init踩的坑和解决方法
kubeadm init 报错: Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
·
虚拟机环境都搭建好之后,开始搭建k8s集群,结果kubeadm init时,报下面错误,当时以为虚拟机环境有问题,卸载之后重装,发现还是报错,最后终于找到了解决方案:
报错的最可能的原因是镜像地址连接的是国外,无法下载,从两个方面入手解决:
方式一:docker 驱动
方式二:kubelet 驱动
前提:
在重新安装之前,先进行如下操作:
# 重置kubeadm
kubeadm reset
# 删除旧配置
rm -fr $HOME/.kube/config
方法一:docker驱动:
docker默认从国外下载 ,修改为国内,如下:
root@controlplane:~# cat /etc/docker/daemon.json
{
"exec-opts": [
"native.cgroupdriver=systemd"
],
"bip":"172.12.0.1/24",
"registry-mirrors": [
"http://docker-registry-mirror.kodekloud.com"
]
}
重启docker
systemctl daemon-reload
systemctl restart docker
方法二:
kubelet驱动
使用kubeadm init--config=init.default.yaml
初始化集群
第一步:
kubeadm config print init-defaults > init.default.yaml
第二步:配置文件
vi init.default.yaml
出现如下内容:
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 1.2.3.4
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: k8s-master
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.20.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
scheduler: {}
出现失败的大部分原因就是因为:
imageRepository: registry.aliyuncs.com/google_containers 默认是它默认从k8s.gcr.io拉取镜像,这是国外地址,下载不到,一般把这个地址换成图中地址即可;
第三步: 重启kubelet
systemctl restart kubelet
第四步:通过配置下载镜像
kubeadm config images pull --config=init.default.yaml
出现以下内容就是下载成功,然后再重新执行init操作:
第五步:重新执行init操作:
kubeadm init \
--apiserver-advertise-address=192.168.145.130 \
--control-plane-endpoint=k8s-master \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.244.0.0/16
说明:
#–apiserver-advertise-address=192.168.145.130 这个参数就是master主机的IP地址,例如我的Master主机的IP是:192.168.145.130
#–image-repository=registry.aliyuncs.com/google_containers 这个是镜像地址,由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,故使用的阿里云仓库地址:registry.aliyuncs.com/google_containers
#–kubernetes-version=v1.20.9 这个参数是下载的k8s软件版本号
#–service-cidr=10.96.0.0/16 这个参数后的IP地址直接就套用10.96.0.0/16 ,以后安装时也套用即可,不要更改
#–pod-network-cidr=10.244.0.0/16 k8s内部的pod节点之间网络可以使用的IP段,不能和service-cidr写一样,如果不知道怎么配,就先用这个10.244.0.0/16
结果:
大功告成!!!
更多推荐
已为社区贡献1条内容
所有评论(0)