分享方式:


Azure 容器應用程式中的容器

Azure 容器應用程式會為您管理 Kubernetes 和容器協調流程的詳細資料。 Azure 容器應用程式中的容器可以使用您選擇的任何執行階段、程式設計語言或開發堆疊。

Azure 容器應用程式:容器

Azure 容器應用程式支援:

  • 任何以 Linux 為基礎的 x86-64 (linux/amd64) 容器映像
  • 來自任何公用或私人容器登錄的容器
  • 選用 Sidecarinit 容器

功能還包括:

  • 應用程式會使用 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> 的格式。
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 模式

Sidecar 容器的範例包含:

  • 共用磁碟區上的主要應用程式容器讀取記錄,並將其轉送至記錄服務的代理程式。

  • 重新整理共用磁碟區應用程式容器所使用之快取的背景流程。

這些案例只是範例,不表示您只能以這些方式實作 Sidecar。

若要在容器應用程式中執行多個容器,請在容器應用程式範本的 containers 陣列中新增多個容器。

Init 容器

您可以在容器應用程式中定義一或多個 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 的容器映像。
    • 專用工作負載設定檔支援較大的容器映像。 由於專用工作負載設定檔可以執行多個應用程式或作業,因此多個容器映像會共用可用的磁碟空間。 實際支援的映像大小會根據其他應用程式和作業所耗用的資源而有所不同。

下一步