Рубрики
Uncategorized

Kubernetes: узел узел по примеру

Соглашение о том и почему Что и … Tagged с Kubernetes, DevOps.

Оглавление

  • Что и почему
  • Poddisruptionbudget
  • Пример
  • Ресурсы

Что и почему

Узел узел — это процесс Kubernetes для безопасного выселения стручков из узла.

Kubernetes имеет Дренаж Команда для безопасного выселения всех ваших стручков из узла, прежде чем выполнять обслуживание в узле (например, обновление ядра, техническое обслуживание оборудования и т. Д.) Или по какой -то причине вы хотите перенести свои услуги из одного узла в другой, не представляя времени простоя или в каком -то неволе разрушения.

С помощью Kubectl Drain Также вы даете шанс быть стручками, чтобы быть изящно прекращено и будет уважать Poddisruptionbudgets Вы указали.

Для получения дополнительной информации о Дренаж Команда и флаги, которые вы можете использовать, проверить Здесь Анкет

Poddisruptionbudget

PoddisruptionBudget (PDB) — это ресурс в Kubernetes, который обеспечивает определенное число или процент стручков для указанной услуги, не будет добровольно выселен и страдать от частых сбоев.

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

Примечание: Согласно Kubernetes Docs, добровольные сбои включают как действия, инициированные владельцем приложения, так и инициированные администратором кластера. например

  • Удаление развертывания, которое управляет стручкой
  • Обновление шаблона POD развертывания, вызывая перезапуск
  • прямо удалить стручок

Пример объекта PDB будет выглядеть так:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: fastify-budget
spec:
  maxUnavailable: 1
  selector:
    matchLabels:
      app: fastify_server

где мы указываем имя PDB как Фастифий-Бюджет и в спецификации мы можем установить либо Maxunavailable или минадо всего . Вы можете указать только один из Maxunavailable и MinaVailable В одном Poddisruptionbudget. Значения для этих полей могут быть выражены в виде целых чисел или в процентах (например, 50%).

Наконец, мы установили селектор для указания набора стручков, к которым применяется PDB.

Пример

Я собираюсь использовать minikube в многоузвучных кластерах, чтобы показать, как безопасно выселить стручки.

Вы можете развернуть его в других облачных управляемых Kubernetes, таких как AWS или GKE, без изменений в файлах YAML.

В моем примере у меня есть развертывание с простым сервером Nodejs в Фастификация Изображение работает в 10 стручках.

fastify-server-77476f7bc4-78zkv   1/1     Running   0          45m
fastify-server-77476f7bc4-9h6bf   1/1     Running   0          45m
fastify-server-77476f7bc4-cnh9r   1/1     Running   0          45m
fastify-server-77476f7bc4-cqs2z   1/1     Running   0          45m
fastify-server-77476f7bc4-fn5nn   1/1     Running   0          45m
fastify-server-77476f7bc4-nvnkl   1/1     Running   0          45m
fastify-server-77476f7bc4-pt5xz   1/1     Running   0          45m
fastify-server-77476f7bc4-r2btz   1/1     Running   0          45m
fastify-server-77476f7bc4-r92b7   1/1     Running   0          45m
fastify-server-77476f7bc4-xstrj   1/1     Running   0          45m

Мы можем слить узел, работая

kubectl drain 

Команда Drain имеет много флагов, таких как изящные или игнорируемые Daemonsets, чтобы параметризировать процесс слива.

С этой командой произойдет две вещи, сначала узел будет оцеплен и отмечен как невыполненная для новых стручков

multinode-m02   Ready,SchedulingDisabled                    10h   v1.20.0

И во -вторых, процесс выселения начнется, но вы заметите в сообщении терминала, которые выглядят как

error when evicting pods/"fastify-server-77476f7bc4-t9rgs" -n "node-drain" (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.
error when evicting pods/"fastify-server-77476f7bc4-t4rsm" -n "node-drain" (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.
error when evicting pods/"fastify-server-77476f7bc4-qf7gq" -n "node-drain" (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.

Значение процесса выселения — это уважение PDB, которое мы создали для нашего развертывания.

После периода (в зависимости от вашего развертывания и сколько необходимо заменить старые стручки новым), Kubectl Drain Команда завершится, и вы можете проверить, что ваш узел пуст (может быть

kubectl describe node 

На выводе вы увидите раздел Неумеренные стручки Там мы можем видеть только системные стручки.

Non-terminated Pods:          (2 in total)
  Namespace                   Name                CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                   ----                ------------  ----------  ---------------  -------------  ---
  kube-system                 kindnet-2gjjw       100m (2%)     100m (2%)   50Mi (1%)        50Mi (1%)      10h
  kube-system                 kube-proxy-54tlm    0 (0%)        0 (0%)      0 (0%)           0 (0%)         10h

Наконец, вы можете выполнять обслуживание на оцепленном узле или заменить его. Если вы хотите вернуть использование узла обратно, вам просто нужно отметить его снова как Запланированный Бег

kubectl uncordon 

Ресурсы

Оригинал: «https://dev.to/gkampitakis/kubernetes-node-drain-by-example-3l28»