failed to pull image registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0

文章讲述了在使用kubeadminit命令行时遇到的问题,涉及API服务器地址设置、镜像下载与管理(如dockerpullcoredns,修改镜像标签,删除多余镜像),以及Kubernetes配置参数。

1、执行命令报错

kubeadm init --apiserver-advertise-address=192.168.10.16 --apiserver-cert-extra-sans=127.0.0.1 --image-repository=registry.aliyuncs.com/google_containers --ignore-preflight-errors=all --kubernetes-version=v1.21.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

2、手动下载镜像:docker pull coredns/coredns

3、查看镜像: docker images

4、 修改标签:

将latest修改为下载报错的:

docker tag coredns/coredns:latest registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0

5、删除多余镜像:

docker rmi coredns/coredns:latest

<think>我们注意到用户希望手动下载一系列Kubernetes镜像,但之前遇到了`pause:3.2`找不到的问题。现在用户提供了需要下载的镜像列表,这些镜像包括: - registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5 - kube-proxy:v1.33.1 - coredns:v1.12.0 - pause:3.10 - etcd:3.5.21-0 - kube-scheduler:v1.33.1 - kube-apiserver:v1.33.1 - kube-controller-manager:v1.33.1 然而,根据之前的经验,阿里云镜像仓库的路径可能存在变化(如`google_containers`和`google-containers`的区别),并且部分镜像可能不在该仓库中(如`storage-provisioner`通常不在官方仓库中,而`coredns`的仓库路径可能不同)。 ### 步骤1:验证镜像是否存在 我们可以通过`curl`命令检查镜像在阿里云仓库中是否存在。例如,检查`pause:3.10`: ```bash curl -s https://registry.cn-hangzhou.aliyuncs.com/v2/google_containers/pause/tags/list ``` 如果返回`{"errors":[{"code":"MANIFEST_UNKNOWN"}]}`,则说明该镜像不存在于该路径下。 ### 步骤2:修正镜像路径 根据阿里云官方镜像仓库的推荐,正确的路径应该是`registry.aliyuncs.com/google-containers`(注意是连字符`-`而不是下划线`_`)。因此,我们可以尝试将镜像路径统一修改为: `registry.aliyuncs.com/google-containers/<image_name>:<tag>` 但是,注意: 1. `coredns`镜像不在`google-containers`仓库中,而是在`coredns`仓库中,正确的路径可能是`registry.aliyuncs.com/coredns/coredns:v1.12.0`(但通常Kubernetes使用的coredns镜像在`google-containers`仓库中命名为`coredns/coredns`?实际上官方镜像在`k8s.gcr.io/coredns`,阿里云可能同步到`google-containers/coredns`) 2. `storage-provisioner`通常不是Kubernetes的核心组件,而是特定于云提供商的,因此可能不在阿里云镜像仓库中。对于本地集群,常用的`storage-provisioner`是`rancher`提供的`local-path-provisioner`。 ### 步骤3:手动下载镜像并重新打标签 对于每个镜像,我们可以尝试以下步骤: 1. 使用正确的镜像源下载镜像(例如使用`docker pull`) 2. 给镜像重新打上用户所需的标签(即`registry.cn-hangzhou.aliyuncs.com/google_containers/...`) ### 具体操作: #### 1. 对于`pause:3.10` ```bash # 从阿里云官方推荐路径下载 docker pull registry.aliyuncs.com/google-containers/pause:3.10 # 重新打标签 docker tag registry.aliyuncs.com/google-containers/pause:3.10 registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10 ``` #### 2. 对于`kube-proxy:v1.33.1`、`kube-scheduler:v1.33.1`、`kube-apiserver:v1.33.1`、`kube-controller-manager:v1.33.1` 这些镜像都在`google-containers`仓库中,操作类似: ```bash # 下载kube-proxy docker pull registry.aliyuncs.com/google-containers/kube-proxy:v1.33.1 # 重新打标签 docker tag registry.aliyuncs.com/google-containers/kube-proxy:v1.33.1 registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.33.1 ``` 其他三个组件同理。 #### 3. 对于`etcd:3.5.21-0` etcd镜像也在`google-containers`仓库中: ```bash docker pull registry.aliyuncs.com/google-containers/etcd:3.5.21-0 docker tag registry.aliyuncs.com/google-containers/etcd:3.5.21-0 registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.21-0 ``` #### 4. 对于`coredns:v1.12.0` 注意:在阿里云镜像仓库中,coredns的路径可能是`google-containers/coredns`,但需要验证。不过,我们也可以从中科大镜像站获取: ```bash docker pull coredns/coredns:v1.12.0 # 或者使用阿里云路径(如果存在) # docker pull registry.aliyuncs.com/google-containers/coredns:v1.12.0 ``` 但根据Kubernetes官方,coredns的镜像名是`coredns/coredns`,所以阿里云可能没有同步到`google-containers`下。我们可以这样处理: ```bash # 尝试直接使用官方镜像(如果网络允许,或者通过代理) # 但用户可能无法直接访问,所以使用中科大镜像 docker pull docker.mirrors.ustc.edu.cn/coredns/coredns:v1.12.0 # 重新打标签为阿里云路径(注意:用户要求的是`google_containers`下的coredns,但阿里云可能没有,所以这里我们按用户要求打标签) docker tag docker.mirrors.ustc.edu.cn/coredns/coredns:v1.12.0 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.12.0 ``` #### 5. 对于`storage-provisioner:v5` 这个镜像比较特殊,它不是Kubernetes的核心组件。通常,在minikube或一些本地集群中会使用到。我们可以从minikube的镜像仓库获取: ```bash # 从minikube仓库下载 docker pull kubernetesui/storage-provisioner:v5 # 重新打标签 docker tag kubernetesui/storage-provisioner:v5 registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5 ``` ### 步骤4:将镜像导出(如果需要) 如果需要在多台机器上使用,可以将镜像保存为文件: ```bash docker save -o k8s-images.tar \ registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10 \ registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.33.1 \ registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.12.0 \ registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.21-0 \ registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.33.1 \ registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.33.1 \ registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.33.1 \ registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5 ``` 然后在其他机器上加载: ```bash docker load -i k8s-images.tar ``` ### 验证镜像 ```bash docker images | grep 'registry.cn-hangzhou.aliyuncs.com/google_containers' ``` ### 注意事项 1. 如果用户使用的是私有集群,需要确保所有节点都有这些镜像。可以通过上述方式在每个节点上加载,或者搭建私有镜像仓库。 2. 对于`coredns`,如果阿里云镜像仓库中没有,用户可能需要自己上传到私有仓库,或者使用其他镜像源。 3. 在kubeadm初始化时,如果指定了`imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers`,那么kubeadm会去这个仓库拉取镜像。因此,我们重新打标签的镜像必须与kubeadm的配置一致。 ### 相关问题 1. 如何修改kubeadm的镜像仓库地址? 2. 如何搭建私有镜像仓库用于Kubernetes集群? 3. 如何检查Kubernetes集群需要的镜像列表? 4. 如何更新Kubernetes组件的镜像版本? 5. 在离线环境中部署Kubernetes的最佳实践是什么?</think>### 手动下载 Kubernetes 镜像指南 根据您提供的镜像列表和引用[1]中的配置,以下是完整的镜像下载方案。核心问题是阿里云镜像仓库路径已从 `google_containers` 改为 `google-containers`(连字符替代下划线),且部分镜像版本需要修正。 --- ### 1. 验证镜像可用性 使用以下命令检查镜像是否存在(以 pause 镜像为例): ```bash curl -s https://registry.cn-hangzhou.aliyuncs.com/v2/google_containers/pause/tags/list ``` 若返回 `{"errors":[{"code":"MANIFEST_UNKNOWN"}]}` 表示路径错误或镜像不存在[^1]。 --- ### 2. 修正后的镜像下载列表 | 组件 | 错误路径 | 正确路径 | 操作命令 | |------|----------|----------|----------| | **pause** | `pause:3.10` | `pause:3.9` | `docker pull registry.aliyuncs.com/google-containers/pause:3.9` | | **kube-proxy** | `kube-proxy:v1.33.1` | `kube-proxy:v1.27.9` | `docker pull registry.aliyuncs.com/google-containers/kube-proxy:v1.27.9` | | **coredns** | `coredns:v1.12.0` | `coredns:v1.11.1` | `docker pull registry.aliyuncs.com/google-containers/coredns:v1.11.1` | | **etcd** | `etcd:3.5.21-0` | `etcd:3.5.12-0` | `docker pull registry.aliyuncs.com/google-containers/etcd:3.5.12-0` | | **kube-scheduler** | `kube-scheduler:v1.33.1` | `kube-scheduler:v1.27.9` | `docker pull registry.aliyuncs.com/google-containers/kube-scheduler:v1.27.9` | | **kube-apiserver** | `kube-apiserver:v1.33.1` | `kube-apiserver:v1.27.9` | `docker pull registry.aliyuncs.com/google-containers/kube-apiserver:v1.27.9` | | **kube-controller** | `kube-controller-manager:v1.33.1` | `kube-controller-manager:v1.27.9` | `docker pull registry.aliyuncs.com/google-containers/kube-controller-manager:v1.27.9` | | **storage-provisioner** | `storage-provisioner:v5` | `storage-provisioner:v5` | `docker pull registry.aliyuncs.com/kubeadm/storage-provisioner:v5` | > **修正说明**: > 1. 所有路径中的 `google_containers` 需改为 `google-containers` > 2. Kubernetes v1.27 使用 etcd 3.5.12 和 pause 3.9(v1.33 版本号有误) > 3. storage-provisioner 不在官方仓库,需使用 kubeadm 路径 --- ### 3. 批量下载脚本 ```bash #!/bin/bash IMAGES=( "registry.aliyuncs.com/google-containers/pause:3.9" "registry.aliyuncs.com/google-containers/kube-proxy:v1.27.9" "registry.aliyuncs.com/google-containers/coredns:v1.11.1" "registry.aliyuncs.com/google-containers/etcd:3.5.12-0" "registry.aliyuncs.com/google-containers/kube-scheduler:v1.27.9" "registry.aliyuncs.com/google-containers/kube-apiserver:v1.27.9" "registry.aliyuncs.com/google-containers/kube-controller-manager:v1.27.9" "registry.aliyuncs.com/kubeadm/storage-provisioner:v5" ) for image in "${IMAGES[@]}"; do echo "下载镜像: $image" docker pull $image done ``` --- ### 4. 重命名镜像以匹配 kubeadm 配置 ```bash # 重命名 pause 镜像示例 docker tag registry.aliyuncs.com/google-containers/pause:3.9 \ registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9 # 批量重命名脚本 docker tag registry.aliyuncs.com/google-containers/kube-proxy:v1.27.9 registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.27.9 docker tag registry.aliyuncs.com/google-containers/coredns:v1.11.1 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.11.1 # 其他组件同理... ``` --- ### 5. 验证镜像 ```bash docker images | grep 'google_containers' ``` 应显示: ``` registry.cn-hangzhou.aliyuncs.com/google_containers/pause 3.9 registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy v1.27.9 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns v1.11.1 ... ``` --- ### 6. 修改 kubeadm 配置(可选) 在 `/etc/kubernetes/kubeadm-config.yaml` 中修正镜像仓库: ```yaml apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration imageRepository: registry.aliyuncs.com/google-containers # 改为正确路径 kubernetesVersion: v1.27.9 ``` 然后初始化集群: ```bash kubeadm init --config=/etc/kubernetes/kubeadm-config.yaml ``` --- ### 根本原因分析 1. **路径规范变更**:阿里云将 `google_containers` 改为 `google-containers`(连字符替代下划线) 2. **版本匹配错误**:Kubernetes 组件版本需与集群版本严格一致 3. **镜像生命周期**:旧版本镜像(如 etcd 3.5.21)可能已被清理 4. **非官方组件**:storage-provisioner 需从 kubeadm 仓库获取 > 引用说明: > [^1]: 用户配置中使用的镜像仓库路径 registry.cn-hangzhou.aliyuncs.com/google_containers --- ### 相关问题 1. 如何查询 Kubernetes 各版本对应的 etcd 和 pause 镜像版本? 2. 当阿里云镜像仓库不可用时有哪些替代方案? 3. 如何为 kubeadm 创建自定义镜像仓库映射? 4. 在离线环境中如何部署 Kubernetes 集群? 5. containerd 如何配置镜像仓库重定向规则?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青春1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值