• 热门搜索 热门搜索

您现在的位置是:博客 > 文章详情文章详情

kubeadm init:failed to pull image registry.k8s.io/pause:3.6

原创
时间2023/12/28 00:13:01 发布 预览数量180
分类: k8s 标签: linux k8s

一、错误现象

在安装 K8s 1.28.0 的时候,kubeadm init… 执行失败,错误信息如下:

[kubelet-check] Initial timeout of 40s passed.

Unfortunately, an error has occurred:
        timed out waiting for the condition

This error is likely caused by:
        - The kubelet is not running
        - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)

If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:
        - 'systemctl status kubelet'
        - ''

Additionally, a control plane component may have crashed or exited when started by the container runtime.
To troubleshoot, list all containers using your preferred container runtimes CLI.
Here is one example how you may list all running Kubernetes containers by using crictl:
        - 'crictl --runtime-endpoint unix:///var/run/containerd/containerd.sock ps -a | grep kube | grep -v pause'
        Once you have found the failing container, you can inspect its logs with:
        - 'crictl --runtime-endpoint unix:///var/run/containerd/containerd.sock logs CONTAINERID'
error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster
To see the stack trace of this error execute with --v=5 or higher

错误信息中已经给出了可供参考的一些指令,首先我们使用 systemctl status kubelet 指令来查看 kubelet 的运行状态。如下图所示,运行状态是正常的。

kubeadm init:failed to pull image registry.k8s.io/pause:3.6

然后我们使用 journalctl -xeu kubelet 命令来查询一下执行日志,经过排查,我发现有一个处拉取 registry.k8s.io/pause:3.6 镜像失败的日志,导致了sandbox 创建不了而报错。既然找到了错误, 那么解决起来就比较简单了。

Dec 26 18:38:09 master kubelet[17939]: E1226 18:38:09.913745   17939 pod_workers.go:1300] "Error syncing pod, skipping" err="failed to \"CreatePodSandbox\" for \"kube-controller-manager-master_kube-system(8376d5b9b66e31d3f06b6a604fb7b258)\" with CreatePodSandboxError: \"Failed to create sandbox for pod \\\"kube-controller-manager-master_kube-system(8376d5b9b66e31d3f06b6a604fb7b258)\\\": rpc error: code = DeadlineExceeded desc = failed to get sandbox image \\\"registry.k8s.io/pause:3.6\\\": failed to pull image \\\"registry.k8s.io/pause:3.6\\\": failed to pull and unpack image \\\"registry.k8s.io/pause:3.6\\\": failed to resolve reference \\\"registry.k8s.io/pause:3.6\\\": failed to do request: Head \\\"https://us-west2-docker.pkg.dev/v2/k8s-artifacts-prod/images/pause/manifests/3.6\\\": dial tcp 64.233.189.82:443: i/o timeout\"" pod="kube-system/kube-controller-manager-master" podUID="8376d5b9b66e31d3f06b6a604fb7b258"

二、解决办法

# 1、生成 containerd 的默认配置文件
containerd config default > /etc/containerd/config.toml

# 2、查看 sandbox 的默认镜像仓库在文件中的第几行
cat /etc/containerd/config.toml | grep -n "sandbox_image"

# 3、将仓库地址修改成 registry.cn-hangzhou.aliyuncs.com/converts/pause:3.6
sandbox_image = "registry.cn-hangzhou.aliyuncs.com/converts/pause:3.6"

# 4、重启 containerd 服务
systemctl daemon-reload
systemctl restart containerd.service

版权声明:本文为Converts的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://www.converts.cn/article/9199941.html

暂无评论

暂无评论

目录

推荐阅读

  • Docker 部署FastTunnel,实现内网穿透

    ## 一、前言 最近在学习搭建**Elasticsearch**集群,但是发现云服务(2核4G)资源根本就不够用,部署上去就直接宕机了。想着服务器资源太贵, 家里刚好有一台**64G**内存的闲置电脑。不如做一个**内网穿透**,可以远程访问。工作学习两不误。其实目前市面上已经有很多穿透工具了,比如向日葵~~ ,但是奈何带宽太小了,免费的才1M~~~ ## 二、什么是 FastTunnel **FastTunnel** 是用.net core开发的一款跨平台内网穿透工具,它可以实现将内网服务暴露到公网供自己或任何人访问。 与其他穿透工具不同的是:FastTunnel项目致力于打造一个易于扩

  • 解决:“The configured user limit (128) on the number of inotify instances has been reached....” 错误

    ## 一、场景再现 在linux系统上运行着10个微服务,突然发现某个服务挂了。遇到这种情况,一般就使用命令`docker start` 就可以解决。 然而发现命令无法使服务起来。根据跟踪容器日志发现是出现了异常,如下所示: ```shell Unhandled exception. System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached, or the per-process limit on the number of open fi

  • Docker 安装mysql

    ## 一、创建mysql 容器 ```shell docker run \ -d \# 后台运行 --restart=always \#总是跟随docker启动 --privileged=true\#获取宿主机root权限 -p 13306:3306 --name mysql \# 容器与主机映射端口为,主机13306,容器3306 -v /mysql/log:/var/log/mysql \# 容器运行后的名称 -v /mysql/data:/var/lib/mysql \# mysql 目录挂载 -v /etc/localtime:/etc/localtime:ro \#让容器的时钟与宿主

  • validate service connection: CRI v1 runtime API is not implemented for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService

    ## 一、问题 安装k8s集群, Node节点加入主节点的时候(`kubeadm join...`),报错,报错信息如下: ```shell [root@node1 ~]# kubeadm join k8s-master:6443 --token 4nm8cy.jgxw8go95c1uqt6c --discovery-token-ca-cert-hash sha256:f1c08bce4ebeb8deb531b950e644cca399efc40e1a9ac99df21b7b38a31a6c02 [preflight] Running pre-flight checks

  • k8s 安装ingress,并解决拉取镜像失败的问题

    ## 一、前言 Service 是将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法,但是Service 只能在内网间访问(NodePort方式用的较少), 那么外网的路由请求如何发送到 Service 上呢? k8s 为我们提供了 Ingress 网关服务。 ## 二、什么是Ingress ? Ingress 公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。下面是一个将所有流量都发送到同一 Service 的简单 Ingress 示例: ![k8s 安装ingress,并解决拉取镜像失败的问题](/Article

  • ssh 免密登录

    ## 一、前言 SSH(Secure Shell)免密登录是一种安全便捷的远程登录方式,允许用户在不输入密码的情况下连接到远程Linux服务器。它通过密钥认证来实现登录,这种方法可以提高工作效率,同时加强系统的安全性。 ## 二、秘钥的存放位置 一般秘钥都存放在用户的根目录下 `~/.ssh`,如下图所示 ![ssh 免密登录](/ArticleFile/2024-01-09/802cf3e23bde4298bf4accd9929878c6.png 'ssh 免密登录') .ssh 目录下一般会有两个文件 `id_rsa:私钥` 、 `id_rsa.pub:公钥`。 ![ssh 免密

  • k8s http: server gave HTTP response to HTTPS client

    ## 一、问题 k8s 在拉取私有仓库镜像的时候报`http: server gave HTTP response to HTTPS client`错,网络上的答案都是千篇一律的,根本就没有抓住问题的根源。下面就有我来剖析一下问题的原因。 ```shell Type Reason Age From Message ---- ------ ---- ---- ------- Normal Schedule

  • org.jenkinsci.plugins.scriptsecurity.scripts.UnapprovedUsageException: script not yet approved for use

    ## 一、报错信息 jenkins 中编写pipeline脚本的时候,执行构建,报如下错误: ```shell Started by user admin org.jenkinsci.plugins.scriptsecurity.scripts.UnapprovedUsageException: script not yet approved for use at org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval.using(ScriptApproval.java:676) at org.jenkinsci.plugin

  • kubeadm init:failed to pull image registry.k8s.io/pause:3.6

    ## 一、错误现象 在安装 **K8s 1.28.0** 的时候,**kubeadm init...** 执行失败,错误信息如下: ```shell [kubelet-check] Initial timeout of 40s passed. Unfortunately, an error has occurred: timed out waiting for the condition This error is likely caused by: - The kubelet is not running - The kubelet is

  • .net core 通过环境变量加载配置文件(Development、Staging、Production)

    ## 一、前言 在**.net core 2.1** 之前,每次更新程序, 都需要手动更改数据库连接字符串。如果不小心把测试库发布上去了, 问题就大了。不过好在.NET Core 2.1及以上版本增加了支持根据环境变量加载配置文件。简单点理解就是, **代码中有三个配置文件(开发,测试,生产),程序发布之后, 更具服务器的环境变量, 自动加载相应的配置文件,不用在每次手动的切换了**。很是方便。 ## 二、实现 要想实现此功能,我们需要设置对应配置文件的后缀,以便系统会自动识别。 **举个例子:** 假设现在有一个叫 `Database.json` 的数据库配置文件,我们只需要再创建两个配

加载中