Введение
Команда kubectl run — это простой способ создания пода в Kubernetes. В современных версиях Kubernetes команда kubectl run больше не используется для создания развертываний (Deployments) или заданий (Jobs), поэтому в этой лабораторной работе мы будем использовать kubectl run в сочетании со специализированными командами для этих ресурсов. Эта работа поможет новичкам понять, какую команду следует использовать для каждого типа рабочей нагрузки.
К концу этой лабораторной работы вы научитесь:
- Запускать и проверять кластер Minikube.
- Создавать под с помощью
kubectl run. - Создавать развертывание с несколькими репликами.
- Создавать и проверять задание (Job) для пакетной обработки.
- Очищать ресурсы для поддержания порядка в кластере.
Запуск кластера 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 для сброса среды.
Изучение команды 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.
Создайте под:
Выполните следующую команду, чтобы создать под с именем
nginx-pod:kubectl run nginx-pod --image=nginx- Опция
--imageуказывает образ контейнера, который нужно использовать. Здесь мы используем официальный образ Nginx.
- Опция
Проверьте под:
Убедитесь, что под запущен:
kubectl get pods- Найдите
nginx-podв выводе. - Столбец
STATUSдолжен показыватьRunning, когда под будет готов.
- Найдите
Если статус пода отображается как Pending, возможно, Kubernetes все еще загружает образ контейнера. Подождите немного и выполните kubectl get pods снова.
Создание развертывания и масштабирование реплик
Развертывание (deployment) управляет набором подов и гарантирует, что они работают в соответствии с заданными требованиями. Это полезно для масштабирования и обновления приложений.
Создайте развертывание:
Выполните следующую команду, чтобы создать развертывание с именем
nginx-deployment:kubectl create deployment nginx-deployment --image=nginx- Опция
--imageуказывает образ контейнера.
- Опция
Масштабируйте развертывание до 3 реплик:
Поскольку флаг
--replicasустарел, мы будем масштабировать развертывание с помощью командыkubectl scale.Используйте команду
kubectl scaleдля изменения количества реплик:kubectl scale deployment nginx-deployment --replicas=3- Это гарантирует, что в рамках развертывания будут работать три пода.
Проверьте развертывание и его реплики:
Проверьте состояние развертывания и подов:
kubectl get deployments kubectl get pods- Убедитесь, что в столбце
READYдля развертывания указано 3 реплики. - Проверьте, что в выводе
kubectl get podsотображаются три пода.
- Убедитесь, что в столбце
Если под не находится в состоянии Running, это может быть связано с нехваткой ресурсов кластера. Проверьте события пода с помощью:
kubectl describe pod <pod-name>
Создание задания (Job)
В этом шаге вы создадите задание (Job) в Kubernetes для выполнения короткой пакетной задачи. Задание отслеживает успешное завершение, поэтому это подходящий ресурс, когда команда должна выполниться и завершиться, а не работать постоянно, как обычный под.
- Создайте задание
Выполните следующую команду, чтобы создать задание с именем busybox-job:
kubectl create job busybox-job --image=busybox -- echo "Hello from Kubernetes"
kubectl create jobсоздает ресурс Job, а не отдельный под.- Команда
echoопределяет задачу, которую выполнит задание.
- Проверьте статус задания
Выполните следующую команду, чтобы проверить задание:
kubectl get jobs
Ожидаемый вывод:
NAME COMPLETIONS DURATION AGE
busybox-job 1/1 5s 10s
COMPLETIONS: Показывает, что задание успешно выполнилось один раз (1/1).- Если задание еще не появилось в списке, подождите несколько секунд и выполните
kubectl get jobsснова.
- Проверьте под задания
Поскольку задание выполняется внутри пода, используйте следующую команду для проверки пода:
kubectl get pods
Ожидаемый вывод:
NAME READY STATUS RESTARTS AGE
busybox-job-abcde 0/1 Completed 0 30s
- Имя пода содержит сгенерированный суффикс, так как он принадлежит заданию.
- Поле
STATUSдолжно отображатьCompleted, что означает успешное завершение пода задания.
- Проверьте вывод задания
Изучите логи задания, чтобы проверить результат:
kubectl logs job/busybox-job
Ожидаемый вывод:
Hello from Kubernetes
Это подтверждает, что задание выполнилось успешно.
Очистка
Чтобы поддерживать чистоту в кластере, удалите ресурсы, созданные во время лабораторной работы.
Удалите ресурсы:
Выполните следующие команды:
kubectl delete pod nginx-pod kubectl delete deployment nginx-deployment kubectl delete job busybox-jobПроверьте очистку:
Убедитесь, что ресурсов не осталось:
kubectl get pods kubectl get deployments- Убедитесь, что в выводе отсутствуют созданные вами ресурсы.
Резюме
В этой лабораторной работе вы научились:
- Запускать и проверять кластер Minikube.
- Использовать
kubectl runдля создания пода и применять специализированные команды для создания развертываний (Deployments) и заданий (Jobs). - Очищать ресурсы для поддержания порядка в кластере.
Вы также увидели, как Kubernetes использует разные команды для разных типов рабочих нагрузок. Практикуя эти шаги, вы заложите прочный фундамент для более сложных рабочих процессов в Kubernetes.


