Команда Kubernetes Run

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

Введение

Команда kubectl run — это простой способ создания пода в Kubernetes. В современных версиях Kubernetes команда kubectl run больше не используется для создания развертываний (Deployments) или заданий (Jobs), поэтому в этой лабораторной работе мы будем использовать kubectl run в сочетании со специализированными командами для этих ресурсов. Эта работа поможет новичкам понять, какую команду следует использовать для каждого типа рабочей нагрузки.

К концу этой лабораторной работы вы научитесь:

  1. Запускать и проверять кластер Minikube.
  2. Создавать под с помощью kubectl run.
  3. Создавать развертывание с несколькими репликами.
  4. Создавать и проверять задание (Job) для пакетной обработки.
  5. Очищать ресурсы для поддержания порядка в кластере.

Запуск кластера 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 для сброса среды.

Изучение команды kubectl run

Команда kubectl run используется для создания и запуска конкретного образа в поде. Она предоставляет множество опций для настройки поведения, окружения и спецификаций пода.

Выполните следующую команду, чтобы просмотреть доступные параметры для kubectl run:

kubectl run -h

Вы увидите следующий вывод:

Create and run a particular image in a pod.

Examples:
## Start a nginx pod
kubectl run nginx --image=nginx

## Start a hazelcast pod and let the container expose port 5701
kubectl run hazelcast --image=hazelcast/hazelcast --port=5701

## Start a hazelcast pod and set environment variables "DNS_DOMAIN=cluster" and "POD_NAMESPACE=default" in the container
kubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"

## Start a hazelcast pod and set labels "app=hazelcast" and "env=prod" in the container
kubectl run hazelcast --image=hazelcast/hazelcast --labels="app=hazelcast,env=prod"

## Dry run; print the corresponding API objects without creating them
kubectl run nginx --image=nginx --dry-run=client

## Start a nginx pod, but overload the spec with a partial set of values parsed from JSON
kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'

## Start a busybox pod and keep it in the foreground, don't restart it if it exits
kubectl run -i -t busybox --image=busybox --restart=Never

## Start the nginx pod using the default command, but use custom arguments (arg1 .. argN) for that command
kubectl run nginx --image=nginx -- <arg1> <arg2> ... <argN>

## Start the nginx pod using a different command and custom arguments
kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>

Создание пода

Под (pod) — это наименьшая развертываемая единица в Kubernetes, представляющая один или несколько контейнеров, работающих вместе. В этом шаге мы создадим под, в котором работает веб-сервер Nginx.

  1. Создайте под:

    Выполните следующую команду, чтобы создать под с именем nginx-pod:

    kubectl run nginx-pod --image=nginx
    
    • Опция --image указывает образ контейнера, который нужно использовать. Здесь мы используем официальный образ Nginx.
  2. Проверьте под:

    Убедитесь, что под запущен:

    kubectl get pods
    
    • Найдите nginx-pod в выводе.
    • Столбец STATUS должен показывать Running, когда под будет готов.

Если статус пода отображается как Pending, возможно, Kubernetes все еще загружает образ контейнера. Подождите немного и выполните kubectl get pods снова.

Создание развертывания и масштабирование реплик

Развертывание (deployment) управляет набором подов и гарантирует, что они работают в соответствии с заданными требованиями. Это полезно для масштабирования и обновления приложений.

  1. Создайте развертывание:

    Выполните следующую команду, чтобы создать развертывание с именем nginx-deployment:

    kubectl create deployment nginx-deployment --image=nginx
    
    • Опция --image указывает образ контейнера.
  2. Масштабируйте развертывание до 3 реплик:

    Поскольку флаг --replicas устарел, мы будем масштабировать развертывание с помощью команды kubectl scale.

    Используйте команду kubectl scale для изменения количества реплик:

    kubectl scale deployment nginx-deployment --replicas=3
    
    • Это гарантирует, что в рамках развертывания будут работать три пода.
  3. Проверьте развертывание и его реплики:

    Проверьте состояние развертывания и подов:

    kubectl get deployments
    kubectl get pods
    
    • Убедитесь, что в столбце READY для развертывания указано 3 реплики.
    • Проверьте, что в выводе kubectl get pods отображаются три пода.

Если под не находится в состоянии Running, это может быть связано с нехваткой ресурсов кластера. Проверьте события пода с помощью:

kubectl describe pod <pod-name>

Создание задания (Job)

В этом шаге вы создадите задание (Job) в Kubernetes для выполнения короткой пакетной задачи. Задание отслеживает успешное завершение, поэтому это подходящий ресурс, когда команда должна выполниться и завершиться, а не работать постоянно, как обычный под.

  1. Создайте задание

Выполните следующую команду, чтобы создать задание с именем busybox-job:

kubectl create job busybox-job --image=busybox -- echo "Hello from Kubernetes"
  • kubectl create job создает ресурс Job, а не отдельный под.
  • Команда echo определяет задачу, которую выполнит задание.
  1. Проверьте статус задания

Выполните следующую команду, чтобы проверить задание:

kubectl get jobs

Ожидаемый вывод:

NAME          COMPLETIONS   DURATION   AGE
busybox-job   1/1           5s         10s
  • COMPLETIONS: Показывает, что задание успешно выполнилось один раз (1/1).
  • Если задание еще не появилось в списке, подождите несколько секунд и выполните kubectl get jobs снова.
  1. Проверьте под задания

Поскольку задание выполняется внутри пода, используйте следующую команду для проверки пода:

kubectl get pods

Ожидаемый вывод:

NAME                      READY   STATUS      RESTARTS   AGE
busybox-job-abcde         0/1     Completed   0          30s
  • Имя пода содержит сгенерированный суффикс, так как он принадлежит заданию.
  • Поле STATUS должно отображать Completed, что означает успешное завершение пода задания.
  1. Проверьте вывод задания

Изучите логи задания, чтобы проверить результат:

kubectl logs job/busybox-job

Ожидаемый вывод:

Hello from Kubernetes

Это подтверждает, что задание выполнилось успешно.

Очистка

Чтобы поддерживать чистоту в кластере, удалите ресурсы, созданные во время лабораторной работы.

  1. Удалите ресурсы:

    Выполните следующие команды:

    kubectl delete pod nginx-pod
    kubectl delete deployment nginx-deployment
    kubectl delete job busybox-job
    
  2. Проверьте очистку:

    Убедитесь, что ресурсов не осталось:

    kubectl get pods
    kubectl get deployments
    
    • Убедитесь, что в выводе отсутствуют созданные вами ресурсы.

Резюме

В этой лабораторной работе вы научились:

  1. Запускать и проверять кластер Minikube.
  2. Использовать kubectl run для создания пода и применять специализированные команды для создания развертываний (Deployments) и заданий (Jobs).
  3. Очищать ресурсы для поддержания порядка в кластере.

Вы также увидели, как Kubernetes использует разные команды для разных типов рабочих нагрузок. Практикуя эти шаги, вы заложите прочный фундамент для более сложных рабочих процессов в Kubernetes.