Szybki start: wdrażanie klastra Kubernetes przy użyciu szablonu usługi Azure Resource Manager

Dotyczy: Azure Stack HCI, wersja 23H2

W tym przewodniku Szybki start pokazano, jak wdrożyć klaster Kubernetes w usłudze AKS Arc przy użyciu szablonu usługi Azure Resource Manager. Usługa Azure Arc rozszerza możliwości zarządzania platformą Azure na klastry Kubernetes w dowolnym miejscu, zapewniając ujednolicone podejście do zarządzania różnymi środowiskami.

Zanim rozpoczniesz

W tym artykule założono podstawową wiedzę na temat pojęć związanych z platformą Kubernetes.

Aby wdrożyć szablon Resource Manager, musisz mieć dostęp do zapisu w wdrażanych zasobach i uzyskać dostęp do wszystkich operacji w typie zasobu Microsoft.Resources/deployments. Na przykład do wdrożenia maszyny wirtualnej potrzebne są uprawnienia Microsoft.Compute/virtualMachines/write i Microsoft.Resources/deployments/* . Aby uzyskać listę ról i uprawnień, zobacz Role wbudowane platformy Azure.

Wymagania wstępne

  • Konto platformy Azure z aktywną subskrypcją.
  • Klaster usługi Azure Stack HCI 23H2.
  • Najnowsza wersja interfejsu wiersza polecenia platformy Azure.

Krok 1. Przygotowanie konta platformy Azure

  1. Zaloguj się na platformie Azure: otwórz terminal lub wiersz polecenia i zaloguj się do konta platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure:

    az login
    
  2. Ustaw subskrypcję: zastąp ciąg <your-subscription-id> identyfikatorem subskrypcji:

    az account set --subscription "<your-subscription-id>"
    

Krok 2. Tworzenie pary kluczy SSH przy użyciu interfejsu wiersza polecenia platformy Azure

az sshkey create --name "mySSHKey" --resource-group "myResourceGroup"

lub utwórz parę kluczy SSH przy użyciu narzędzia ssh-keygen:

ssh-keygen -t rsa -b 4096

Aby wdrożyć szablon, musisz podać klucz publiczny z pary SSH. Aby pobrać klucz publiczny, użyj az sshkey show polecenia :

az sshkey show --name "mySSHKey" --resource-group "myResourceGroup" --query "publicKey"

Domyślnie pliki kluczy SSH są tworzone w katalogu ~/.ssh . Uruchom polecenie orssh-keygen, az sshkey create aby zastąpić dowolną istniejącą parę kluczy SSH o tej samej nazwie.

Aby uzyskać więcej informacji na temat tworzenia kluczy SSH, zobacz Tworzenie kluczy SSH i zarządzanie nimi na potrzeby uwierzytelniania na platformie Azure.

Krok 3. Przeglądanie szablonu

Szablon używany w tym przewodniku Szybki start pochodzi z repozytorium Szablony szybkiego startu platformy Azure:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "provisionedClusterName": {
          "type": "string",
          "defaultValue": "aksarc-armcluster",
          "metadata": {
              "description": "The name of the AKS Arc Cluster resource."
          }
      },
      "location": {
          "type": "string",
          "defaultValue": "eastus",
          "metadata": {
              "description": "The location of the AKS Arc Cluster resource."
          }
      },
      "resourceTags": {
            "type": "object",
            "defaultValue": {}
        },
      "sshRSAPublicKey": {
          "type": "string",
          "metadata": {
              "description": "Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example 'ssh-rsa AAAAB...snip...UcyupgH '"
          }
      },
       "enableAHUB": {
            "type": "string",
            "defaultValue": "NotApplicable",
            "metadata": {
                "description": "Azure Hybrid Benefit for Windows Server licenses. NotApplicable, True, False."
            }
        },
       "agentName": {
              "type": "string",
              "defaultValue": "nodepool",
              "metadata": {
                  "description": "The name of the node pool."
              }
          },
        "agentVMSize": {
            "type": "string",
            "defaultValue": "Standard_A4_v2",
            "metadata": {
                  "description": "The VM size for node pools."
            }
        },
        "agentCount": {
              "type": "int",
              "defaultValue": 1,
              "minValue": 1,
              "maxValue": 50,
              "metadata": {
                  "description": "The number of nodes for the cluster."
              }
          },
          "agentOsType": {
              "type": "string",
              "defaultValue": "Linux",
              "metadata": {
                  "description": "The OS Type for the agent pool. Values are Linux and Windows."
              }
          },
         "loadBalancerCount": {
            "type": "int",
            "defaultValue": 0,
            "metadata": {
                "description": "The number of load balancers."
            }
        },
          "kubernetesVersion": {
              "type": "string",
              "metadata": {
                  "description": "The version of Kubernetes."
              }
          },
          "controlPlaneNodeCount": {
              "type": "int",
              "defaultValue": 1,
              "minValue": 1,
              "maxValue": 5,
              "metadata": {
                  "description": "The number of control plane nodes for the cluster."
              }
          },
          "controlPlaneIp": {
            "type": "string",
            "defaultValue": "<default_value>",
              "metadata": {
                  "description": "Control plane IP address."
              }
         },
          "controlPlaneVMSize": {
              "type": "string",
              "defaultValue": "Standard_A4_v2",
              "metadata": {
                  "description": "The VM size for control plane."
              }
          },
          "vnetSubnetIds": {
              "type": "array",
              "metadata": {
                  "description": "List of subnet Ids for the AKS cluster."
              }
          },
          "podCidr": {
            "type": "string",
            "defaultValue": "10.244.0.0/16",
            "metadata": {
                  "description": "The VM size for control plane."
              }
          },
          "networkPolicy": {
            "type": "string",
            "defaultValue": "calico",
            "metadata": {
                  "description": "Network policy to use for Kubernetes pods. Only options supported is calico."
              }
          },
          "customLocation": {
            "type": "string",
            "metadata": {
                  "description": "Fully qualified custom location resource Id."
              }
          }
      },
      "resources": [
      {
          "apiVersion": "2024-01-01",
          "type": "Microsoft.Kubernetes/ConnectedClusters",
          "kind": "ProvisionedCluster",
          "location": "[parameters('location')]",
          "name": "[parameters('provisionedClusterName')]",
          "tags": "[parameters('resourceTags')]",
          "identity": {
              "type": "SystemAssigned"
          },
          "properties": {
              "agentPublicKeyCertificate":"" ,
              "aadProfile": {
                  "enableAzureRBAC": false
              }
          }
      },
      {
          "apiVersion": "2024-01-01",
          "type": "microsoft.hybridcontainerservice/provisionedclusterinstances",
          "name": "default",
          "scope": "[concat('Microsoft.Kubernetes/ConnectedClusters', '/', parameters('provisionedClusterName'))]",
          "dependsOn": [
              "[resourceId('Microsoft.Kubernetes/ConnectedClusters', parameters('provisionedClusterName'))]"
          ],
          "properties": {
          "agentPoolProfiles": [
            {
              "count": "[parameters('agentCount')]",
              "name":"[parameters('agentName')]",
              "osType": "[parameters('agentOsType')]",
              "vmSize": "[parameters('agentVMSize')]"
            }
          ],
          "cloudProviderProfile": {
            "infraNetworkProfile": {
                  "vnetSubnetIds": "[parameters('vnetSubnetIds')]"
            }
          },
          "controlPlane": {
            "count": "[parameters('controlPlaneNodeCount')]",
            "controlPlaneEndpoint": {
                        "hostIP": "[parameters('controlPlaneIp')]"
                    },
            "vmSize": "[parameters('controlPlaneVMSize')]"
          },
         "licenseProfile": {
            "azureHybridBenefit": "[parameters('enableAHUB')]"
         },
          "kubernetesVersion": "[parameters('kubernetesVersion')]",
          "linuxProfile": {
            "ssh": {
              "publicKeys": [
                {
                  "keyData": "[parameters('sshRSAPublicKey')]"
                }
              ]
            }
          },
        "networkProfile": {
          "loadBalancerProfile": {
            "count": "[parameters('loadBalancerCount')]"
          },
          "networkPolicy": "[parameters('networkPolicy')]",
          "podCidr": "[parameters('podCidr')]"
        },
        "storageProfile": {
          "nfsCsiDriver": {
            "enabled": false
          },
          "smbCsiDriver": {
            "enabled": false
          }
        }
        },
        "extendedLocation": {
            "name": "[parameters('customLocation')]",
            "type": "CustomLocation"
        }
      }
    ]
  }

Krok 4. Wdrażanie szablonu

Aby wdrożyć szablon, uruchom następujące polecenie, aby wdrożyć klaster Kubernetes:

az deployment group create \
--name "<deployment-name>" \
--resource-group "<resource-group-name>" \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.kubernetes/aks-arc/azuredeploy.json" \
--parameters provisionedClusterName="<cluster-name> location="eastus" sshRSApublicKey="" etc..."

Utworzenie klastra trwa kilka minut. Przed przejściem do następnego kroku poczekaj na pomyślne wdrożenie klastra.

Krok 5. Weryfikowanie wdrożenia

Po zakończeniu wdrażania użyj następującego polecenia, aby sprawdzić, czy klaster Kubernetes jest uruchomiony:

az aksarc show --resource-group "<resource-group-name>" --name "<cluster-name>" --output table

Krok 6. Nawiązywanie połączenia z klastrem

  1. Aby nawiązać połączenie z klastrem, uruchom az connectedk8s proxy polecenie . Polecenie pobiera i uruchamia plik binarny serwera proxy na maszynie klienckiej, a następnie pobiera plik kubeconfig skojarzony z klastrem:

    az connectedk8s proxy --name <cluster name> -g <resource group>
    

    Możesz też użyć klienta wiersza polecenia kubernetes, kubectl. Jeśli używasz usługi Azure Cloud Shell, narzędzie kubectl jest już zainstalowane. Aby zainstalować i uruchomić narzędzie kubectl lokalnie, uruchom az aksarc install-cli polecenie .

    Skonfiguruj narzędzie kubectl , aby nawiązać połączenie z klastrem az aksarc get-credentials Kubernetes przy użyciu polecenia . To polecenie pobiera poświadczenia i konfiguruje interfejs wiersza polecenia platformy Kubernetes do ich używania:

    az aksarc get-credentials --resource-group "<resource-group-name>" --name "<cluster-name>"
    
  2. Sprawdź połączenie z klastrem kubectl get przy użyciu polecenia . To polecenie zwraca listę węzłów klastra:

    kubectl get nodes -A --kubeconfig .\<path to kubecofig> 
    

    Poniższe przykładowe dane wyjściowe przedstawiają trzy węzły utworzone w poprzednich krokach. Upewnij się, że stan węzła to Gotowe:

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-agentpool-27442051-vmss000000   Ready    agent   10m   v1.27.7
    aks-agentpool-27442051-vmss000001   Ready    agent   10m   v1.27.7
    aks-agentpool-27442051-vmss000002   Ready    agent   11m   v1.27.7
    

Zasoby szablonu

connectedClusters

Nazwa Opis Wartość
type Typ zasobu. Microsoft.Kubernetes/ConnectedClusters
apiVersion Wersja interfejsu API zasobów. 2024-01-01
name Nazwa zasobu. Ciąg (wymagany)
Limit znaków: 1–63
Prawidłowe znaki: Alfanumeryczne, podkreślenia i łączniki.
Rozpocznij i zakończ od alfanumeryczne.
location Lokalizacja geograficzna, w której znajduje się zasób. Ciąg (wymagany).
tags Tagi zasobów. Słownik nazw tagów i wartości. Zobacz Tagi w szablonach.
extendedLocation Rozszerzona lokalizacja maszyny wirtualnej. ExtendedLocation
identity Tożsamość połączonego klastra, jeśli została skonfigurowana.
properties Właściwości połączonego klastra.

ProvisionedClusterInstances

Nazwa Opis Wartość
type Typ zasobu microsoft.hybridcontainerservice/provisionedclusterinstances
apiVersion Wersja interfejsu API zasobów 2024-01-01
name Nazwa zasobu Ciąg (wymagany). Nie zmieniaj tego ustawienia z domyślnego.
properties Właściwości połączonego klastra.
extendedLocation Rozszerzona lokalizacja klastra. ExtendedLocation

ExtendedLocation

Nazwa Opis Wartość
name Identyfikator lokalizacji rozszerzonej. ciąg
type Typ lokalizacji rozszerzonej. CustomLocation

Następne kroki

Omówienie usługi AKS Arc