你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 容器实例的备用池(预览)

重要

Azure 容器实例的备用池现在为预览版。 需同意补充使用条款才可使用预览版。 在正式版 (GA) 推出之前,此功能的某些方面可能会有所更改。

使用 Azure 容器实例的备用池,可以创建一组可用于响应传入流量的预配容器组。 池中的容器组已完全预配、初始化并准备好接收工作。

该图示显示使用传统路径和备用池路径创建容器的工作流。

限制

Azure 容器实例的备用池在 Azure 门户中不可用。

先决条件

功能注册

使用 Azure Cloud Shell 向订阅注册备用池资源提供程序和备用池预览功能。 注册可能需要多达 30 分钟才能成功显示“已注册”。 可以重新运行以下命令,以确定功能何时注册成功。

Register-AzResourceProvider -ProviderNameSpace Microsoft.ContainerInstance
Register-AzResourceProvider -ProviderNamespace Microsoft.StandbyPool
Register-AzProviderFeature -FeatureName StandbyContainerGroupPoolPreview -ProviderNamespace Microsoft.StandbyPool

基于角色的访问控制权限

若要允许备用池在订阅中创建容器组,请将相应的权限分配给备用池资源提供程序。

  1. 在“Azure 门户”中,导航到订阅。
  2. 选择要调整权限的订阅。
  3. 选择“访问控制 (IAM)”。
  4. 依次选择“添加”、“添加角色分配”。
  5. 在“角色”选项卡下,搜索“备用容器组池参与者”并将其选择。
  6. 移动到“成员”选项卡。
  7. 选择 + 选择成员
  8. 搜索“备用池资源提供程序”并选择它。
  9. 移动到“查看 + 分配”选项卡。
  10. 应用更改。
  11. 重复上述步骤,同时将 Azure 容器实例参与者角色网络参与者分配到备用池资源提供程序

有关分配角色的信息,请参阅使用 Azure 门户分配 Azure 角色

使用备用池中的容器

如果需要新的容器组,可以立即从已预配且正在运行的备用池中拉取一个。

备用池仅从池中提供完全预配且已准备好接收工作的容器组。 例如,当池中的实例仍在进行初始化时,它们未处于正在运行状态,并且请求容器时不会被调出。 如果池中没有实例可用,Azure 容器实例将默认回退到全新的容器组创建。

备用池大小

备用池中的容器组数量通过设置 maxReadyCapacity 参数来确定。 使用池中的容器组时,备用池会自动开始重新填充,确保备用池保持设置的最大就绪容量。

Azure 容器实例上备用池的唯一可用重新填充策略是 Always

设置 说明
maxReadyCapacity 要在池中部署的容器组数量上限。
refillPolicy 告知备用池立即补充容器组以维护 maxReadyCapacity。

容器组配置文件

容器组配置文件告知备用池如何在池中配置容器。 如果对容器组配置文件进行任何更改,则还需要更新备用池,确保更新应用于池中的实例。

{
    "location":"{location}",
    "properties":{
        "containers": [
        {
            "name":"[mycontainergroupprofile]",
            "properties": {
                "command":[],
                "environmentVariables":[],
                "image":"mcr.microsoft.com/azuredocs/aci-helloworld:latest",
                "ports":[
                    {
                        "port":8000
                    }
                ],
                "resources": {
                    "requests": {
                        "cpu":1,
                        "memoryInGB":1.5
                                }
                            }
                        }
                    }
                ],
                "imageRegistryCredentials":[],
                "ipAddress":{
                "ports":[
                    {
                        "protocol":"TCP",
                        "port":8000
                    }
            ],
            "type":"Public"
            },
            "osType":"Linux",
            "sku":"Standard"
            }
        }


ConfigMap

ConfigMap 属性可与容器组配置文件关联,并且用于应用类似于环境变量和机密卷的容器配置。 但是,使用环境变量或机密卷时,需要重启 Pod 才能使更改生效。 通过使用 ConfigMap,可以在不重启容器的情况下应用配置。 这将启用带外更新,以便容器可以在不重启的情况下读取新值。

无论是否使用 ConfigMap 都可创建 Azure 容器实例,并且可使用 ConfigMap 在创建后的任何时间点更新这些实例。 可以快速更新现有正在运行的容器组中的 ConfigMap,而不会导致容器重新启动。

有关详细信息,请参阅使用 ConfigMap

{
    "properties": {
        "containers": [
            {
                "name": "{mycontainergroupprofile}",
                "properties": {
                    "image": "mcr.microsoft.com/azuredocs/aci-helloworld",
                    "ports": [
                        {
                            "port": 80,
                            "protocol": "TCP"
                        }
                    ],
                    "resources": {
                        "requests": {
                            "memoryInGB": 0.5,
                            "cpu": 0.5
                        }
                    },
                    "configMap": {
                        "keyValuePairs": {
                            "key1": "value1",
                            "key2": "value2"
                        }
                    }
                }
            }
        ],
        "osType": "Linux",
        "ipAddress": {
            "type": "Public",
            "ports": [
                {
                    "protocol": "tcp",
                    "port": 80
                }
            ]
        }
    },
    "location": "{location}"
}

机密容器

Azure 容器实例的备用池支持机密容器。 若要利用机密容器,请在容器组配置文件中将 sku 类型更新为 Confidential

重要

使用 ConfigMap 传递的值不包括在安全策略中,也不会在文件装载提供给容器之前由运行时验证。 在执行过程中,应用程序不能信任可能影响数据或应用程序安全的任何值,而应该使用环境变量提供给容器。

{
    "location":"{location}",
    "properties":{
        "containers": [
        {
            "name":"{mycontainergroupprofile}",
            "properties": {
                "command":[],
                "environmentVariables":[],
                "image":"mcr.microsoft.com/azuredocs/aci-helloworld:latest",
                "ports":[
                    {
                        "port":8000
                    }
                ],
                "resources": {
                    "requests": {
                        "cpu":1,
                        "memoryInGB":1.5
                                }
                            }
                        }
                    }
                ],
                "imageRegistryCredentials":[],
                "ipAddress":{
                "ports":[
                    {
                        "protocol":"TCP",
                        "port":8000
                    }
            ],
            "type":"Public"
            },
            "osType":"Linux",
            "sku":"Confidential"
            }
        }


托管标识

Azure 容器实例的备用池支持与托管标识的集成。 从备用池请求容器并包括 identity 参数和设置时,会应用托管标识。 托管标识不是容器组配置文件中直接支持的属性。

{
   "location": "{location}",
   "properties": {
       "standByPoolProfile":{
               "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.StandbyPool/standbyContainerGroupPools/{standbyPoolName}"
           },
           "containerGroupProfile": {
               "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.ContainerInstance/containerGroupProfiles/{mycontainergroupprofile}",
               "revision": {revisionNumber}
           },
          },
          "identity": {
            "type": "UserAssigned",
            "userAssignedIdentities": {
              "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identity}": {}
            },
           "containers": [
               {
                   "name": "{mycontainergroupprofile}",
                   "properties": {
                       "configMap": {
                           "keyValuePairs": {
                               "{newKey}": "{newValue}"
                           }
                       }
                   }
               }
           ]
   }
}

可用性区域

Azure 容器实例的备用池支持跨可用性区域创建和请求容器。 创建区域性备用池目前仅在使用备用池 REST API 使用版本 2024-08-01-preview,并且仅在印度中部区域可用。

创建区域备用池

PUT https://management.azure.com/subscriptions/{SubscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.StandbyPool/standbyContainerGroupPools/myStandbyPool?api-version=2024-08-01-preview
 
Request Body
{
    "properties": {
        "elasticityProfile": {
            "maxReadyCapacity": 20,
            "refillPolicy": "always"
        },
        "containerGroupProperties": {
            "containerGroupProfile": {
                "id": "/subscriptions/{SubscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance/containerGroupProfiles/mycontainergroupprofile",
                "revision": 1
          },
          "subnetIds": [
            {
              "id": "/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVNET/subnets/mySubnet"
            }
          ]
        },
        "zones": [
          "1",
          "2",
          "3"
        ]
      },

    "location": "West Central US"
}

后续步骤

为 Azure 容器实例创建备用池