Pemeriksaan kesehatan di Azure Container Apps
Pemeriksaan kesehatan Azure Container Apps memungkinkan runtime Aplikasi Kontainer untuk memeriksa status aplikasi kontainer Anda secara teratur.
Anda dapat menyiapkan pemeriksaan menggunakan TCP atau HTTP secara eksklusif.
Container Apps mendukung pemeriksaan berikut:
Probe | Deskripsi |
---|---|
Startup | Memeriksa apakah aplikasi Anda telah berhasil dimulai. Pemeriksaan ini terpisah dari pemeriksaan keaktifan dan dijalankan selama fase startup awal aplikasi Anda. |
Keaktivaan | Memeriksa apakah aplikasi Anda masih berjalan dan responsif. |
Kesiapan | Memeriksa untuk melihat apakah replika siap untuk menangani permintaan masuk. |
Untuk daftar lengkap spesifikasi pemeriksaan yang didukung di Azure Container Apps, lihat spesifikasi Azure REST API.
Pemeriksaan HTTP
Pemeriksaan HTTP memungkinkan Anda menerapkan logika kustom untuk memeriksa status dependensi aplikasi sebelum melaporkan status sehat.
Konfigurasikan titik akhir pemeriksaan kesehatan Anda untuk merespons dengan kode status HTTP yang lebih besar dari atau sama dengan 200
dan kurang dari 400
untuk menunjukkan keberhasilan. Kode respons lain di luar rentang ini menunjukkan kegagalan.
Contoh berikut menunjukkan cara mengimplementasikan titik akhir liveness di JavaScript.
const express = require('express');
const app = express();
app.get('/liveness', (req, res) => {
let isSystemStable = false;
// check for database availability
// check filesystem structure
// etc.
// set isSystemStable to true if all checks pass
if (isSystemStable) {
res.status(200); // Success
} else {
res.status(503); // Service unavailable
}
})
Pemeriksaan TCP
Pemeriksaan TCP menunggu untuk membuat koneksi dengan server untuk menunjukkan keberhasilan. Pemeriksaan gagal jika tidak dapat membuat koneksi ke aplikasi Anda.
Batasan
- Anda hanya dapat menambahkan salah satu dari setiap jenis probe per kontainer.
exec
pemeriksaan tidak didukung.- Nilai port harus berupa bilangan bulat; port bernama tidak didukung.
- gRPC tidak didukung.
Contoh
Daftar kode berikut menunjukkan bagaimana Anda dapat menentukan pemeriksaan kesehatan untuk kontainer Anda.
Tempat penampung ...
menunjukkan kode yang dihilangkan. Lihat Spesifikasi API template ARM Container Apps untuk detail template ARM lengkap.
{
...
"containers":[
{
"image":"nginx",
"name":"web",
"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
}]
}]
...
}
Pengaturan opsional failureThreshold
menentukan jumlah upaya Container Apps mencoba menjalankan pemeriksaan jika eksekusi gagal. Upaya yang melebihi failureThreshold
jumlah menyebabkan hasil yang berbeda untuk setiap jenis pemeriksaan.
Konfigurasi default
Jika ingress diaktifkan, pemeriksaan default berikut secara otomatis ditambahkan ke kontainer aplikasi utama jika tidak ada yang ditentukan untuk setiap jenis.
Jenis pemeriksaan | Nilai default |
---|---|
Startup | Protocol: TCP Port: port target ingress Waktu habis: 3 detik Periode: 1 detik Penundaan awal: 1 detik Ambang keberhasilan: 1 Ambang kegagalan: 240 |
Kesiapan | Protocol: TCP Port: port target ingress Waktu habis: 5 detik Periode: 5 detik Penundaan awal: 3 detik Ambang keberhasilan: 1 Ambang kegagalan: 48 |
Keaktivaan | Protocol: TCP Port: port target ingress |
Jika aplikasi Anda membutuhkan waktu lama untuk memulai (yang umum di Java) Anda sering kali perlu menyesuaikan pemeriksaan sehingga kontainer Anda tidak mengalami crash.
Contoh berikut menunjukkan cara mengonfigurasi pemeriksaan keaktifan dan kesiapan untuk memperpanjang waktu startup.
"probes": [
{
"type": "liveness",
"failureThreshold": 3,
"periodSeconds": 10,
"successThreshold": 1,
"tcpSocket": {
"port": 80
},
"timeoutSeconds": 1
},
{
"type": "readiness",
"failureThreshold": 48,
"initialDelaySeconds": 3,
"periodSeconds": 5,
"successThreshold": 1,
"tcpSocket": {
"port": 80
},
"timeoutSeconds": 5
}]