背景

手动部署k8s集群总会遇见一堆问题,这里特别强调版本问题,找资料的时候一定要看官网上的版本对应哦,鉴于手动部署的困难性,我们使用国产rancher进行部署,但是也要注意版本问题。
使用rancher(https://www.rancher.cn/)安装部署k8s集群的时候报错:

Failed to create fleet-default/master cluster.x-k8s.io/v1beta1, Kind=Cluster for rke-cluster fleet-default/master: Internal error occurred: failed calling webhook “default.cluster.cluster.x-k8s.io”: failed to call webhook: Post “https://webhook-service.cattle-system.svc:443/mutate-cluster-x-k8s-io-v1beta1-cluster?timeout=10s”: service “webhook-service” not found

步骤

分析:请移步官方论坛:官方论坛原创解决方式以及描述,原创点此链接

这个问题是由于docker run 的时候映射目录导致。

因为通过 docker run 启动的 Rancher 镜像中内置了 rancher/mirrored-coredns-coredns 和 rancher/mirrored-pause 这两个镜像的 tar 包,这样在离线环境上也能自动启动这两个服务。

但是这两个镜像的离线 tar 包默认存储在了 /var/lib/rancher/k3s/agent/images/k3s-airgap-images.tar。

当通过 docker run 来启动 Rancher 时,通过 -v 将 Rancher 的数据目录(/var/lib/rancher) 映射到本地之后,导致了容器中的 /var/lib/rancher 使用的是主机的空目录。也就是说新启动的 Rancher 中缺少了这个离线的 tar 包,而且,CATTLE_SYSTEM_DEFAULT_REGISTRY 对这两个 pod 不生效。现阶段国内网络使用 docker hub 有问题,所以导致了 rancher/mirrored-coredns-coredns 和 rancher/mirrored-pause 拉取失败。

为了解决这个问题,可以:

取消映射的目录,这样就可以使用容器内置的离线 tar 包启动这两个服务。
手动从镜像中获取 /var/lib/rancher/k3s/agent/images/k3s-airgap-images.tar,并传到对应目录下,例如(这里注意自己的版本问题,这里用的是2.9.0,我用的是2.7.5):

root@ksd:~# mkdir -p /data/rancher/k3s/agent/images/
root@ksd:~# docker run --rm --entrypoint "" -v $(pwd):/output rancher/rancher:v2.9.0 cp /var/lib/rancher/k3s/agent/images/k3s-airgap-images.tar /output/k3s-airgap-images.tar
root@ksd:~# ls
docker.sh  k3s-airgap-images.tar  snap
root@ksd:~# cp k3s-airgap-images.tar /data/rancher/k3s/agent/images/
root@ksd:~# docker run -d --restart=unless-stopped --privileged \
    -p 10080:80 -p 10443:443  \
    -e CATTLE_SYSTEM_DEFAULT_REGISTRY=registry.cn-hangzhou.aliyuncs.com \
    -e CATTLE_BOOTSTRAP_PASSWORD=rancher \
    -v /data/rancher:/var/lib/rancher \
    registry.cn-hangzhou.aliyuncs.com/rancher/rancher:v2.9.0
8b62637c72cfb4b3704d5811f8e9bbd37bd05a93c9155465e776b5e0481f5465

我的是2.7.5

root@ksd:~# mkdir -p /data/rancher/k3s/agent/images/
root@ksd:~# docker run --rm --entrypoint "" -v $(pwd):/output rancher/rancher:v2.7.5 cp /var/lib/rancher/k3s/agent/images/k3s-airgap-images.tar /output/k3s-airgap-images.tar
root@ksd:~# ls
docker.sh  k3s-airgap-images.tar  snap
root@ksd:~# cp k3s-airgap-images.tar /data/rancher/k3s/agent/images/
root@ksd:~# docker run -d --restart=unless-stopped --privileged     -p 10080:80 -p 10443:443      -e CATTLE_SYSTEM_DEFAULT_REGISTRY=registry.cn-hangzhou.aliyuncs.com     -e CATTLE_BOOTSTRAP_PASSWORD=rancher     -v /data/rancher:/var/lib/rancher     registry.cn-hangzhou.aliyuncs.com/rancher/rancher:v2.7.5

由于已经指定了密码,所以当你登陆的时候
直接输入密码rancher即可,无需重新设置。

rancher创建k8s集群步骤报错:Failed to create fleet-default/master cluster.x-k8s.io/v1beta1, Kind=Cluster for_docker


rancher创建k8s集群步骤报错:Failed to create fleet-default/master cluster.x-k8s.io/v1beta1, Kind=Cluster for_kubernetes_02

即可正常创建集群

总结

多看帮助,少走弯路,而且在执行命令的时候要知道执行的大概是什么意思,不然做这件事情毫无意义。

其次感谢rancher 中文论坛中人们的热心帮助,他们是普渡终生的人,给很多人带来了帮助,感谢他们。