首页 > 解决方案 > 关于在kubernetes(k8s)平台上运行pod的问题:pods are running but the containers are not-ready

问题描述

我使用 Virtual Box 在我的虚拟机(CentOS/7)上构建了一个 k8s 集群:

kubectl get nodes -o wide

NAME           STATUS   ROLES                  AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
k8s-master     Ready    control-plane,master   8d    v1.21.2   192.168.0.186   <none>        CentOS Linux 7 (Core)   3.10.0-1160.31.1.el7.x86_64   docker://20.10.7
k8s-worker01   Ready    <none>                 8d    v1.21.2   192.168.0.187   <none>        CentOS Linux 7 (Core)   3.10.0-1160.31.1.el7.x86_64   docker://20.10.7
k8s-worker02   Ready    <none>                 8d    v1.21.2   192.168.0.188   <none>        CentOS Linux 7 (Core)   3.10.0-1160.31.1.el7.x86_64   docker://20.10.7

几天前,我使用 ReplicaSet 在默认命名空间上运行了一些 pod。
起初它们都运行良好,然后我关闭了 VM。
今天,我重新启动虚拟机后,发现它们不再正常工作了:

kubectl get all
NAME               READY   STATUS    RESTARTS   AGE
pod/dnsutils       1/1     Running   3          5d13h
pod/kubapp-6qbfz   0/1     Running   0          5d13h
pod/kubapp-d887h   0/1     Running   0          5d13h
pod/kubapp-z6nw7   0/1     Running   0          5d13h

NAME                     DESIRED   CURRENT   READY   AGE
replicaset.apps/kubapp   3         3         0       5d13h

然后我删除 ReplicaSet 并重新创建它以创建 pod。
我运行命令以获取更多信息:

[root@k8s-master ch04]# kubectl describe po kubapp-z887v 
Name:         kubapp-d887h
Namespace:    default
Priority:     0
Node:         k8s-worker02/192.168.0.188
Start Time:   Fri, 23 Jul 2021 15:55:16 +0000
Labels:       app=kubapp
Annotations:  cni.projectcalico.org/podIP: 10.244.69.244/32
              cni.projectcalico.org/podIPs: 10.244.69.244/32
Status:       Running
IP:           10.244.69.244
IPs:
  IP:           10.244.69.244
Controlled By:  ReplicaSet/kubapp
Containers:
  kubapp:
    Container ID:   docker://fc352ce4c6a826f2cf108f9bb9a335e3572509fd5ae2002c116e2b080df5ee10
    Image:          evalle/kubapp
    Image ID:       docker-pullable://evalle/kubapp@sha256:560c9c50b1d894cf79ac472a9925dc795b116b9481ec40d142b928a0e3995f4c
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Fri, 23 Jul 2021 15:55:21 +0000
    Ready:          False
    Restart Count:  0
    Readiness:      exec [ls /var/ready] delay=0s timeout=1s period=10s #success=1 #failure=3
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-m9rwr (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  kube-api-access-m9rwr:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                  From               Message
  ----     ------     ----                 ----               -------
  Normal   Scheduled  30m                  default-scheduler  Successfully assigned default/kubapp-d887h to k8s-worker02
  Normal   Pulling    30m                  kubelet            Pulling image "evalle/kubapp"
  Normal   Pulled     30m                  kubelet            Successfully pulled image "evalle/kubapp" in 4.049160061s
  Normal   Created    30m                  kubelet            Created container kubapp
  Normal   Started    30m                  kubelet            Started container kubapp
  Warning  Unhealthy  11s (x182 over 30m)  kubelet            Readiness probe failed: ls: cannot access /var/ready: No such file or directory

我不知道它会发生什么以及我应该如何解决它。
所以我在这里向你们寻求帮助。
我是k8s新手,请帮忙。



感谢 paul-becotte 的帮助和推荐。我想我应该发布 pod 的定义:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  # here is the name of the replication controller (RC)
  name: kubapp
spec:
  replicas: 3
  # what pods the RC is operating on
  selector:
    matchLabels:
      app: kubapp
  # the pod template for creating new pods
  template:
    metadata:
      labels:
        app: kubapp
    spec:
      containers:
      - name: kubapp
        image: evalle/kubapp
        readinessProbe:
         exec:
          command:
           - ls
           - /var/ready

https://github.com/Evalle/k8s-in-action/blob/master/Chapter_4/kubapp-rs.yaml有一个 yaml 的示例定义。
我不知道在哪里可以找到图像 evalle/kubapp 的 dockerfile。
而且我不知道它是否有 /var/ready 目录。

标签: kubernetes

解决方案


看看你的活动

警告 Unhealthy 11s (x182 over 30m) kubelet Readiness probe failed: ls: cannot access /var/ready: No such file or directory

您的就绪探测失败 - 看起来它正在检查/var/ready.

您的下一步是“这有意义吗?我的容器准备好后是否真的要在 /var/ready 中写入文件?” 如果是这样,您将需要查看 pod 中的日志并找出它不写入文件的原因。如果它不是正确的检查,请查看您用于创建 pod/deployment/replicaset 的 yaml,并将该检查替换为有意义的内容。


推荐阅读