You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Pod处于ContainerCreating状态,拉取镜像TLS握手超时求助

解决Pod卡在ContainerCreating状态的问题

从你提供的Pod事件日志来看,核心问题是kubelet在节点centos-minion-2上无法拉取registry.access.redhat.com/rhel7/pod-infrastructure:latest镜像,报错显示TLS握手超时,导致Pod的基础容器(pause容器)无法启动,进而你的Nginx容器也无法创建。下面是具体的解决方法:

方法一:更换为可访问的Pause容器镜像(推荐)

这个rhel7/pod-infrastructure是老版本Kubernetes依赖的Red Hat基础容器镜像,现在官方已经改用pause镜像,而且国内有很多稳定的镜像源,步骤如下:

  1. 登录到出问题的节点centos-minion-2
  2. 修改kubelet的配置,替换默认的基础容器镜像:
    • 如果kubelet是通过启动参数配置的,找到kubelet的服务配置文件(通常是/etc/systemd/system/kubelet.service.d/10-kubeadm.conf),找到--pod-infra-container-image参数,将其替换为国内镜像,比如:
      --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.1
      
      注意:镜像版本要和你的Kubernetes版本匹配,比如K8S 1.14-1.17用3.1,1.18-1.20用3.2,更高版本可以对应更新的pause版本。
    • 如果是用yaml配置的kubelet(比如/var/lib/kubelet/config.yaml),找到podInfraContainerImage字段修改为上述镜像地址。
  3. 重启kubelet服务:
    systemctl daemon-reload
    systemctl restart kubelet
    
  4. 删除原来的异常Pod,让Deployment重新创建:
    kubectl delete pod my-nginx-2723453542-5s33f
    

方法二:修复节点的网络/代理问题

如果你坚持使用原镜像,需要解决节点访问RedHat镜像仓库的网络问题:

  • 首先测试节点的网络连通性:
    ping registry.access.redhat.com
    curl https://registry.access.redhat.com/v1/_ping
    
    如果无法ping通或者curl报错,检查节点的防火墙、路由配置,确保能正常访问外网。
  • 如果节点使用了代理,确认代理配置正确,并且kubelet也继承了代理环境变量:
    在kubelet的服务配置文件中添加代理环境变量,比如:
    Environment="HTTP_PROXY=http://your-proxy-ip:port"
    Environment="HTTPS_PROXY=http://your-proxy-ip:port"
    Environment="NO_PROXY=localhost,127.0.0.1,cluster.local"
    
    然后重启kubelet:
    systemctl daemon-reload
    systemctl restart kubelet
    

补充说明

pod-infrastructure是Pod的基础容器,负责为Pod内的所有容器提供网络命名空间和IPC共享等基础功能,这个容器启动失败会导致整个Pod无法正常创建。更换为官方的pause镜像不仅能解决当前的拉取问题,也能避免后续RedHat仓库访问不稳定带来的隐患。

内容的提问来源于stack exchange,提问作者merrykinger

火山引擎 最新活动