Criar clusters do Kubernetes com a CLI do Azure

Aplica-se a: Azure Stack HCI, versão 23H2

Este artigo descreve como criar clusters do Kubernetes no Azure Stack HCI com a CLI do Azure. O fluxo de trabalho é o seguinte:

  1. Crie um cluster do Kubernetes no Azure Stack HCI 23H2 com a CLI do Azure. O cluster está ligado ao Azure Arc por predefinição.
  2. Ao criar o cluster, fornece um grupo de Microsoft Entra que contém a lista de Microsoft Entra utilizadores com acesso de administrador do cluster do Kubernetes.
  3. Aceda ao cluster com kubectl e a sua Microsoft Entra ID.
  4. Execute uma aplicação de vários contentores de exemplo com um front-end web e uma instância de Redis no cluster.

Antes de começar

  • Antes de começar, certifique-se de que tem os seguintes detalhes do administrador de infraestrutura no local:
    • ID da subscrição do Azure – o ID da subscrição do Azure em que o Azure Stack HCI é utilizado para implementação e registo.
    • ID de Localização Personalizada - ID de Resource Manager do Azure da localização personalizada. A localização personalizada é configurada durante a implementação do cluster do Azure Stack HCI. O seu administrador de infraestrutura deve fornecer-lhe o ID de Resource Manager da localização personalizada. Este parâmetro é necessário para criar clusters do Kubernetes. Também pode obter o ID do Resource Manager com az customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsv, se o administrador da infraestrutura fornecer um nome de localização personalizado e o nome do grupo de recursos.
    • ID de Rede - ID de Resource Manager do Azure da rede lógica do Azure Stack HCI criada ao seguir estes passos. O seu administrador deve dar-lhe o ID da rede lógica. Este parâmetro é necessário para criar clusters do Kubernetes. Também pode obter o ID az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv de Resource Manager do Azure com se souber o grupo de recursos no qual a rede lógica foi criada.
  • Pode executar os passos neste artigo num computador de desenvolvimento local para criar um cluster do Kubernetes na implementação remota do Azure Stack HCI. Certifique-se de que tem a versão mais recente da CLI do Az no seu computador de desenvolvimento. Também pode optar por atualizar a versão da CLI do Az com az upgrade.
  • Para ligar ao cluster do Kubernetes a partir de qualquer lugar, crie um grupo Microsoft Entra e adicione membros ao mesmo. Todos os membros no grupo Microsoft Entra têm acesso de administrador de cluster ao cluster. Certifique-se de que se adiciona como membro ao grupo Microsoft Entra. Se não se adicionar a si próprio, não pode aceder ao cluster do Kubernetes com o kubectl. Para obter mais informações sobre como criar Microsoft Entra grupos e adicionar utilizadores, veja Gerir grupos de Microsoft Entra e associação a grupos.
  • Transfira e instale o kubectl no seu computador de desenvolvimento. A ferramenta de linha de comandos do Kubernetes, kubectl, permite-lhe executar comandos em clusters do Kubernetes. Pode utilizar o kubectl para implementar aplicações, inspecionar e gerir recursos de cluster e ver registos.

Instalar a extensão da CLI do Azure

Execute o seguinte comando para instalar as extensões necessárias da CLI do Azure:

az extension add -n aksarc --upgrade
az extension add -n customlocation --upgrade
az extension add -n stack-hci-vm --upgrade
az extension add -n connectedk8s --upgrade

Criar um cluster do Kubernetes

Utilize o az aksarc create comando para criar um cluster do Kubernetes no AKS Arc. Certifique-se de que inicia sessão no Azure antes de executar este comando. Se tiver várias subscrições do Azure, selecione o ID de subscrição adequado com o comando az account set .

az aksarc create -n $aksclustername -g $resource_group --custom-location $customlocationID --vnet-ids $logicnetId --aad-admin-group-object-ids $aadgroupID --generate-ssh-keys --load-balancer-count 0  --control-plane-ip $controlplaneIP

Após alguns minutos, o comando é concluído e devolve informações formatadas em JSON sobre o cluster.

Ligar ao cluster do Kubernetes

Agora, pode ligar-se ao cluster do Kubernetes ao executar o comando a az connectedk8s proxy partir do seu computador de desenvolvimento. Certifique-se de que inicia sessão no Azure antes de executar este comando. Se tiver várias subscrições do Azure, selecione o ID de subscrição adequado com o comando az account set .

Este comando transfere o kubeconfig do cluster do Kubernetes para o seu computador de desenvolvimento e abre um canal de ligação proxy para o cluster do Kubernetes no local. O canal está aberto enquanto o comando for executado. Deixe que este comando seja executado enquanto quiser aceder ao cluster. Se exceder o limite de tempo, feche a janela da CLI, abra uma nova e, em seguida, execute o comando novamente.

Tem de ter permissões de Contribuidor no grupo de recursos que aloja o cluster do Kubernetes para executar o seguinte comando com êxito:

az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config

Resultado esperado:

Proxy is listening on port 47011
Merged "aks-workload" as current context in .\\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using
kubeconfig at .\\aks-arc-kube-config
Press Ctrl+C to close proxy.

Mantenha esta sessão em execução e ligue-se ao cluster do Kubernetes a partir de uma linha de comandos/terminal diferente. Verifique se consegue ligar ao cluster do Kubernetes ao executar o comando kubectl get. Este comando devolve uma lista dos nós de cluster:

kubectl get node -A --kubeconfig .\aks-arc-kube-config

O exemplo de saída seguinte mostra o nó criado nos passos anteriores. Certifique-se de que o estado do nó é Pronto:

NAME             STATUS ROLES                AGE VERSION
moc-l0ttdmaioew  Ready  control-plane,master 34m v1.24.11
moc-ls38tngowsl  Ready  <none>               32m v1.24.11

Implementar a aplicação

Um ficheiro de manifesto do Kubernetes define o estado pretendido de um cluster, como as imagens de contentor a executar.

Pode utilizar um manifesto para criar todos os objetos necessários para executar a aplicação Azure Vote. Este manifesto inclui duas implementações do Kubernetes:

  • As aplicações python do Azure Vote de exemplo.
  • Uma instância de Redis.

Também são criados dois serviços do Kubernetes :

  • Um serviço interno para a instância de Redis.
  • Um serviço externo para aceder à aplicação Azure Vote a partir da Internet.

Crie um ficheiro com o nome azure-vote.yaml e copie o seguinte manifesto:

apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: azure-vote-back 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: azure-vote-back 
      template: 
        metadata: 
          labels: 
            app: azure-vote-back 
        spec: 
          nodeSelector: 
            "kubernetes.io/os": linux 
          containers: 
          - name: azure-vote-back 
            image: mcr.microsoft.com/oss/bitnami/redis:6.0.8 
            env: 
            - name: ALLOW_EMPTY_PASSWORD 
              value: "yes" 
            resources: 
              requests: 
                cpu: 100m 
                memory: 128Mi 
              limits: 
                cpu: 250m 
                memory: 256Mi 
            ports: 
            - containerPort: 6379 
              name: redis 
    ---
    apiVersion: v1
    kind: Service 
    metadata: 
      name: azure-vote-back 
    spec: 
      ports: 
      - port: 6379 
      selector: 
        app: azure-vote-back 
    --- 
    apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: azure-vote-front 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: azure-vote-front 
      template: 
        metadata: 
          labels: 
            app: azure-vote-front 
        spec: 
          nodeSelector: 
            "kubernetes.io/os": linux 
          containers: 
          - name: azure-vote-front 
            image: mcr.microsoft.com/azuredocs/azure-vote-front:v1 
            resources: 
              requests: 
                cpu: 100m 
                memory: 128Mi 
              limits: 
                cpu: 250m 
                memory: 256Mi 
            ports: 
            - containerPort: 80 
            env: 
            - name: REDIS 
              value: "azure-vote-back" 
    --- 
    apiVersion: v1 
    kind: Service 
    metadata: 
      name: azure-vote-front 
    spec: 
      type: LoadBalancer 
      ports: 
      - port: 80 
      selector: 
        app: azure-vote-front

Implemente a aplicação com o comando kubectl apply e especifique o nome do YAML:

kubectl apply -f azure-vote.yaml --kubeconfig .\\aks-arc-kube-config

O resultado de exemplo seguinte mostra as implementações e serviços criados com êxito:

deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created

Testar a aplicação

Quando a aplicação é executada, um serviço do Kubernetes expõe o front-end da aplicação à Internet. Este processo pode demorar alguns minutos a concluir.

Monitorize o progresso com o comando kubectl get service com o --watch argumento .

kubectl get service azure-vote-front --watch --kubeconfig .\aks-arc-kube-config

A saída EXTERNAL-IP do serviço azure-vote-front é apresentada inicialmente como pendente.

NAME             TYPE         CLUSTER-IP EXTERNAL-IP PORT(S)      AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending>   80:30572/TCP 6s

Assim que o endereço EXTERNAL-IP mudar de pendente para um endereço IP público real, utilize CTRL-C para parar o processo de watch kubectl. O resultado de exemplo seguinte mostra um endereço IP público válido atribuído ao serviço:

azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m

Para ver a aplicação Azure Vote em ação, abra um browser para o endereço IP externo do seu serviço.

Eliminar o cluster

Execute o az aksarc delete comando para limpar o cluster que criou:

az aksarc delete --resource-group $aksclustername --name $resource_group

Passos seguintes