Проверки работоспособности: пробы активности и готовности
Настройте пробы активности и готовности, чтобы убедиться, что приложения работоспособны и готовы принимать трафик.
«Проверки работоспособности: пробы активности и готовности» — бесплатный урок Kubernetes Basics на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kubernetes Basics, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kubernetes Basics содержит 4 уроков всего.
Поддержание работоспособности приложений
Как Kubernetes узнаёт, действительно ли работает Ваше приложение? Недостаточно, чтобы контейнер просто был запущен: он должен быть исправен и готов обслуживать трафик.
Kubernetes использует специальные проверки, называемые пробами, для мониторинга Ваших приложений. Эти пробы помогают обеспечить стабильную работу сервиса для пользователей.
Что такое пробы работоспособности?
Проба работоспособности проверяет, продолжает ли Ваше приложение работать и отвечать на запросы. Если проба работоспособности завершается неудачей, Kubernetes считает контейнер неисправным и перезапускает его.
Представьте себе монитор сердцебиения: если сердце останавливается, требуется перезапуск! Это помогает восстановиться после взаимных блокировок или сбоев приложения.
Основы проб работоспособности
Вы можете настроить пробы работоспособности с помощью различных методов:
- HTTP GET: отправляет HTTP-запрос по указанному пути.
- Сокет TCP: проверяет, можно ли открыть TCP-соединение с портом.
- Команда Exec: выполняет команду внутри контейнера.
Для веб-приложений часто используется HTTP GET. Ниже показано, как определить такую пробу в YAML Pod:
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 5Проба работоспособности в действии
Это приложение Python на Flask имитирует неисправное состояние, аварийно завершая работу после двух запросов к /healthz. Проба Kubernetes обнаружит это и перезапустит контейнер.
Сначала сохраните этот код в файле app.py:
from flask import Flask, Response
import os
import time
app = Flask(__name__)
request_count = 0
@app.route('/healthz')
def health_check():
global request_count
request_count += 1
if request_count > 2:
print("Liveness probe failing! Exiting...")
os._exit(1) # Simulate a crash
print(f"Liveness probe successful (count: {request_count})")
return Response("OK", status=200)
@app.route('/')
def home():
return "Hello from the Liveness Probe Demo!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)Запуск пробы работоспособности
Теперь посмотрим, как Kubernetes использует пробу работоспособности. Если развернуть это с помощью следующего YAML, Kubernetes перезапустит Pod, когда проверка работоспособности завершится неудачей:
apiVersion: v1
kind: Pod
metadata:
name: liveness-demo
spec:
containers:
- name: liveness-container
image: python:3.9-slim-buster
command: ["python", "app.py"]
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 1
volumeMounts:
- name: app-volume
mountPath: /app
volumes:
- name: app-volume
configMap:
name: liveness-app-config
# (You'd need a ConfigMap for app.py, omitted for brevity)После развёртывания две проверки пройдут успешно, третья завершится неудачей, и Kubernetes перезапустит контейнер.
Что такое пробы готовности?
Проба готовности проверяет, готово ли Ваше приложение обслуживать трафик. Если проба готовности завершается неудачей, Kubernetes прекращает отправлять трафик в этот Pod, но не перезапускает его.
Это особенно важно во время запуска (например, при ожидании подключения к базе данных) или корректного завершения работы. Подумайте: «Открыт ли магазин для покупателей?»
Основы проб готовности
Пробы готовности настраиваются аналогично пробам работоспособности с использованием HTTP GET, сокета TCP или команд Exec. Основное различие заключается в последствиях:
- Работоспособность: при сбое перезапускает контейнер.
- Готовность: при сбое удаляет Pod из конечных точек сервиса (трафик не направляется).
Ниже показан фрагмент конфигурации пробы готовности:
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 10
periodSeconds: 5Проба готовности в действии
Это приложение Flask имитирует приложение, которому требуется время для инициализации (например, для подключения к базе данных). Оно сообщит о готовности только через 5 секунд.
Сохраните этот код в файле ready_app.py:
from flask import Flask, Response
import time
app = Flask(__name__)
start_time = time.time()
READY_AFTER_SECONDS = 5
@app.route('/ready')
def readiness_check():
if time.time() - start_time > READY_AFTER_SECONDS:
print("Readiness probe successful: App is ready!")
return Response("READY", status=200)
else:
print("Readiness probe failing: App not ready yet...")
return Response("NOT READY", status=503)
@app.route('/')
def home():
return "Hello from the Readiness Probe Demo!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)Запуск проверки готовности
При развёртывании с этим YAML Pod не будет получать трафик в течение первых initialDelaySeconds секунд и времени, необходимого для того, чтобы /ready вернул 200 OK.
apiVersion: v1
kind: Pod
metadata:
name: readiness-demo
spec:
containers:
- name: readiness-container
image: python:3.9-slim-buster
command: ["python", "ready_app.py"]
ports:
- containerPort: 8080
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 10
periodSeconds: 3
volumeMounts:
- name: app-volume
mountPath: /app
volumes:
- name: app-volume
configMap:
name: readiness-app-config
# (You'd need a ConfigMap for ready_app.py, omitted for brevity)Это гарантирует, что трафик будет направляться только к действительно готовым экземплярам.
Проверка работоспособности и проверка готовности
Важно правильно использовать обе проверки:
- Проверка работоспособности: используется, чтобы определить, завершило ли ваше приложение работу с ошибкой или оказалось в состоянии, из которого невозможно восстановиться. Если проверка завершается с ошибкой, Kubernetes перезапускает контейнер.
- Проверка готовности: используется, чтобы определить, готово ли ваше приложение принимать и обрабатывать запросы. Если проверка завершается с ошибкой, Kubernetes перестаёт направлять трафик в Pod.
Эти проверки выполняют разные, но дополняющие друг друга задачи и помогают поддерживать приложения в надёжном состоянии.
Проверьте свои знания
Какие из следующих утверждений о проверках работоспособности и готовности являются TRUE?
Проверки: главное
В этом уроке вы узнали о проверках работоспособности и готовности в Kubernetes. Эти проверки состояния необходимы для поддержания надёжности и доступности ваших приложений:
- Проверки работоспособности обнаруживают неисправные контейнеры и инициируют их перезапуск.
- Проверки готовности определяют, когда Pod готов принимать сетевой трафик.
Эффективное использование этих проверок гарантирует, что ваши приложения будут отзывчивыми и устойчивыми к сбоям.
Часто задаваемые вопросы
Урок «Проверки работоспособности: пробы активности и готовности» бесплатный?
Да — полный текст урока «Проверки работоспособности: пробы активности и готовности» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kubernetes Basics, подпишись на CoddyKit PRO. Курс Kubernetes Basics содержит 4 уроков всего.
Чему я научусь в уроке «Проверки работоспособности: пробы активности и готовности»?
Настройте пробы активности и готовности, чтобы убедиться, что приложения работоспособны и готовы принимать трафик. Ты практикуешь Kubernetes Basics с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Kubernetes Basics?
Предыдущий опыт не требуется. Kubernetes Basics на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Проверки работоспособности: пробы активности и готовности»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Kubernetes Basics?
Да. Каждый урок Kubernetes Basics включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Журналирование с помощью kubectl logs
- Показатели с Prometheus и Grafana
- Проверки работоспособности: пробы активности и готовности
- Распределённая трассировка и события