Команды cordon и uncordon в Kubernetes

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

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

Введение

В кластере Kubernetes узлы могут находиться в различных состояниях, таких как "готов" (ready) или "не готов" (not ready). Команды cordon и uncordon используются для управления планированием подов на определенном узле. Команда cordon помечает узел как "неподходящий для планирования" (unschedulable), предотвращая запуск новых подов на этом узле, в то время как команда uncordon помечает узел как "подходящий для планирования" (schedulable) снова, разрешая запуск новых подов на этом узле. В этом лабораторном занятии мы рассмотрим, как использовать эти команды для управления планированием подов на узлах в кластере Kubernetes.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/cordon("Cordon") kubernetes/BasicCommandsGroup -.-> kubernetes/uncordon("Uncordon") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/label("Label") subgraph Lab Skills kubernetes/initialization -.-> lab-9664{{"Команды cordon и uncordon в Kubernetes"}} kubernetes/get -.-> lab-9664{{"Команды cordon и uncordon в Kubernetes"}} kubernetes/cordon -.-> lab-9664{{"Команды cordon и uncordon в Kubernetes"}} kubernetes/uncordon -.-> lab-9664{{"Команды cordon и uncordon в Kubernetes"}} kubernetes/describe -.-> lab-9664{{"Команды cordon и uncordon в Kubernetes"}} kubernetes/label -.-> lab-9664{{"Команды cordon и uncordon в 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 для сброса среды, если это необходимо.

Блокировка узла (Cordoning a Node)

На этом шаге мы будем использовать команду cordon, чтобы пометить узел как "неподходящий для планирования" (unschedulable), предотвращая запуск новых подов на этом узле. Вот шаги:

  1. Выведите список узлов в кластере с помощью следующей команды:
kubectl get nodes
  1. Блокируйте узел с помощью следующей команды:
kubectl cordon minikube
  1. Проверьте, что узел был заблокирован, проверив поле SchedulingDisabled в статусе узла с помощью следующей команды:
kubectl get node | grep SchedulingDisabled

Разблокировка узла (Uncordoning a Node)

На этом шаге мы будем использовать команду uncordon, чтобы снова пометить узел как "подходящий для планирования" (schedulable), разрешив запуск новых подов на этом узле. Вот шаги:

  1. Разблокируйте узел с помощью следующей команды:
kubectl uncordon minikube
  1. Проверьте, что узел был разблокирован, проверив поле SchedulingDisabled в статусе узла с помощью следующей команды:
kubectl get node | grep SchedulingDisabled

Блокировка и разблокировка узлов с работающими подами

На этом шаге мы будем моделировать сценарий, когда узел с работающими на нем подами необходимо заблокировать (cordon) и разблокировать (uncordon). Вот шаги:

  1. Выполните следующую команду, чтобы перейти в директорию /home/labex/project/:
cd /home/labex/project/
  1. Создайте развертывание (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
  1. Заблокируйте узел с помощью следующей команды:
kubectl cordon minikube
  1. Примените YAML - файл с помощью следующей команды:
kubectl apply -f deploy.yaml
  1. Выведите список подов, запущенных на узлах, с помощью следующей команды:
kubectl get pods -o wide

Проверьте, был ли под правильно запланирован и запущен.

  1. Разблокируйте узел с помощью следующей команды:
kubectl uncordon minikube
  1. Проверьте статус подов, запущенных на узле, чтобы убедиться, что они были перезапланированы на разблокированный узел, с помощью следующей команды:
kubectl get pods -o wide

Использование меток (labels) для блокировки и разблокировки узлов

На этом шаге мы будем использовать метки (labels), чтобы блокировать и разблокировать узлы на основе определенных критериев. Вот шаги:

  1. Присвойте метку узлам в кластере с помощью следующей команды:
kubectl label nodes minikube org=labex
  1. Заблокируйте узлы, имеющие указанную метку, с помощью следующей команды:
kubectl cordon -l org=labex
  1. Проверьте, что узлы были заблокированы, проверив поле SchedulingDisabled в статусе узлов с помощью следующей команды:
kubectl get node -l org=labex | grep SchedulingDisabled
  1. Разблокируйте узлы, имеющие указанную метку, с помощью следующей команды:
kubectl uncordon -l org=labex
  1. Проверьте, что узлы были разблокированы, проверив поле SchedulingDisabled в статусе узлов с помощью следующей команды:
kubectl get node -l org=labex | grep SchedulingDisabled

Итог

В этом практическом занятии (lab) мы изучили, как использовать команды cordon и uncordon в Kubernetes для управления планированием подов на узлах. Мы узнали, как блокировать и разблокировать узлы, даже если на них работают поды, а также как использовать метки (labels), чтобы по определенным критериям выборочно блокировать и разблокировать узлы. Эти команды полезны для управления доступностью и устойчивостью подов в кластере Kubernetes.