Введение

В Kubernetes пробы (probes) - это диагностические инструменты, используемые для определения того, жив ли контейнер и готов ли он принимать трафик. Существует два типа проб: проба жизнеспособности (liveness probe) и проба готовности (readiness probe). В этом практическом занятии (lab) мы сосредоточимся на ContainerProbe, который представляет собой инструмент для определения момента, когда контейнер готов принимать трафик.

Запустить кластер Minikube

Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube - это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.

  1. Перейдите в рабочую директорию:

    Откройте терминал и перейдите в папку проекта по умолчанию:

    cd /home/labex/project
    
  2. Запустите Minikube:

    Запустите Minikube для инициализации кластера Kubernetes:

    minikube start
    
    • Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
    • В зависимости от производительности вашей системы запуск Minikube может занять несколько минут.
  3. Проверьте, что Minikube запущен:

    Проверьте статус кластера Minikube:

    minikube status
    
    • Проверьте, чтобы компоненты, такие как kubelet и apiserver, были перечислены как Running (работающие).
    • Если кластер не запущен, запустите команду minikube start снова.

Если у вас возникли проблемы при запуске Minikube, используйте команду minikube delete для сброса среды при необходимости.

Создать развертывание (Deployment)

Первым шагом является создание развертывания (deployment) в Kubernetes. Мы будем использовать это развертывание для тестирования ContainerProbe.

  1. Создайте новый файл с именем deployment.yaml в директории /home/labex/project.
  2. Скопируйте и вставьте следующий код в файл:
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.

  1. Примените развертывание к вашему кластеру:
kubectl apply -f deployment.yaml

Добавить пробу жизнеспособности (Liveness Probe)

Следующим шагом является добавление пробы жизнеспособности (liveness probe) в контейнер nginx. Проба жизнеспособности используется для определения, жив ли контейнер. Если проба завершается неудачно, Kubernetes перезапустит контейнер.

  1. Обновите файл 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.

  1. Обновите развертывание (deployment):
kubectl apply -f deployment.yaml

Тестирование пробы жизнеспособности (Liveness Probe)

Теперь, когда мы добавили пробу жизнеспособности (liveness probe), мы можем протестировать ее, чтобы убедиться, что она работает правильно.

  1. Получите имя пода (pod):
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'

Эта команда получает имя пода, созданного развертыванием (deployment).

  1. Получите статус пробы жизнеспособности:
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 не будет отправлять трафик в контейнер.

  1. Добавьте следующий код в определение контейнера в файле 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.

  1. Обновите развертывание (deployment):
kubectl apply -f deployment.yaml

Тестирование пробы готовности (Readiness Probe)

Теперь, когда мы добавили пробу готовности (readiness probe), мы можем протестировать ее, чтобы убедиться, что она работает правильно.

  1. Получите имя пода (pod):
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'

Эта команда получает имя пода, созданного развертыванием (deployment).

  1. Получите статус пробы готовности:
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, мы можем убедиться, что наши контейнеры готовы принимать трафик и работают правильно.