Containerprobe в Kubernetes

KubernetesKubernetesBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") subgraph Lab Skills kubernetes/initialization -.-> lab-12263{{"Containerprobe в Kubernetes"}} kubernetes/get -.-> lab-12263{{"Containerprobe в Kubernetes"}} kubernetes/create -.-> lab-12263{{"Containerprobe в Kubernetes"}} kubernetes/apply -.-> lab-12263{{"Containerprobe в Kubernetes"}} kubernetes/describe -.-> lab-12263{{"Containerprobe в Kubernetes"}} kubernetes/exec -.-> lab-12263{{"Containerprobe в Kubernetes"}} kubernetes/logs -.-> lab-12263{{"Containerprobe в Kubernetes"}} end

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