Pemeriksaan kelangsungan hidup (liveness probe) dan pemeriksaan kesiapan (readiness probe) adalah mekanisme untuk memantau status kontainer. Pemeriksaan kelangsungan hidup menentukan apakah kontainer berjalan dengan baik, sedangkan pemeriksaan kesiapan menentukan apakah kontainer siap melayani permintaan. Topik ini menjelaskan cara mengonfigurasi kedua jenis pemeriksaan tersebut untuk kontainer di Elastic Container Instance (ECI). Probe-probe ini membantu ECI memantau dan mengelola status kontainer Anda guna memastikan ketersediaan dan stabilitas layanan yang tinggi.
Ikhtisar
ECI mendukung pemeriksaan kelangsungan hidup dan pemeriksaan kesiapan untuk memantau kesehatan serta status kontainer.
|
Probe |
Description |
Use cases |
|
liveness probe |
Memeriksa apakah kontainer berjalan dengan baik.
|
|
|
readiness probe |
Memeriksa apakah kontainer siap menerima dan melayani permintaan.
|
Gunakan pemeriksaan kesiapan jika aplikasi sementara tidak dapat melayani traffic, misalnya saat memuat data atau file konfigurasi dalam jumlah besar selama startup. Dalam kasus seperti ini, Anda tidak ingin menghentikan aplikasi, tetapi ingin sementara waktu berhenti mengirimkan permintaan kepadanya. |
Konfigurasi API
Saat membuat instans ECI melalui operasi CreateContainerGroup, Anda dapat mengonfigurasi probe menggunakan parameter LivenessProbe dan ReadinessProbe. Untuk informasi selengkapnya, lihat CreateContainerGroup.
Parameter LivenessProbe
Saat mengonfigurasi parameter LivenessProbe, Anda hanya dapat menentukan satu metode pemeriksaan: HttpGet, Exec, atau TcpSocket.
|
Parameter |
Type |
Example |
Description |
|
Container.N.LivenessProbe.HttpGet.Path |
string |
/healthyz |
Jalur untuk permintaan pemeriksaan kesehatan HTTP GET. |
|
Container.N.LivenessProbe.HttpGet.Port |
integer |
8888 |
Port untuk permintaan pemeriksaan kesehatan HTTP GET. |
|
Container.N.LivenessProbe.HttpGet.Scheme |
string |
HTTP |
Protokol permintaan HTTP GET. Nilai yang valid:
|
|
Container.N.LivenessProbe.Exec.Command.N |
array |
cat /tmp/healthy |
Perintah yang dijalankan di dalam kontainer untuk pemeriksaan kesehatan. |
|
Container.N.LivenessProbe.TcpSocket.Port |
integer |
8000 |
Port yang diperiksa untuk pemeriksaan kesehatan soket TCP. |
|
Container.N.LivenessProbe.InitialDelaySeconds |
integer |
5 |
Waktu tunda dalam detik setelah kontainer dimulai sebelum probe pertama dijalankan. |
|
Container.N.LivenessProbe.PeriodSeconds |
integer |
1 |
Interval pengulangan probe. Nilai default: 10. Nilai minimum: 1. Satuan: detik. |
|
Container.N.LivenessProbe.SuccessThreshold |
integer |
1 |
Jumlah keberhasilan berturut-turut yang diperlukan agar probe dianggap berhasil setelah sebelumnya gagal. Nilai ini harus 1 untuk pemeriksaan kelangsungan hidup. Default: 1. |
|
Container.N.LivenessProbe.FailureThreshold |
integer |
3 |
Jumlah kegagalan berturut-turut yang diperlukan agar probe dianggap gagal. Nilai default: 3. |
|
Container.N.LivenessProbe.TimeoutSeconds |
integer |
1 |
Jumlah detik setelah probe dianggap timeout. Nilai default: 1. Nilai minimum: 1. Satuan: detik. |
Parameter ReadinessProbe
Saat mengonfigurasi parameter ReadinessProbe, Anda hanya dapat menentukan satu metode pemeriksaan: HttpGet, Exec, atau TcpSocket.
|
Parameter |
Type |
Example |
Description |
|
Container.N.ReadinessProbe.HttpGet.Path |
string |
/healthyz |
Jalur untuk permintaan pemeriksaan kesehatan HTTP GET. |
|
Container.N.ReadinessProbe.HttpGet.Port |
integer |
8888 |
Port untuk permintaan pemeriksaan kesehatan HTTP GET. |
|
Container.N.ReadinessProbe.HttpGet.Scheme |
string |
HTTP |
Protokol permintaan HTTP GET. Nilai yang valid:
|
|
Container.N.ReadinessProbe.Exec.Command.N |
array |
cat /tmp/healthy |
Perintah yang dijalankan di dalam kontainer untuk pemeriksaan kesehatan. |
|
Container.N.ReadinessProbe.TcpSocket.Port |
integer |
8000 |
Port yang diperiksa untuk pemeriksaan kesehatan soket TCP. |
|
Container.N.ReadinessProbe.InitialDelaySeconds |
integer |
5 |
Waktu tunda dalam detik setelah kontainer dimulai sebelum probe pertama dijalankan. |
|
Container.N.ReadinessProbe.PeriodSeconds |
integer |
1 |
Interval pengulangan probe. Nilai default: 10. Nilai minimum: 1. Satuan: detik. |
|
Container.N.ReadinessProbe.SuccessThreshold |
integer |
1 |
Jumlah minimum keberhasilan berturut-turut yang diperlukan agar probe dianggap berhasil setelah sebelumnya gagal. Default: 1. Minimum: 1. |
|
Container.N.ReadinessProbe.FailureThreshold |
integer |
3 |
Jumlah kegagalan berturut-turut yang diperlukan agar probe dianggap gagal. Nilai default: 3. |
|
Container.N.ReadinessProbe.TimeoutSeconds |
integer |
1 |
Jumlah detik setelah probe dianggap timeout. Nilai default: 1. Nilai minimum: 1. Satuan: detik. |
Konfigurasi Konsol
Saat membuat instans ECI di Konsol Elastic Container Instance, pilih kontainer pada bagian Container Configurations, perluas pengaturan lanjutan kontainer, aktifkan pemeriksaan kesehatan, lalu konfigurasi probe tersebut.
Saat mengonfigurasi probe di Konsol, hanya metode command line dan HTTP request yang didukung. Metode TCP socket tidak didukung.
|
Parameter |
Description |
|
Timeout Period |
|
|
Method |
Pilih metode pemeriksaan.
|
|
Script |
Jika Anda memilih Script sebagai metode pemeriksaan, Anda harus menentukan perintah yang akan dijalankan di dalam kontainer. |
|
HTTP Request |
Jika Anda memilih HTTP Request sebagai metode pemeriksaan, Anda harus menentukan jalur, port, dan protokol untuk permintaan HTTP GET. |
Contoh
Contoh ini menunjukkan cara membuat instans ECI dengan pemeriksaan kelangsungan hidup dan pemeriksaan kesiapan, lalu mensimulasikan kegagalan layanan untuk mengamati cara kerja probe tersebut.
-
Panggil operasi CreateContainerGroup untuk membuat instans ECI.
Contoh berikut menggunakan metode soket TCP untuk pemeriksaan kesehatan:
ContainerGroupName=test-probe # Gunakan image nginx dan buat serta asosiasikan EIP secara otomatis. Container.1.Name=container-1 Container.1.Image=nginx AutoCreateEip=true # Liveness probe: periksa port 80 setiap 3 detik, mulai 5 detik setelah launch. Ambang batas keberhasilan: 1, ambang batas kegagalan: 3, timeout: 10 detik. Container.1.LivenessProbe.TcpSocket.Port=80 Container.1.LivenessProbe.InitialDelaySeconds=5 Container.1.LivenessProbe.PeriodSeconds=3 Container.1.LivenessProbe.SuccessThreshold=1 Container.1.LivenessProbe.FailureThreshold=3 Container.1.LivenessProbe.TimeoutSeconds=10 # Readiness probe: periksa port 80 setiap 3 detik, mulai 5 detik setelah launch. Ambang batas keberhasilan: 1, ambang batas kegagalan: 3, timeout: 10 detik. Container.1.ReadinessProbe.TcpSocket.Port=80 Container.1.ReadinessProbe.InitialDelaySeconds=5 Container.1.ReadinessProbe.PeriodSeconds=3 Container.1.ReadinessProbe.SuccessThreshold=1 Container.1.ReadinessProbe.FailureThreshold=3 Container.1.ReadinessProbe.TimeoutSeconds=10 -
Lihat event instans ECI di Konsol Elastic Container Instance.
Setelah instans ECI dibuat, klik ID instans untuk membuka halaman detailnya. Di tab Events, Anda dapat melihat bahwa kontainer dimulai secara normal.
Daftar event menampilkan empat event Normal secara berurutan: Pulling image "nginx", Successfully pulled image "nginx", Created container container-1, dan Started container container-1.
-
Hubungkan ke kontainer. Untuk informasi selengkapnya, lihat Hubungkan ke instans ECI dengan Workbench.
-
Ubah port pendengar Nginx untuk mensimulasikan kegagalan layanan.
-
Modifikasi port pendengar Nginx.
CatatanImage Nginx yang digunakan dalam contoh ini tidak memiliki
vimyang terinstal. Sebelum menjalankan perintahvi, jalankanapt-get updatedanapt-get install vimuntuk menginstal vim.vi /etc/nginx/conf.d/default.confUbah port pendengar dari 80 menjadi 8080, seperti pada contoh berikut:
server { listen 8080; listen [::]:8080; server_name localhost; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } -
Muat ulang konfigurasi Nginx.
nginx -s reload
-
-
Periksa efek probe tersebut.
Beberapa detik setelah Anda memuat ulang Nginx, kontainer secara otomatis direstart. Anda dapat melihat event instans untuk memverifikasi bahwa kontainer direstart setelah pemeriksaan kelangsungan hidup dan pemeriksaan kesiapan gagal.
Daftar event menunjukkan bahwa probe gagal dengan pesan
dial tcp 172.x.x.x:80: connect: connection refused, yang menunjukkan bahwa koneksi ke port kontainer ditolak. Akibatnya, ECI secara otomatis merestart kontainercontainer-1.