Atualizar um cluster do Kubernetes no Azure Stack Hub

O motor AKS permite-lhe atualizar o cluster que foi originalmente implantado utilizando a ferramenta. Pode manter os clusters utilizando 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 AKS para as aplicar.

Atualizar um cluster

O comando de atualização atualiza a versão Kubernetes e a imagem base do SO. Sempre que executa o comando de upgrade, para cada nó do cluster, o motor AKS cria um novo VM utilizando a Imagem Base AKS associada à versão do motor aks utilizado. Pode usar o aks-engine upgrade comando para manter a moeda de todos os nós de mestre e agente no seu aglomerado.

A Microsoft não gere o seu cluster. Mas a Microsoft fornece a ferramenta e a imagem VM que pode usar para gerir o seu cluster.

Para uma cobertura de upgrades de cluster implantado:

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

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

  • Está a utilizar a especificação de cluster correta (apimodel.json) e o grupo de recursos para o cluster alvo?
  • Está a utilizar uma máquina de confiança para a máquina cliente funcionar com o motor AKS e a partir do qual está a realizar operações de atualização?
  • Certifique-se de que tem um cluster de reserva e que está operacional.
  • Se possível, executar o comando a partir de um VM dentro do ambiente Azure Stack Hub para diminuir o lúpulo 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 novos VM durante o processo.
  • Não estão previstas atualizações do sistema ou tarefas programadas.
  • Crie uma atualização encenada num cluster que esteja configurado exatamente como o cluster de produção e teste a atualização lá antes de o fazer no seu cluster de produção

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

Nota

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

As seguintes instruções utilizam os passos mínimos para efetuar a atualização. Se quiser mais detalhes, consulte o artigo Upgrade de Clusters Kubernetes.

  1. Primeiro, tem de determinar as versões que pode ser alvo para a atualização. Esta versão depende da versão que tem atualmente e, em seguida, utilizar esse valor de versão para realizar a atualização. As versões Kubernetes suportadas pelo seu Motor AKS podem ser listadas executando o seguinte comando:

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

    Para um mapeamento completo das versões AKS, AKS Base Image e Kubernetes consulte versões suportadas do motor AKS.

  2. Recolha a informação necessária para executar o upgrade comando. A atualização utiliza os seguintes parâmetros:

    Parâmetro Exemplo Descrição
    azure-env AzureStackCloud Para indicar ao motor AKS que a sua plataforma-alvo é a utilização AzureStackClouddo Azure Stack Hub .
    localização local O nome da região para o seu Azure Stack Hub. Para a ASDK, a região está preparada para 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 tem de ser alfanumérico e minúsculo.
    id de subscrição xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Insira o seu ID de assinatura. Para mais informações, consulte Subscreva uma oferta
    api-modelo ./kubernetes-azurestack.json Caminho para o ficheiro de configuração do cluster, ou modelo API.
    id cliente xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Insira o chefe de serviço GUID. O ID do Cliente identificou-se como o ID da aplicação quando o administrador do Azure Stack Hub criou o principal de serviço.
    cliente-segredo xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Insira o segredo principal do serviço. Este é o segredo do cliente que criou ao criar o seu serviço.
    sistema de identidade adfs Opcional. Especifique a sua solução de gestão de identidade se estiver a utilizar serviços federados de Diretório Ativo (AD FS).
  3. Com os seus valores no lugar, executar o seguinte comando:

    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, pode voltar a repetir o comando de atualização depois de abordar o problema. O motor AKS retomará a operação onde falhou na anterior.

Passos para apenas atualizar a imagem do SO

  1. Reveja a tabela de versões suportadas de kubernetes e determine se tem a versão do motor aks e da imagem base AKS que planeia para a sua atualização. Para ver a versão do motor aks: aks-engine version.
  2. Atualize o seu motor AKS em conformidade, na máquina onde instalou o motor aks: ./get-akse.sh --version vx.xx.x substituindo x.xx.x pela sua versão-alvo.
  3. Peça ao seu operador Azure Stack Hub para adicionar a versão da Imagem Base AKS que necessita no Azure Stack Hub Marketplace que pretende utilizar.
  4. Executar o aks-engine upgrade comando utilizando a mesma versão de Kubernetes que já está a usar, mas adicione o --force. Pode ver um exemplo em forçar uma atualização.

Passos para atualizar cluster para a versão OS Ubuntu 18.04

Com a versão do motor AKS 0.60.1 ou acima, pode atualizar os seus VMs de cluster de Ubuntu 16.04 a 18.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 upgrade ou escala com aks-engine.
  2. Localize as secções para masterProfile eagentPoolProfiles, dentro dessas secções, altere o valor de distro .aks-ubuntu-18.04
  3. Guarde o api-model.json ficheiro e use o api-model.json ficheiro no seu aks-engin upgrade comando como faria nos Passos para atualizar para uma versão mais recente de Kubernetes

Passos para atualizar o cluster se estiver a utilizar volumes de armazenamento com motor AKS v0.70.0 e mais tarde

O projeto Cloud Provider for Azure (também conhecido como cloud-controller-managerfornecedor de nuvem fora de árvore ou fornecedor externo de nuvem) implementa a interface de provedor de nuvem Kubernetes para nuvens Azure. A implementação fora das árvores é a substituição da implementação prevadizada na árvore.

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

Nota

Considerações de atualização: o processo de atualização de um cluster Kubernetes de v1.20 (ou versão inferior) para v1.21 (ou versão maior) irá causar tempo de inatividade às cargas de trabalho que dependem do kubernetes.io/azure-disk provisionador de volume na árvore. Antes de atualizar para Kubernetes v1.21+, é altamente recomendado realizar 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 de cluster (PV e PVC) podem ser migrados para um novo provisionador de volume. Saiba como migrar para o controlador CSI do Disco Azure aqui.

Provisionadores de volume

O provisionador de volume na árvore só é compatível com o fornecedor de nuvens na árvore. Por isso, um cluster v1.21+ tem de incluir um controlador de interface de armazenamento de contentores (CSI) se as cargas de trabalho do utilizador dependerem de um armazenamento persistente. Algumas soluções disponíveis no Azure Stack Hub estão listadas aqui.

O motor AKS não ativará qualquer controlador CSI por defeito no Azure Stack Hub. Para cargas de trabalho que requerem um controlador CSI, é possível ativar explicitamente o azuredisk-csi-driveraddon (clusters apenas linux) ou usar Helm para instalar o azuredisk-csi-driver gráfico (clusters Linux e/ou Windows).

Migrar armazenamento persistente para o controlador CSI disco Azure

O processo de atualização de um cluster baseado no motor AKS de v1.20 (ou versão inferior) para v1.21 (ou versão maior) irá causar tempo de inatividade a cargas de trabalho que dependem do kubernetes.io/azure-disk provisionador de volume na árvore, uma vez que este provisionador não faz parte do Fornecedor de Nuvens para Azure.

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

  1. Instale o controlador CSI do disco Azure
  2. Remover as classes de armazenamento precotado na árvore
  3. Recriar os volumes e reivindicações persistentes

1. Instale manualmente o controlador CSI do disco Azure

O seguinte script utiliza Helm para instalar o controlador CSI do disco 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 as aulas de armazenamento

Criará kube-addon-manager automaticamente as classes de armazenamento do condutor CSI do disco Azure (disk.csi.azure.com) uma vez que as classes de armazenamento na árvore (kubernetes.io/azure-disk) são 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

Uma vez instalado o Controlador CSI do Disco Azure e as classes de armazenamento substituídas, o próximo passo é recriar os volumes persistentes (PV) e as reivindicações de volumes persistentes (PVC) utilizando o controlador CSI do disco Azure (ou solução CSI alternativa).

Este é um processo em várias etapas que pode ser diferente dependendo da forma como estes recursos foram inicialmente implantados. Os passos do nível elevado são:

  • Elimine a implantação ou o conjunto de estado que faz referência aos pares PV + PVC para migrar (definição de recursos de reserva, se necessário).
  • Certifique-se de que a propriedade dos persistentVolumeReclaimPolicy PVs está definida como valor Retain (exemplo).
  • Elimine os pares PV + PVC para migrar (definições de recursos de reserva, se necessário).
  • Para migrar, atualize a definição de recursos dos PVs removendo o azureDisk objeto e adicionando um csi objeto com referência ao AzureDisk original (exemplo).
  • Recrie, na seguinte ordem, o recurso/s PV, recursos/s de PVC (se necessário) e, finalmente, a implantação ou o conjunto de estado.

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

Depois de executar o script de migração, se a cápsula estiver presa com um erro "Incapaz de fixar ou montar volumes", certifique-se de que o Controlador CSI do Disco Azure foi instalado e que as classes de armazenamento foram recriadas.

Forçar uma atualização

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

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 a atualização da Força.

Passos seguintes