Оглавление
- Что и почему
- 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,SchedulingDisabled10h 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»