共用方式為


使用 Bicep 建立 Kubernetes 叢集

本文說明如何使用 Bicep 在 Azure Local 中建立 Kubernetes 叢集。 工作流程如下所示:

  1. 建立 SSH 金鑰組
  2. 使用 Bicep 在 Azure 本機 23H2 版中建立 Kubernetes 叢集。 根據預設,叢集是 Azure Arc 連線。
  3. 驗證部署並連線到叢集。

開始之前

開始之前,請確定您有下列必要條件:

  1. 從您的內部部署基礎結構管理員取得下列詳細資料:

    • Azure 訂用帳戶標識碼:使用 Azure Local 進行部署和註冊的 Azure 訂用帳戶標識碼。
    • 自定義位置名稱或標識碼:自定義位置的 Azure Resource Manager 識別符。 自定義位置是在 Azure 本機叢集部署期間設定的。 基礎結構管理員應該提供自定義位置的 Resource Manager 識別符。 需要此參數才能建立 Kubernetes 叢集。 如果基礎結構管理員提供自定義位置名稱和資源組名,您也可以使用 az customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsv取得 Resource Manager 識別符。
    • 邏輯網路名稱或標識碼:遵循下列步驟建立之 Azure 本機邏輯網路的 Azure Resource Manager 標識符。 您的系統管理員應該提供邏輯網路的標識碼。 需要此參數才能建立 Kubernetes 叢集。 如果您知道邏輯網路建立所在的資源群組,您也可以使用 az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv 來取得 Azure Resource Manager 標識符。
  2. 請確定您的開發電腦上有 最新版的 Azure CLI 。 您也可以使用 az upgrade升級 Azure CLI 版本。

  3. 在您的開發電腦上下載並安裝 kubectl 。 Kubernetes 命令行工具 kubectl 可讓您對 Kubernetes 叢集執行命令。 您可以使用 kubectl 來部署應用程式、檢查和管理叢集資源,以及檢視記錄。

建立 SSH 金鑰組

若要建立 SSH 金鑰組(與 Azure AKS 相同),請使用下列程式:

  1. 在瀏覽器中開啟 Cloud Shell 工作階段

  2. 使用 az sshkey create Azure CLI 命令或 ssh-keygen 指令建立 SSH 金鑰群組:

    # Create an SSH key pair using Azure CLI
    az sshkey create --name "mySSHKey" --resource-group "myResourceGroup"
    

    或者,使用 ssh-keygen建立 SSH 金鑰組:

    ssh-keygen -t rsa -b 4096
    

如需建立 SSH 金鑰的詳細資訊,請參閱在 Azure 中建立及管理驗證的 SSH 金鑰

更新並檢閱 Bicep 腳本

本節顯示 Bicep 參數和範本檔案。 這些檔案也可以在 Azure 快速入門範本取得。

Bicep 參數檔案:aksarc.bicepparam

using 'main.bicep'
param aksClusterName = 'aksarc-bicep-new'
param aksControlPlaneIP = 'x.x.x.x'
param sshPublicKey = 'ssh_public_key'
param hciLogicalNetworkName = 'lnet_name'
param hciCustomLocationName = 'cl_name'
param aksNodePoolOSType = 'Linux'
param aksNodePoolNodeCount = 1

Bicep 範本檔案:main.bicep

@description('The name of AKS Arc cluster resource')
param aksClusterName string
param location string = 'eastus'

// Default to 1 node CP
@description('The name of AKS Arc cluster control plane IP, provide this parameter during deployment')
param aksControlPlaneIP string
param aksControlPlaneNodeSize string = 'Standard_A4_v2'
param aksControlPlaneNodeCount int = 1

// Default to 1 node NP
param aksNodePoolName string = 'nodepool1'
param aksNodePoolNodeSize string = 'Standard_A4_v2'
param aksNodePoolNodeCount int = 1
@allowed(['Linux', 'Windows'])
param aksNodePoolOSType string = 'Linux'

@description('SSH public key used for cluster creation, provide this parameter during deployment')
param sshPublicKey string

// Build LNet ID from LNet name
@description('The name of LNet resource, provide this parameter during deployment')
param hciLogicalNetworkName string
resource logicalNetwork 'Microsoft.AzureStackHCI/logicalNetworks@2023-09-01-preview' existing = {
  name: hciLogicalNetworkName
}

// Build custom location ID from custom location name
@description('The name of custom location resource, provide this parameter during deployment')
param hciCustomLocationName string
var customLocationId = resourceId('Microsoft.ExtendedLocation/customLocations', hciCustomLocationName) 

// Create the connected cluster. This is the Arc representation of the AKS cluster, used to create a Managed Identity for the provisioned cluster.
resource connectedCluster 'Microsoft.Kubernetes/ConnectedClusters@2024-01-01' = {
  location: location
  name: aksClusterName
  identity: {
    type: 'SystemAssigned'
  }
  kind: 'ProvisionedCluster'
  properties: {
    agentPublicKeyCertificate: ''
    aadProfile: {
      enableAzureRBAC: false
    }
  }
}

// Create the provisioned cluster instance. This is the actual AKS cluster and provisioned on your Azure Local cluster via the Arc Resource Bridge.
resource provisionedClusterInstance 'Microsoft.HybridContainerService/provisionedClusterInstances@2024-01-01' = {
  name: 'default'
  scope: connectedCluster
  extendedLocation: {
    type: 'CustomLocation'
    name: customLocationId
  }
  properties: {
    linuxProfile: {
      ssh: {
        publicKeys: [
          {
            keyData: sshPublicKey
          }
        ]
      }
    }
    controlPlane: {
      count: aksControlPlaneNodeCount
      controlPlaneEndpoint: {
        hostIP: aksControlPlaneIP
      }
      vmSize: aksControlPlaneNodeSize
    }
    networkProfile: {
      loadBalancerProfile: {
        count: 0
      }
      networkPolicy: 'calico'
    }
    agentPoolProfiles: [
      {
        name: aksNodePoolName
        count: aksNodePoolNodeCount
        vmSize: aksNodePoolNodeSize
        osType: aksNodePoolOSType
      }
    ]
    cloudProviderProfile: {
      infraNetworkProfile: {
        vnetSubnetIds: [
          logicalNetwork.id
        ]
      }
    }
    storageProfile: {
      nfsCsiDriver: {
        enabled: true
      }
      smbCsiDriver: {
        enabled: true
      }
    }
  }
}

Microsoft.HybridContainerService/provisionedClusterInstances 資源定義於 Bicep 檔案中。 如果您想要探索更多屬性, 請參閱 API 參考

部署 Bicep 檔案

  1. 將 Bicep 檔案以 main.bicep 儲存至本機電腦。

  2. 更新 aksarc.bicepparam定義的參數,並將它儲存到本機計算機。

  3. 使用 Azure CLI 部署 Bicep 檔案:

    az deployment group create --name BicepDeployment --resource-group myResourceGroupName --template-file main.bicep –-parameters aksarc.bicepparam
    

驗證 Bicep 部署並連線到叢集

您現在可以從開發電腦執行 az connectedk8s proxy 命令來連線到 Kubernetes 叢集。 您也可以使用 kubectl 來查看節點和 Pod 狀態。 請遵循與連線至 Kubernetes 叢集中所述的相同步驟。

下一步

使用 Azure CLI 建立 Kubernetes 叢集