Bagikan melalui


Mulai cepat: menyebarkan kluster Kubernetes menggunakan templat Azure Resource Manager

Berlaku untuk: Azure Stack HCI, versi 23H2

Mulai cepat ini menunjukkan cara menyebarkan kluster Kubernetes di AKS Arc menggunakan templat Azure Resource Manager. Azure Arc memperluas kemampuan manajemen Azure ke kluster Kubernetes di mana saja, memberikan pendekatan terpadu untuk mengelola lingkungan yang berbeda.

Sebelum Anda mulai

Artikel ini mengasumsikan pemahaman dasar tentang konsep Kube.

Untuk menyebarkan templat Resource Manager, Anda memerlukan akses tulis pada sumber daya yang Anda sebarkan, dan akses ke semua operasi pada jenis sumber daya Microsoft.Resources/deployments. Misalnya, untuk menyebarkan komputer virtual, Anda memerlukan izin Microsoft.Compute/virtualMachines/write dan Microsoft.Resources/deployments/* . Untuk daftar peran dan izin, lihat Peran bawaan Azure.

Prasyarat

  • Akun Azure dengan langganan aktif.
  • Kluster Azure Stack HCI 23H2.
  • Versi Azure CLI terbaru.

Langkah 1: siapkan akun Azure Anda

  1. Masuk ke Azure: buka terminal atau perintah Anda dan masuk ke akun Azure Anda menggunakan Azure CLI:

    az login
    
  2. Atur langganan Anda: ganti <your-subscription-id> dengan ID langganan Anda:

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

Langkah 2: buat pasangan kunci SSH menggunakan Azure CLI

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

atau, buat pasangan kunci SSH menggunakan ssh-keygen:

ssh-keygen -t rsa -b 4096

Untuk menyebarkan templat, Anda harus menyediakan kunci publik dari pasangan SSH. Untuk mengambil kunci publik, gunakan az sshkey show perintah :

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

Secara default, file kunci SSH dibuat di direktori ~/.ssh . Jalankan az sshkey create perintah atau ssh-keygen untuk menimpa pasangan kunci SSH yang ada dengan nama yang sama.

Untuk mengetahui informasi selengkapnya tentang membuat kunci SSH, lihat Membuat dan mengelola kunci SSH untuk autentikasi di Azure.

Langkah 3: Tinjau templat

Templat yang digunakan dalam mulai cepat ini berasal dari repositori Templat Mulai Cepat 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"
        }
      }
    ]
  }

Langkah 4: Menyebarkan templat

Untuk menyebarkan templat, jalankan perintah berikut untuk menyebarkan kluster 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..."

Perlu waktu beberapa menit untuk membuat kluster tersebut. Tunggu hingga kluster berhasil disebarkan sebelum Anda melanjutkan ke langkah berikutnya.

Langkah 5: Verifikasi penyebaran

Setelah penyebaran selesai, gunakan perintah berikut untuk memverifikasi bahwa kluster Kubernetes Anda aktif dan berjalan:

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

Langkah 6: Sambungkan ke kluster

  1. Untuk menyambungkan ke kluster, jalankan az connectedk8s proxy perintah . Perintah mengunduh dan menjalankan biner proksi pada komputer klien, dan mengambil file kubeconfig yang terkait dengan kluster:

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

    Atau, gunakan klien baris perintah Kube, kubectl. Jika Anda menggunakan Azure Cloud Shell, kubectl sudah diinstal. Untuk menginstal dan menjalankan kubectl secara lokal, jalankan az aksarc install-cli perintah .

    Konfigurasikan kubectl untuk menyambungkan ke kluster Kubernetes menggunakan az aksarc get-credentials perintah . Perintah ini mengunduh informasi masuk dan mengonfigurasi CLI Kube untuk menggunakannya:

    az aksarc get-credentials --resource-group "<resource-group-name>" --name "<cluster-name>"
    
  2. Verifikasi koneksi ke kluster Anda menggunakan kubectl get perintah . Perintah ini mengembalikan daftar node kluster:

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

    Contoh output berikut menunjukkan tiga simpul yang dibuat di langkah-langkah sebelumnya. Pastikan status simpul Siap:

    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
    

Sumber daya templat

connectedClusters

Nama Deskripsi Nilai
type Jenis sumber daya. Microsoft.Kubernetes/ConnectedClusters
apiVersion Versi API sumber daya. 2024-01-01
name Nama sumber daya. String (diperlukan)
Batas karakter: 1-63
Karakter yang valid: Alfanumerik, garis bawah, dan tanda hubung.
Mulai dan akhiri dengan alfanumerik.
location Lokasi geografis tempat sumber daya berada. String (diperlukan).
tags Tag sumber daya. Kamus nama dan nilai tag. Lihat Tag dalam templat.
extendedLocation Lokasi komputer virtual yang diperluas. ExtendedLocation
identity Identitas kluster yang terhubung, jika dikonfigurasi.
properties Properti kluster yang terhubung.

ProvisionedClusterInstances

Nama Deskripsi Nilai
type Jenis sumber daya microsoft.hybridcontainerservice/provisionedclusterinstances
apiVersion Versi API sumber daya 2024-01-01
name Nama sumber daya String (diperlukan). Jangan ubah ini dari default.
properties Properti kluster yang terhubung.
extendedLocation Lokasi kluster yang diperluas. ExtendedLocation

ExtendedLocation

Nama Deskripsi Nilai
name ID lokasi yang diperluas. string
type Jenis lokasi yang diperluas. CustomLocation

Langkah berikutnya

Gambaran umum AKS Arc