Atualizar um cluster Kubernetes usando o mecanismo AKS no Azure Stack Hub
O mecanismo AKS permite que você atualize o cluster Kubernetes que foi originalmente implantado usando a ferramenta no Azure Stack Hub. 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 base do sistema operacional. 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 comando para manter a aks-engine upgrade
moeda de cada nó mestre e agente em seu 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 em seu 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 do Kubernetes do Azure Stack Hub
- SO de 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 em seu cluster de produção
Etapas para atualizar para uma versão mais recente do Kubernetes
Nota
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 do Kubernetes.
Você precisa primeiro determinar as versões que você pode direcionar para a atualização. Esta 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 mecanismo AKS podem ser listadas executando o seguinte comando:
Nota
Para AKSe versão 0.75.3 e superior, 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 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 Description Azure-ENV AzureStackCloud Para indicar ao mecanismo AKS que sua plataforma de destino é o Azure Stack Hub, use AzureStackCloud
.localização local O nome da região para o seu Azure Stack Hub. 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 subscrição xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Introduza o seu ID de Subscrição. Para obter mais informações, consulte Assinar uma oferta Modelo API ./kubernetes-azurestack.json Caminho para o arquivo de configuração do cluster ou modelo de API. ID do cliente 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 Hub de Stack do Azure 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 estiver usando os Serviços Federados do Ative Directory (AD FS). Com os valores no lugar, execute o seguinte comando:
Nota
Para AKSe versão 0.75.3 e superior, o comando para atualizar o motor 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 mecanismo 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 você planeja para sua atualização. Se você estiver na versão 0.73.0 ou inferior do AKS Engine, para visualizar a versão do aks-engine run:
aks-engine version
. Se você estiver na versão 0.75.3 ou superior do AKS Engine, para visualizar a versão do aks-engine run:aks-engine-azurestack version
. - Atualize o seu motor AKS em conformidade, na máquina onde instalou o aks-engine run:
./get-akse.sh --version vx.xx.x
substituindo x.xx.x pela sua versão pretendida. - Peça ao seu operador do Azure Stack Hub para adicionar a versão da Imagem Base AKS de que necessita no Azure Stack Hub Marketplace que planeia utilizar.
- 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 a versão 0.75.3 e superior do motor AKS, você pode atualizar suas VMs de cluster do Ubuntu 18.04 para 20.04. Siga estes passos:
- 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 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 out-of-tree é a substituição da implementação in-tree obsoleta.
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 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.
Nota
Considerações sobre 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 em cluster (PV e PVC) podem ser migrados para um novo provisionador de volume. Saiba como migrar para o driver Azure Disk CSI 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+ deve 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 Azure Stack Hub. Para cargas de trabalho que exigem um driver CSI, é possível habilitar explicitamente o azuredisk-csi-driver
addon (clusters somente Linux) ou usar Helm
para instalar o azuredisk-csi-driver
gráfico (clusters Linux e/ou Windows).
Migrar armazenamento persistente para o driver CSI do 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 provisionador de volume na árvore, kubernetes.io/azure-disk
pois esse provisionador não faz parte do Provedor de Nuvem para Azure.
Se os dados persistentes nos discos subjacentes do Azure devem ser preservados, as seguintes etapas extras são necessárias assim que o processo de atualização do cluster for concluído:
- Instalar o driver Azure Disk CSI
- Remover as classes de armazenamento em árvore preteridas
- Recriar os volumes persistentes e as declarações
1. Instale o driver CSI do Azure Disk 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 Azure Disk (disk.csi.azure.com
) assim que as classes de armazenamento em á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 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).
Este é 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 o 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 valorRetain
(exemplo). - Exclua os pares PV + PVC para migrar (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) PVC, 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 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ê queira 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.
Nota
Para AKSe versão 0.75.3 e superior, o comando para atualizar o motor 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.