Этот пост был первоначально опубликован в моем блоге: https://ambar.dev/kubernetes-livity-probe.html.
Это было не очень давно, когда мы развернули отдельные услуги на каждой виртуальной машине. Этот процесс требует инженера, отвечающего за процесс развертывания, чтобы быть в курсе всех машин, где каждая служба была развернута. Конечно, люди построили отличные решения вокруг этой модели развертывания, такую как метка их машин EC2 со специальными именами и использованием инструментов автоматизации, таких как Rundeck, Jenkins и т. Д., Чтобы автоматизировать процесс развертывания. Хотя этот процесс в значительной степени созрел в течение нескольких лет, у него все еще были свои недостатки, такие как — Случайные сбои приложений, неэффективные методы развертывания, плохая устойчивость к сбоям, ненадлежащим использованием ресурсов и плохие практики вокруг секретной и конфигурации Отказ
Рост докера и кубера
Чтобы решить вышеупомянутые проблемы, люди начали строить решения вокруг контейнеров, таких как Docker и Kubernetes, которые не только решили вышеупомянутые проблемы, но и предоставили другие преимущества. Одно из основных преимуществ использования платформы, как Кубернаны Это дает самовосстановление Возможности для вашего приложения. Согласно документации Kubernetes, самовосстановление можно определить как:
Kubernetes перезагружает контейнеры, которые не удаются, заменяет контейнеры, убивает контейнеры, которые не реагируют на ваш пользовательский чек для здоровья, и не рекламирует их клиентам, пока они не будут готовы служить.
Что это в основном означает, что ваше приложение по какой-то причине входит в состояние, в котором он не может выполнить желаемую функцию, Kubernetes попытается заменить экземпляр сбоя с новым, пока он не получится. Ну, как Kubernetes знает, что POD ( POD — это основное исполнительное приложение kubernetes Application ) не в здоровом состоянии, или на данный момент готов справиться с любой дополнительной рабочей нагрузкой? Кубернаны решают эту проблему с помощью Проверки здоровья Отказ Kubernetes имеет 2 типа здоровья, которые он использует для определения здоровья бегущего POD — пробковый зонд и готовность к готовности. В этой первой части мы посмотрим на то, как работает зонд Лейтивности и как мы можем использовать его, чтобы сохранить наши приложения здоровыми.
Тесизм зонд
Разработчики и инженеры часто делают ошибки. Иногда эти ошибки не попадают в нашу ночную или постановку и могут проливаться на производство. Зачастую эти ошибки приводят к приложениям, которые застряли в сложных ситуациях, и, следовательно, не могут выполнять свои назначенные операции как обычно. Иногда эти угловые случаи могут привести к сбою приложения во время наиболее неожиданных обстоятельств, когда инженеру невозможно взглянуть и исправить его.
Некоторые угловые случаи могут включать следующее:
- Приложение не отвечает из-за тупика
- NULL Указанные исключения, вызывающие приложение к сбою
- Недостаточно памяти (OOM) ошибки, вызывающие приложение к сбою
Часто приложения, застрявшие в этих штатах, нужен перезапуск, чтобы снова начать функционировать правильно Отказ Кублет использует зонды живота Чтобы проверить, будет ли приложение вжисно и ведет себя правильно, чтобы знать, когда перезапустить контейнер. Давайте посмотрим на пример, чтобы посмотреть, какие параметры участвуют в зонде жизни.
apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec spec: containers: - name: liveness image: k8s.gcr.io/busybox args: - /bin/sh - -c - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5
Если вы посмотрите на ЛИЦИВНОЕ ПРОБРАЖА
Раздел Ямла, вы можете увидеть, что Кублет Выполняет кот
Операция на /TMP/Guice
файл. Если файл присутствует, и операция CAT успешна, команда возвращается с Статус выхода 0 И кублет считает контейнер в здоровом состоянии. С другой стороны, если команда возвращается с Не нулевой статус выхода Кублет убивает контейнер и перезапускает его.
INationalDelayseconds
Параметр говорит Кублет Что он должен ждать 5 секунд, прежде чем выполнить первую проверку лжи. Это гарантирует, что контейнер не считается в сбое, когда он загружается. После начальной задержки Кублет Выполняет проголосовую вещественность каждые 5 секунд, как определено Периоды
поле.
Когда контейнер запускается, он выполняет команду Прикосновение/TMP/здоровый; Спать 30; RM -RF/TMP/здоровый; Спать 600
Это можно разделить на следующие части, которые выполняются в упомянутом порядке:
- Создайте файл
/TMP/здоровый
- Пойду спать на 30 лет
- Удалить более ранний созданный файл
/TMP/здоровый
- Пойду спать на 600
После файла /TMP/Guice
Удален, зонд Lives начнет не удавать, и зонд Lives начнет возвращать код ошибки обратно в Кублет Отказ Об выявлении неудачи, Кублет убьет существующий контейнер и замените его новым. Кублет Продолжат делать это, если проживание LIVE не получится. Вы можете запустить команду Kubectl Опишите Po Life-Exec
Чтобы просмотреть события стручка.
Как вы можете видеть, когда Кублет Нашел POD, чтобы быть нездоровым 3 раз подряд раз в течение 14 секунд, он отметил стручок как нездоровый и пошел дальше, чтобы перезапустить его. Помимо универсальных команд, зонд Lives также может быть определен по TCP
и Http
. Конечные точки, которые особенно полезны, если вы разрабатываете веб-приложения.
TCP LIVE SHEBE
apiVersion: v1 kind: Pod metadata: name: goproxy labels: app: goproxy spec: containers: - name: goproxy image: k8s.gcr.io/goproxy:0.1 ports: - containerPort: 8080 livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 15 periodSeconds: 20
Этот вид зонда живота в основном проверяет порт. Если вы хотите проверить, является ли конкретный порт в вашем веб-приложении отзывчиво или нет, это путь.
HTTP LIVE VOBE.
apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-http spec: containers: - name: liveness image: k8s.gcr.io/liveness args: - /server livenessProbe: httpGet: path: /healthz port: 8080 httpHeaders: - name: Custom-Header value: Awesome initialDelaySeconds: 3 periodSeconds: 3
Для зонда HTTP Lives Kublet выбирает конечную точку контейнера, как определено путь
и порт
Параметры в ямле. Если конечная точка возвращает код состояния успеха, контейнер считается здоровым.
Любой код, превышающий или равно 200 и менее 400, указывает на успех. Любой другой код указывает сбой
Заключение
В этом посте мы увидели, какие были проблемы с традиционным подходом к развертыванию и мониторингу приложений, каковы решения, которые предусматривают, что Docker и Kubernetes обеспечивают обращение с проблемами, и о том, как зонд Lives помогает решить эти проблемы. В следующем посте мы посмотрим на другой вид Cubernetes Health Check — готовность зонда. Оставайся здоровым и оставаться настроенными.
Счастливое кодирование! Ваше здоровье:)
Оригинал: «https://dev.to/_notanengineer/an-introduction-to-kubernetes-health-checks-liveness-probe-part-i-2elj»