解决kubernetes启动容器时,容器一直是ContainerCreating不能running

表象

kubectl -f create redis.yaml

kubectl get pod redis

NAME                 READY     STATUS              RESTARTS   AGE
kubetest-8s1rt1   0/1       ContainerCreating   0          12s

pod的状态一直是ContainerCreating ,久久不能变成Running的状态。

分析

查看pod的日志kubectl describe pod kubetest-8s1rt1,里边有一个错误事件

Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request.  details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)"

看这个错误是由于pull时出错了。看着网上的思路也试着手工pull了一下,提示错误/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory.
进入到/etc/docker/certs.d/registry.access.redhat.com/看到有一个redhat-ca.crt文件,使用ll命令查看,发现是个link文件,lrwxrwxrwx. 1 root root 27 Mar 27 05:22 redhat-ca.crt -> /etc/rhsm/ca/redhat-uep.pem还一直闪啊闪,说明没有这个真正链接的文件。
cd /etc/rhsm 发现没有这个文件夹

解决

看样子应该是有东西没安装。
先更新下源yum update
然后查询yum search rhsm

python-rhsm.x86_64 : A Python library to communicate with a Red Hat Unified Entitlement Platform
python-rhsm-certificates.x86_64 : Certificates required to communicate with a Red Hat Unified Entitlement Platform

看着python-rhsm-certificates这个比较像,所以就安装了这个yum install python-rhsm-certificates
之后发现有了/etc/rhsm/这个目录,之前的redhat-ca.crt这个link也有了真正的指向。

回过头来重新查看kubectl get pod,仍然是ContainerCreating的状态。
于是又执行了docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest,这个时候开始自动下载镜像。等镜像下载完成后,在查看pod已经是Running的状态了。

后记

通过docker ps命令查看如下

[root@localhost registry.access.redhat.com]# docker ps
CONTAINER ID        IMAGE                                                        COMMAND                  CREATED             STATUS              PORTS               NAMES
6b1409d4214b        192.168.1.130:5000/kubetest:9                                "java -jar kubetes..."   35 minutes ago      Up 35 minutes                           k8s_kubetest.49006d1_kubetest-8s1rt_default_ccc51f1f-4416-11e8-a44c-000c2978035a_578a705e
bcc967e615ca        registry.access.redhat.com/rhel7/pod-infrastructure:latest   "/usr/bin/pod"           35 minutes ago      Up 35 minutes                           k8s_POD.24f70ba9_kubetest-8s1rt_default_ccc51f1f-4416-11e8-a44c-000c2978035a_b36c03dc

发现启动了两个容器,一个是使用的镜像是192.168.1.130:5000/kubetest:9,一个使用的镜像是
registry.access.redhat.com/rhel7/pod-infrastructure:latest。也就是我们刚刚启动时一直报错的。其实这个容器是没个Pod的pause根容器,是Pod启动时自动启动的。整个pod的网络和卷都是共享这个Pod里同一个pause容器的。

至此大概推断如下:k8s启动pod需要拉取服务镜像,和pause根容器镜像。pause容器需要到registry.access.redhat.com/rhel7下边拉取,而这个地方需要CA凭证,操作系统里默认不带,所以需要手工安装一个,也就是上边的python-rhsm-certificates,安装后在拉去下来,images都有了,所以就都起来了,Running

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值