Введение
В кластере Kubernetes узлы могут находиться в различных состояниях, таких как "готов" (ready) или "не готов" (not ready). Команды cordon и uncordon используются для управления планированием подов на определенном узле. Команда cordon помечает узел как "неподходящий для планирования" (unschedulable), предотвращая запуск новых подов на этом узле, в то время как команда uncordon помечает узел как "подходящий для планирования" (schedulable) снова, разрешая запуск новых подов на этом узле. В этом лабораторном занятии мы рассмотрим, как использовать эти команды для управления планированием подов на узлах в кластере Kubernetes.
Запустите кластер 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 для сброса среды, если это необходимо.
Блокировка узла (Cordoning a Node)
На этом шаге мы будем использовать команду cordon, чтобы пометить узел как "неподходящий для планирования" (unschedulable), предотвращая запуск новых подов на этом узле. Вот шаги:
- Выведите список узлов в кластере с помощью следующей команды:
kubectl get nodes
- Блокируйте узел с помощью следующей команды:
kubectl cordon minikube
- Проверьте, что узел был заблокирован, проверив поле
SchedulingDisabledв статусе узла с помощью следующей команды:
kubectl get node | grep SchedulingDisabled
Разблокировка узла (Uncordoning a Node)
На этом шаге мы будем использовать команду uncordon, чтобы снова пометить узел как "подходящий для планирования" (schedulable), разрешив запуск новых подов на этом узле. Вот шаги:
- Разблокируйте узел с помощью следующей команды:
kubectl uncordon minikube
- Проверьте, что узел был разблокирован, проверив поле
SchedulingDisabledв статусе узла с помощью следующей команды:
kubectl get node | grep SchedulingDisabled
Блокировка и разблокировка узлов с подами
На этом шаге мы будем моделировать сценарий, когда узел с работающими на нем подами необходимо заблокировать (cordon) и разблокировать (uncordon). Вот шаги:
- Выполните следующую команду, чтобы перейти в директорию
/home/labex/project/:
cd /home/labex/project/
- Создайте развертывание (deployment) с именем "deploy.yaml" с несколькими экземплярами, используя следующий YAML - файл в директории
/home/labex/project/:
## deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16
ports:
- containerPort: 80
- Заблокируйте узел с помощью следующей команды:
kubectl cordon minikube
- Примените YAML - файл с помощью следующей команды:
kubectl apply -f deploy.yaml
- Выведите список подов, запущенных на узлах, с помощью следующей команды:
kubectl get pods -o wide
Проверьте, был ли под правильно запланирован и запущен.
- Разблокируйте узел с помощью следующей команды:
kubectl uncordon minikube
- Проверьте статус подов, запущенных на узле, чтобы убедиться, что они были перезапланированы на разблокированный узел, с помощью следующей команды:
kubectl get pods -o wide
Использование меток (labels) для блокировки и разблокировки узлов
На этом шаге мы будем использовать метки (labels), чтобы блокировать и разблокировать узлы на основе определенных критериев. Вот шаги:
- Присвойте метку узлам в кластере с помощью следующей команды:
kubectl label nodes minikube org=labex
- Заблокируйте узлы, имеющие указанную метку, с помощью следующей команды:
kubectl cordon -l org=labex
- Проверьте, что узлы были заблокированы, проверив поле
SchedulingDisabledв статусе узлов с помощью следующей команды:
kubectl get node -l org=labex | grep SchedulingDisabled
- Разблокируйте узлы, имеющие указанную метку, с помощью следующей команды:
kubectl uncordon -l org=labex
- Проверьте, что узлы были разблокированы, проверив поле
SchedulingDisabledв статусе узлов с помощью следующей команды:
kubectl get node -l org=labex | grep SchedulingDisabled
Резюме
В этом практическом занятии (lab) мы изучили, как использовать команды cordon и uncordon в Kubernetes для управления планированием подов на узлах. Мы узнали, как блокировать и разблокировать узлы, даже если на них работают поды, а также как использовать метки (labels), чтобы по определенным критериям выборочно блокировать и разблокировать узлы. Эти команды полезны для управления доступностью и устойчивостью подов в кластере Kubernetes.


