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

Pode implementar um cluster do Kubernetes no Azure Stack Hub a partir de uma VM cliente com motor AKS. Neste artigo, vamos analisar a escrita de uma especificação de cluster, a implementação de um cluster com o ficheiro apimodel.json e a verificação do cluster ao implementar o MySQL com o Helm.

Definir uma especificação de cluster

Pode especificar uma especificação de cluster num ficheiro de documento com o formato JSON denominado modelo de API. O motor do AKS utiliza uma especificação de cluster no modelo de API para criar o cluster.

Pode encontrar exemplos do modelo de API para o seu SO e o número da versão do motor do AKS para versões recentes no motor do AKS e mapeamento de imagens correspondente.

  1. Localize o número da versão do motor do AKS, por exemplo, v.0.63.0, na tabela.
  2. Na tabela Exemplos de Modelos de API, selecione e abra a ligação para o SO.
  3. Selecione Não processado. Pode utilizar o URL nas seguintes instruções.

Um URL para o modelo de API pode ter o seguinte aspeto:

https://raw.githubusercontent.com/Azure/aks-engine-azurestack/master/examples/azure-stack/kubernetes-azurestack.json

Para cada um dos exemplos seguintes, substitua <URL for the API Model> pelo URL.

Atualizar a API de modelo

Esta secção analisa a criação de um modelo de API para o cluster.

  1. Comece por utilizar um ficheiro de Modelo de API do Azure Stack Hub para Linux ou Windows. A partir do computador, instalou o motor AKS, execute:

    curl -o kubernetes-azurestack.json <URL for the API Model>
    

    Nota

    Se estiver desligado, pode transferir o ficheiro e copiá-lo manualmente para o computador desligado onde planeia editá-lo. Pode copiar o ficheiro para o seu computador Linux com ferramentas como PuTTY ou WinSCP.

  2. Para abrir o modelo de API num editor, pode utilizar nano:

    nano ./kubernetes-azurestack.json
    

    Nota

    Se não tiver o nano instalado, pode instalar o nano no Ubuntu: sudo apt-get install nano.

  3. No ficheiro kubernetes-azurestack.json , localize orchestratorRelease e orchestratorVersion. Selecione uma das versões suportadas do Kubernetes; pode encontrar a tabela de versões nas notas de versão. Especifique x.xx orchestratorRelease e orchestratorVersion como x.xx.x. Para obter uma lista das versões atuais, veja Versões suportadas do motor do AKS

  4. Localize customCloudProfile e forneça o URL ao portal do inquilino. Por exemplo, https://portal.local.azurestack.external.

  5. Adicione "identitySystem":"adfs" se estiver a utilizar o AD FS. Por exemplo,

        "customCloudProfile": {
            "portalURL": "https://portal.local.azurestack.external",
            "identitySystem": "adfs"
        },
    

    Nota

    Se estiver a utilizar Microsoft Entra ID para o seu sistema de identidade, não precisa de adicionar o campo identitySystem.

  6. Em masterProfile, defina os seguintes campos:

    Campo Descrição
    dnsPrefix Introduza uma cadeia exclusiva que servirá para identificar o nome do anfitrião das VMs. Por exemplo, um nome baseado no nome do grupo de recursos.
    count Introduza o número de modelos globais que pretende para a sua implementação. O mínimo para uma implementação ha é 3, mas 1 é permitido para implementações não HA.
    vmSize Introduza um tamanho suportado pelo Azure Stack Hub, por exemplo Standard_D2_v2.
    distribuição Introduza aks-ubuntu-18.04 ou aks-ubuntu-20.04.
  7. Em agentPoolProfiles atualização:

    Campo Descrição
    count Introduza o número de agentes que pretende para a sua implementação. A contagem máxima de nós a utilizar por subscrição é de 50. Se estiver a implementar mais de um cluster por subscrição, certifique-se de que a contagem total de agentes não ultrapassa os 50. Certifique-se de que utiliza os itens de configuração especificados no ficheiro JSON do modelo de API de exemplo.
    vmSize Introduza um tamanho suportado pelo Azure Stack Hub, por exemplo Standard_D2_v2.
    distribuição Introduza aks-ubuntu-18.04, aks-ubuntu-20.04 ou Windows.
    Utilize Windows para agentes que serão executados no Windows. Por exemplo, consulte kubernetes-windows.json
  8. Em linuxProfile atualização:

    Campo Descrição
    adminUsername Introduza o nome de utilizador administrador da VM.
    ssh Introduza a chave pública que será utilizada para autenticação SSH com VMs. Utilize ssh-rsa e, em seguida, a chave. Para obter instruções sobre como criar uma chave pública, veja Criar uma chave SSH para Linux.

    Se estiver a implementar numa rede virtual personalizada, pode encontrar instruções sobre como localizar e adicionar a chave e os valores necessários às matrizes adequadas no Modelo de API em Implementar um cluster do Kubernetes numa rede virtual personalizada.

    Nota

    O motor do AKS para o Azure Stack Hub não lhe permite fornecer os seus próprios certificados para a criação do cluster.

  9. Se estiver a utilizar o Windows, em windowsProfile atualizar os valores de adminUsername: e adminPassword:

    "windowsProfile": {
    "adminUsername": "azureuser",
    "adminPassword": "",
    "sshEnabled": true
    }
    

Mais informações sobre o modelo de API

Adicionar certificado ao utilizar o ASDK

Se estiver a implementar um cluster no Azure Stack Development Kit (ASDK) e a utilizar o Linux, terá de adicionar o certificado de raiz ao arquivo de certificados fidedigno da VM cliente com o motor AKS.

  1. Localize o certificado de raiz na VM neste diretório: /var/lib/waagent/Certificates.pem.
  2. Copie o ficheiro de certificado:
    sudo cp /var/lib/waagent/Certificates.pem /usr/local/share/ca-certificates/azurestacka.crt
    sudo update-ca-certificates
    

Implementar um cluster do Kubernetes

Depois de recolher todos os valores necessários no modelo de API, pode criar o cluster. Neste momento, deve:

Peça ao operador do Azure Stack Hub para:

  • Verifique o estado de funcionamento do sistema, sugira a execução Test-AzureStack e a ferramenta de monitorização de hardware do fornecedor do OEM.
  • Verifique a capacidade do sistema, incluindo recursos como memória, armazenamento e IPs públicos.
  • Forneça detalhes sobre a quota associada à sua subscrição para que possa verificar se ainda existe espaço suficiente para o número de VMs que planeia utilizar.

Continue a implementar um cluster:

  1. Reveja os parâmetros disponíveis para o motor AKS nos sinalizadores da CLI do Azure Stack Hub.

    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.
    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).
    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 em minúsculas.
    modelo de api ./kubernetes-azurestack.json Caminho para o ficheiro de configuração do cluster ou modelo de API.
    output-directory kube-rg Introduza o nome do diretório para conter o ficheiro de saída apimodel.json e outros ficheiros gerados.
    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. Configure o segredo do cliente ao criar o seu serviço.
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Introduza o seu ID de Subscrição. Tem de fornecer uma subscrição para o inquilino. A implementação na subscrição administrativa não é suportada. Para obter mais informações, consulte Subscrever uma oferta

    Segue-se um exemplo:

    Nota

    Para a versão 0.75.3 e superior do AKSe, o comando para implementar um cluster de motor do AKS é aks-engine-azurestack deploy.

    aks-engine deploy \
    --azure-env AzureStackCloud \
    --location <for asdk is local> \
    --resource-group kube-rg \
    --api-model ./kubernetes-azurestack.json \
    --output-directory kube-rg \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  2. Se, por algum motivo, a execução falhar após a criação do diretório de saída, pode corrigir o problema e voltar a executar o comando. Se estiver a executar novamente a implementação e já tiver utilizado o mesmo diretório de saída, o motor do AKS devolverá um erro a indicar que o diretório já existe. Pode substituir o diretório existente com o sinalizador : --force-overwrite.

  3. Guarde a configuração do cluster do motor AKS numa localização segura e encriptada.

    Localize o ficheiro apimodel.json. Guarde-o numa localização segura. Este ficheiro será utilizado como entrada em todas as outras operações do motor AKS.

    O ficheiro apimodel.json gerado contém o principal de serviço, o segredo e a chave pública SSH que utiliza no modelo de API de entrada. O ficheiro também tem todos os outros metadados necessários para o motor do AKS efetuar todas as outras operações. Se perder o ficheiro, o motor do AKS não conseguirá configurar o cluster.

    Os segredos não estão encriptados. Mantenha o ficheiro num local encriptado e seguro.

Verificar o cluster

Verifique o cluster ao ligar a kubectl, obter as informações e, em seguida, obter os estados dos nós.

  1. Obtenha o kubeconfig ficheiro para ligar ao plano de controlo.

    • Se já tiver kubectl instalado, verifique o ficheiro do kubeconfig cluster recém-criado neste caminho /kubeconfig/kubeconfig.jsonde diretório . Pode adicionar o /kubeconfig.json ao .kube diretório para aceder ao seu novo cluster.
      Se não tiver instalado kubectlo , visite Instalar Ferramentas para instalar a ferramenta de linha de comandos do Kubernetes. Caso contrário, siga as instruções abaixo para aceder ao cluster a partir de um dos nós do plano de controlo.
  2. Obtenha o endereço IP público de um dos nós do plano de controlo com o portal do Azure Stack Hub.

  3. A partir de um computador com acesso à sua instância do Azure Stack Hub, ligue-se através de SSH ao novo nó do plano de controlo com um cliente, como PuTTY ou MobaXterm.

  4. Para o nome de utilizador SSH, utilize "azureuser" e o ficheiro de chave privada do par de chaves que forneceu para a implementação do cluster.

  5. Verifique se os pontos finais do cluster estão em execução:

    kubectl cluster-info
    

    O resultado deve ter um aspeto semelhante ao seguinte:

    Kubernetes master is running at https://democluster01.location.domain.com
    CoreDNS is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    Metrics-server is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
    
  6. Em seguida, reveja os estados dos nós:

    kubectl get nodes
    

    O resultado deve ser semelhante ao seguinte:

    k8s-linuxpool-29969128-0   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-1   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-2   Ready      agent    9d    v1.15.5
    k8s-master-29969128-0      Ready      master   9d    v1.15.5
    k8s-master-29969128-1      Ready      master   9d    v1.15.5
    k8s-master-29969128-2      Ready      master   9d    v1.15.5
    

Resolver problemas de implementação do cluster

Ao encontrar erros ao implementar um cluster do Kubernetes com o motor do AKS, pode verificar:

  1. Está a utilizar as credenciais corretas do Principal de Serviço (SPN)?
  2. O SPN tem uma função de "Contribuidores" para a subscrição do Azure Stack Hub?
  3. Tem uma quota suficientemente grande no seu plano do Azure Stack Hub?
  4. A instância do Azure Stack Hub está a ter um patch ou uma atualização a ser aplicada?

Para obter mais informações, veja o artigo Resolução de problemas no repositório do GitHub Azure/aks-engine-azurestack .

Rodar o segredo do principal de serviço

Após a implementação do cluster do Kubernetes com o motor AKS, o principal de serviço (SPN) é utilizado para gerir interações com o Azure Resource Manager na instância do Azure Stack Hub. Em algum momento, o segredo deste principal de serviço pode expirar. Se o segredo expirar, pode atualizar as credenciais ao:

  • Atualizar cada nó com o novo segredo do principal de serviço.
  • Ou atualizar as credenciais do modelo de API e executar a atualização.

Atualizar cada nó manualmente

  1. Obtenha um novo segredo para o principal de serviço do seu operador de cloud. Para obter instruções sobre o Azure Stack Hub, veja Utilizar uma identidade de aplicação para aceder aos recursos do Azure Stack Hub.
  2. Utilize as novas credenciais fornecidas pelo operador da cloud para atualizar /etc/kubernetes/azure.json em cada nó. Depois de efetuar a atualização, reinicie e kubelekube-controller-manager.

Atualizar o cluster com a atualização do motor aks

Em alternativa, pode substituir as credenciais no apimodel.json e executar a atualização com o ficheiro .json atualizado para a mesma ou mais recente versão do Kubernetes. Para obter instruções sobre como atualizar o modelo, veja Atualizar um cluster do Kubernetes no Azure Stack Hub

Passos seguintes