Счетчик перезапуска модуля kubernetes показывает несогласованные значения при запуске kubectl get pod -w - PullRequest
0 голосов
/ 09 января 2020

Я играл с миникубом, и после ряда операций вывод kubectl get pod -w выглядит следующим образом -


nginx   1/1   Running   2     10m
nginx   1/1   Running   3     10m
nginx   0/1   Completed   2     10m
nginx   0/1   CrashLoopBackOff   2     11m
nginx   1/1   Running   3     11m
nginx   1/1   Running   3     12m

Я не понимаю счетчик, показанный в строках 3 и 4. Что точно означает количество перезапусков?

Ответы [ 2 ]

0 голосов
/ 09 января 2020

О статусе CrashLoopBackOff:

A CrashloopBackOff означает, что у вас есть модуль, который запускается, аварийно завершает работу, запускается снова, а затем снова падает.

Неудачные контейнеры, которые перезапускаются Кублет перезапускается с экспоненциальной задержкой отсрочки (10 с, 20 с, 40 с…), ограниченной пятью минутами, и сбрасывается после десяти минут успешного выполнения.

CrashLoopBackOff события происходят по разным причинам, большинство случаев, связанных со следующим: - приложение внутри контейнера продолжает сбой - некоторые параметры модуля или контейнера были настроены неправильно - ошибка при развертывании

Всякий раз, когда вы сталкиваетесь с CrashLoopBackOff, выполните kubectl describe для расследования:

kubectl describe pod POD_NAME --namespace NAMESPACE_NAME

user@minikube:~$ kubectl describe pod ubuntu-5d4bb4fd84-8gl67 --namespace default
Name:         ubuntu-5d4bb4fd84-8gl67
Namespace:    default
Priority:     0
Node:         minikube/192.168.39.216
Start Time:   Thu, 09 Jan 2020 09:51:03 +0000
Labels:       app=ubuntu
              pod-template-hash=5d4bb4fd84
Status:       Running
Controlled By:  ReplicaSet/ubuntu-5d4bb4fd84
Containers:
  ubuntu:
    Container ID:   docker://c4c0295e1e050b5e395fc7b368a8170f863159879821dd2562bc2938d17fc6fc
    Image:          ubuntu
    Image ID:       docker-pullable://ubuntu@sha256:250cc6f3f3ffc5cdaa9d8f4946ac79821aafb4d3afc93928f0de9336eba21aa4
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Thu, 09 Jan 2020 09:54:37 +0000
      Finished:     Thu, 09 Jan 2020 09:54:37 +0000
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Thu, 09 Jan 2020 09:53:05 +0000
      Finished:     Thu, 09 Jan 2020 09:53:05 +0000
    Ready:          False
    Restart Count:  5
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-xxxst (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  default-token-xxxst:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-xxxst
    Optional:    false
QoS Class:       BestEffort
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason     Age                    From               Message
  ----     ------     ----                   ----               -------
  Normal   Scheduled  7m16s                  default-scheduler  Successfully assigned default/ubuntu-5d4bb4fd84-8gl67 to minikube
  Normal   Created    5m59s (x4 over 6m52s)  kubelet, minikube  Created container ubuntu
  Normal   Started    5m58s (x4 over 6m52s)  kubelet, minikube  Started container ubuntu
  Normal   Pulling    5m17s (x5 over 7m5s)   kubelet, minikube  Pulling image "ubuntu"
  Normal   Pulled     5m15s (x5 over 6m52s)  kubelet, minikube  Successfully pulled image "ubuntu"
  Warning  BackOff    2m2s (x24 over 6m43s)  kubelet, minikube  Back-off restarting failed container

Раздел Events предоставит вам подробное объяснение произошедшего.

0 голосов
/ 09 января 2020

RestartCount представляет количество раз, когда контейнер внутри модуля был перезапущен, это основано на количестве мертвых контейнеров, которые еще не были удалены. Обратите внимание, что это рассчитывается из мертвых контейнеров.

-w в команде для контрольного флага, а различные заголовки перечислены ниже

$ kubectl get pods -w
NAME      READY   STATUS    RESTARTS   AGE
nginx     1/1     Running   0          21m

Чтобы получить подробный вывод, используйте -o wide flag

$ kubectl get pods -o wide
NAME      READY   STATUS    RESTARTS   AGE   IP            NODE                    NOMINATED NODE   READINESS GATES
nginx   1/1     Running   1          21h   10.244.2.36   worker-node-2   <none>           <none>

Таким образом, поле READY представляет контейнеры внутри модулей и может быть детально рассмотрено командой description pod. См. Жизненный цикл POD

$ kubectl describe pod nginx| grep -i -A6 "Conditions"
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True

RESTARTS Поле отслеживается под счетчиком перезапусков, извлеките его из описания модуля, как показано ниже.

$ kubectl describe pod nginx | grep -i "Restart"
    Restart Count:  0

Итак, в качестве теста мы сейчас попробуем перезапустить вышеуказанный контейнер и посмотреть, какие поля обновлены. Мы находим узел, на котором работает наш контейнер, и уничтожаем его с узла с помощью команды docker, и он должен автоматически перезапускаться с помощью kubernetes

$ kubectl get pods -o wide
NAME     READY   STATUS    RESTARTS   AGE   IP            NODE                    NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          21h   10.244.2.36   worker-node-2   <none>           <none>
ubuntu@worker-node-2:~$ sudo docker ps  -a | grep -i nginx
4c8e2e6bf67c        nginx                    "nginx -g 'daemon of…"   22 hours ago        Up 22 hours                                  


ubuntu@worker-node-2:~$ sudo docker kill 4c8e2e6bf67c
4c8e2e6bf67c
  1. Состояние POD изменяется на ERROR
  2. Количество READY равно 0/1
ubuntu@cluster-master:~$ kubectl get pods -o wide
NAME   READY   STATUS   RESTARTS   AGE   IP            NODE            NOMINATED NODE   READINESS GATES
nginx   0/1      Error    0          21h   10.244.2.36  worker-node-2   <none>           <none>

Как только POD восстанавливает неисправный контейнер.

  1. Количество READY снова равно 1/1
  2. STATUS возвращается к работе
  3. Счетчик RESTARTS увеличивается на 1
ubuntu@cluster-master:~$ kubectl get pods -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP            NODE            NOMINATED NODE   READINESS GATES
nginx   1/1     Running   1          21h   10.244.2.36   worker-node-2   <none>           <none>

Проверьте также перезапуск с помощью команды описаний

$ kubectl describe pods nginx  | grep -i "Restart"
    Restart Count:  1

Значения в вашем выводе не являются несовместимыми .. именно так будет работать модуль с restartPolicy of Always, он будет пытаться вернуть отказавший контейнер, пока не будет достигнут предел CrashLoopBackOff.

См. Примеры состояния POD

Модуль работает и имеет один контейнер. Контейнер выходит с успехом. Событие завершения журнала.

Если restartPolicy имеет значение:

  1. Всегда: перезапустить контейнер; Стручок фазы остается работающим.
  2. OnFailure: Стручок фазы становится успешным.
  3. Никогда: Стручок фазы становится успешным.
...