Kadang-kadang Anda mungkin berada dalam situasi di mana Anda perlu me-restart Pod Anda. Misalnya, jika Pod Anda dalam keadaan error.
Bergantung pada kebijakan mulai ulang, Kubernetes sendiri mencoba memulai ulang dan memperbaikinya.
Tetapi jika itu tidak berhasil dan jika Anda tidak dapat menemukan sumber kesalahannya, memulai ulang Kubernetes Pod secara manual adalah cara tercepat untuk membuat aplikasi Anda berfungsi kembali.
Cara memulai ulang Pod di Kubernetes
Sayangnya, tidak ada perintah kubectl restart pod untuk tujuan ini. Berikut adalah beberapa cara untuk memulai ulang Pod Anda:
- Peluncuran Pod dimulai ulang
- Menskalakan jumlah replika
Mari saya tunjukkan kedua metode secara detail.
Metode 1:Peluncuran Pod dimulai ulang
Mulai dari Kubernetes versi 1.15, Anda dapat memulai ulang penerapan Anda secara bergulir.
Controller membunuh satu Pod pada satu waktu dan bergantung pada ReplicaSet untuk meningkatkan Pod baru sampai semua Pod lebih baru dari waktu restart. Menurut pendapat saya, ini adalah cara terbaik untuk me-restart pod Anda karena aplikasi Anda tidak akan down.
Catatan: IP pod individu akan diubah.
Mari kita ambil contoh. Anda memiliki penerapan bernama my-dep yang terdiri dari dua pod (karena replika disetel ke dua).
[email protected]:~# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-dep 2/2 2 2 13s
Ayo dapatkan detail podnya:
[email protected]:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-dep-6d9f78d6c4-8j5fq 1/1 Running 0 47s 172.16.213.255 kworker-rj2 <none> <none>
my-dep-6d9f78d6c4-rkhrz 1/1 Running 0 47s 172.16.213.35 kworker-rj1 <none> <none>
Sekarang mari kita luncurkan restart untuk penerapan my-dep dengan perintah seperti ini:
kubectl rollout restart deployment name_of_deployment
Apakah Anda ingat nama penerapan dari perintah sebelumnya? Gunakan di sini:
[email protected]:~# kubectl rollout restart deployment my-dep
deployment.apps/my-dep restarted
Anda dapat melihat proses pod lama dihentikan dan pod baru dibuat menggunakan kubectl get pod -w
perintah:
[email protected]:~# kubectl get pod -w
NAME READY STATUS RESTARTS AGE
my-dep-557548758d-kz6r7 1/1 Running 0 5s
my-dep-557548758d-svg7w 0/1 ContainerCreating 0 1s
my-dep-6d9f78d6c4-8j5fq 1/1 Running 0 69s
my-dep-6d9f78d6c4-rkhrz 1/1 Terminating 0 69s
my-dep-6d9f78d6c4-rkhrz 0/1 Terminating 0 69s
my-dep-557548758d-svg7w 0/1 ContainerCreating 0 1s
my-dep-557548758d-svg7w 1/1 Running 0 3s
my-dep-6d9f78d6c4-8j5fq 1/1 Terminating 0 71s
my-dep-6d9f78d6c4-8j5fq 0/1 Terminating 0 72s
my-dep-6d9f78d6c4-rkhrz 0/1 Terminating 0 74s
my-dep-6d9f78d6c4-rkhrz 0/1 Terminating 0 74s
my-dep-6d9f78d6c4-8j5fq 0/1 Terminating 0 76s
my-dep-6d9f78d6c4-8j5fq 0/1 Terminating 0 76s
Jika Anda memeriksa Pod sekarang, Anda dapat melihat detail yang telah berubah di sini:
[email protected]:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-dep-557548758d-kz6r7 1/1 Running 0 42s 172.16.213.43 kworker-rj1 <none> <none>
my-dep-557548758d-svg7w 1/1 Running 0 38s 172.16.213.251 kworker-rj2 <none> <none>
Metode 2. Menskalakan Jumlah Replika
Dalam lingkungan CI/CD, proses untuk me-reboot pod Anda ketika ada kesalahan bisa memakan waktu lama karena harus melalui seluruh proses build lagi.
Cara yang lebih cepat untuk mencapai ini adalah menggunakan kubectl scale
perintah untuk mengubah nomor replika menjadi nol dan setelah Anda menetapkan angka lebih tinggi dari nol, Kubernetes membuat replika baru.
Mari kita coba. Periksa Pod Anda terlebih dahulu:
[email protected]:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
my-dep-557548758d-kz6r7 1/1 Running 0 11m
my-dep-557548758d-svg7w 1/1 Running 0 11m
Dapatkan informasi penerapan:
[email protected]:~# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-dep 2/2 2 2 12m
Sekarang, atur nomor replika ke nol:
[email protected]:~# kubectl scale deployment --replicas=0 my-dep
deployment.apps/my-dep scaled
Dan kemudian atur kembali menjadi dua:
[email protected]:~# kubectscale deployment --replicas=2 my-dep
deployment.apps/my-dep scaled
Periksa pod sekarang:
[email protected]:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
my-dep-557548758d-d2pmd 1/1 Running 0 10s
my-dep-557548758d-gprnr 1/1 Running 0 10s
Anda telah berhasil me-restart Kubernetes Pods.
Gunakan salah satu metode di atas untuk membuat aplikasi Anda bekerja dengan cepat dan aman tanpa memengaruhi pengguna akhir.
Setelah melakukan latihan ini, pastikan Anda menemukan masalah inti dan memperbaikinya karena memulai ulang pod Anda tidak akan perbaiki masalah yang mendasarinya.
Semoga Anda menyukai tip Kubernetes ini. Jangan lupa untuk berlangganan lebih banyak lagi.
Rakesh Jain
DevOps Profesional | RHCA | Jenkins | Git | buruh pelabuhan | Kubernet | Mungkin | Prometheus | Grafana | AWS Cloud