表象
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)