Atualizar um cluster do Kubernetes usando o mecanismo AKS no Azure Stack Hub
O mecanismo AKS permite atualizar o cluster do Kubernetes que foi implantado originalmente usando a ferramenta no Hub de Pilha do Azure. Você pode manter os clusters usando o mecanismo 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 AKS para aplicá-las.
Atualizar um cluster
O comando upgrade atualiza a versão do Kubernetes e a imagem do sistema operacional base. Toda vez que você executa o comando upgrade, para cada nó do cluster, o mecanismo AKS cria uma nova VM usando a imagem base AKS associada à versão do aks-engine usada.
Para as versões 0.73.0 e inferiores do AKS Engine, 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 AKS Engine, você pode usar o aks-engine-azurestack upgrade
comando para manter a moeda de cada nó mestre e agente no cluster.
A Microsoft não gerencia seu cluster. Mas a Microsoft fornece a ferramenta e a imagem da VM que você pode usar para gerenciar seu cluster.
Para um cluster implantado, as atualizações abrangem:
- Kubernetes
- Provedor de 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 uma máquina confiável para a máquina cliente executar o mecanismo AKS e a partir da 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 a sua subscrição tem 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 estágios em um cluster configurado exatamente como o cluster de produção e teste a atualização antes de fazê-lo 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 é atualizada se você estiver usando uma versão mais recente do aks-engine e a imagem estiver disponível no mercado.
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 Kubernetes.
Você precisa primeiro determinar as versões que você 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 suportadas pelo seu AKS Engine podem ser listadas executando o seguinte comando:
Observação
Para AKSe versão 0.75.3 e acima, o comando para obter as versões do mecanismo AKS é
aks-engine-azurestack get-versions
.aks-engine get-versions --azure-env AzureStackCloud
Para obter um mapeamento completo do mecanismo AKS, da imagem base do AKS e das versões do Kubernetes, consulte Versões suportadas do mecanismo AKS.
Colete as informações necessárias para executar o
upgrade
comando. Oupgrade
comando usa os seguintes parâmetros:Parâmetro Exemplo Descrição azure-env AzureStackCloud Para indicar ao mecanismo AKS que sua plataforma de destino é o Hub de Pilha do Azure, use AzureStackCloud
.local local O nome da região do Hub de Pilha do Azure. Para o ASDK, a região está 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 Introduza o seu ID de subscrição. Para obter mais informações, consulte Inscrever-se em uma oferta api-modelo ./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. Este é 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). Com seus valores no lugar, execute o seguinte comando:
Observação
Para AKSe versão 0.75.3 e superior, o comando para atualizar o mecanismo 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
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 motor AKS retomará a operação onde falhou da vez anterior.
Etapas para atualizar apenas a imagem do sistema operacional
- Revise 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 visualizar a versão do aks-engine execute:
aks-engine version
. Se você estiver no AKS Engine versão 0.75.3 ou superior, para visualizar a versão do aks-engine execute:aks-engine-azurestack version
. - Atualize seu mecanismo AKS de acordo, na máquina onde você instalou o aks-engine run:
./get-akse.sh --version vx.xx.x
substituindo x.xx.x por sua versão de destino. - Peça ao operador do Azure Stack Hub para adicionar a versão da Imagem Base AKS necessária no Azure Stack Hub Marketplace que você planeja usar.
- 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.
Passos para atualizar o cluster para a versão do sistema operacional Ubuntu 20.04
Com o mecanismo AKS versão 0.75.3 e acima, você pode atualizar suas VMs de cluster do Ubuntu 18.04 para 20.04. Siga estas etapas:
- 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 escala comaks-engine
o . No AKS Engine versão 0.75.3 e superior, useaks-engine-azurestack
. - Localize as seções para
masterProfile
eagentPoolProfiles
, dentro dessas seções altere o valor dedistro
paraaks-ubuntu-20.04
. - Salve o
api-model.json
arquivo e use oapi-model.json
arquivo em seuaks-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 AKS Engine v0.70.0 e posterior
O projeto Provedor de Nuvem para Azure (também conhecido como cloud-controller-manager
provedor 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 na árvore preterida.
No Azure Stack Hub, a partir do Kubernetes v1.21, os clusters baseados no AKS Engine usarão cloud-controller-manager
exclusivamente o . 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 AKS Engine atualizará automaticamente o useCloudControllerManager
sinalizador.
Observação
Considerações de atualização: o processo de atualização de um cluster 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 que 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 de 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 (Container Storage Interface) se as cargas de trabalho do usuário dependerem de armazenamento persistente. Algumas soluções disponíveis no Azure Stack Hub estão listadas aqui.
O AKS Engine não habilitará nenhum driver CSI por padrão no Hub de Pilha do Azure. Para cargas de trabalho que exigem um driver CSI, é possível habilitar explicitamente o complemento azuredisk-csi-driver
(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 de disco do Azure
O processo de atualização de um cluster baseado no AKS Engine 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 persistirem nos discos subjacentes do Azure devem ser preservados, as seguintes etapas extras serão necessárias depois que o processo de atualização do cluster for concluído:
- Instalar o driver CSI de disco do Azure
- Remova as classes de armazenamento em árvore preteridas
- Recriar os volumes e declarações persistentes
1. Instale o driver CSI de disco do Azure manualmente
O script a seguir usa Helm
para instalar o Driver CSI de 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
) assim 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. Recriar volumes persistentes
Depois que o Driver CSI de 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 de 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 PVs
persistentVolumeReclaimPolicy
está definida como valueRetain
(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 umcsi
objeto com referência ao AzureDisk original (exemplo). - Recrie, na seguinte ordem, o(s) recurso(s) PV, o(s) recurso(s) PV (se necessário) e, finalmente, 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 de 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 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 AKSe versão 0.75.3 e superior, o comando para atualizar o mecanismo 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.