Поделиться через


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

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

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

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

Замечание

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

Это важно

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

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

Это важно

Начиная с 30 ноября 2025 г. служба Azure Kubernetes (AKS) больше не поддерживает или предоставляет обновления безопасности для Azure Linux 2.0. Образ узла Linux 2.0 Azure заморожен в выпуске 202512.06.0. Начиная с 31 марта 2026 г. образы узлов будут удалены, и вы не сможете масштабировать пулы узлов. Выполните миграцию в поддерживаемую версию Linux Azure, обновив пулы узлов до поддерживаемой версии Kubernetes или переключив ее на osSku AzureLinux3. Дополнительные сведения см. в вопросе о прекращении поддержки на GitHub и объявлении об устаревании обновлений Azure. Чтобы оставаться в курсе объявлений и обновлений, следуйте заметкам о выпуске AKS.

Перед тем как начать

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

Понимание опыта обновления узла AKS

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

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

Для завершения процесса для некоторых обновлений системы безопасности, таких как обновления ядра, требуется перезагрузка узла. Узел Linux, требующий перезагрузки, создает файл с именем /var/run/reboot-required. Этот процесс перезагрузки не происходит автоматически.

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

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

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

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

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

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

  • Новый узел развертывается с использованием последних обновлений системы безопасности и примененной версии Kubernetes.
  • Старый узел оцеплен и осушен.
  • Модули Pod запланированы на новом узле.
  • Старый узел удаляется.

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

Развернуть kured в кластере AKS

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

# 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. Дополнительные сведения о параметрах конфигурации можно найти в чарте kured 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 в рамках процесса обновления системы безопасности. Чтобы обновить кластер AKS до последней версии Kubernetes, можно обновить кластер AKS.

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

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