Compartilhar via


Atualizar um cluster do Kubernetes usando o mecanismo do AKS no Azure Stack Hub

O mecanismo do AKS permite que você atualize o cluster do Kubernetes que foi originalmente implantado usando a ferramenta no Azure Stack Hub. Você pode manter os clusters usando o mecanismo do AKS. Suas tarefas de manutenção são semelhantes a qualquer sistema IaaS. Você deve estar ciente da disponibilidade de novas atualizações e usar o mecanismo do AKS para aplicá-las.

Atualizar um cluster

O comando upgrade atualiza a versão do Kubernetes e a imagem base do sistema operacional. Sempre que você executa o comando de atualização, para cada nó do cluster, o mecanismo do AKS cria uma nova VM usando a imagem base do AKS associada à versão do aks-engine usada.

Para as versões 0.73.0 e inferiores do Mecanismo do AKS, você pode usar o aks-engine upgrade comando para manter a moeda de cada nó mestre e agente no cluster.

Para as versões 0.75.3 e superiores do Mecanismo do AKS, você pode usar o aks-engine-azurestack upgrade comando para manter a moeda de cada nó mestre e agente em seu cluster.

A Microsoft não gerencia seu cluster. Mas a Microsoft fornece a ferramenta e a imagem de VM que você pode usar para gerenciar seu cluster.

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

  • Kubernetes
  • Provedor do Kubernetes do Azure Stack Hub
  • Sistema operacional base

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

  • Você está usando a especificação de cluster (apimodel.json) e o grupo de recursos corretos para o cluster de destino?
  • Você está usando um computador confiável para o computador cliente executar o mecanismo do AKS e do qual você está executando operações de atualização?
  • Verifique se você tem um cluster de backup e se ele está operacional.
  • Se possível, execute o comando de uma VM no ambiente do Azure Stack Hub para diminuir os saltos de rede e possíveis falhas de conectividade.
  • Certifique-se de que sua assinatura tenha espaço suficiente para todo o processo. O processo aloca novas VMs durante o processo.
  • Nenhuma atualização do sistema ou tarefas agendadas são planejadas.
  • Configure uma atualização em etapas em um cluster configurado exatamente como o cluster de produção e teste a atualização antes de fazer isso no cluster de produção

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

Observação

A imagem base do AKS também será atualizada se você estiver usando uma versão mais recente do aks-engine e a imagem estiver disponível no marketplace.

As instruções a seguir usam as etapas mínimas para executar a atualização. Se você quiser mais detalhes, consulte o artigo Atualizando clusters do Kubernetes.

  1. Primeiro, você precisa determinar as versões que pode direcionar para a atualização. Essa versão depende da versão que você tem atualmente e, em seguida, use esse valor de versão para executar a atualização. As versões do Kubernetes compatíveis com o Mecanismo do AKS podem ser listadas executando o seguinte comando:

    Observação

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

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

    Para obter um mapeamento completo do mecanismo do AKS, da imagem base do AKS e das versões do Kubernetes, consulte Versões do mecanismo do AKS com suporte.

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

    Parâmetro Exemplo Descrição
    azure-env AzureStackCloud Para indicar ao mecanismo do AKS que sua plataforma de destino é o Azure Stack Hub, use AzureStackCloud.
    local local O nome da região do Azure Stack Hub. Para o ASDK, a região é definida como local.
    resource-group kube-rg Insira o nome de um novo grupo de recursos ou selecione um grupo de recursos existente. O nome do recurso precisa ser alfanumérico e minúsculo.
    id da assinatura xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Insira seu ID de assinatura. Para obter mais informações, consulte Assinar uma oferta
    modelo de API ./kubernetes-azurestack.json Caminho para o arquivo de configuração do cluster ou modelo de API.
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Insira o GUID da entidade de serviço. A ID do Cliente identificada como a ID do Aplicativo quando o administrador do Azure Stack Hub criou a entidade de serviço.
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Insira o segredo da entidade de serviço. Esse é o segredo do cliente que você configurou ao criar seu serviço.
    sistema de identidade adfs Opcional. Especifique sua solução de gerenciamento de identidades se você estiver usando os Serviços Federados do Active Directory (AD FS).
  3. Com seus valores no lugar, execute o seguinte comando:

    Observação

    Para o AKSe versão 0.75.3 e superior, o comando para atualizar o mecanismo 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 qualquer motivo, a operação de atualização encontrar uma falha, você poderá executar novamente o upgrade comando depois de resolver o problema. O mecanismo do AKS retomará a operação em que falhou da vez anterior.

Etapas para atualizar apenas a imagem do sistema operacional

  1. Examine a tabela supported-kubernetes-versions e determine se você tem a versão do aks-engine e da imagem base do AKS que planeja para a atualização. Se você estiver no AKS Engine versão 0.73.0 ou inferior, para exibir a versão do aks-engine, execute: aks-engine version. Se você estiver no AKS Engine versão 0.75.3 ou superior, para exibir a versão do aks-engine, execute: aks-engine-azurestack version.
  2. Atualize o mecanismo do AKS adequadamente, no computador em que você instalou aks-engine run: ./get-akse.sh --version vx.xx.x substituindo x.xx.x pela versão de destino.
  3. Peça ao operador do Azure Stack Hub para adicionar a versão da imagem base do AKS necessária no Azure Stack Hub Marketplace que você planeja usar.
  4. Execute o aks-engine upgrade comando usando a mesma versão do Kubernetes que você já está usando, mas adicione o --force. Você pode ver um exemplo em Forçando uma atualização.

Etapas para atualizar o cluster para a versão do sistema operacional Ubuntu 20.04

Com o mecanismo do AKS versão 0.75.3 e superior, você pode atualizar suas VMs de cluster do Ubuntu 18.04 para 20.04. Siga estas etapas:

  1. Localize e edite o arquivo que foi gerado durante a api-model.json implantação. Esse deve ser o mesmo arquivo usado para qualquer operação de atualização ou dimensionamento com aks-engine. No mecanismo do AKS versão 0.75.3 e superior, use aks-engine-azurestack.
  2. Localize as seções para masterProfile e agentPoolProfiles, dentro dessas seções altere o valor de distro para aks-ubuntu-20.04.
  3. Salve o api-model.json arquivo e use-o api-model.json em seu aks-engin upgrade comando como faria nas Etapas para atualizar para uma versão mais recente do Kubernetes

Etapas para atualizar o cluster se você estiver usando volumes de armazenamento com o Mecanismo do AKS v0.70.0 e posterior

O projeto Provedor de Nuvem para Azure (também conhecido como cloud-controller-managerprovedor de nuvem fora da árvore ou provedor de nuvem externo) implementa a interface do provedor de nuvem do Kubernetes para nuvens do Azure. A implementação fora da árvore é a substituição da implementação obsoleta na árvore.

No Azure Stack Hub, a partir do Kubernetes v1.21, os clusters baseados no Mecanismo do AKS usarão cloud-controller-managerexclusivamente . Portanto, para implantar 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 Mecanismo do AKS atualizará automaticamente o useCloudControllerManager sinalizador.

Observação

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 para cargas de trabalho que dependem do kubernetes.io/azure-disk provisionador de volume na árvore. Antes de atualizar para o Kubernetes v1.21+, é altamente recomendável executar um backup completo dos dados do aplicativo e validar em um ambiente de pré-produção se os recursos de armazenamento de cluster (PV e PVC) podem ser migrados para um novo provisionador de volume. Saiba como migrar para o driver CSI do Disco do Azure aqui.

Provisionadores de volume

O provisionador de volume na árvore só é compatível com o provedor de nuvem na árvore. Portanto, um cluster v1.21+ precisa incluir um driver CSI (Interface de Armazenamento de Contêiner) se as cargas de trabalho do usuário dependerem do armazenamento persistente. Algumas soluções disponíveis no Azure Stack Hub estão listadas aqui.

O Mecanismo do AKS não habilitará nenhum driver CSI por padrão no Azure Stack Hub. Para cargas de trabalho que exigem um driver CSI, é possível habilitar explicitamente o azuredisk-csi-driver complemento (clusters somente Linux) ou usar Helm para instalar o azuredisk-csi-driver gráfico (clusters Linux e/ou Windows).

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

O processo de atualização de um cluster baseado no Mecanismo do AKS da v1.20 (ou versão inferior) para a v1.21 (ou versão superior) causará tempo de inatividade para cargas de trabalho que dependem do kubernetes.io/azure-disk provisionador de volume na árvore, pois esse provisionador não faz parte do Provedor de Nuvem para Azure.

Se os dados persistentes nos discos subjacentes do Azure precisarem ser preservados, as seguintes etapas extras serão necessárias após a conclusão do processo de atualização do cluster:

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

1. Instale o driver CSI do Disco do Azure manualmente

O script a seguir é usado Helm para instalar o Driver 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. Substitua as classes de armazenamento

O kube-addon-manager criará automaticamente as classes de armazenamento do driver CSI do Disco do Azure (disk.csi.azure.com) depois que as classes de armazenamento na árvore (kubernetes.io/azure-disk) forem excluídas 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. Recrie volumes persistentes

Depois que o driver CSI do Disco do Azure for instalado e as classes de armazenamento substituídas, a próxima etapa será recriar os volumes persistentes (PV) e as declarações de volumes persistentes (PVC) usando o driver CSI do Disco do Azure (ou solução CSI alternativa).

Esse é um processo de várias etapas que pode ser diferente dependendo de como esses recursos foram implantados inicialmente. As etapas de alto nível são:

  • Exclua a implantação ou statefulset que faz referência aos pares PV + PVC a serem migrados (definição de recurso de backup, se necessário).
  • Verifique se a propriedade dos persistentVolumeReclaimPolicy PVs está definida como value Retain (exemplo).
  • Exclua os pares PV + PVC a serem migrados (definições de recursos de backup, se necessário).
  • Para migrar, atualize a definição de recurso dos PVs removendo o azureDisk objeto e adicionando um csi objeto com referência ao AzureDisk original (exemplo).
  • Recrie, na ordem a seguir, o(s) recurso(s) PV, o(s) recurso(s) PVC(s) (se necessário) e, por fim, a implantação ou statefulset.

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

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

Forçando uma atualização

Pode haver condições em que você pode querer forçar uma atualização do cluster. Por exemplo, no primeiro dia, você implanta um cluster em um ambiente desconectado usando 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. Você pode aplicar a nova imagem forçando uma atualização usando a mesma versão do Kubernetes que você já implantou.

Observação

Para o AKSe versão 0.75.3 e superior, o comando para atualizar o mecanismo 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, consulte Forçar atualização.

Próximas etapas