Azure 容器应用中的容器
Azure 容器应用为你管理 Kubernetes 和容器业务流程的详细信息。 Azure 容器应用中的容器可以使用你选择的任何运行时、编程语言或开发堆栈。
Azure 容器应用支持:
功能还包括:
- 应用使用
template
配置部分来定义每次执行启动时的容器映像和其他设置。 对template
配置部分的更改会触发新的容器应用修订。 - 如果容器发生故障,它会自动重启。
“作业”功能包括:
- “作业执行”使用
template
配置部分来定义每次执行启动时的容器映像和其他设置。 - 如果容器退出并包含非零退出代码,则作业执行将标记为失败。 可以将作业配置为重试失败的执行。
大多数容器应用都有单独的容器。 在高级方案中,应用可能还具有挎斗和 init 容器。 在容器应用定义中,主应用及其挎斗容器列在 properties.template
部分中的 containers
数组中,init 容器则列在 initContainers
数组中。 以下摘录显示了设置应用的容器时可用的配置选项。
{
"properties": {
"template": {
"containers": [
{
"name": "main",
"image": "[parameters('container_image')]",
"env": [
{
"name": "HTTP_PORT",
"value": "80"
},
{
"name": "SECRET_VAL",
"secretRef": "mysecret"
}
],
"resources": {
"cpu": 0.5,
"memory": "1Gi"
},
"volumeMounts": [
{
"mountPath": "/appsettings",
"volumeName": "appsettings-volume"
}
],
"probes": [
{
"type": "liveness",
"httpGet": {
"path": "/health",
"port": 8080,
"httpHeaders": [
{
"name": "Custom-Header",
"value": "liveness probe"
}
]
},
"initialDelaySeconds": 7,
"periodSeconds": 3
},
{
"type": "readiness",
"tcpSocket": {
"port": 8081
},
"initialDelaySeconds": 10,
"periodSeconds": 3
},
{
"type": "startup",
"httpGet": {
"path": "/startup",
"port": 8080,
"httpHeaders": [
{
"name": "Custom-Header",
"value": "startup probe"
}
]
},
"initialDelaySeconds": 3,
"periodSeconds": 3
}
]
}
]
},
"initContainers": [
{
"name": "init",
"image": "[parameters('init_container_image')]",
"resources": {
"cpu": 0.25,
"memory": "0.5Gi"
},
"volumeMounts": [
{
"mountPath": "/appsettings",
"volumeName": "appsettings-volume"
}
]
}
]
...
}
...
}
设置 | 说明 | 备注 |
---|---|---|
image |
容器应用的容器映像名称。 | 此值采用 repository/<IMAGE_NAME>:<TAG> 形式。 |
name |
易记的容器名称。 | 用于报告和识别。 |
command |
容器的启动命令。 | 等效于 Docker 的 entrypoint 字段。 |
args |
启动命令参数。 | 数组中的条目联接在一起,用于创建要传递给启动命令的参数列表。 |
env |
定义环境变量的名称/值对数组。 | 使用 secretRef 而不是 value 字段来引用机密。 |
resources.cpu |
分配给容器的 CPU 数量。 | 请参阅“vCPU 和内存分配要求” |
resources.memory |
分配给容器的 RAM 量。 | 请参阅“vCPU 和内存分配要求” |
volumeMounts |
卷装载定义的数组。 | 你可以为容器定义一个临时卷或多个永久存储卷。 有关存储卷的详细信息,请参阅 在 Azure 容器应用中使用存储装载。 |
probes |
容器中启用的运行状况探测的数组。 | 有关探测设置的详细信息,请参阅 Azure 容器应用中的运行状况探测。 |
使用“消耗”计划中,为容器应用中的所有容器分配的总 CPU 和内存加起来必须为以下其中一个组合。
vCPU(核心) | 内存 |
---|---|
0.25 |
0.5Gi |
0.5 |
1.0Gi |
0.75 |
1.5Gi |
1.0 |
2.0Gi |
1.25 |
2.5Gi |
1.5 |
3.0Gi |
1.75 |
3.5Gi |
2.0 |
4.0Gi |
2.25 |
4.5Gi |
2.5 |
5.0Gi |
2.75 |
5.5Gi |
3.0 |
6.0Gi |
3.25 |
6.5Gi |
3.5 |
7.0Gi |
3.75 |
7.5Gi |
4.0 |
8.0Gi |
备注
在“仅消耗”环境中使用“消耗”计划的应用最多可分配 2 个核和 4Gi 内存。
在高级方案中,可以在单个容器应用中运行多个容器。 仅在容器紧密耦合的特定实例中使用此模式。
对于大多数微服务方案,最佳做法是将每个服务部署为单独的容器应用。
同一容器应用中的多个容器共享硬盘和网络资源,并经历相同的应用程序生命周期。
可通过两种方法在容器应用中运行其他容器:挎斗容器和 init 容器。
可以在单个容器应用中定义多个容器,以实现挎斗模式。
挎斗容器的示例包括:
一个代理,可从共享卷上的主应用容器读取日志并将其转发到日志记录服务。
一个后台进程,用于刷新共享卷中的主应用容器使用的缓存。
这些方案是示例,并不代表实现 sidecar 的唯一方法。
若要在容器应用中运行多个容器,请在容器应用模板的 containers
数组中添加多个容器。
可以在容器应用中定义一个或多个 init 容器。 init 容器在主应用容器之前运行,用于执行初始化任务,例如下载数据或准备环境。
init 容器在容器应用模板的 initContainers
数组中定义。 容器按照它们在数组中定义的顺序运行,并且必须在主应用容器启动之前成功完成。
备注
使用专用计划或在“仅消耗”环境中运行的应用中的 init 容器无法访问运行时的托管标识。
通过在容器应用配置中提供凭据,你可以部署托管在专用注册表上的映像。
若要使用容器注册表,请在容器应用资源模板的 properties.configuration
部分的 registries
数组中定义注册表。 passwordSecretRef
字段标识 secrets
数组名称中你在其中定义了密码的机密的名称。
{
...
"registries": [{
"server": "docker.io",
"username": "my-registry-user-name",
"passwordSecretRef": "my-password-secret-name"
}]
}
保存的凭据用于在部署应用时从专用注册表拉取容器映像。
以下示例展示了如何在容器应用中配置 Azure 容器注册表凭据。
{
...
"configuration": {
"secrets": [
{
"name": "docker-hub-password",
"value": "my-docker-hub-password"
}
],
...
"registries": [
{
"server": "docker.io",
"username": "someuser",
"passwordSecretRef": "docker-hub-password"
}
]
}
}
备注
Docker Hub 限制了 Docker 镜像下载的数量。 达到限制时,你的应用程序中的容器将无法启动。 使用具有足够上限的注册表(例如 Azure 容器注册表),以避免此问题。
你可以使用 Azure 托管标识向 Azure 容器注册表进行身份验证,而不是使用用户名和密码。 有关详细信息,请参阅 Azure 容器应用中的托管标识。
若要将托管标识用于注册表,必须在应用中启用标识,并且必须在注册表中为其分配 acrPull
角色。 要配置注册表,请为注册表中 identity
属性中的用户分配的标识使用托管标识资源 ID 或为系统分配的标识使用 system
。 使用托管标识时不要配置用户名和密码。
{
"identity": {
"type": "SystemAssigned,UserAssigned",
"userAssignedIdentities": {
"<IDENTITY1_RESOURCE_ID>": {}
}
}
"properties": {
"configuration": {
"registries": [
{
"server": "myacr1.azurecr.cn",
"identity": "<IDENTITY1_RESOURCE_ID>"
},
{
"server": "myacr2.azurecr.cn",
"identity": "system"
}]
}
...
}
}
有关配置用户分配的标识的更多信息,请参阅添加用户分配的标识。
Azure 容器应用具有以下限制:
特权容器:Azure 容器应用不允许具有主机级访问权限的特权容器模式。
操作系统:需要基于 Linux (
linux/amd64
) 的容器映像。图像大小上限:
- 消耗工作负荷配置文件支持每个应用或作业副本最多 8GB 的容器映像。
- 专用工作负荷配置文件支持更大的容器映像。 由于专用工作负荷配置文件可以运行多个应用或作业,因此多个容器映像共享可用的磁盘空间。 实际支持的图像大小因其他应用和作业消耗的资源而异。