【Azure微服務 Service Fabric 】使用az命令建立Service Fabric叢集

路邊兩盞燈發表於2020-11-13

問題描述

在使用Service Fabric的快速入門文件: 將 Windows 容器部署到 Service Fabric。 其中在建立Service Fabric時候,示例程式碼中使用的是PowerShell指令碼呼叫AZ模組來執行建立命令。但是在本地執行時,遇見了無法執行'Connect-AzAccount'等命令。

Connect-AzAccount : The term 'Connect-AzAccount' is not recognized as the name of a cmdlet, function, script file, or
operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try
again.
At line:1 char:1
+ Connect-AzAccount -Environment AzureChinaCloud
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Connect-AzAccount:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

 

所以決定使用az cli命令來代替,但官方文件中只給出了PowerShell的命令,所以需要使用對應的az命令來替換。主要替換的命令有三個。

1) Connect-AzAccount -Environment AzureChinaCloud 替換為 az cloud set --name AzureChinaCloud

2) Select-AzSubscription -SubscriptionId $subscriptionId 替換為 az account set --subscription $subscriptionId

3) New-AzServiceFabricCluster 替換為 az sf cluster create

# Create the Service Fabric cluster.
New-AzServiceFabricCluster -Name $clustername -ResourceGroupName $groupname -Location $clusterloc `
-ClusterSize $clustersize -VmUserName $adminuser -VmPassword $adminpwd -CertificateSubjectName $subname `
-CertificatePassword $certpwd -CertificateOutputFolder $certfolder `
-OS WindowsServer2016DatacenterwithContainers -VmSku $vmsku -KeyVaultName $vaultname

:在命令New-AzServiceFabricCluster中替換對應的引數即可。

 

如出現引數名不存在的情況,可以使用-h 幫助命令來獲取正常的引數。如az sf cluster create -h

引數錯誤cli.azure.cli.core.parser : az: error: unrecognized arguments

使用help命令檢視正確引數

 

重要部分(使用az CLI命令替換後的全部命令)

#Provide the subscription Id
$subscriptionId = 'yourSubscriptionId'

# Certificate variables.
$certpwd="Password#1234" | ConvertTo-SecureString -AsPlainText -Force
$certfolder="c:\mycertificates\"

# Variables for VM admin.
$adminuser="vmadmin"
$adminpwd="Password#1234" | ConvertTo-SecureString -AsPlainText -Force 

# Variables for common values
$clusterloc="chinaeast"
$clustername = "mysfcluster"
$groupname="mysfclustergroup"       
$vmsku = "Standard_D2_v2"
$vaultname = "mykeyvault"
$subname="$clustername.$clusterloc.cloudapp.chinacloudapi.cn"

# Set the number of cluster nodes. Possible values: 1, 3-99
$clustersize=5 

# Set the context to the subscription Id where the cluster will be created
az cloud set --name AzureChinaCloud
az login
az account set --subscription $subscriptionId

# Create the Service Fabric cluster.
az sf cluster create --cluster-name $clustername --resource-group $groupname --location $clusterloc `
 --cluster-size $clustersize --vm-user-name $adminuser --vm-password $adminpwd --certificate-subject-name $subname `
 --certificate-password $certpwd --certificate-output-folder  $certfolder `
 --os WindowsServer2016DatacenterwithContainers --vm-sku $vmsku --vault-name $vaultname --debug

注:

  • 指令碼建立一個由五個節點組成的 Service Fabric 群集(使用 X.509 證書保護的群集)。該命令將建立一個自簽名證書,並將其上傳到新的 Key Vault。 該證書也會複製到本地目錄"c:\mycertificates\"中。
  • 在執行中如需要檢視日誌輸出,可以新增 --debug。

 

成功結果

當Service Fabric建立完成後,可以通過Visual Studio 2019釋出建立好的Container到叢集中。釋出成功後,通過Service Fabric Explorer檢視效果:

當根據文件部署Container後,訪問SF叢集URL並加上80埠(埠由釋出Container時指定),既可以檢視到IIS的預設頁面.

 

在ServiceManifest.xml檔案中配置Endpoint埠,在訪問時候需要非常注意的一點是:確保SF的Load Balance中已開啟該埠。可以通過psping方式來驗證。

  <Resources>
    <Endpoints>
      <!-- This endpoint is used by the communication listener to obtain the port on which to 
           listen. Please note that if your service is partitioned, this port is shared with 
           replicas of different partitions that are placed in your code. -->
      <Endpoint Name="MyContainerServiceTypeEndpoint" Port="80" />
    </Endpoints>

 

引用使用PowerShell AzModule命令建立SF叢集的全部程式碼為:

建立群集

以下示例指令碼建立一個由五個節點組成的 Service Fabric 群集(使用 X.509 證書保護的群集)。 該命令將建立一個自簽名證書,並將其上傳到新的 Key Vault。 該證書也會複製到本地目錄。 可在建立 Service Fabric 群集中詳細瞭解如何使用此指令碼建立群集。

必要時,請使用 Azure PowerShell 指南中的說明安裝 Azure PowerShell。

在執行以下指令碼之前,請在 PowerShell 中執行 Connect-AzAccount -Environment AzureChinaCloud 來與 Azure 建立連線。

將以下指令碼複製到剪貼簿,並開啟 Windows PowerShell ISE 。 將內容貼上到空的 Untitled1.ps1 視窗。 然後,為指令碼中的變數提供值:subscriptionIdcertpwdcertfolderadminuseradminpwd 等等。 執行該指令碼之前,為 certfolder 指定的目錄必須存在。

#Provide the subscription Id
$subscriptionId = 'yourSubscriptionId'

# Certificate variables.
$certpwd="Password#1234" | ConvertTo-SecureString -AsPlainText -Force
$certfolder="c:\mycertificates\"

# Variables for VM admin.
$adminuser="vmadmin"
$adminpwd="Password#1234" | ConvertTo-SecureString -AsPlainText -Force 

# Variables for common values
$clusterloc="chinaeast"
$clustername = "mysfcluster"
$groupname="mysfclustergroup"       
$vmsku = "Standard_D2_v2"
$vaultname = "mykeyvault"
$subname="$clustername.$clusterloc.cloudapp.chinacloudapi.cn"

# Set the number of cluster nodes. Possible values: 1, 3-99
$clustersize=5 

# Set the context to the subscription Id where the cluster will be created
Select-AzSubscription -SubscriptionId $subscriptionId

# Create the Service Fabric cluster.
New-AzServiceFabricCluster -Name $clustername -ResourceGroupName $groupname -Location $clusterloc `
-ClusterSize $clustersize -VmUserName $adminuser -VmPassword $adminpwd -CertificateSubjectName $subname `
-CertificatePassword $certpwd -CertificateOutputFolder $certfolder `
-OS WindowsServer2016DatacenterwithContainers -VmSku $vmsku -KeyVaultName $vaultname

為變數提供值後,按 F5 執行該指令碼。

執行指令碼並建立群集後,在輸出中查詢 ClusterEndpoint。 例如:

 

參考文件:

將 Windows 容器部署到 Service Fabrichttps://docs.azure.cn/zh-cn/service-fabric/service-fabric-quickstart-containers

az sf cluster: https://docs.microsoft.com/en-us/cli/azure/sf/cluster?view=azure-cli-latest#az_sf_cluster_create

 

相關文章