Рубрики
Uncategorized

Введение в Cubernetes Health Creats — Vishe Livy (часть I)

Этот пост был первоначально опубликован в моем блоге: https://ambar.dev/kubernetes-livity-probe.html Это … Tagged с Kubernetes, Docker, DevOps, AWS.

Этот пост был первоначально опубликован в моем блоге: 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»