Настройка обновления рабочего узла
Управляемый сервис Kubernetes удобен в использовании и по сравнению с on-prem установкой имеет ряд преимуществ:
настройка и поддержка работоспособности мастер-узлов;
автомасштабирование узлов Kubernetes;
настройка самих сервисов внутри Kubernetes.
Но при этом необходимо обслуживать рабочие узлы кластера, так как часто стандартные политики обновления могут не применяться для конкретного пользователя по следующим причинам:
несовместимость развернутого приложения с более новой версией ОС;
длительный период тестирования нескольких узлов кластера, которые работают с различными версиями ОС, для получения более стабильного и предсказуемого результата;
политики обновления: rolling update, replace update и так далее;
отложенный механизм обновления для кластеров с высокой нагрузкой.
Для создания собственных политик обслуживания и обновления кластера Kubernetes можно использовать оригинальный проект System Upgrade Controller, разработанный компанией Rancher. Этот контроллер управляет Plans, выбирая узлы, на которых выполняются обновления Jobs. Путем указания селектора меток Plan определяет, какие узлы могут обновляться. После успешного выполнения Job на узле контроллер назначает ему метку в соответствии с Plan.
Это решение подходит как для облачных ресурсов, так и для on-prem инсталляции.
Перед началом работы
Скачайте исходный файл с основными компонентами для создания Сontroller.
Скачайте исходный файл конфигурации для Plan.
Подключитесь к кластеру с помощью kubectl или любым удобным способом.
Настройка system-upgrade-controller
Перед использованием YAML-файла с конфигурацией ресурсов необходимо изменить параметр affinity. Также можно указать определенный узел или пул узлов, где будет развернут сервис.
Например, вы хотите разделить нагрузки ваших подов и запускать обновление на узле, предназначенного для обслуживания системы. Для этого сначала добавьте метку (label) для узла и потом соответствующий affinity.
Чтобы изменить affinity, задайте параметры в YAML-файле:
affinity :nodeAffinity :requiredDuringSchedulingIgnoredDuringExecution :nodeSelectorTerms :- matchExpressions :- key : typeoperator : Invalues :- upgradeПример YAML-файлаЧтобы применить конфигурацию, введите:
kubectl apply -f system-upgrade-controller.yamlЧтобы проверить создание Deployment, введите:
kubectl get deployment -n system-upgradeПримечаниеsystem-upgrade — это название пространства имен, где развернут Deployment. Этот параметр можно взять из YAML-файла.
В выводе команды появится:
Чтобы проверить запущен ли под, введите:
kubectl get po -n system-upgradeВ выводе команды появится:
Настройка конфигурации Plan
Измените YAML-файл, в котором описана конфигурация Plan и Secret.
В этом примере указана установка только security обновлений.
stringData :upgrade.sh : |#!/bin/shset -esecrets=$(dirname $0)sudo yum -y update --security
Это стандартный bash-скрипт. Вы можете ввести любую последовательность команд.
Дополнительно измените блок с nodeSelector. Этот блок указывает, на каких узлах будет запущено обновление.
Так же обратите внимание на параметр drain. Этот параметр можно применить, когда нужно перераспределить под с текущего узла на другие доступные в кластере.
- Перед началом работы
- Настройка system-upgrade-controller
- Настройка конфигурации Plan