Применение обновлений безопасности и ядра для узлов Linux в Службе Azure Kubernetes (AKS)

Для защиты кластеров обновления безопасности автоматически применяются к их узлам Linux в службе AKS. Учитываются такие обновления, как исправления безопасности для операционной системы и обновления ядра. Чтобы завершить установку некоторых обновлений, нужно перезагрузить узел. AKS не выполняет автоматическую перезагрузку этих узлов Linux для завершения обновления.

Процесс обновления узлов Windows Server до актуального состояния имеет некоторые отличия. Узлы Windows Server не получают ежедневных обновлений. Вместо этого выполняется обновление AKS, которое развертывает новые узлы с помощью последнего образа системы и новейших исправлений. Для кластеров AKS, использующих узлы Windows Server, см. статью Обновление пула узлов в AKS.

В этой статье показано, как применить средство с открытым кодом kured (KUbernetes REboot Daemon — управляющая программа Kubernetes для перезагрузки) для отслеживания узлов, которые нужно перезагрузить, и автоматической корректировки расписания для перезагрузки выполняемых pod и процесса перезагрузки узлов.

Примечание.

Kured — это проект с открытым исходным кодом в Cloud Native Computing Foundation. Направляйте вопросы и сообщения о проблемах в GitHub kured. Дополнительную поддержку можно найти в канале #kured на CNCF Slack.

Внимание

Программное обеспечение с открытым кодом упоминается во всей документации и примерах AKS. Развертываемое программное обеспечение исключается из соглашений об уровне обслуживания AKS, ограниченной гарантии и поддержка Azure. При использовании технологии с открытым исходным кодом вместе с AKS ознакомьтесь с вариантами поддержки, доступными от соответствующих сообществ и обслуживающих проектов для разработки плана.

Например, репозиторий Ray GitHub описывает несколько платформ, которые зависят от времени отклика, назначения и уровня поддержки.

Корпорация Майкрософт несет ответственность за создание пакетов с открытым кодом, которые мы развертываем в AKS. Эта ответственность включает полное владение сборкой, сканированием, подписью, проверкой и исправлением, а также контролем над двоичными файлами в образах контейнеров. Дополнительные сведения см. в статье об управлении уязвимостями для поддержки AKS и AKS.

Подготовка к работе

Вам понадобится Azure CLI версии 2.0.59 или более поздней версии. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Основные сведения об обновлении узла AKS

В кластере AKS узлы Kubernetes выполняются на виртуальных машинах Azure. Эти виртуальные машины под управлением Linux используют образ Ubuntu или Azure Linux, при этом ОС настроена автоматически проверять наличие обновлений каждый день. Если доступны обновления системы безопасности или ядра, они автоматически скачиваются и устанавливаются.

Процесс обновления и перезагрузка узла AKS с помощью kured

Чтобы завершить установку некоторых обновлений системы безопасности, например обновлений ядра, нужно перезагрузить узел. На узле Linux, который нужно перезагрузить, создается файл с именем /var/run/reboot-required. При этом перезагрузка не выполняется автоматически.

Вы можете использовать собственные рабочие процессы и системы для обработки запросов на перезагрузку узла или оркестрировать этот процесс с помощью kured. Для использования kured развертывается DaemonSet, который выполняет pod на каждом узле Linux в кластере. Эти группы pod, которые запускает DaemonSet, проверяют наличие файла /var/run/reboot-required и при его обнаружении запускают перезагрузку узла.

Обновления образов узлов

Автоматическое обновление применяет обновления к ОС узлов Linux, но образ, используемый для создания узлов для кластера, не изменяется. Если в кластер добавляется новый узел Linux, для его создания используется исходный образ. Этот новый узел получает все обновления безопасности и ядра, доступные во время автоматической проверки каждый день, но остается незапатченным до тех пор, пока все проверки и перезапуски не будут завершены.

В качестве альтернативы с помощью обновления образа узла можно проверить наличие образов узла, используемых кластером, и обновить их. Дополнительные сведения об обновлении образа узла см. в статье об обновлении образа узла Служба Azure Kubernetes (AKS).

Обновления узлов

В AKS есть еще один процесс, позволяющий обновить кластер. Обычно обновление подразумевает переход на новую версию Kubernetes, а не просто обновления безопасности для узла. При обновлении AKS выполняются следующие действия:

  • развертывание нового узла со всеми последними обновлениями безопасности и новой версией Kubernetes;
  • блокировка старого узла и остановка процессов на нем;
  • назначение выполнения pod на новом узле;
  • удаление старого узла.

При обработке события обновления нельзя сохранить старую версию Kubernetes. Необходимо указать более новую версию Kubernetes. Чтобы перейти на последнюю версию Kubernetes, вы можете обновить кластер AKS.

Развертывание kured в кластере AKS

Чтобы развернуть DaemonSet kured, установите следующий официальный чарт Kured Helm. При этом создается роль, а также роль кластера, привязки и учетная запись службы, а затем с помощью kured будет развернут DaemonSet.

# Add the Kured Helm repository
helm repo add kubereboot https://kubereboot.github.io/charts/

# Update your local Helm chart repository cache
helm repo update

# Create a dedicated namespace where you would like to deploy kured into
kubectl create namespace kured

# Install kured in that namespace with Helm 3 (only on Linux nodes, kured is not working on Windows nodes)
helm install my-release kubereboot/kured --namespace kured --set controller.nodeSelector."kubernetes\.io/os"=linux

Можно также настроить дополнительные параметры для kuredинтеграции с Prometheus или Slack. Дополнительные сведения о параметрах конфигурации см. на диаграмме Helm.

Обновление узлов кластера

По умолчанию узлы Linux в службе AKS проверяют наличие обновлений каждый вечер. Если вы не хотите ждать, обновление можно запустить вручную и убедиться, что kured выполняется правильно. Сначала установите подключение по SSH к одному из узлов AKS. Создав SSH-подключение к узлу Linux, проверьте наличие обновлений и примените их следующим образом.

sudo apt-get update && sudo apt-get upgrade -y

Если эти обновления требуют перезагрузки узла, создается файл /var/run/reboot-required. По умолчанию Kured каждые 60 минут проверяет наличие узлов, которые требуют перезагрузки.

Мониторинг и проверка процесса перезагрузки

Когда одна из реплик в DaemonSet обнаруживает, что требуется перезагрузка узла, блокировка помещается на узел через API Kubernetes. Эта блокировка предотвращает планирование дополнительных модулей pod на узле. Также блокировка гарантирует, что за один раз перезагружается только один узел. После применения блокировки на этом узле постепенно завершается выполнение всех групп pod, а затем узел перезагружается.

Состояние узлов можно отслеживать с помощью команды kubectl get nodes. В следующем примере выходных данных показан узел с состоянием SchedulingDisabled, который готовится к процессу перезагрузки:

NAME                       STATUS                     ROLES     AGE       VERSION
aks-nodepool1-28993262-0   Ready,SchedulingDisabled   agent     1h        v1.11.7

После обновления вы можете проверить состояние узлов с помощью команды kubectl get nodes с параметром --output wide. Эти выходные данные позволяют увидеть разницу в ВЕРСИИ ЯДРА базовых узлов, как показано в следующем примере выходных данных. На предыдущем шаге узел aks-nodepool1-28993262-0 был обновлен, и теперь для него отображается версия ядра 4.15.0-1039-azure. Для узла aks-nodepool1-28993262-1, который еще не был обновлен, отображается версия ядра 4.15.0-1037-azure.

NAME                       STATUS    ROLES     AGE       VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
aks-nodepool1-28993262-0   Ready     agent     1h        v1.11.7   10.240.0.4    <none>        Ubuntu 16.04.6 LTS   4.15.0-1039-azure   docker://3.0.4
aks-nodepool1-28993262-1   Ready     agent     1h        v1.11.7   10.240.0.5    <none>        Ubuntu 16.04.6 LTS   4.15.0-1037-azure   docker://3.0.4

Следующие шаги

В этой статье описано использование kured для автоматической перезагрузки узлов Linux при применении обновлений безопасности. Чтобы перейти на последнюю версию Kubernetes, вы можете обновить кластер AKS.

Для кластеров AKS, использующих узлы Windows Server, см. статью Обновление пула узлов в AKS.

Подробное обсуждение рекомендаций по обновлению и других рекомендаций см . в руководстве по исправлению и обновлению AKS.