共用方式為


Azure 容器執行個體中的可靠性

重要

此功能目前為預覽功能。 若您同意補充的使用規定,即可取得預覽。

本文說明 Azure 容器執行個體 (ACI) 中的可靠性支援,並涵蓋可用性區域的區域內復原能力,以及有關災害復原的資訊。 如需更多關於 Azure 可靠性的詳細概觀,請參閱 Azure 可靠性

可用性區域支援

Azure 可用性區域是每個 Azure 區域內至少三個實體獨立的資料中心群組。 每個區域內的資料中心都配備了獨立的電源、冷卻系統和網路基礎結構。 在本機區域失敗的案例中,可用性區域的設計在於,當一個區域受影響時,讓其餘兩個區域支援區域服務、容量和高可用性。

這類失敗的範圍可從軟體和硬體故障,擴及到如地震、淹水和火災的事件。 透過 Azure 服務的備援和邏輯隔離,實現對失敗的容錯。 如需深入了解 Azure 的可用性區域,請參閱區域和可用性區域

已啟用 Azure 可用性區域的服務旨在提供正確程度的可靠性和彈性。 您可以透過兩種方式加以設定。 它們可以是區域備援,具有跨區域自動複寫功能,或者是區域性的,將執行個體釘選在特定區域。 兩種方法可以結合使用。 如需區域與區域備援結構的詳細資訊,請參閱使用可用性分區和區域的建議

Azure 容器執行個體支援區域性容器群組部署,這表示執行個體會釘選到特定的自我選取可用性區域。 可用性區域會在容器群組層級上指定。 容器群組內的容器不可使用唯一的可用性區域。 若要變更容器群組的可用性區域,您必須刪除容器群組,並使用新的可用性區域建立另一個容器群組。

必要條件

重要

這項功能目前無法供 Azure 入口網站使用。

  • 在 ACI 可用於 Linux 和 Windows Sever 2019 容器群組的大部分區域中,皆支援區域性容器群組部署。 如需詳細資料,請參閱區域和資源可用性
  • 如果使用 Azure CLI,請確定已安裝 2.30.0 版本或更新版本。
  • 如果使用 PowerShell,請確定已安裝 2.1.1-preview 版本或更新版本。
  • 如果使用 Java SDK,請確定已安裝 2.9.0 版本或更新版本。
  • 可用性區域支援僅適用於 09-01-2021 ACI API 版本或更新版本。

重要

目前,具有 GPU 資源的容器群組不支援可用性區域。

可用性區域重新部署和移轉

若要變更容器群組的可用性區域,您必須刪除容器群組,並使用新的可用性區域建立另一個容器群組。

建立已啟用可用性區域的資源

若要建立已啟用可用性區域的容器執行個體資源,您必須使用 Azure Resource Manager (ARM) 範本來部署容器群組。

注意

本文中的範例會針對 Bash 殼層進行格式化。 如果您慣用其他殼層,請相應調整行接續字元。

若要使用 ARM 來部署容器:

  1. 將下列 JSON 複製並貼到名為 azuredeploy.json 的新檔案。 此範例範本會將具有單一容器的容器群組部署到美國東部的可用性區域 1。

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "metadata": {
            "_generator": {
                "name": "bicep",
                "version": "0.4.1.14562",
                "templateHash": "12367894147709986470"
            }
        },
        "parameters": {
            "name": {
                "type": "string",
                "defaultValue": "acilinuxpublicipcontainergroup",
                "metadata": {
                    "description": "Name for the container group"
                }
            },
            "image": {
                "type": "string",
                "defaultValue": "mcr.microsoft.com/azuredocs/aci-helloworld",
                "metadata": {
                    "description": "Container image to deploy. Should be of the form repoName/imagename:tag for images stored in public Docker Hub, or a fully qualified URI for other registries. Images from private registries require additional registry credentials."
                }
            },
            "port": {
                "type": "int",
                "defaultValue": 80,
                "metadata": {
                    "description": "Port to open on the container and the public IP address."
                }
            },
            "cpuCores": {
                "type": "int",
                "defaultValue": 1,
                "metadata": {
                    "description": "The number of CPU cores to allocate to the container."
                }
            },
            "memoryInGb": {
                "type": "int",
                "defaultValue": 2,
                "metadata": {
                    "description": "The amount of memory to allocate to the container in gigabytes."
                }
            },
            "restartPolicy": {
                "type": "string",
                "defaultValue": "Always",
                "allowedValues": [
                    "Always",
                    "Never",
                    "OnFailure"
                ],
                "metadata": {
                    "description": "The behavior of Azure runtime if container has stopped."
                }
            },
            "location": {
                "type": "string",
                "defaultValue": "eastus",
                "metadata": {
                    "description": "Location for all resources."
                }
            }
        },
        "functions": [],
        "resources": [
            {
                "type": "Microsoft.ContainerInstance/containerGroups",
                "apiVersion": "2021-09-01",
                "zones": [
                    "1"
                ],
                "name": "[parameters('name')]",
                "location": "[parameters('location')]",
                "properties": {
                    "containers": [
                        {
                            "name": "[parameters('name')]",
                            "properties": {
                                "image": "[parameters('image')]",
                                "ports": [
                                    {
                                        "port": "[parameters('port')]",
                                        "protocol": "TCP"
                                    }
                                ],
                                "resources": {
                                    "requests": {
                                        "cpu": "[parameters('cpuCores')]",
                                        "memoryInGB": "[parameters('memoryInGb')]"
                                    }
                                }
                            }
                        }
                    ],
                    "osType": "Linux",
                    "restartPolicy": "[parameters('restartPolicy')]",
                    "ipAddress": {
                        "type": "Public",
                        "ports": [
                            {
                                "port": "[parameters('port')]",
                                "protocol": "TCP"
                            }
                        ]
                    }
                }
            }
        ],
        "outputs": {
            "containerIPv4Address": {
                "type": "string",
                "value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups', parameters('name'))).ipAddress.ip]"
            }
        }
    }
    
  2. 使用 [az group create][availability-zones-group-create] 命令建立資源群組:

    az group create --name myResourceGroup --location eastus
    
  3. 使用 az deployment group create 命令來部署範本:

    az deployment group create \
      --resource-group myResourceGroup \
      --template-file azuredeploy.json
    
  4. 若要確認容器群組已成功部署至可用性區域,請使用 az container show 命令檢視容器群組詳細資料:

    az container show --name acilinuxpublicipcontainergroup --resource-group myResourceGroup
    

分區容錯移轉支援

容器執行個體的容器群組會指派給單一可用性區域。 因此,容器執行個體的該群組不會受到相同區域的任何其他可用性區域中所發生的中斷所影響

不過,如果容器群組的可用性區域中發生中斷,則該群組內的所有容器執行個體應該都會停機。

為了避免容器執行個體停機,建議您在指定區域中的兩個不同可用性區域內,建立至少兩個容器群組。 這可確保每當該區域中的任何單一可用性區域發生中斷,您的容器執行個體資源都會保持啟動並執行。

災害復原

當整個 Azure 區域或資料中心遇到停機時,您的任務關鍵性程式碼必須繼續在不同的區域中進行處理。 使用區域設定所部署的 Azure 容器執行個體會在特定區域 (region) 內的特定區域 (zone) 中執行。 沒有可用的內建備援。 若要避免在全區域 (region) 中斷期間中斷遺失執行,您可以在其他區域 (region) 備援部署容器執行個體。

下一步