Creare cluster Kubernetes con l'interfaccia della riga di comando di Azure

Si applica a: Azure Stack HCI, versione 23H2

Questo articolo descrive come creare cluster Kubernetes in Azure Stack HCI usando l'interfaccia della riga di comando di Azure. Il flusso di lavoro prevede le fasi seguenti:

  1. Creare un cluster Kubernetes in Azure Stack HCI 23H2 usando l'interfaccia della riga di comando di Azure. Il cluster è connesso ad Azure Arc per impostazione predefinita.
  2. Durante la creazione del cluster, viene fornito un gruppo di Microsoft Entra che contiene l'elenco di utenti Microsoft Entra con accesso amministratore del cluster Kubernetes.
  3. Accedere al cluster usando kubectl e il Microsoft Entra ID.
  4. Eseguire un'applicazione multi-contenitore di esempio con un front-end Web e un'istanza Redis nel cluster.

Prima di iniziare

  • Prima di iniziare, assicurarsi di avere i dettagli seguenti dall'amministratore dell'infrastruttura locale:
    • ID sottoscrizione di Azure : ID sottoscrizione di Azure in cui Azure Stack HCI viene usato per la distribuzione e la registrazione.
    • ID percorso personalizzato - ID Resource Manager di Azure della posizione personalizzata. Il percorso personalizzato viene configurato durante la distribuzione del cluster Azure Stack HCI. L'amministratore dell'infrastruttura deve fornire l'ID Resource Manager della posizione personalizzata. Questo parametro è necessario per creare cluster Kubernetes. È anche possibile ottenere l'ID Resource Manager usando az customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsv, se l'amministratore dell'infrastruttura fornisce un nome di posizione e un nome del gruppo di risorse personalizzato.
    • ID di rete: Azure Resource Manager ID della rete logica di Azure Stack HCI creata seguendo questa procedura. L'amministratore deve fornire l'ID della rete logica. Questo parametro è necessario per creare cluster Kubernetes. È anche possibile ottenere l'ID Resource Manager di Azure usando az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv se si conosce il gruppo di risorse in cui è stata creata la rete logica.
  • È possibile eseguire i passaggi descritti in questo articolo in un computer di sviluppo locale per creare un cluster Kubernetes nella distribuzione remota di Azure Stack HCI. Assicurarsi di avere la versione più recente dell'interfaccia della riga di comando di Az nel computer di sviluppo. È anche possibile scegliere di aggiornare la versione dell'interfaccia della riga di comando az usando az upgrade.
  • Per connettersi al cluster Kubernetes da qualsiasi posizione, creare un gruppo di Microsoft Entra e aggiungerli. Tutti i membri del gruppo Microsoft Entra dispongono dell'accesso amministratore del cluster al cluster. Assicurarsi di aggiungere se stessi come membro al gruppo di Microsoft Entra. Se non si aggiunge autonomamente, non è possibile accedere al cluster Kubernetes usando kubectl. Per altre informazioni sulla creazione di gruppi Microsoft Entra e sull'aggiunta di utenti, vedere Gestire i gruppi e l'appartenenza a gruppi Microsoft Entra.
  • Scaricare e installare kubectl nel computer di sviluppo. Lo strumento da riga di comando Kubernetes, kubectl, consente di eseguire comandi nei cluster Kubernetes. È possibile usare kubectl per distribuire applicazioni, esaminare e gestire le risorse del cluster e visualizzare i log.

Installare l'estensione dell'interfaccia della riga di comando di Azure

Eseguire il comando seguente per installare le estensioni necessarie dell'interfaccia della riga di comando di 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

Creare un cluster Kubernetes

Usare il az aksarc create comando per creare un cluster Kubernetes in AKS Arc. Assicurarsi di accedere ad Azure prima di eseguire questo comando. Se sono presenti più sottoscrizioni di Azure, selezionare l'ID sottoscrizione appropriato usando il 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

Il comando viene completato dopo pochi minuti e vengono restituite informazioni in formato JSON sul cluster.

Connettersi al cluster Kubernetes

È ora possibile connettersi al cluster Kubernetes eseguendo il az connectedk8s proxy comando dal computer di sviluppo. Assicurarsi di accedere ad Azure prima di eseguire questo comando. Se sono presenti più sottoscrizioni di Azure, selezionare l'ID sottoscrizione appropriato usando il comando az account set .

Questo comando scarica il kubeconfig del cluster Kubernetes nel computer di sviluppo e apre un canale di connessione proxy al cluster Kubernetes locale. Il canale è aperto per tutto il tempo in cui viene eseguito il comando. Lasciare che questo comando sia eseguito per tutto il tempo necessario per accedere al cluster. Se si verifica il timeout, chiudere la finestra dell'interfaccia della riga di comando, aprire una nuova, quindi eseguire di nuovo il comando.

È necessario disporre delle autorizzazioni collaboratori nel gruppo di risorse che ospita il cluster Kubernetes per eseguire correttamente il comando seguente:

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

Output previsto:

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.

Mantenere in esecuzione questa sessione e connettersi al cluster Kubernetes da un prompt dei comandi/terminale diverso. Verificare che sia possibile connettersi al cluster Kubernetes eseguendo il comando kubectl get. Questo comando restituisce un elenco dei nodi del cluster:

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

Nell'esempio di output seguente viene illustrato il nodo creato nei passaggi precedenti. Assicurarsi che lo stato del nodo sia Pronto:

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

Distribuire l'applicazione

Un file manifesto Kubernetes definisce lo stato desiderato di un cluster, ad esempio le immagini del contenitore da eseguire.

È possibile usare un manifesto per creare tutti gli oggetti necessari per eseguire l'applicazione Voto di Azure. Questo manifesto include due distribuzioni kubernetes:

  • L'esempio di applicazioni Python di voto di Azure.
  • Istanza di Redis.

Vengono creati anche due servizi Kubernetes :

  • Servizio interno per l'istanza di Redis.
  • Servizio esterno per accedere all'applicazione Voto di Azure da Internet.

Creare un file denominato azure-vote.yaml e copiare nel manifesto seguente:

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

Distribuire l'applicazione usando il comando kubectl apply e specificare il nome di YAML:

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

L'output di esempio seguente mostra le distribuzioni e i servizi creati correttamente:

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

Test dell'applicazione

Durante l'esecuzione dell'applicazione, un servizio Kubernetes espone il front-end dell'applicazione a Internet. Il processo potrebbe richiedere alcuni minuti.

Monitorare lo stato di avanzamento usando il comando kubectl get service con l'argomento --watch .

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

L'output EXTERNAL-IP per il servizio azure-vote-front viene inizialmente visualizzato come in sospeso.

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

Dopo che l'indirizzo EXTERNAL-IP cambia da in sospeso a un indirizzo IP pubblico effettivo, usare CTRL-C per arrestare il processo di watch kubectl. L'output di esempio seguente mostra un indirizzo IP pubblico valido assegnato al servizio:

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

Per vedere in azione l'app Azure Vote, aprire un Web browser all'indirizzo IP esterno del servizio.

Eliminare il cluster

Eseguire il comando per pulire il az aksarc delete cluster creato:

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

Passaggi successivi