Partilhar via


Aplicar atualizações de segurança e kernel a nós Linux no Serviço Kubernetes do Azure (AKS)

Para proteger seus clusters, as atualizações de segurança são aplicadas automaticamente aos nós do Linux no AKS. Essas atualizações incluem correções de segurança do sistema operacional ou atualizações do kernel. Algumas dessas atualizações exigem uma reinicialização do nó para concluir o processo. O AKS não reinicia automaticamente esses nós Linux para concluir o processo de atualização.

O processo para manter os nós do Windows Server atualizados é um pouco diferente. Os nós do Windows Server não recebem atualizações diárias. Em vez disso, você executa uma atualização do AKS que implanta novos nós com a imagem e os patches mais recentes do Windows Server base. Para clusters AKS que usam nós do Windows Server, consulte Atualizar um pool de nós no AKS.

Este artigo mostra como usar o kured de código aberto (KUbernetes REboot Daemon) para observar nós Linux que exigem uma reinicialização e, em seguida, lidar automaticamente com o reagendamento de pods em execução e processo de reinicialização de nós.

Nota

Kured é um projeto de código aberto na Cloud Native Computing Foundation. Por favor, direcione as questões para o GitHub curado. Suporte adicional pode ser encontrado no canal #kured no CNCF Slack.

Importante

O software de código aberto é mencionado em toda a documentação e amostras do AKS. O software que você implanta é excluído dos contratos de nível de serviço do AKS, da garantia limitada e do suporte do Azure. Ao usar a tecnologia de código aberto ao lado do AKS, consulte as opções de suporte disponíveis nas respetivas comunidades e mantenedores do projeto para desenvolver um plano.

Por exemplo, o repositório Ray GitHub descreve várias plataformas que variam em tempo de resposta, finalidade e nível de suporte.

A Microsoft assume a responsabilidade pela criação dos pacotes de código aberto que implantamos no AKS. Essa responsabilidade inclui ter a propriedade completa do processo de compilação, digitalização, assinatura, validação e hotfix, juntamente com o controle sobre os binários em imagens de contêiner. Para obter mais informações, consulte Gerenciamento de vulnerabilidades para cobertura de suporte AKS e AKS.

Antes de começar

Você precisa da CLI do Azure versão 2.0.59 ou posterior instalada e configurada. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

Compreender a experiência de atualização do nó AKS

Em um cluster AKS, seus nós do Kubernetes são executados como máquinas virtuais (VMs) do Azure. Essas VMs baseadas em Linux usam uma imagem do Ubuntu ou do Azure Linux, com o sistema operacional configurado para verificar automaticamente se há atualizações todos os dias. Se houver atualizações de segurança ou do kernel disponíveis, elas serão baixadas e instaladas automaticamente.

Processo de atualização e reinicialização do nó AKS com kured

Algumas atualizações de segurança, como atualizações do kernel, exigem uma reinicialização do nó para finalizar o processo. Um nó Linux que requer uma reinicialização cria um arquivo chamado /var/run/reboot-required. Este processo de reinicialização não acontece automaticamente.

Você pode usar seus próprios fluxos de trabalho e processos para lidar com reinicializações de nó ou usar kured para orquestrar o processo. Com kuredo , é implantado um DaemonSet que executa um pod em cada nó Linux no cluster. Esses pods no DaemonSet observam a existência do arquivo /var/run/reboot-required e, em seguida, iniciam um processo para reinicializar os nós.

Atualizações de imagem de nó

As atualizações autônomas aplicam atualizações ao sistema operacional do nó Linux, mas a imagem usada para criar nós para o cluster permanece inalterada. Se um novo nó Linux for adicionado ao cluster, a imagem original será usada para criar o nó. Este novo nó recebe todas as atualizações de segurança e kernel disponíveis durante a verificação automática todos os dias, mas permanece sem correção até que todas as verificações e reinicializações sejam concluídas.

Como alternativa, você pode usar a atualização de imagem de nó para verificar e atualizar imagens de nó usadas pelo cluster. Para obter mais informações sobre a atualização da imagem do nó, consulte Atualização da imagem do nó do Serviço Kubernetes do Azure (AKS).

Atualizações de nós

Há outro processo no AKS que permite atualizar um cluster. Normalmente, uma atualização é para mover para uma versão mais recente do Kubernetes, não apenas aplicar atualizações de segurança de nó. Uma atualização do AKS executa as seguintes ações:

  • Um novo nó é implantado com as atualizações de segurança mais recentes e a versão do Kubernetes aplicada.
  • Um nó antigo é isolado e drenado.
  • Os pods são agendados no novo nó.
  • O nó antigo é excluído.

Não é possível permanecer na mesma versão do Kubernetes durante um evento de atualização. Você deve especificar uma versão mais recente do Kubernetes. Para atualizar para a versão mais recente do Kubernetes, você pode atualizar seu cluster AKS.

Implantar kured em um cluster AKS

Para implantar o kured DaemonSet, instale o seguinte gráfico oficial Kured Helm. Isso cria uma função e uma função de cluster, associações e uma conta de serviço e, em seguida, implanta o DaemonSet usando 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

Você também pode configurar parâmetros extras para kured, como integração com Prometheus ou Slack. Para obter mais informações sobre parâmetros de configuração, consulte o gráfico kured Helm.

Atualizar nós de cluster

Por padrão, os nós Linux no AKS verificam se há atualizações todas as noites. Se não quiser esperar, você pode executar manualmente uma atualização para verificar se kured é executado corretamente. Primeiro, siga as etapas para SSH para um dos seus nós AKS. Depois de ter uma conexão SSH com o nó Linux, verifique se há atualizações e aplique-as da seguinte maneira:

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

Se forem aplicadas atualizações que exijam uma reinicialização do nó, um arquivo será gravado em /var/run/reboot-required. Kured verifica se há nós que exigem uma reinicialização a cada 60 minutos por padrão.

Monitorar e revisar o processo de reinicialização

Quando uma das réplicas no DaemonSet deteta que uma reinicialização do nó é necessária, um bloqueio é colocado no nó por meio da API do Kubernetes. Esse bloqueio impede que mais pods sejam agendados no nó. O bloqueio também indica que apenas um nó deve ser reinicializado de cada vez. Com o nó isolado, os pods em execução são drenados do nó e o nó é reinicializado.

Você pode monitorar o status dos nós usando o comando kubectl get nodes . A saída de exemplo a seguir mostra um nó com um status de SchedulingDisabled enquanto o nó se prepara para o processo de reinicialização:

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

Quando o processo de atualização estiver concluído, você poderá visualizar o status dos nós usando o comando kubectl get nodes com o --output wide parâmetro. Essa saída permite que você veja uma diferença em KERNEL-VERSION dos nós subjacentes, conforme mostrado na saída de exemplo a seguir. O aks-nodepool1-28993262-0 foi atualizado em uma etapa anterior e mostra a versão do kernel 4.15.0-1039-azure. O nó aks-nodepool1-28993262-1 que não foi atualizado mostra a versão do kernel 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

Próximos passos

Este artigo detalhou como usar kured para reinicializar nós Linux automaticamente como parte do processo de atualização de segurança. Para atualizar para a versão mais recente do Kubernetes, você pode atualizar seu cluster AKS.

Para clusters AKS que usam nós do Windows Server, consulte Atualizar um pool de nós no AKS.

Para obter uma discussão detalhada sobre as práticas recomendadas de atualização e outras considerações, consulte o patch do AKS e as diretrizes de atualização.