Atualizar um cluster do Kubernetes com o motor AKS no Azure Stack Hub

O motor do AKS permite-lhe atualizar o cluster do Kubernetes que foi originalmente implementado com a ferramenta no Azure Stack Hub. Pode manter os clusters com o motor AKS. As suas tarefas de manutenção são semelhantes a qualquer sistema IaaS. Deve estar ciente da disponibilidade de novas atualizações e utilizar o motor do AKS para as aplicar.

Atualizar um cluster

O comando de atualização atualiza a versão do Kubernetes e a imagem do SO base. Sempre que executar o comando de atualização, para cada nó do cluster, o motor do AKS cria uma nova VM com a imagem base do AKS associada à versão do motor aks utilizado.

Para as versões 0.73.0 e abaixo do Motor AKS, pode utilizar o aks-engine upgrade comando para manter a moeda de cada nó principal e agente no cluster.

Para as versões 0.75.3 e superiores do Motor AKS, pode utilizar o aks-engine-azurestack upgrade comando para manter a moeda de cada nó principal e agente no cluster.

A Microsoft não gere o cluster. Contudo, a Microsoft fornece a ferramenta e a imagem de VM que pode utilizar para gerir o cluster.

Para um cluster implementado, as atualizações abrangem:

  • Utilizar o Kubernetes
  • Fornecedor do Kubernetes do Azure Stack Hub
  • SO de base

Ao atualizar um cluster de produção, considere:

  • Está a utilizar a especificação do cluster (apimodel.json) e o grupo de recursos corretos para o cluster de destino?
  • Está a utilizar um computador fiável para o computador cliente executar o motor AKS e a partir do qual está a realizar operações de atualização?
  • Certifique-se de que tem um cluster de cópia de segurança e de que está operacional.
  • Se possível, execute o comando a partir de uma VM no ambiente do Azure Stack Hub para diminuir os saltos de rede e potenciais falhas de conectividade.
  • Certifique-se de que a sua subscrição tem espaço suficiente para todo o processo. O processo aloca novas VMs durante o processo.
  • Não estão planeadas atualizações do sistema ou tarefas agendadas.
  • Configure uma atualização faseada num cluster que esteja configurado exatamente como o cluster de produção e teste a atualização no mesmo antes de o fazer no cluster de produção

Passos para atualizar para uma versão mais recente do Kubernetes

Nota

A imagem base do AKS também é atualizada se estiver a utilizar uma versão mais recente do motor aks e a imagem estiver disponível no marketplace.

As seguintes instruções utilizam os passos mínimos para efetuar a atualização. Se quiser obter mais detalhes, veja o artigo Atualizar Clusters do Kubernetes.

  1. Primeiro, tem de determinar as versões que pode direcionar para a atualização. Esta versão depende da versão que tem atualmente e, em seguida, utiliza esse valor de versão para efetuar a atualização. As versões do Kubernetes suportadas pelo Motor AKS podem ser listadas ao executar o seguinte comando:

    Nota

    Para a versão 0.75.3 e superior do AKSe, o comando para obter as versões do motor AKS é aks-engine-azurestack get-versions.

    aks-engine get-versions --azure-env AzureStackCloud
    

    Para obter um mapeamento completo do motor do AKS, da imagem base do AKS e das versões do Kubernetes, veja Versões suportadas do Motor do AKS.

  2. Recolha as informações necessárias para executar o upgrade comando. O upgrade comando utiliza os seguintes parâmetros:

    Parâmetro Exemplo Descrição
    azure-env AzureStackCloud Para indicar ao motor do AKS que a plataforma de destino é a utilização AzureStackClouddo Azure Stack Hub.
    localização local O nome da região do Azure Stack Hub. Para o ASDK, a região está definida como local.
    resource-group kube-rg Introduza o nome de um novo grupo de recursos ou selecione um grupo de recursos existente. O nome do recurso tem de ser alfanumérico e minúsculo.
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Introduza o ID da Subscrição. Para obter mais informações, consulte Subscrever uma oferta
    modelo de api ./kubernetes-azurestack.json Caminho para o ficheiro de configuração do cluster ou modelo de API.
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Introduza o GUID do principal de serviço. O ID de Cliente identificado como o ID da Aplicação quando o administrador do Azure Stack Hub criou o principal de serviço.
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Introduza o segredo do principal de serviço. Este é o segredo do cliente que configurou ao criar o seu serviço.
    identity-system adfs Opcional. Especifique a sua solução de gestão de identidades se estiver a utilizar os Serviços Federados do Active Directory (AD FS).
  3. Com os valores implementados, execute o seguinte comando:

    Nota

    Para a versão 0.75.3 e superior do AKSe, o comando para atualizar o motor do AKS é aks-engine-azurestack upgrade.

    aks-engine upgrade \
    --azure-env AzureStackCloud \
    --location <for an ASDK is local> \
    --resource-group kube-rg \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --api-model kube-rg/apimodel.json \
    --upgrade-version 1.18.15 \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  4. Se, por algum motivo, a operação de atualização encontrar uma falha, pode executar novamente o upgrade comando depois de resolver o problema. O motor AKS retomará a operação em que falhou na hora anterior.

Passos para atualizar apenas a imagem do SO

  1. Reveja a tabela supported-kubernetes-versions e determine se tem a versão do aks-engine e da Imagem base do AKS que planeia para a sua atualização. Se estiver na versão 0.73.0 ou abaixo do Motor AKS, para ver a versão da execução do motor aks: aks-engine version. Se estiver na versão 0.75.3 ou superior do Motor AKS, para ver a versão da execução do motor aks: aks-engine-azurestack version.
  2. Atualize o motor do AKS em conformidade, no computador onde instalou a execução do motor aks: ./get-akse.sh --version vx.xx.x substituindo x.xx.x pela sua versão de destino.
  3. Peça ao operador do Azure Stack Hub para adicionar a versão da Imagem Base do AKS de que precisa no Marketplace do Azure Stack Hub que pretende utilizar.
  4. Execute o aks-engine upgrade comando com a mesma versão do Kubernetes que já está a utilizar, mas adicione o --force. Pode ver um exemplo em Forçar uma atualização.

Passos para atualizar o cluster para a versão do SO Ubuntu 20.04

Com a versão 0.75.3 e superior do motor do AKS, pode atualizar as VMs do cluster do Ubuntu 18.04 para a 20.04. Siga estes passos:

  1. Localize e edite o api-model.json ficheiro que foi gerado durante a implementação. Este deve ser o mesmo ficheiro utilizado para qualquer operação de atualização ou dimensionamento com aks-engine. Na versão 0.75.3 e superior do Motor AKS, utilize aks-engine-azurestack.
  2. Localize as secções para masterProfile e agentPoolProfiles, nessas secções altere o valor de distro para aks-ubuntu-20.04.
  3. Guarde o api-model.json ficheiro e utilize o api-model.json ficheiro no comando aks-engin upgrade tal como faria nos Passos para atualizar para uma versão mais recente do Kubernetes

Passos para atualizar o cluster se estiver a utilizar volumes de armazenamento com o Motor AKS v0.70.0 e posterior

O projeto Fornecedor de Cloud para o Azure (também conhecido como cloud-controller-manager, fornecedor de cloud fora de árvore ou fornecedor de cloud externo) implementa a interface do fornecedor de cloud do Kubernetes para clouds do Azure. A implementação fora da árvore é a substituição da implementação preterida na árvore.

No Azure Stack Hub, a partir do Kubernetes v1.21, os clusters baseados no Motor do AKS utilizarão cloud-controller-managerexclusivamente . Assim, para implementar um cluster do Kubernetes v1.21+ é necessário definir orchestratorProfile.kubernetesConfig.useCloudControllerManager como true no Modelo de API (exemplo). O processo de atualização do Motor AKS irá atualizar automaticamente o useCloudControllerManager sinalizador.

Nota

Considerações de atualização: o processo de atualização de um cluster do Kubernetes da v1.20 (ou versão inferior) para a v1.21 (ou versão superior) causará tempo de inatividade às cargas de trabalho que dependem do aprovisionador kubernetes.io/azure-disk de volume na árvore. Antes de atualizar para o Kubernetes v1.21+, é altamente recomendado fazer uma cópia de segurança completa dos dados da aplicação e validar num ambiente de pré-produção que os recursos de armazenamento do cluster (PV e PVC) podem ser migrados para um novo aprovisionador de volume. Saiba como migrar para o controlador CSI do Disco do Azure aqui.

Aprovisionadores de volume

O aprovisionador de volumes na árvore só é compatível com o fornecedor de cloud na árvore. Por conseguinte, um cluster v1.21+ tem de incluir um Controlador csi (Container Storage Interface) se as cargas de trabalho do utilizador dependerem do armazenamento persistente. Estão listadas aqui algumas soluções disponíveis no Azure Stack Hub.

O Motor AKS não ativará nenhum controlador CSI por predefinição no Azure Stack Hub. Para cargas de trabalho que requerem um controlador CSI, é possível ativar explicitamente o azuredisk-csi-driversuplemento (clusters apenas linux) ou utilizar Helm para instalar o gráfico (clusters do azuredisk-csi-driver Linux e/ou Windows).

Migrar o armazenamento persistente para o controlador CSI do Disco do Azure

O processo de atualização de um cluster baseado no Motor do AKS da v1.20 (ou versão inferior) para a v1.21 (ou versão superior) fará com que as cargas de trabalho dependam do kubernetes.io/azure-disk aprovisionador de volumes na árvore, uma vez que este aprovisionador não faz parte do Fornecedor de Cloud para o Azure.

Se os dados persistirem nos discos do Azure subjacentes devem ser preservados, são necessários os seguintes passos adicionais assim que o processo de atualização do cluster estiver concluído:

  1. Instalar o controlador CSI do Disco do Azure
  2. Remover as classes de armazenamento na árvore preteridas
  3. Recriar os volumes e afirmações persistentes

1. Instalar manualmente o controlador CSI do Disco do Azure

O script seguinte utiliza Helm para instalar o Controlador CSI do Disco do Azure:

DRIVER_VERSION=v1.10.0
helm repo add azuredisk-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/charts
helm install azuredisk-csi-driver azuredisk-csi-driver/azuredisk-csi-driver \
  --namespace kube-system \
  --set cloud=AzureStackCloud \
  --set controller.runOnMaster=true \
  --version ${DRIVER_VERSION}

2. Substituir classes de armazenamento

O kube-addon-manager criará automaticamente as classes de armazenamento de controladores CSI do Disco do Azure (disk.csi.azure.com) assim que as classes de armazenamento na árvore (kubernetes.io/azure-disk) forem eliminadas manualmente:

IN_TREE_SC="default managed-premium managed-standard"

# Delete deprecated "kubernetes.io/azure-disk" storage classes
kubectl delete storageclasses ${IN_TREE_SC}

# Wait for addon manager to create the "disk.csi.azure.com" storage class resources
kubectl get --watch storageclasses

3. Recriar volumes persistentes

Assim que o Controlador CSI do Disco do Azure estiver instalado e as classes de armazenamento substituídas, o passo seguinte é recriar os volumes persistentes (PV) e as afirmações de volumes persistentes (PVC) com o controlador CSI do Disco do Azure (ou solução CSI alternativa).

Este é um processo de vários passos que pode ser diferente consoante a forma como estes recursos foram inicialmente implementados. Os passos do nível elevado são:

  • Elimine a implementação ou o conjunto com monitorização de estado que referencia os pares PV + PVC a migrar (definição de recurso de cópia de segurança, se necessário).
  • Confirme que a propriedade dos persistentVolumeReclaimPolicy PVs está definida como valor Retain (exemplo).
  • Elimine os pares PV + PVC a migrar (definições de recursos de cópia de segurança, se necessário).
  • Para migrar, atualize a definição de recursos dos PVs ao remover o azureDisk objeto e adicionar um csi objeto com referência ao AzureDisk original (exemplo).
  • Recrie, pela seguinte ordem, o recurso PV/s, o recurso/s PVC (se necessário) e, por fim, a implementação ou o statefulset.

O seguinte script de migração é fornecido como um modelo.

Depois de executar o script de migração, se o pod estiver bloqueado com o erro "Não é possível anexar ou montar volumes", confirme que o Controlador CSI do Disco do Azure foi instalado e que as classes de armazenamento foram recriadas.

Forçar uma atualização

Podem existir condições em que poderá querer forçar uma atualização do cluster. Por exemplo, no primeiro dia, implementa um cluster num ambiente desligado com a versão mais recente do Kubernetes. No dia seguinte, o Ubuntu lança um patch para uma vulnerabilidade para a qual a Microsoft gera uma nova Imagem Base do AKS. Pode aplicar a nova imagem ao forçar uma atualização com a mesma versão do Kubernetes que já implementou.

Nota

Para a versão 0.75.3 e superior do AKSe, o comando para atualizar o motor do AKS é aks-engine-azurestack upgrade.

aks-engine upgrade \
--azure-env AzureStackCloud   
--location <for an ASDK is local> \
--resource-group kube-rg \
--subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--api-model kube-rg/apimodel.json \
--upgrade-version 1.18.15 \
--client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--force

Para obter instruções, veja Forçar atualização.

Passos seguintes