Azure 容器應用程式會為您管理 Kubernetes 和容器協調流程的詳細資料。 Azure 容器應用程式中的容器可以使用您選擇的任何執行階段、程式設計語言或開發堆疊。
Azure 容器應用程式支援:
功能也包括:
- 應用程式會使用
template組態區段來定義容器映像和其他設定。template組態區段的變更會觸發新的容器應用程式修訂。 - 如果容器當機,將會自動重新開機。
作業功能包括:
- 作業執行會使用
template組態區段,在每個執行開始時定義容器映像和其他設定。 - 如果容器以非零結束代碼結束,則作業執行會被標示為失敗。 您可以設定作業來重試失敗的執行。
組態
大部分的容器應用程式都有單一容器。 在進階案例中,應用程式也可能有 Sidecar 和 Init 容器。 在容器應用程式定義中,主要應用程式及其 Sidecar 容器會列在 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>。 避免對容器映像使用像是 latest 的靜態標籤。 使用靜態標籤可能會導致快取問題,並讓您的應用程式難以進行疑難排解。 相反地,請針對每個部署使用唯一的標籤 (例如 Git 雜湊或日期和時間),以確保正確追蹤和部署更新。 |
name |
容器的易記名稱。 | 用於報告和識別。 |
command |
容器的啟動命令。 | 相當於 Docker 的進入點欄位。 |
args |
啟動命令引數。 | 陣列中的專案會聯結在一起,以建立要傳遞至啟動命令的參數清單。 |
env |
定義環境變數的名稱/值組陣列。 | 在參考秘密時,請使用 secretRef 而非 value 欄位。 |
resources.cpu |
配置給容器的 CPU 數。 | 請參閱 vCPU 和記憶體配置需求 |
resources.memory |
配置給容器的 RAM 數量。 | 請參閱 vCPU 和記憶體配置需求 |
volumeMounts |
磁碟區掛接定義的陣列。 | 您可以定義容器的暫存或永久儲存磁碟區。 如需儲存體磁碟區的詳細資訊,請參閱在 Azure 容器應用程式中使用儲存體掛接。 |
probes |
容器中啟用的健康情況探查陣列。 | 如需探查設定的詳細資訊,請參閱 Azure 容器應用程式中的健康情況探查。 |
vCPU 和記憶體配置需求
當您使用使用量方案時,配置給容器應用程式中所有容器的 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 的記憶體。
多個容器
在進階案例中,您可以在單一容器應用程式中執行多個容器。 僅在容器緊密結合的特定情況下使用此模式。
對於大部分的微服務案例,最佳做法是將每個服務部署為個別的容器應用程式。
相同容器應用程式中的多個容器共用硬碟和網路資源,並體驗相同的應用程式生命週期。
在容器應用程式中執行其他容器的方式有兩種:Sidecar 容器和 Init 容器。
Sidecar 容器
您可以在單一容器應用程式中定義多個容器,以實作側車模式。
側車容器的範例包括:
從共用磁碟區上的主要應用程式容器讀取記錄,並將其轉送至記錄服務的代理程式。
重新整理共用磁碟區中主要應用程式容器所使用的快取背景流程。
這些情境只是範例,不代表這是實作 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 Container Registry 認證。
{
...
"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 Container Registry) 以避免此問題。
Azure Container Registry 的受控識別
您可以使用 Azure 受控識別來向 Azure Container Registry 進行驗證,而非透過使用者名稱和密碼。 如需詳細資訊,請參閱 Azure 容器應用程式中的受控識別。
若要搭配登錄使用受控識別,則必須在應用程式中啟用身分識別,而且必須在登錄中指派 acrPull 角色。 若要設定登錄,請將受控識別資源識別碼用於使用者指派的身分識別,或將 system 用於登錄的 identity 屬性中系統指派的身分識別。 使用受控識別時,請勿設定使用者名稱和密碼。
{
"identity": {
"type": "SystemAssigned,UserAssigned",
"userAssignedIdentities": {
"<IDENTITY1_RESOURCE_ID>": {}
}
}
"properties": {
"configuration": {
"registries": [
{
"server": "myacr1.azurecr.io",
"identity": "<IDENTITY1_RESOURCE_ID>"
},
{
"server": "myacr2.azurecr.io",
"identity": "system"
}]
}
...
}
}
如需設定使用者指派身分識別的詳細資訊,請參閱新增使用者指派的身分識別。
限制
Azure 容器應用程式有下列限制:
具有權限的容器:Azure 容器應用程式不允許具有主機層級存取的具有權限的容器模式。
作業系統:需要以 Linux 為基礎 (
linux/amd64) 的容器映像。影像大小上限:
- 使用量工作負載設定檔支援每個應用程式或作業複本最多 8 GB 的容器映像。
- 專用工作負載設定檔支援較大的容器映像。 由於專用工作負載設定檔可以執行多個應用程式或作業,因此多個容器映像會共用可用的磁碟空間。 實際支援的映像大小會根據其他應用程式和作業所耗用的資源而有所不同。