使用 Helm 選項參數防止在安裝失敗時刪除
網站網路服務 (SNS) 部署可能會失敗,因為基礎網路功能 (NF) 部署無法正確安裝。 Azure 操作員服務管理員 (AOSM) 預設會從目標 Kubernetes 叢集移除失敗的部署,以保留資源。 Helm install
失敗通常需要資源保存在叢集上,以允許偵錯失敗。 本操作說明文章將 參數設定 helm install --atomic
為 false,說明如何編輯 NF ARM 範本以覆寫此行為。
必要條件
- 您必須已使用 Az CLI AOSM 擴充功能將 NF 上線至 AOSM。 本文參考 CLI 所輸出的資料夾結構和檔案,並提供以 CLI 為基礎的範例
- Helm 安裝失敗可能相當複雜。 除了對 NF 的領域知識之外,偵錯還需要數個技術的技術知識
- Helm 的工作 知識
- Kubernetes 和 kubectl 命令的工作知識
- 將成品提取和推送至 Azure Container Registry 的工作知識
- 您需要資源
Contributor
群組上包含 AOSM 受控成品存放區的角色指派 - 適當的 IDE,例如 Visual Studio Code
- ORAS CLI
重要
強烈建議您在嘗試使用 AOSM 進行部署之前,先測試 helm install
Helm 套件在目標 Arc 連線的 Kubernetes 環境上成功。
單一 Helm 圖表 NF 的覆寫--atomic
本節說明如何覆寫 --atomic
由單一 Helm 圖表組成的 NF。
找出並編輯 NF BICEP 範本
流覽至
nsd-cli-output
目錄、開啟artifacts
目錄,然後開啟<nf-arm-template>.bicep
檔案。<nf-arm-template>
已在 Az AOSM CLI 延伸模組 NSD 輸入檔中設定。 您可以針對虛構的 Contoso 容器化網路函式(CNF),與下列範例範本進行比較,以確認您有正確的檔案。@secure() param configObject object var resourceGroupId = resourceGroup().id var identityObject = (configObject.managedIdentityId == '') ? { type: 'SystemAssigned' } : { type: 'UserAssigned' userAssignedIdentities: { '${configObject.managedIdentityId}': {} } } var nfdvSymbolicName = '${configObject.publisherName}/${configObject.nfdgName}/${configObject.nfdv}' resource nfdv 'Microsoft.Hybridnetwork/publishers/networkfunctiondefinitiongroups/networkfunctiondefinitionversions@2023-09-01' existing = { name: nfdvSymbolicName scope: resourceGroup(configObject.publisherResourceGroup) } resource nfResource 'Microsoft.HybridNetwork/networkFunctions@2023-09-01' = [for (values, i) in configObject.deployParameters: { name: '${configObject.nfdgName}${i}' location: configObject.location identity: identityObject properties: { networkFunctionDefinitionVersionResourceReference: { id: nfdv.id idType: 'Open' } nfviType: 'AzureArcKubernetes' nfviId: (configObject.customLocationId == '') ? resourceGroupId : configObject.customLocationId allowSoftwareUpdate: true configurationType: 'Open' deploymentValues: string(values) } }]
流覽至
cnf-cli-output
目錄、開啟nfDefinition
目錄,以及從資源中 networkFunctionApplications 陣列nfdv
中唯一的專案複製值,以尋找網路函式應用程式名稱。 藉由比較下列虛構的 Contoso 範例 BICEP 代碼段,確認您有正確的值。 在這裡情況下,網路函式應用程式名稱稱為Contoso
。resource nfdv 'Microsoft.Hybridnetwork/publishers/networkfunctiondefinitiongroups/networkfunctiondefinitionversions@2023-09-01' = { parent: nfdg name: nfDefinitionVersion location: location properties: { deployParameters: string(loadJsonContent('deployParameters.json')) networkFunctionType: 'ContainerizedNetworkFunction' networkFunctionTemplate: { nfviType: 'AzureArcKubernetes' networkFunctionApplications: [ { artifactType: 'HelmPackage' name: 'Contoso'
將下列組態新增至
nfResource
NF ARM 範本中的屬性,以編輯範本以覆寫預設 helm 安裝--atomic
選項:roleOverrideValues: ['{"name": "Contoso-one", "deployParametersMappingRuleProfile": {"applicationEnablement": "Enabled", "helmMappingRuleProfile": {"options": {"installOptions": {"atomic": "false"}},{"upgradeOptions": {"atomic": "false"}}}}}']
藉由比較 Contoso 範例 NF 中的下列代碼段,確認您已正確進行此編輯
resource nfResource 'Microsoft.HybridNetwork/networkFunctions@2023-09-01' = [for (values, i) in configObject.deployParameters: {
name: '${configObject.nfdgName}${i}'
location: configObject.location
identity: identityObject
properties: {
networkFunctionDefinitionVersionResourceReference: {
id: nfdv.id
idType: 'Open'
}
nfviType: 'AzureArcKubernetes'
nfviId: (configObject.customLocationId == '') ? resourceGroupId : configObject.customLocationId
allowSoftwareUpdate: true
configurationType: 'Open'
deploymentValues: string(values)
roleOverrideValues: [
'{"name":"Contoso-one","deployParametersMappingRuleProfile":{"helmMappingRuleProfile":{"options":{"installOptions":{"injectArtifactStoreDetails":"true", "atomic": "false"},"upgradeOptions":{"injectArtifactStoreDetails":"true","atomic": "false"}}}}}'
]}}]
建置已編輯的 ARM 範本,並將其上傳至成品存放區
流覽至 命令所
az aosm nsd build
建立的目錄,nsd-cli-output/artifacts
並從 CLI 產生的 BICEP 檔案建置網路函式 ARM 範本。bicep build <nf-name>.bicep
從命令中
az aosm nsd publish
建立的成品指令清單產生範圍對應令牌認證。重要
您必須使用命令中建立的
az aosm nsd publish
成品指令清單。 NF ARM 範本只會在該指令清單中宣告,因此只有此指令清單所產生的範圍對應令牌可讓您將 NF ARM 範本推送(或提取)至成品存放區。az rest --method POST --url 'https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.HybridNetwork/publishers/<publisher>/artifactStores/<artifact-store>/artifactManifests/<artifactManifest>/listCredential?api-version=2023-09-01'
登入 AOSM 受控 ACR。 您可以在 Azure 入口網站 成品存放區資源概觀中找到 AOSM 受控 ACR 名稱。 您可以在上一個步驟的輸出中找到使用者名稱和密碼。
oras login <aosm-managed-acr-name>.azurecr.io --username <username> --password <scope map token>
使用 ORAS 將網路函式 ARM 範本上傳至 AOSM 受控 Azure Container Registry (ACR)。 成品
<arm-template-version>
標記的格式必須相同1.0.0
。 和<arm-template-name>
<arm-template-version>
必須符合 命令中所az aosm nsd publish
建立成品指令清單中的值。
多重 Helm 圖表 NF 的覆寫--atomic
許多複雜的 NF 都是從多個 Helm 圖表建置的。 這些 NF 會以具有多個網路函式應用程式的網路函式定義版本 (NFDV) 表示,並且會隨多個 helm install
命令一起安裝 - 每個 helm 圖表一個。
除了對 ARM 範本所做的編輯之外,多 helm NF 的覆寫 --atomic
程式與單一 helm NF 的程式相同。
虛構的多 helm NF,Contoso-multi-helm,由三個 helm 圖表組成。 其 NFDV 有三個網路功能應用程式。 一個網路函式應用程式會對應至一個 helm 圖表。 這些網路函式應用程式的名稱屬性分別設定為 Contoso-one
、 Contoso-two
和 Contoso-three
。 以下是定義此網路函式的NFDV範例代碼段。
resource nfdv 'Microsoft.Hybridnetwork/publishers/networkfunctiondefinitiongroups/networkfunctiondefinitionversions@2023-09-01' = {
parent: nfdg
name: nfDefinitionVersion
location: location
properties: {
deployParameters: string(loadJsonContent('deployParameters.json'))
networkFunctionType: 'ContainerizedNetworkFunction'
networkFunctionTemplate: {
nfviType: 'AzureArcKubernetes'
networkFunctionApplications: [
{
artifactType: 'HelmPackage'
name: 'Contoso-one'
...
},
{
artifactType: 'HelmPackage'
name: 'Contoso-two'
...
},
{
artifactType: 'HelmPackage'
name: 'Contoso-three'
...
}]
}
}
}
--atomic
您可以個別覆寫每個網路函式應用程式的 參數。 以下是覆寫 --atomic
為 Contoso-one
false
和 Contoso-two
的範例 NF BICEP 範本,但針對 Contoso-three
設定atomic
為 true。
resource nfResource 'Microsoft.HybridNetwork/networkFunctions@2023-09-01' = [for (values, i) in configObject.deployParameters: {
name: '${configObject.nfdgName}${i}'
location: configObject.location
identity: identityObject
properties: {
networkFunctionDefinitionVersionResourceReference: {
id: nfdv.id
idType: 'Open'
}
nfviType: 'AzureArcKubernetes'
nfviId: (configObject.customLocationId == '') ? resourceGroupId : configObject.customLocationId
allowSoftwareUpdate: true
configurationType: 'Open'
deploymentValues: string(values)
roleOverrideValues: [
'{"name":"Contoso-one","deployParametersMappingRuleProfile":{"helmMappingRuleProfile":{"options":{"installOptions":{"injectArtifactStoreDetails":"true", "atomic": "false"},"upgradeOptions":{"injectArtifactStoreDetails":"true","atomic": "false"}}}}}'
'{"name":"Contoso-two","deployParametersMappingRuleProfile":{"helmMappingRuleProfile":{"options":{"installOptions":{"injectArtifactStoreDetails":"true", "atomic": "false"},"upgradeOptions":{"injectArtifactStoreDetails":"true","atomic": "false"}}}}}'
'{"name":"Contoso-three","deployParametersMappingRuleProfile":{"helmMappingRuleProfile":{"options":{"installOptions":{"injectArtifactStoreDetails":"true", "atomic": "false"},"upgradeOptions":{"injectArtifactStoreDetails":"true","atomic": "false"}}}}}'
]}}]
下一步
您現在可以重試 SNS 部署。 您可以透過ARM、BICEP或 AOSM REST API 再次提交部署。 您也可以透過 Azure 入口網站 SNS 概觀刪除失敗的 SNS,並在操作員快速入門之後重新部署,並以網路函式的參數取代快速入門 NF 參數。 部署至 Kubernetes 叢集的 Helm 版本將不會在失敗時移除。 如何偵錯 SNS 部署失敗 描述工具組,以偵錯常見的 Helm 安裝失敗。