Kubelet повторно перезагружает модуль по умолчанию? - PullRequest
0 голосов
/ 11 апреля 2020

Я начинаю с Kubernetes и пытаюсь узнать больше о тесте живучести.

В некоторых документах и ​​статьях указано, что значение по умолчанию failureThreshold составляет 3 раза. И если вы не укажете failThreshold, Kubernetes выполнит 3 проверки перед перезапуском контейнера.

Мой вопрос: сколько раз kubelet перезапускает контейнер для pod?

Вот пример livenessprobe-execaction.yaml:

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/busybox
    args: # command to be executed when the container starts
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 # during first 30 seconds there will be a file and cat will return success, when removed, a failure
    livenessProbe:
      exec:
        command: # in the first probe there will be a file within 30 seconds, and no errors
                 # and after 35 seconds a nex probe is done but the file is gone, and error will show up and machine will be restarted
                 # several restarts should happen or restarts only 3 times?
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5 # kubelet waits 5 seconds before first probe
      periodSeconds: 5 # kubelet checks every 5 seconds
      #failureThreshold: 3 is the default number of times, after the 3rd liveness probe the container is restarted? forever?

После создания модуля:

$ kubectl apply -f livenessprobe-execaction.yaml

И запуск часов:

$ kubectl get pod liveness-exec --watch

Вывод:

    NAME            READY   STATUS    RESTARTS   AGE
    liveness-exec   1/1     Running   0          4s
    liveness-exec   1/1     Running   1          75s
    liveness-exec   1/1     Running   2          2m29s
    liveness-exec   1/1     Running   3          3m44s
    liveness-exec   1/1     Running   4          5m
    liveness-exec   1/1     Running   5          6m14s
    liveness-exec   0/1     CrashLoopBackOff   5          7m29s
    liveness-exec   1/1     Running            6          8m57s
    liveness-exec   1/1     Running            7          10m
    liveness-exec   0/1     CrashLoopBackOff   7          11m
    liveness-exec   1/1     Running            8          16m
    liveness-exec   1/1     Running            9          17m
    liveness-exec   0/1     CrashLoopBackOff   9          18m

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Спасибо за ответ. Я видел несколько похожих ответов, но это не очень хорошо объясняет, сколько раз будет перезапущен модуль. Ответ: на сегодняшний день он будет перезапущен навсегда в режиме по умолчанию «Всегда».

Кажется, что нет способа установить максимальное количество перезапусков.

Вы либо перезапускаете «всегда», «при ошибке» или «никогда». В режиме «всегда» и «при ошибке» 5 минут - это максимальное время ожидания между попытками запуска контейнера.

«Никогда» не будет перезапускать контейнер.

Таким образом, пока нет опции, которая бы помогла нам установить максимальное количество попыток.

Процитируем Дана Уолина, у которого есть курс на этой топи c:

Во-первых, 5-минутное число - это максимальное ограничение времени между перезапусками. Если вы запустите его снова, вы увидите, что оно определенно начинает замедляться при перезапусках. (см. ниже) и достигнет точки, в которой он пытается только каждые 5 минут. Он придерживается этого числа, если контейнер не исправен (в этом случае он будет сбрасывать вещи).

Насколько максимальное число перезапускается (это то, о чем на самом деле был ваш вопрос, я теперь понимаю), похоже, они все еще работают над этой функцией из того, что я могу сказать на сайте github. Мне обычно не приходится иметь дело с этим это сценарий (обычно это администратор кластера), но если я столкнусь с чем-то еще, я сообщу вам.

https://github.com/kubernetes/kubernetes/issues/49466 https://github.com/kubernetes/kubernetes/pull/79334

Похоже, что это заданный c запрос на получение, который решит его:

https://github.com/kubernetes/kubernetes/pull/79334/files/db71ebf0ec9bc04c48542059ccd46a34a2abcc16#diff -e281c21e93f01ecc8cf12e4ff535b3e5

0 голосов
/ 12 апреля 2020

Это зависит от restartPolicy в PodSpe c.

A PodSpe c имеет поле restartPolicy с возможными значениями Always, OnFailure и Never. Значение по умолчанию Always. restartPolicy применяется ко всем Контейнерам в Стручке. restartPolicy относится только к перезапуску Контейнеров кубелетом на том же узле. Выходящие контейнеры, которые перезапускаются с помощью kubelet, перезапускаются с экспоненциальной задержкой отсрочки (10 с, 20 с, 40 с ...), ограниченной пятью минутами, и сбрасываются после десяти минут успешного выполнения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...