Введение
В Kubernetes пробы (probes) - это диагностические инструменты, используемые для определения того, жив ли контейнер и готов ли он принимать трафик. Существует два типа проб: проба жизнеспособности (liveness probe) и проба готовности (readiness probe). В этом практическом занятии (lab) мы сосредоточимся на ContainerProbe, который представляет собой инструмент для определения момента, когда контейнер готов принимать трафик.
Запустить кластер Minikube
Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube - это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.
Перейдите в рабочую директорию:
Откройте терминал и перейдите в папку проекта по умолчанию:
cd /home/labex/projectЗапустите Minikube:
Запустите Minikube для инициализации кластера Kubernetes:
minikube start- Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
- В зависимости от производительности вашей системы запуск Minikube может занять несколько минут.
Проверьте, что Minikube запущен:
Проверьте статус кластера Minikube:
minikube status- Проверьте, чтобы компоненты, такие как
kubeletиapiserver, были перечислены какRunning(работающие). - Если кластер не запущен, запустите команду
minikube startснова.
- Проверьте, чтобы компоненты, такие как
Если у вас возникли проблемы при запуске Minikube, используйте команду minikube delete для сброса среды при необходимости.
Создать развертывание (Deployment)
Первым шагом является создание развертывания (deployment) в Kubernetes. Мы будем использовать это развертывание для тестирования ContainerProbe.
- Создайте новый файл с именем
deployment.yamlв директории/home/labex/project. - Скопируйте и вставьте следующий код в файл:
apiVersion: apps/v1
kind: Deployment
metadata:
name: containerprobe-deployment
spec:
replicas: 1
selector:
matchLabels:
app: containerprobe
template:
metadata:
labels:
app: containerprobe
spec:
containers:
- name: containerprobe
image: nginx
ports:
- containerPort: 80
Этот код создает развертывание с одним репликой (replica), селектором (selector) с меткой app: containerprobe и контейнером, запускающим образ (image) nginx.
- Примените развертывание к вашему кластеру:
kubectl apply -f deployment.yaml
Добавить пробу жизнеспособности (Liveness Probe)
Следующим шагом является добавление пробы жизнеспособности (liveness probe) в контейнер nginx. Проба жизнеспособности используется для определения, жив ли контейнер. Если проба завершается неудачно, Kubernetes перезапустит контейнер.
- Обновите файл
deployment.yamlв директории/home/labex/projectследующим содержимым:
apiVersion: apps/v1
kind: Deployment
metadata:
name: containerprobe-deployment
spec:
replicas: 1
selector:
matchLabels:
app: containerprobe
template:
metadata:
labels:
app: containerprobe
spec:
containers:
- name: containerprobe
image: nginx
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /
port: 80
Этот код указывает, что проба жизнеспособности должна отправлять HTTP GET-запрос на корневой путь по порту 80.
- Обновите развертывание (deployment):
kubectl apply -f deployment.yaml
Тестирование пробы жизнеспособности (Liveness Probe)
Теперь, когда мы добавили пробу жизнеспособности (liveness probe), мы можем протестировать ее, чтобы убедиться, что она работает правильно.
- Получите имя пода (pod):
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'
Эта команда получает имя пода, созданного развертыванием (deployment).
- Получите статус пробы жизнеспособности:
kubectl describe pod <pod-name>
Замените <pod-name> именем пода из предыдущего шага.
Вы должны увидеть вывод, который включает следующее:
Liveness: http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3
Это указывает на то, что проба жизнеспособности настроена правильно.
Добавить пробу готовности (Readiness Probe)
Следующим шагом является добавление пробы готовности (readiness probe) в контейнер nginx. Проба готовности используется для определения, готов ли контейнер принимать трафик. Если проба завершается неудачно, Kubernetes не будет отправлять трафик в контейнер.
- Добавьте следующий код в определение контейнера в файле
deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: containerprobe-deployment
spec:
replicas: 1
selector:
matchLabels:
app: containerprobe
template:
metadata:
labels:
app: containerprobe
spec:
containers:
- name: containerprobe
image: nginx
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /
port: 80
readinessProbe:
httpGet:
path: /
port: 80
Этот код указывает, что проба готовности должна отправлять HTTP GET-запрос на корневой путь по порту 80.
- Обновите развертывание (deployment):
kubectl apply -f deployment.yaml
Тестирование пробы готовности (Readiness Probe)
Теперь, когда мы добавили пробу готовности (readiness probe), мы можем протестировать ее, чтобы убедиться, что она работает правильно.
- Получите имя пода (pod):
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'
Эта команда получает имя пода, созданного развертыванием (deployment).
- Получите статус пробы готовности:
kubectl describe pod <pod-name>
Замените <pod-name> именем пода из предыдущего шага.
Вы должны увидеть вывод, который включает следующее:
Readiness: http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3
Это указывает на то, что проба готовности настроена правильно.
Резюме
В этом практическом занятии (lab) мы научились использовать ContainerProbe в Kubernetes. Мы создали развертывание (deployment), добавили пробу жизнеспособности (liveness probe), протестировали пробу жизнеспособности, добавили пробу готовности (readiness probe) и протестировали пробу готовности. Используя ContainerProbe, мы можем убедиться, что наши контейнеры готовы принимать трафик и работают правильно.


