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.
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 kured
o , é 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.
Azure Kubernetes Service