containerd 拉取k8s.gcr.io/pause镜像i/o timeout

由于k8s.gcr.io 需要连外网才可以拉取到,导致 k8s 的基础容器 pause 经常无法获取。k8s docker 可使用代理服拉取,再利用 docker tag 解决问题

docker pull mirrorgooglecontainers/pause:3.1
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1

但是我们k8s集群中使用的CRI是containerd。所以只能通过 docker tag 镜像,再使用 ctr 导入镜像.

docker save k8s.gcr.io/pause -o pause.tar
ctr -n k8s.io images import pause.tar

containerd和docker在导入镜像这块是存在一切区别的:

  • containerd 命令行工具 ctr 特性不如 docker 丰富,如 ctr 1.2 并没有 tag 子命令,直到 1.3 才有
  • 为支持多租户隔离,containerd 有 namespace 概念,不同 namespace 下的 image、container 均不同,直接使用 ctr 操作时,会使用 default namespace

由于我刚开始导入镜像的时候,没有指定namespace,pause导入到了default空间,导致pod一直处在ContainerCreating状态。

后来在网上找了很多资料才知道containerd有namespace这回事,才知道了 k8s 只会使用 k8s.io namespace 中镜像。于是再往 k8s.io 导入镜像,containerd worker 终于能正常被调度了

$ ctr namespace ls
NAME    LABELS
default
k8s.io

$ ctr -n k8s.io images import pause.tar
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.22.17: output: Error response from daemon: Ge t "https://k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.22.17: output: Error response from d aemon: Get "https://k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-scheduler:v1.22.17: output: Error response from daemon: Ge t "https://k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-proxy:v1.22.17: output: Error response from daemon: Get "h ttps://k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/pause:3.5: output: Error response from daemon: Get "https://k8s .gcr.io/v2/": context deadline exceeded, error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/etcd:3.5.0-0: output: Error response from daemon: Get "https:// k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/coredns/coredns:v1.8.4: output: Error response from daemon: Get "https://k8s.gcr.io/v2/": context deadline exceeded, error: exit status 1 [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...` To see the stack trace of this error execute with --v=5 or higher
07-12
这个错误是由于在安装 Kubernetes 期间无法所需的镜像引起的。它表明在尝试从 k8s.gcr.io 镜像时出现了连接超时的问题。 这个问题可能是由于网络连接问题、防火墙设置或者代理配置引起的。以下是一些解决该问题的常见步骤: 1. 确保您的网络连接正常,尝试通过浏览器访问 `https://k8s.gcr.io/v2/` 确认是否可以访问。 2. 如果您使用了代理,请确保已正确配置 Docker 的代理设置。您可以通过编辑 `/etc/systemd/system/docker.service.d/http-proxy.conf`(如果不存在则创建它)文件来设置代理。例如,如果您使用 HTTP 代理,可以添加以下内容: ``` [Service] Environment="HTTP_PROXY=http://proxy.example.com:8080/" Environment="HTTPS_PROXY=http://proxy.example.com:8080/" ``` 3. 如果您在防火墙后面,确保防火墙允许 Docker 访问所需的资源。您可以尝试临时禁用防火墙并重新运行安装命令,以验证是否与防火墙有关。 4. 如果您使用的是私有网络或内部网络,请确保您的网络环境正确配置,以允许 Docker 访问所需的资源。 5. 您还可以尝试使用其他镜像源或加速器来所需的镜像。例如,您可以使用阿里云容器镜像服务(https://cr.console.aliyun.com/)或其他可靠的镜像源。 尝试上述步骤后,如果问题仍然存在,请确保您的环境满足 Kubernetes 的最低要求,并尝试在不同的网络环境下重新运行安装命令。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值