Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
As atualizações de segurança são uma parte fundamental para manter a segurança do seu cluster AKS e a conformidade com as correções mais recentes para o sistema operativo subjacente. Essas atualizações incluem correções de segurança do sistema operacional ou atualizações do kernel. Algumas atualizações exigem uma reinicialização do nó para concluir o processo.
Este artigo mostra-lhe como pode automatizar o processo de atualização dos nós AKS usando GitHub Actions e Azure CLI para criar uma tarefa de atualização baseada nisso cron que corre automaticamente.
Observação
Também pode realizar atualizações automáticas da imagem dos nós e agendar essas atualizações usando a manutenção planeada. Para obter mais informações, consulte Atualizar automaticamente imagens de nó.
Antes de começar
- Este artigo pressupõe que você tenha um cluster AKS existente. Se você precisar de um cluster AKS, crie um usando a CLI do Azure, o Azure PowerShell ou o portal do Azure.
- Este artigo também assume que tens uma conta no GitHub e um repositório de perfil para alojar as tuas ações. Se não tiveres um repositório, cria um com o mesmo nome do teu nome de utilizador no GitHub.
- Você precisa da CLI do Azure versão 2.0.59 ou posterior instalada e configurada. Executar
az --versionpara localizar a versão. Se precisar de instalar ou atualizar, consulte Install Azure CLI.
Atualizar nós com az aks upgrade
O comando az aks upgrade oferece uma forma sem interrupção para aplicar atualizações. O comando executa as seguintes ações:
- Aplica as atualizações mais recentes a todos os nós do teu cluster.
- Cordons (torna o nó indisponível para o agendamento de novas cargas de trabalho) e drena (move as cargas existentes para outros nós) tráfego para os nós.
- Reinicia os nós.
- Permite que os nós atualizados recebam tráfego novamente.
O AKS não reinicia automaticamente os teus nós se os atualizares usando um método diferente.
Observação
Executar az aks upgrade com a flag --node-image-only só atualiza as imagens dos nós. Executar o comando sem a bandeira atualiza tanto as imagens dos nós como a versão do plano de controlo do Kubernetes. Para mais informações, consulte a documentação para atualizações geridas em nós e a documentação para atualizações de cluster.
Todos os nós Kubernetes correm numa máquina virtual Azure (VM) padrão baseada em Windows ou Linux. As VMs baseadas em Linux usam uma imagem Ubuntu com o sistema operativo configurado para verificar automaticamente as atualizações todas as noites.
Quando usas o az aks upgrade comando, o Azure CLI cria uma vaga de novos nós com as últimas atualizações de segurança e kernel. Estes novos nós são inicialmente isolados para evitar que quaisquer aplicações sejam agendadas até que a atualização esteja concluída. Após a conclusão da atualização, o Azure limita e drena os nós mais antigos e desliga os novos, transferindo todas as aplicações agendadas para os novos nós.
Este processo é melhor do que atualizar kernels baseados em Linux manualmente porque o Linux requer um reinício quando uma nova atualização do kernel é instalada. Se atualizares o sistema operativo manualmente, também tens de reiniciar a VM, limitando e drenando manualmente todas as aplicações.
Criar uma ação temporizada no GitHub
cron é uma ferramenta que permite executar um conjunto de comandos, ou tarefas, num horário automatizado. Para criar uma tarefa que atualize os seus nós AKS num agendamento automático, precisa de um repositório para hospedar as suas ações. As ações do GitHub são normalmente configuradas no mesmo repositório que a sua aplicação, mas pode usar qualquer repositório.
Navegue até ao seu repositório no GitHub.
Selecione Ações.
Selecionar Novo fluxo de trabalho>Configure um fluxo de trabalho por si mesmo.
Crie uma Ação do GitHub chamada Upgrade cluster node images com um gatilho de agendamento para executar a cada 15 dias às 3h. Copie o seguinte código para o YAML:
name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *'Crie um trabalho chamado upgrade-node que corra num agente Ubuntu e se ligue à sua conta Azure CLI para executar o comando node upgrade. Copie o seguinte código para o YAML sob a
onchave:jobs: upgrade-node: runs-on: ubuntu-latest
Configura o Azure CLI no fluxo de trabalho
Na barra Pesquisar no Marketplace de Ações, procure por Azure Login.
Selecione Azure Login.
Em Instalação, selecione uma versão, como a v1.4.6, e copie o excerto do código de instalação.
Adicione a
stepschave e a seguinte informação do excerto do código de instalação ao YAML:name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *' jobs: upgrade-node: runs-on: ubuntu-latest steps: - name: Azure Login uses: Azure/login@v1.4.6 with: creds: ${{ secrets.AZURE_CREDENTIALS }}
Criar credenciais para o Azure CLI
Numa nova janela do navegador, crie um novo principal de serviço usando o
az ad sp create-for-rbaccomando. Certifique-se de substituir*{subscriptionID}*pelo seu próprio ID de subscrição.Observação
Este exemplo cria a
Contributorfunção no âmbito da Subscrição. Pode fornecer o papel e o âmbito que satisfaçam as suas necessidades. Para mais informações, consulte os papéis incorporados do Azure e os níveis de âmbito do Azure RBAC.az ad sp create-for-rbac --role Contributor --scopes /subscriptions/{subscriptionID} -o jsonSua saída deve ser semelhante à saída de exemplo a seguir:
{ "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "displayName": "xxxxx-xxx-xxxx-xx-xx-xx-xx-xx", "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx", "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }Copie o resultado e navegue até ao seu repositório GitHub.
Selecionar Definições>Segredos e variáveis>Ações>Novo secreto do repositório.
Em Nome, digite
AZURE_CREDENTIALS.Para o Secret, copie o conteúdo da saída que recebeu quando criou o principal do serviço.
Selecionar Adicionar Segredo.
Crie os passos para executar os comandos da CLI do Azure
Navegue até à sua janela com o fluxo de trabalho YAML.
Na barra do Mercado de Pesquisa por Ações , pesquise por Azure CLI Action.
Selecione Azure CLI Action.
Em Instalação, selecione uma versão, como a v1.0.8, e copie o excerto do código de instalação.
Cole o conteúdo da ação no YAML abaixo do
*Azure Login*passo, semelhante ao seguinte exemplo:name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *' jobs: upgrade-node: runs-on: ubuntu-latest steps: - name: Azure Login uses: Azure/login@v1.4.6 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Upgrade node images uses: Azure/cli@v1.0.8 with: inlineScript: az aks upgrade --resource-group <resourceGroupName> --name <aksClusterName> --node-image-only --yesSugestão
Pode desacoplar os parâmetros
--resource-groupe--namedo comando criando novos segredos de repositório, como fez comAZURE_CREDENTIALS.Caso crie segredos para os parâmetros, precisas de substituir os marcadores
<resourceGroupName>e<aksClusterName>pelos seus equivalentes secretos. Por exemplo,${{secrets.RESOURCE_GROUP_NAME}}e${{secrets.AKS_CLUSTER_NAME}}Renomear o YAML para
upgrade-node-images.yml.Selecione Commit as alterações..., adicione uma mensagem de commit e depois selecione Commit as alterações.
Executa a ação do GitHub manualmente
Pode executar o fluxo de trabalho manualmente além da execução agendada, adicionando um novo on trigger chamado workflow_dispatch.
Observação
Se quiseres atualizar um único pool de nós em vez de todos os pools de nós do cluster, adiciona o --name parâmetro ao az aks nodepool upgrade comando para especificar o nome do pool de nós. Por exemplo:
az aks nodepool upgrade --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
Adicione o
workflow_dispatchgatilho por baixo daontecla:name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *' workflow_dispatch:O YAML deverá assemelhar-se ao seguinte exemplo:
name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *' workflow_dispatch: jobs: upgrade-node: runs-on: ubuntu-latest steps: - name: Azure Login uses: Azure/login@v1.4.6 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Upgrade node images uses: Azure/cli@v1.0.8 with: inlineScript: az aks upgrade -g {resourceGroupName} -n {aksClusterName} --node-image-only --yes # Code for upgrading one or more node pools
Próximos passos
Para mais informações sobre as atualizações do AKS, consulte os seguintes artigos e recursos:
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.