halo sobat sekolahlinux, kali ini saya bakal coba memberikan sedikit penjelasan tentang liveness readiness pada k8s, dan tentunya juga bagaimana cara implementasinya, oke pertama kita harus tau apa itu liveness dan readiness
- liveness adalah sebuah paramater yang digunakan oleh k8s untuk menentukan kapan sebuah pods melakukan restart ataupun kapan sebuah pods dinyatakan dalam status ready atau running
- readiness adalah sebuah paramater yang digunakan oleh k8s untuk menentukan kapan sebuah pods siap menerima trafik, paramater ini digunakan oleh k8s untuk mengalirkan trafik dari kind:service ke backend / pods dibelakangnya
pada liveness dan rediness terdapat beberapa paramater untuk pengecekan, detailnya seperti dibawah
initialDelaySeconds | Durasi dalam detik setelah Container dimulai, sebelum probe liveness atau readiness diinisiasi. Nilai bawaannya adalah 0 detik. Nilai minimalnya adalah 0. |
periodSeconds | Seberapa sering (dalam detik) probe dijalankan. Nilai bawaannya adalah 10 detik. Nilai minimalnya adalah 0. |
timeoutSeconds | Durasi dalam detik setelah probe mengalami timeout. Nilai bawaannya adalah 1 detik. Nilai minimalnya adalah 0. |
successThreshold | Jumlah minimal sukses yang berurutan untuk probe dianggap berhasil setelah mengalami kegagalan. Nilai bawaannya adalah 1. Nilanya harus 1 untuk liveness. Nilai minimalnya adalah 1. |
failureThreshold | Ketika sebuah Pod dimulai dan probe mengalami kegagalan, Kubernetes akan mencoba beberapa kali sesuai nilai failureThreshold sebelum menyerah. Menyerah dalam kasus probe liveness berarti Container akan diulang kembali. Untuk probe readiness, menyerah akan menandai Pod menjadi “tidak siap” (Unready). Nilai bawaannya adalah 3. Nilai minimalnya adalah 1. |
selain itu pada pengecekan layer 7 (HTTP) terdapat beberapa paramater seperti dibawah
host | Nama dari host yang akan terhubung, nilai bawaannya adalah IP dari Pod. Kamu mungkin juga ingin mengatur “Host” pada httpHeaders. |
scheme | Skema yang digunakan untuk terhubung pada host (HTTP atau HTTPS). Nilai bawaannya adalah HTTP. |
path | Path untuk mengakses server HTTP. |
httpHeaders | Header khusus yang diatur dalam permintaan HTTP. HTTP memperbolehkan header yang berulang. |
port | Nama atau angka dari porta untuk mengakses Container. Angkanya harus ada di antara 1 sampai 65535. |
liveness dan readiness bisa diimplementasikan di kind:pod
ataupun kind:deployment
, selain itu pengecekan juga bisa dilakukan di layer 4 (TCP) ataupun di layer 7 (gRPC/HTTP), mari kita bahas mulai dari liveness
liveness
TCP
livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 5 periodSeconds: 10
HTTP
livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 5 periodSeconds: 10
readiness
TCP
readinessProbe: tcpSocket: port: 8080 initialDelaySeconds: 5 periodSeconds: 10
HTTP
readinessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 5 periodSeconds: 10
example liveness & readiness
untuk implementasinya kurang lebih menjadi seperti dibawah ini
apiVersion: v1 kind: Pod metadata: name: service-a labels: app: service-a spec: containers: - name: service-a image: service-a:0.1 ports: - containerPort: 8080 readinessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 15 periodSeconds: 20 livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 5 periodSeconds: 10