k8s-集群初始化kubeadm init踩的坑和解决方法

虚拟机环境都搭建好之后,开始搭建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

结果:

大功告成!!! 

  • 13
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值