Команда kubectl run в Kubernetes

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

Введение

Команда kubectl run является одним из самых простых и универсальных способов создания ресурсов в Kubernetes. Она позволяет быстро развертывать контейнеры, создавать задания (jobs) для пакетной обработки или настраивать развертывания (deployments) для управления несколькими репликами приложения. Этот практикум (lab) разработан для того, чтобы помочь начинающим понять основы команды kubectl run и научиться эффективно ее использовать.

По завершении этого практикума вы научитесь:

  1. Запускать и проверять кластер Minikube.
  2. Создавать под (pod) с помощью команды kubectl run.
  3. Создавать развертывание (deployment) с несколькими репликами.
  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 используется для создания и запуска определенного образа в поде (pod). Она предоставляет множество параметров для настройки поведения, среды и характеристик пода.

Запустите следующую команду, чтобы просмотреть доступные параметры для 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)

Под (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) и масштабирование реплик

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

  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) используется для запуска задач, которые должны завершиться успешно. Например, пакетные задания или задачи обработки данных. Мы будем использовать команду kubectl run для создания задания и проверки его выполнения.

  1. Создание задания

Запустите следующую команду для создания задания с именем busybox-job:

kubectl run busybox-job --image=busybox --restart=OnFailure -- echo "Hello from Kubernetes"
  • Флаг --restart=OnFailure указывает, что это задание.
  • Команда echo определяет задачу, которую будет выполнять задание.
  1. Проверка статуса задания

Запустите следующую команду для проверки задания:

kubectl get jobs

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

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

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

kubectl get pods

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

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

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

kubectl logs busybox-job

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

Hello from Kubernetes

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

Очистка

Для того чтобы сохранить чистоту вашего кластера, удалите ресурсы, созданные вами в рамках лабораторной работы.

  1. Удаление ресурсов:

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

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

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

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

Резюме

В рамках данной лабораторной работы вы научились:

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

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