Bagikan melalui


Kontainer dalam Aplikasi Kontainer Azure

Azure Container Apps mengelola detail Kubernetes dan orkestrasi kontainer untuk Anda. Kontainer di Azure Container Apps dapat menggunakan runtime, bahasa pemrograman, atau tumpukan pengembangan pilihan Anda.

Azure Container Apps: Kontainer

Azure Container Apps mendukung:

  • Gambar kontainer x86-64 (linux/amd64) berbasis Linux apa pun
  • Kontainer dari registri kontainer publik atau privat apa pun
  • Kontainer sidecar dan init yang opsional

Fitur juga meliputi:

  • Aplikasi menggunakan bagian template konfigurasi untuk menentukan gambar kontainer dan pengaturan lainnya. Perubahan pada bagian template konfigurasi memicu revisi aplikasi kontainer baru.
  • Jika kontainer mengalami crash, kontainer akan dimulai ulang secara otomatis.

Fitur pekerjaan meliputi:

  • Eksekusi pekerjaan menggunakan bagian template konfigurasi untuk menentukan gambar kontainer dan pengaturan lainnya saat setiap eksekusi dimulai.
  • Jika kontainer keluar dengan kode keluar bukan nol, eksekusi pekerjaan ditandai sebagai gagal. Anda dapat mengonfigurasi tugas agar otomatis mencoba ulang eksekusi yang gagal.

Konfigurasi

Sebagian besar aplikasi kontainer memiliki satu kontainer. Dalam skenario lanjutan, aplikasi juga dapat memiliki kontainer sidecar dan init. Dalam definisi aplikasi kontainer, aplikasi utama dan kontainer sidecar tercantum dalam array containers di bagian properties.template, dan kontainer init tercantum dalam array initContainers. Kutipan berikut menunjukkan opsi konfigurasi yang tersedia saat menyiapkan kontainer aplikasi.

{
  "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"
          }
        ]
      }
    ]
    ...
  }
  ...
}
Pengaturan Deskripsi Komentar
image Nama gambar kontainer untuk aplikasi kontainer Anda. Nilai ini mengambil bentuk repository/<IMAGE_NAME>:<TAG>.

Hindari menggunakan tag statis seperti latest untuk gambar kontainer. Menggunakan tag statis dapat menyebabkan masalah cache dan membuat aplikasi Anda sulit untuk dipecahkan masalahnya. Sebagai gantinya, gunakan tag unik untuk setiap penyebaran, seperti hash Git atau tanggal dan waktu untuk memastikan bahwa pembaruan dilacak dan disebarkan dengan benar.
name Nama kontainer yang mudah diingat. Digunakan untuk pelaporan dan identifikasi.
command Perintah startup dari kontainer. Setara dengan bidang titik masuk Docker.
args Memulai argumen perintah. Entri dalam array digabungkan bersama-sama untuk membuat daftar parameter untuk diteruskan ke perintah startup.
env Array pasangan nama/nilai yang menentukan variabel lingkungan. Gunakan secretRef alih-alih value bidang saat mereferensikan rahasia.
resources.cpu Jumlah CPU yang dialokasikan untuk kontainer. Lihat persyaratan vCPU dan alokasi memori
resources.memory Jumlah RAM yang dialokasikan untuk kontainer. Lihat persyaratan vCPU dan alokasi memori
volumeMounts Larik definisi pemasangan volume. Anda dapat menentukan volume penyimpanan sementara atau permanen untuk kontainer Anda. Untuk informasi selengkapnya tentang volume penyimpanan, lihat Gunakan pemasangan penyimpanan di Azure Container Apps.
probes Sebuah susunan pemeriksaan kesehatan diaktifkan dalam kontainer. Untuk informasi lebih lanjut mengenai pengaturan probe, lihat Pemeriksaan kesehatan dalam Azure Container Apps.

Persyaratan alokasi vCPU dan memori

Saat Anda menggunakan paket Konsumsi, total CPU dan memori yang dialokasikan untuk seluruh kontainer dalam aplikasi kontainer harus sesuai dengan salah satu kombinasi berikut.

vCPU (inti) Ingatan
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

Nota

Aplikasi yang menggunakan paket Konsumsi di lingkungan Konsumsi saja dibatasi hingga maksimum 2 inti dan memori 4Gi.

Beberapa kontainer

Dalam skenario lanjutan, Anda dapat menjalankan beberapa kontainer dalam satu aplikasi kontainer. Gunakan pola ini hanya dalam kasus tertentu di mana kontainer Anda sangat terhubung.

Untuk sebagian besar skenario layanan mikro, praktik terbaiknya adalah menyebarkan setiap layanan sebagai aplikasi kontainer terpisah.

Beberapa kontainer dalam aplikasi kontainer yang sama berbagi hard disk dan sumber daya jaringan dan mengalami siklus hidup aplikasi yang sama.

Ada dua cara untuk menjalankan kontainer tambahan dalam aplikasi kontainer: kontainer sidecar dan kontainer init.

Kontainer sespan

Anda dapat menentukan beberapa kontainer dalam satu aplikasi kontainer untuk mengimplementasikan pola sidecar .

Contoh kontainer tambahan meliputi:

  • Agen yang membaca log dari kontainer aplikasi utama pada volume bersama dan meneruskannya ke layanan pengelogan.

  • Proses latar belakang yang memperbarui cache yang digunakan kontainer utama aplikasi dalam volume bersama.

Skenario ini adalah contoh dan bukan merupakan satu-satunya cara Anda dapat menerapkan sidecar.

Untuk menjalankan beberapa kontainer dalam aplikasi kontainer, tambahkan lebih dari satu kontainer dalam containers array templat aplikasi kontainer.

Wadah init

Anda dapat menentukan satu atau beberapa kontainer init di aplikasi kontainer. Kontainer init berjalan sebelum kontainer aplikasi utama dan digunakan untuk melakukan tugas inisialisasi seperti mengunduh data atau menyiapkan lingkungan.

Kontainer init didefinisikan dalam initContainers array templat aplikasi kontainer. Kontainer berjalan dalam urutan yang ditentukan dalam array dan harus berhasil diselesaikan sebelum kontainer aplikasi utama dimulai.

Nota

Init container dalam aplikasi yang menggunakan paket Khusus atau berjalan di lingkungan Hanya konsumsi tidak dapat mengakses identitas terkelola saat runtime.

Registri wadah

Anda dapat menyebarkan gambar yang dihosting di registri privat dengan memberikan kredensial dalam konfigurasi Aplikasi Kontainer.

Untuk menggunakan registri kontainer, Anda menentukan registri dalam registries array di bagian properties.configuration templat sumber daya aplikasi kontainer. Bidang passwordSecretRef mengidentifikasi nama rahasia dalam secrets nama array tempat Anda menentukan kata sandi.

{
  ...
  "registries": [{
    "server": "docker.io",
    "username": "my-registry-user-name",
    "passwordSecretRef": "my-password-secret-name"
  }]
}

Kredensial tersimpan digunakan untuk menarik gambar kontainer dari registri privat saat aplikasi Anda disebarkan.

Contoh berikut menunjukkan cara mengonfigurasi kredensial Azure Container Registry dalam aplikasi kontainer.

{
  ...
  "configuration": {
    "secrets": [
      {
        "name": "docker-hub-password",
        "value": "my-docker-hub-password"
      }
    ],
    ...
    "registries": [
      {
        "server": "docker.io",
        "username": "someuser",
        "passwordSecretRef": "docker-hub-password"
      }
    ]
  }
}

Nota

Docker Hub membatasi jumlah unduhan gambar Docker. Saat batas tercapai, kontainer di aplikasi Anda gagal dimulai. Gunakan registri dengan batas yang memadai, seperti Azure Container Registry untuk menghindari masalah ini.

Identitas terkelola dengan Azure Container Registry

Anda dapat menggunakan identitas terkelola Azure untuk mengautentikasi dengan Azure Container Registry alih-alih menggunakan nama pengguna dan kata sandi. Untuk informasi selengkapnya, lihat identitas terkelola di Azure Container Apps.

Untuk menggunakan identitas terkelola dengan registri, identitas tersebut harus diaktifkan dalam aplikasi dan harus diberikan peran acrPull dalam registri. Untuk mengonfigurasi registri, gunakan ID sumber daya identitas terkelola untuk identitas yang ditetapkan pengguna, atau system untuk identitas yang ditetapkan sistem di identity properti registri. Jangan mengonfigurasi nama pengguna dan kata sandi saat menggunakan identitas terkelola.

{
    "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"
            }]
        }
        ...
    }
}

Untuk informasi selengkapnya tentang mengonfigurasi identitas yang ditetapkan pengguna, lihat Menambahkan identitas yang ditetapkan pengguna.

Keterbatasan

Azure Container Apps memiliki batasan berikut:

  • Kontainer istimewa: Azure Container Apps tidak mengizinkan mode kontainer istimewa dengan akses tingkat host.

  • Sistem operasi: Gambar kontainer berbasis Linux (linux/amd64) diperlukan.

  • Ukuran gambar maksimum:

    • Profil beban kerja konsumsi mendukung gambar kontainer yang berjumlah hingga 8 GB untuk setiap aplikasi atau replika pekerjaan.
    • Profil beban kerja khusus mendukung gambar kontainer yang lebih besar. Karena profil beban kerja Khusus dapat menjalankan beberapa aplikasi atau pekerjaan, beberapa gambar kontainer berbagi ruang disk yang tersedia. Ukuran gambar yang didukung aktual bervariasi berdasarkan sumber daya yang digunakan oleh aplikasi dan pekerjaan lain.

Langkah selanjutnya