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