Зонды Kubernetes (серия 2 частей)
Kubernetes нарушил традиционные методы развертывания и стал очень популярным. Хотя это отличная платформа для развертывания, она также вызывает сложность и проблемы. Kubernetes управляет узлами и рабочими нагрузками, и одной из замечательных особенностей этой платформы развертывания контейнер является самовосстанавливающимся. Для самовосстановления на уровне контейнера нам нужны проверки здоровья, называемые зондами в Kubernetes, если мы не будем зависеть от кодов выхода.
LICIONES -датчики проверьте, является ли стручок здоровым, и если стручок считается нездоровым, это запустит перезапуск; Это действие отличается от действия Прессы готовности, которые я обсуждал в своем предыдущем посте Анкет
Давайте посмотрим на компоненты зондов и погрузимся в то, как настроить и устранять устранение неполадок.
Датчики
Зонды — это проверки здоровья, которые выполняются Кубелетом.
Все зонды имеют пять параметров, которые имеют решающее значение для настройки.
- initialdelayseconds : Время ждать после начала контейнера. (по умолчанию: 0)
- Периодесные секунды : Частота выполнения зонда (по умолчанию: 10)
- ВЕСТИКАКАКА : Время ждать ответа (по умолчанию: 1)
- Успех: Количество успешных выполнений зондов для обозначения здорового контейнера (по умолчанию: 1) FASHURETHRESHOLD
- : Количество неудачных выполнений зондов, чтобы отметить нездоровый контейнер (по умолчанию: 3)
Вам необходимо проанализировать поведение вашего приложения, чтобы установить эти параметры зонда.
Есть три типа зондов:
Exec rest
Exec grys выполняет команду внутри контейнера без оболочки. Статус выхода команды определяет здоровое состояние — ноль является здоровым; Все остальное нездоровое.
livenessProbe: initialDelaySeconds: 1 periodSeconds: 5 timeoutSeconds: 1 successThreshold: 1 failureThreshold: 1 exec: command: - cat - /etc/nginx/nginx.conf
TCP -зонд
Датчик TCP проверяет, может ли подключение TCP подключение на указанном порте. Открытый порт считается успешным, закрытый порт или сброс считается неудачным.
livenessProbe: initialDelaySeconds: 1 periodSeconds: 5 timeoutSeconds: 1 successThreshold: 1 failureThreshold: 1 tcpSocket: host: port: 80
Http -зонд
HTTP -зонд делает вызов HTTP, и код состояния определяет здоровое состояние между включением 200 и исключением 400, считается успешным. Любой код статуса, кроме упомянутого, считается нездоровым.
Вот HTTP -датчики для настройки дополнительных параметров.
- хост : IP -адрес к подключению (по умолчанию: IP POD)
- схема : HTTP -схема (по умолчанию: http)
- Путь : Http path, чтобы вызвать
- httpheaders : Любые пользовательские заголовки, которые вы хотите отправить.
- Порт : Порт соединения.
Совет: Если требуется заголовок хоста, используйте Httphader.
Пример датчика HTTP.
livenessProbe: initialDelaySeconds: 1 periodSeconds: 2 timeoutSeconds: 1 successThreshold: 1 failureThreshold: 1 httpGet: host: scheme: HTTP path: / httpHeaders: - name: Host value: myapplication1.com port: 80 initialDelaySeconds: 5 periodSeconds: 5
Датчики Lifine в Kubernetes
Kubelet выполняет датчики жизни, чтобы увидеть, нужен ли POD перезапуск. Например, допустим, у нас есть микросервис, записанный в Go, и у этого микросервиса есть некоторые ошибки в какой -то части кода, что вызывает замораживание во время выполнения. Чтобы избежать удара по ошибке, мы можем настроить датчик с Lifine, чтобы определить, находится ли микросервис в замороженном состоянии. Таким образом, контейнер для микросервиса будет перезапущен и будет приведен в нетронутое состояние.
Если ваше приложение изящно выходит при столкновении с такой проблемой, вам не обязательно нужно настроить зонды Lifine, но все равно могут быть ошибки, о которых вы не знаете. POD будет перезапущен в соответствии с политикой настройки/повторного запуска по умолчанию.
Общие ловушки для зондов с жизнеобеспечения
Зонды определяют только здоровье ответами зонда, и они не знают о динамике системы нашего микросервиса/приложения. Если по какой -либо причине ответы зонда откладываются на более чем Периодесные секунды время FASHURETHRESHOLD Микросервис/применение будет определяться нездоровым, а перезапуск стручка будет запускаться. Следовательно, важно настроить параметры на поведение приложения.
Каскадные неудачи
Похоже на поиск датчиков , Датчики Lifine также могут создать каскадный сбой, если вы неправильно настроите его. Если конечная точка здоровья имеет внешние зависимости или любое другое состояние, которое может предотвратить предоставление ответа, она может создать каскадный сбой; Следовательно, имеет первостепенное значение для настройки зонда с учетом этого поведения.
Крушение
Давайте предположим, что наше приложение должно время от времени читать большое количество данных в кеш; Независимость в это время также может вызвать ложное положительное, потому что зонд может потерпеть неудачу. В этом случае сбой зонда Lifine будет перезагрузить контейнер, и, скорее всего, он вступит в непрерывный цикл перезапусков. В таком сценарии зонд готовности может быть более подходящим для использования, POD будет удален только от сервиса для выполнения задач обслуживания, и как только он будет готов принять трафик, он может начать реагировать на зонды.
Конечные точки Lifence на нашем микросервисе. — эти зонды будут нажимать — должны проверить абсолютные минимальные требования, которые показывают, что приложение работает. Таким образом, проверки долгов, проверяются, и POD не будет перезапущен, и мы гарантируем, что трафик сервисного трафика как это должно.
Пример: пример развертывания NGINX
Мы будем развернуть NGINX в качестве приложения. Ниже приведена конфигурация развертывания и сервиса.
apiVersion: apps/v1 kind: Deployment metadata: name: k8s-probes labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 livenessProbe: initialDelaySeconds: 1 periodSeconds: 2 timeoutSeconds: 1 successThreshold: 1 failureThreshold: 1 httpGet: host: scheme: HTTP path: / httpHeaders: - name: Host value: myapplication1.com port: 80
Напишите эту конфигурацию в файл с именем k8s-probes-deployment.yaml и примените его с Kubectl Apply -f K8S-Probes-Deployment.yaml
командование
apiVersion: v1 kind: Service metadata: labels: app: nginx name: nginx namespace: default spec: ports: - name: nginx-http-port port: 80 selector: app: nginx sessionAffinity: None type: NodePort
Кроме того, напишите эту конфигурацию в файл с именем k8s-probes-svc.yaml и примените ее с помощью этой команды:
kubectl apply -f k8s-probes-svc.yaml
Устранение неполадок датчиков
Нет конкретной конечной точки для датчика Livine, и мы должны использовать kubectl опишите стручки
Команда, чтобы увидеть события и текущее состояние.
kubectl get pods
Здесь мы видим, что наш стручок находится в состоянии бега, и он готов принять трафик.
NAME READY STATUS RESTARTS AGE k8s-probes-7d979f58c-vd2rv 1/1 Running 0 6s
Давайте проверим примененную конфигурацию.
kubectl describe pods k8s-probes-7d979f58c-vd2rv | grep Liveness
Здесь мы можем увидеть параметры, которые мы настроили.
Liveness: http-get http://:80/ delay=5s timeout=1s period=5s #success=1 #failure=1
Давайте посмотрим на события:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 45s default-scheduler Successfully assigned default/k8s-probes-7d979f58c-vd2rv to k8s-probes Normal Pulling 44s kubelet Pulling image "nginx" Normal Pulled 43s kubelet Successfully pulled image "nginx" in 1.117208685s Normal Created 43s kubelet Created container nginx Normal Started 43s kubelet Started container nginx
Как видите, нет никаких признаков неудачи и успеха; Для условий успеха не будет записано события.
Теперь давайте изменим livineprobe.httpget.path на «/do-not-encists» и посмотрим на статус капсута.
kubectl get pods
После изменения пути зонды Lifence потерпят неудачу, а контейнер будет перезапущен.
NAME READY STATUS RESTARTS AGE k8s-probes-595bcfdf57-428jt 1/1 Running 4 74s
Мы видим, что контейнер был перезапущен четыре раза.
Давайте посмотрим на события.
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 53s default-scheduler Successfully assigned default/k8s-probes-595bcfdf57-428jt to k8s-probes Normal Pulled 50s kubelet Successfully pulled image "nginx" in 1.078926208s Normal Pulled 42s kubelet Successfully pulled image "nginx" in 978.826238ms Normal Pulled 32s kubelet Successfully pulled image "nginx" in 971.627126ms Normal Pulling 23s (x4 over 51s) kubelet Pulling image "nginx" Normal Pulled 22s kubelet Successfully pulled image "nginx" in 985.155098ms Normal Created 22s (x4 over 50s) kubelet Created container nginx Normal Started 22s (x4 over 50s) kubelet Started container nginx Warning Unhealthy 13s (x4 over 43s) kubelet Liveness probe failed: HTTP probe failed with statuscode: 404 Normal Killing 13s (x4 over 43s) kubelet Container nginx failed liveness probe, will be restarted Warning BackOff 13s kubelet Back-off restarting failed container
Как вы можете видеть выше, «Не удалось датчик Livensy: http -зонд не удался с кодом состояния: 404», указывает на неудачу зонда с кодом HTTP 404; Код состояния также поможет в устранении неполадок. Сразу после этого Kubelet сообщает нам, что он перезагрузит контейнер.
Вывод
Kubernetes Lifine Probes — это спасатели, когда наше приложение находится в неопределенном состоянии; Они возвращают приложение в нетронутое условие, перезапустив контейнер. Тем не менее, очень важно, чтобы их нужно настроить правильно. Конечно, нет единого правильного пути; Все зависит от вашего приложения и от того, как вы хотите, чтобы Kubernetes действовал в каждом конкретном сценарии неудачи. Установите значения соответственно и проверьте значения с помощью сценариев живого случая.
Дальнейшее чтение
- Kubernetes Startup Probes — Примеры и общие ловушки
- Kubernetes готовность зондов — примеры и общие ловушки
- Kubernetes Core Dorbe документация
- Настройка LICE -LICEE, готовность и запуск
- Kubernetes Container Predings Документация
- Документация на жизненный цикл контейнеров
Фотография Марио Карузо на Неспособный
Зонды Kubernetes (серия 2 частей)
Оригинал: «https://dev.to/loft/kubernetes-liveness-probes-examples-common-pitfalls-4mll»