前言:
在部署Kubernetes的过程中,需要从k8s.grc.io仓库中拉取部署所需的镜像文件,但是由于国内对国外的防火墙问题导致无法正常拉取,下面介绍一个方法来解决此问题,完成Kubernetes的正常部署。
问题描述:
使用Kubernetes V1.22.1版本部署Kubernetes集群,在进行kubeadm init初始化时,需要从k8s.grc.io仓库拉取所需的镜像:
......
[preflight/images] You can also perform this action in beforehand using 'kubeadm config images pull'
[preflight] Some fatal errors occurred:
[ERROR ImagePull]: failed to pull image [k8s.gcr.io/kube-apiserver-amd64:v1.22.1]: exit status 1
[ERROR ImagePull]: failed to pull image [k8s.gcr.io/kube-controller-manager-amd64:v1.22.1]: exit status 1
[ERROR ImagePull]: failed to pull image [k8s.gcr.io/kube-scheduler-amd64:v1.22.1]: exit status 1
[ERROR ImagePull]: failed to pull image [k8s.gcr.io/kube-proxy-amd64:v1.22.1]: exit status 1
[ERROR ImagePull]: failed to pull image [k8s.gcr.io/pause:3.5]: exit status 1
[ERROR ImagePull]: failed to pull image [k8s.gcr.io/etcd-amd64:3.5.0]: exit status 1
[ERROR ImagePull]: failed to pull image [k8s.gcr.io/coredns:1.8.4]: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`复制
解决方案:
docker.io仓库对google的容器做了镜像,可以通过下列命令下拉取相关镜像:
docker pull mirrorgooglecontainers/kube-apiserver-amd64:v1.22.1
docker pull mirrorgooglecontainers/kube-controller-manager-amd64:v1.22.1
docker pull mirrorgooglecontainers/kube-scheduler-amd64:v1.22.1
docker pull mirrorgooglecontainers/kube-proxy-amd64:v1.22.1
docker pull mirrorgooglecontainers/pause:3.5
docker pull mirrorgooglecontainers/etcd-amd64:3.5.0
docker pull coredns/coredns:1.8.4复制
拉取的镜像版本信息需要根据部署Kubernetes V1.22.1版本所需的实际情况进行相应的修改(即将下载下来的镜像标签版本信息改成kubeadm init初始化要求的镜像版本标签信息)。通过docker tag命令来修改镜像的标签:
docker tag docker.io/mirrorgooglecontainers/kube-proxy-amd64:v1.22.1 k8s.gcr.io/kube-proxy-amd64:v1.22.1
docker tag docker.io/mirrorgooglecontainers/kube-scheduler-amd64:v1.22.1 k8s.gcr.io/kube-scheduler-amd64:v1.22.1
docker tag docker.io/mirrorgooglecontainers/kube-apiserver-amd64:v1.22.1k8s.gcr.io/kube-apiserver-amd64:v1.22.1
docker tag docker.io/mirrorgooglecontainers/kube-controller-manager-amd64:v1.22.1 k8s.gcr.io/kube-controller-manager-amd64:v1.22.1
docker tag docker.io/mirrorgooglecontainers/etcd-amd64:3.5.0 k8s.gcr.io/etcd-amd64:3.5.0
docker tag docker.io/mirrorgooglecontainers/pause:3.5 k8s.gcr.io/pause:3.5
docker tag docker.io/coredns/coredns:1.8.4 k8s.gcr.io/coredns:1.8.4复制
使用docker rmi删除不用的镜像,通过docker images命令显示,已经有我们需要的镜像文件,可以继续部署工作了:
[root@k8s-master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy-amd64 v1.22.1 bea694275d97 1 days ago 97.8 MB
k8s.gcr.io/kube-scheduler-amd64 v1.22.1 ca43b177bese 1 days ago 56.8 MB
k8s.gcr.io/kube-apiserver-amd64 v1.22.1 3de571b6587b 1 days ago 187 MB
coredns/coredns 1.8.4 b3154sdrecfc 1 days ago 45.6 MB
k8s.gcr.io/coredns 1.8.4 b3b94275d97c 1 days ago 45.6 MB
k8s.gcr.io/etcd-amd64 3.5.0 b8d1f5sa24f7 1 days ago 219 MB
k8s.gcr.io/pause 3.5 d6csa23rdsa1 1 days ago 742 kB复制
重新初始化Kubernetes
[root@k8s-master ~]# kubeadm init --kubernetes-version=v1.22.1 --apiserver-advertise-address=192.168.1.18 --image-repository registry.aliyuncs.com/google0.0/16
[init] Using Kubernetes version: v1.22.1
[preflight] Running pre-flight checks
[WARNING Service-Docker]: docker service is not enabled, please run 'systemctl enable docker.service'
[WARNING Hostname]: hostname "k8s-master" could not be reached
[WARNING Hostname]: hostname "k8s-master": lookup k8s-master on 192.168.1.1:53: no such host
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [k8s-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.defa
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [k8s-master localhost] and IPs [192.168.1.18 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [k8s-master localhost] and IPs [192.168.1.18 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
[control-plane] Creating static Pod manifest for "kube-scheduler"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". Th
[apiclient] All control plane components are healthy after 6.002108 seconds
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config-1.22" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node k8s-master as control-plane by adding the labels: [node-role.kubernetes.io/master(deprecated) nod
[mark-control-plane] Marking the node k8s-master as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]
[bootstrap-token] Using token: 9t2nu9.00ieyfqmc50dgub6
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to get nodes
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate cre
[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.1.18:6443 --token 9t2nu9.00ieyfqmc50dgub6 \
--discovery-token-ca-cert-hash sha256:183b6c95b4e49f0bd4074c61aeefc56d70215240fbeb7a633afe3526006c4dc9复制
初始化成功,问题解决!
温馨提示
如果您喜欢本文,就请动动您的发财手为本文留言转发在看,想获取更多运维相关内容,请记得关注我。
点个[在看],是对我最大的支持! 复制
文章转载自非著名运维,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
1839次阅读
2025-04-09 15:33:27
2025年3月国产数据库大事记
墨天轮编辑部
858次阅读
2025-04-03 15:21:16
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
596次阅读
2025-04-10 15:35:48
征文大赛 |「码」上数据库—— KWDB 2025 创作者计划启动
KaiwuDB
493次阅读
2025-04-01 20:42:12
数据库,没有关税却有壁垒
多明戈教你玩狼人杀
481次阅读
2025-04-11 09:38:42
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
459次阅读
2025-04-14 09:40:20
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
401次阅读
2025-04-07 09:44:54
天津市政府数据库框采结果公布!
通讯员
358次阅读
2025-04-10 12:32:35
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
348次阅读
2025-04-17 17:02:24
优炫数据库成功入围新疆维吾尔自治区行政事业单位数据库2025年框架协议采购!
优炫软件
334次阅读
2025-04-18 10:01:22
热门文章
Kubernetes v1.22.1部署报错2: Get “http://localhost:10248/healthz“
2021-09-24 4823浏览
三步解决Docker拉取镜像报错:x509: certificate has expired or is not yet v..
2021-09-29 3538浏览
harbor-db重启报错:initdb: error: directory "/var/lib/postgresql/da..
2021-10-16 3269浏览
Gitlab其他用户登录返回500错误解决
2022-03-10 2841浏览
Jenkins+Gitlab+Nginx实现自动发布与回退基于tag版本的静态项目(解决重复构建问题)
2022-03-30 2725浏览