Kontainer di Azure Container Apps

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: Containers

Azure Container Apps mendukung:

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

Fitur juga meliputi:

  • Perubahan pada bagian template konfigurasi memicu revisi aplikasi kontainer baru.
  • Jika suatu kontainer crash, kontainer tersebut secara otomatis dimulai ulang.

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 pekerjaan untuk mencoba kembali eksekusi yang gagal.

Konfigurasi

Kode berikut adalah contoh containers array di bagian properties.template templat sumber daya aplikasi kontainer. Kutipan menunjukkan opsi konfigurasi yang tersedia saat menyiapkan kontainer.

{
  "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 Keterangan
image Nama gambar kontainer untuk aplikasi kontainer Anda. Nilai ini berupa repository/<IMAGE_NAME>:<TAG>.
name Nama kontainer yang mudah diingat. Digunakan untuk pelaporan dan identifikasi.
command Perintah mulai kontainer. Setara dengan bidang entrypoint Docker.
args Argumen perintah mulai. Entri dalam array digabungkan untuk membuat daftar parameter untuk diteruskan ke perintah mulai.
env Array pasangan kunci/nilai yang menentukan variabel lingkungan. Gunakan bidang secretRef alih-alih value untuk merujuk ke rahasia.
resources.cpu Jumlah CPU yang dialokasikan untuk kontainer. Dengan paket Konsumsi, nilai harus mematuhi aturan berikut:

• lebih besar dari nol
• kurang dari atau sama dengan 2
• dapat berupa angka desimal apa pun (dengan maksimal dua tempat desimal)

Misalnya, 1.25 valid, tetapi 1.555 tidak valid.
Defaultnya adalah CPU 0,25 per kontainer.

Saat Anda menggunakan profil beban kerja Konsumsi pada paket Khusus, aturan yang sama berlaku, kecuali CPU harus kurang dari atau sama dengan 4.

Saat Anda menggunakan paket Khusus, CPU maksimum harus kurang dari atau sama dengan jumlah inti yang tersedia di profil tempat aplikasi kontainer berjalan.
resources.memory Jumlah RAM yang dialokasikan untuk kontainer. Dengan paket Konsumsi, nilai harus mematuhi aturan berikut:

• lebih besar dari nol
• kurang dari atau sama dengan 4Gi
• dapat berupa angka desimal apa pun (dengan maksimal dua tempat desimal)

Misalnya, 1.25Gi valid, tetapi 1.555Gi tidak valid.
Default adalah 0.5Gi per kontainer.

Saat Anda menggunakan beban kerja Konsumsi pada paket Khusus, aturan yang sama berlaku kecuali memori harus kurang dari atau sama dengan 8Gi.

Saat Anda menggunakan paket Khusus, memori maksimum harus kurang dari atau sama dengan jumlah memori yang tersedia di profil tempat aplikasi kontainer berjalan.
volumeMounts Array definisi pemasangan volume. Anda dapat menentukan volume sementara atau beberapa volume penyimpanan permanen untuk kontainer Anda. Untuk informasi selengkapnya tentang volume penyimpanan, lihat Menggunakan pemasangan penyimpanan di Azure Container Apps.
probes Array pemeriksaan kesehatan diaktifkan dalam kontainer. Fitur ini didasarkan pada pemeriksaan kesehatan Kubernetes. Untuk informasi selengkapnya tentang pengaturan pemeriksaan, lihat Pemeriksaan kesehatan di Azure Container Apps.

Saat Anda menggunakan paket Konsumsi atau beban kerja Konsumsi pada paket Khusus, total alokasi CPU dan memori yang diminta untuk semua kontainer dalam aplikasi kontainer harus menambahkan hingga salah satu kombinasi berikut.

vCPU (core) Memori Paket Konsumsi Profil beban kerja konsumsi
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
  • Total permintaan CPU di semua kontainer Anda harus cocok dengan salah satu nilai di kolom vCPU .

  • Total permintaan memori di semua kontainer Anda harus sesuai dengan nilai memori di kolom memori di baris yang sama dari kolom CPU.

Saat Anda menggunakan profil Konsumsi pada paket Khusus, total alokasi CPU dan memori yang diminta untuk semua kontainer dalam aplikasi kontainer harus kurang dari atau sama dengan inti dan memori yang tersedia di profil.

Beberapa kontainer

Dalam skenario lanjutan, Anda dapat menjalankan beberapa kontainer dalam satu aplikasi kontainer. Gunakan pola ini hanya dalam instans tertentu di mana kontainer Anda digabungkan dengan erat.

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 beberapa kontainer dalam aplikasi kontainer: kontainer sidecar dan kontainer init.

Kontainer sespan

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

Contoh kontainer sespan meliputi:

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

  • Proses latar belakang yang me-refresh cache yang digunakan oleh kontainer aplikasi utama dalam volume bersama.

Skenario ini adalah contoh, dan tidak mewakili satu-satunya cara Anda dapat menerapkan sespan.

Untuk menjalankan beberapa kontainer dalam aplikasi kontainer, tambahkan lebih dari satu kontainer dalam array containers template 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.

Catatan

Kontainer init mendukung penarikan gambar menggunakan identitas terkelola, tetapi proses yang berjalan dalam kontainer init tidak memiliki akses ke identitas terkelola.

Registri kontainer

Anda dapat menyebarkan citra yang dihosting di registri privat dengan menyediakan info masuk dalam konfigurasi Container Apps.

Untuk menggunakan registri kontainer, Anda menentukan bidang yang diperlukan dalam array registries di bagian properties.configuration template sumber daya aplikasi kontainer. Bidang passwordSecretRef mengidentifikasi nama rahasia dalam nama array secrets 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 info masuk Azure Container Registry di aplikasi kontainer.

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

Catatan

Docker Hub membatasi jumlah unduhan gambar Docker. Saat batas tercapai, kontainer di aplikasi Anda akan 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.

Saat menetapkan identitas terkelola ke registri, gunakan ID sumber daya identitas terkelola untuk identitas yang ditetapkan pengguna, atau system untuk identitas yang ditetapkan sistem.

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

Batasan

Azure Container Apps memiliki batasan sebagai berikut:

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

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

Langkah berikutnya