ConfigMap 是一个属性,可用于应用类似于环境变量和机密卷的容器配置。 此过程不同于使用环境变量或机密卷,如果是后者,必须重启 Pod 以应用设置。 使用配置映射应用设置不需要重启即可使更改生效。
可以使用 Azure 容器实例创建包含或不带配置映射的容器实例。 还可以使用配置映射在创建后的任何时间点更新它们。 更新现有正在运行的容器组中的配置映射是一项任务,你可以在不影响容器的运行时间的情况下快速完成。
工作原理
可以在容器属性或容器组配置文件中包含 ConfigMap。 使用 ConfigMap 设置创建容器组配置文件使得应用这些设置变得简单且易于自动化。
使用 ConfigMap 设置创建容器组配置文件
使用 az container container-group-profile create 来创建带有配置映射设置的容器组配置文件。
az container container-group-profile create \
--resource-group myResourceGroup \
--name myContainerGroupProfile \
--location WestCentralUS \
--image nginx \
--os-type Linux \
--ip-address Public \
--ports 8000 \
--cpu 1 \
--memory 1.5 \
--restart-policy never \
--config-map key1=value1 key2=value2
使用 New-AzContainerInstanceContainerGroupProfile 通过 ConfigMap 设置创建容器组配置文件。
$port1 = New-AzContainerInstancePortObject -Port 8000 -Protocol TCP
$port2 = New-AzContainerInstancePortObject -Port 8001 -Protocol TCP
$container = New-AzContainerInstanceObject -Name myContainer -Image nginx -RequestCpu 1 -RequestMemoryInGb 1.5 -Port @($port1, $port2) -ConfigMapKeyValuePair @{"key1"="value1"}
New-AzContainerInstanceContainerGroupProfile `
-ResourceGroupName myResourceGroup `
-Name myContainerGroupProfile `
-Location WestCentralUS `
-Container $container `
-OsType Linux `
-RestartPolicy "Never" `
-IpAddressType Public
使用 az deployment group create 或 New-AzResourceGroupDeployment 通过 ConfigMap 设置创建容器组配置文件并部署模板。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2024-05-01-preview",
"name": "[parameters('profileName')]",
"location": "[parameters('location')]",
"properties": {
"containers": [
{
"name": "myContainer",
"properties": {
"image": "[parameters('containerImage')]",
"ports": [
{
"port": 8000
}
],
"resources": {
"requests": {
"cpu": 1,
"memoryInGB": 1.5
}
},
"command": [],
"configMap": {
"keyValuePairs": {
"key1": "value1",
"key2": "value2"
}
"environmentVariables": []
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "TCP",
"port": 8000
}
]
},
"imageRegistryCredentials": [],
"sku": "Standard"
}
}
],
"parameters": {
"profileName": {
"type": "string",
"defaultValue": "myContainerGroupProfile",
"metadata": {
"description": "Name of the container profile"
}
},
"location": {
"type": "string",
"defaultValue": "West Central US",
"metadata": {
"description": "Location for the resource"
}
},
"containerImage": {
"type": "string",
"defaultValue": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"metadata": {
"description": "The container image used"
}
}
}
}
使用 “创建”或“更新”创建具有配置映射设置的容器组配置文件。
PUT https://management.azure.com/subscriptions/{SubscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance/containerGroupProfiles/myContainerGroupProfile?api-version=2024-05-01-preview
Request Body
{
"location": "West Central US",
"properties":{
"containers": [
{
"name":"myContainerGroupProfile",
"properties": {
"command":[],
"configMap": {
"keyValuePairs": {
"key1": "value1",
"key2": "value2"
}
},
"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 设置
要应用存储在容器组配置文件中的配置映射设置,需要更新相应的容器。 还必须指定应与更新关联的容器组配置文件。
使用 az container create 命令来应用容器组配置文件中的配置映射设置。
az container create
--resource-group myResourceGroup \
--name myContainer \
--location WestCentralUS \
--container-group-profile-id "/subscriptions/{SubscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance/containerGroupProfiles/myContainerGroupProfile" \
--container-group-profile-revision 1
使用 New-AzContainerGroup 应用存储在容器组配置文件中的配置映射设置。
$container = New-AzContainerInstancenoDefaultObject -Name myContainer
New-AzContainerGroup `
-ResourceGroupName myResourceGroup `
-Name myContainer`
-Container $container `
-Location WestCentralUS `
-ContainerGroupProfileId "/subscriptions/{SubscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance/containerGroupProfiles/myContainerGroupProfile" `
-ContainerGroupProfileRevision 1
使用 az deployment group create 或 New-AzResourceGroupDeployment 应用存储在容器组配置文件中的配置映射设置。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"subscriptionId": {
"type": "string",
"metadata": {
"description": "The subscription ID."
}
},
"resourceGroup": {
"type": "string",
"metadata": {
"description": "The name of the resource group."
}
},
"location": {
"type": "string",
"metadata": {
"description": "Location for the resource."
},
"defaultValue": "West Central US"
},
"containerGroupName": {
"type": "string",
"metadata": {
"description": "The name of the container group."
}
},
},
"containerGroupProfileName": {
"type": "string",
"metadata": {
"description": "The name of the container group profile."
}
},
"newKey": {
"type": "string",
"metadata": {
"description": "The new key for the config map."
}
},
"newValue": {
"type": "string",
"metadata": {
"description": "The new value for the config map."
}
},
"revisionNumber": {
"type": "int",
"metadata": {
"description": "The revision number for the container group profile."
}
}
},
"resources": [
{
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2024-05-01-preview",
"name": "[parameters('containerGroupName')]",
"location": "[parameters('location')]",
"properties": {
"containerGroupProfile": {
"id": "[concat('/subscriptions/', parameters('subscriptionId'), '/resourceGroups/', parameters('resourceGroup'), '/providers/Microsoft.ContainerInstance/containerGroupProfiles/', parameters('containerGroupProfileName'))]",
"revision": "[parameters('revisionNumber')]"
},
"containers": [
{
"name": "[parameters('myContainerProfile')]",
"properties": {
"configMap": {
"keyValuePairs": {
"[parameters('newKey')]": "[parameters('newValue')]"
}
}
}
}
]
}
}
],
"outputs": {
"containerGroupId": {
"type": "string",
"value": "[resourceId('Microsoft.ContainerInstance/containerGroups', parameters('containerGroupName'))]"
}
}
}
使用 “创建”或“更新”应用存储在容器组配置文件中的配置映射设置。
PUT
https://management.azure.com/subscriptions/{SubscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance/containerGroups/myContainerGroup?api-version=2024-05-01-preview
Request Body
{
"location": "{location}",
"properties": {
"containerGroupProfile": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance/containerGroupProfiles/myContainerGroupProfile",
"revision": {revisionNumber}
},
"containers": [
{
"name": "{myContainerGroupProfile}",
"properties": {
}
}
]
}
}
在没有容器组配置文件的情况下应用 ConfigMap 设置
还可以通过在创建命令中指定配置映射设置,将配置映射设置直接应用于实例。
使用 az container create 应用配置映射设置。
az container create \
--resource-group myResourceGroup \
--name myContainer \
--location WestCentralUS \
--config-map key1=value1 key2=value2
使用 New-AzContainerGroup 应用 ConfigMap 设置。
$container = New-AzContainerInstancenoDefaultObject -Name myContainer -ConfigMapKeyValuePair @{"key1"="value1"}
New-AzContainerGroup `
-ResourceGroupName myResourceGroup `
-Name myContainerGroup `
-Container $container `
-Location WestCentralUS
使用 az deployment group create 或 New-AzResourceGroupDeployment 应用配置映射设置。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"subscriptionId": {
"type": "string",
"metadata": {
"description": "The subscription ID."
}
},
"resourceGroup": {
"type": "string",
"metadata": {
"description": "The name of the resource group."
}
},
"location": {
"type": "string",
"metadata": {
"description": "Location for the resource."
},
"defaultValue": "West Central US"
},
"containerGroupName": {
"type": "string",
"metadata": {
"description": "The name of the container group."
}
},
"myContainerProfile": {
"type": "string",
"metadata": {
"description": "The name of the container profile."
}
},
"newKey": {
"type": "string",
"metadata": {
"description": "The new key for the config map."
}
},
"newValue": {
"type": "string",
"metadata": {
"description": "The new value for the config map."
}
},
},
"resources": [
{
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2024-05-01-preview",
"name": "[parameters('containerGroupName')]",
"location": "[parameters('location')]",
"properties": {
"containers": [
{
"name": "[parameters('myContainerProfile')]",
"properties": {
"configMap": {
"keyValuePairs": {
"[parameters('newKey')]": "[parameters('newValue')]"
}
}
}
}
]
}
}
],
"outputs": {
"containerGroupId": {
"type": "string",
"value": "[resourceId('Microsoft.ContainerInstance/containerGroups', parameters('containerGroupName'))]"
}
}
}
使用 “创建”或“更新” 来应用配置映射设置。
PUT
https://management.azure.com/subscriptions/{SubscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance/containerGroups/myContainerGroup?api-version=2024-05-01-preview
Request Body
{
"location": "{location}",
"properties": {
"containers": [
{
"name": "{myContainerGroupProfile}",
"properties": {
"configMap": {
"keyValuePairs": {
"{newKey}": "{newValue}"
}
}
}
}
]
}
}
Linux 容器中的配置映射
将更新应用到现有容器后,可以看到在 Linux 容器中装载的值,而无需重启。
/mnt/configmap/<containername>/key1 with value as "value1"
/mnt/configmap/<containername>/key2 with value as "value2"
Windows 容器中的 ConfigMap
将更新应用到现有容器后,可以通过进行以下调用来提取 Windows 容器中的配置映射键/值对,而无需重启。 对于 Windows 容器,这些值不会随处装载,Linux 的情况也一样。
Invoke-Expression "$Env:ConfigMapURI"
相关内容