Topik ini memperkenalkan perintah kubectl yang digunakan sehari-hari untuk debugging, yaitu penelusuran penyebab perilaku tidak normal pada aplikasi yang berjalan di kluster. Lingkupnya meliputi kubectl describe, kubectl logs, kubectl exec, dan kubectl port-forward, ditambah disiplin membaca event dari API server. Setelah membacanya, gejala seperti Pod yang berulang kali restart atau image yang gagal ditarik dapat dipetakan ke perintah pemeriksaan yang tepat.
Menilai kondisi dengan kubectl describe#
Perintah kubectl describe membaca status satu objek dari API server dan menampilkannya sebagai ringkasan teks. Untuk sebuah Pod, keluarannya memuat fase, kondisi tiap container, jumlah restart, konfigurasi probe, serta volume yang terpasang. Bagian paling bernilai justru berada di paling bawah, yaitu daftar event yang merekam keputusan scheduler, penarikan image, dan pesan error dari kubelet beserta waktunya. Susunan tersebut membuat penyebab umum kegagalan terbaca dari satu perintah tanpa membaca manifest terlebih dahulu.
# tidak-dijalankan
# menampilkan detail Pod beserta daftar event di bagian bawah keluarannya
kubectl describe pod catatan-api-7d9c4b6d5f-xk2qz -n aplikasi-catatanEvents:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 2m1s default-scheduler Successfully assigned aplikasi-catatan/catatan-api-7d9c4b6d5f-xk2qz to node-02
Warning BackOff 45s kubelet Back-off restarting failed container catatan-api in pod catatan-api-7d9c4b6d5f-xk2qz_aplikasi-catatan(f0e1c9a4)Apabila ringkasan describe masih belum cukup rinci, keluaran dapat dipersempit ke bidang yang benar-benar diperlukan. Flag -o wide pada kubectl get menambahkan kolom Node dan IP Pod, sedangkan -o jsonpath mengekstrak satu bidang dari objek, misalnya {.status.podIP} yang hanya menampilkan alamat IP. Kedua bentuk keluaran ini mengurangi tebakan karena nilai yang dibaca persis seperti yang disimpan API server.
# tidak-dijalankan
# menampilkan kolom tambahan Node dan IP pada daftar Pod
kubectl get pods -n aplikasi-catatan -o wideNAME READY STATUS RESTARTS AGE IP NODE
catatan-api-7d9c4b6d5f-xk2qz 1/1 Running 0 5m 10.244.1.17 node-02Membaca log container dengan kubectl logs#
Perintah kubectl logs menampilkan keluaran standar dan error standar dari sebuah container, yaitu saluran yang digunakan aplikasi untuk menulis log. Perintah ini menjawab pertanyaan yang tidak dijawab describe, misalnya mengapa aplikasi berhenti segera setelah dijalankan. Flag --tail membatasi jumlah baris yang ditampilkan, flag -f mengikuti aliran log secara langsung, dan flag -c memilih container tertentu pada Pod multi-container. Flag --previous menampilkan log dari container yang berakhir sebelum restart terakhir, sehingga pesan penyebab crash masih terbaca.
# tidak-dijalankan
# menampilkan 20 baris terakhir log container catatan-api
kubectl logs catatan-api-7d9c4b6d5f-xk2qz -c catatan-api --tail=20 -n aplikasi-catatan
# menampilkan log container yang berakhir sebelum restart terakhir
kubectl logs catatan-api-7d9c4b6d5f-xk2qz --previous -n aplikasi-catatan[2026-11-07 09:15:04] server catatan berjalan di port 8080
[2026-11-07 09:15:11] error koneksi basis data: dial tcp 10.96.12.7:5432: connect: connection refused
[2026-11-07 09:15:11] proses berakhir dengan kode 1Flag --previous menjadi alat utama pada kasus CrashLoopBackOff karena container yang gagal selalu berakhir segera setelah dijalankan, sehingga baris terakhir lognya memuat penyebabnya. Perlu diingat bahwa kubectl logs hanya membaca log dari Node tempat container berjalan pada saat itu. Apabila Pod dijadwalkan ulang ke Node lain atau sudah dihapus, log lama tidak dapat dibaca lagi melalui perintah ini.
Menjalankan perintah di dalam container#
Perintah kubectl exec menjalankan perintah di dalam container yang sedang berjalan. Bentuk yang paling umum adalah membuka shell interaktif dengan flag -it untuk memeriksa isi sistem berkas, variabel lingkungan, dan konektivitas dari sudut pandang aplikasi. Seluruh container dalam satu Pod berbagi jaringan yang sama, sehingga tes koneksi ke localhost dari salah satu container sekaligus menguji port container lain dalam Pod yang sama. Untuk pemeriksaan cepat, exec juga dapat menjalankan satu perintah tanpa membuka shell interaktif, dan hasilnya dicetak langsung di terminal.
# tidak-dijalankan
# menjalankan satu perintah tanpa membuka shell interaktif
kubectl exec catatan-api-7d9c4b6d5f-xk2qz -n aplikasi-catatan -- cat /etc/hostname
# membuka shell interaktif di dalam container catatan-api
kubectl exec -it catatan-api-7d9c4b6d5f-xk2qz -n aplikasi-catatan -- shcatatan-api-7d9c4b6d5f-xk2qzMeneruskan port Pod ke komputer lokal#
Perintah kubectl port-forward meneruskan port di komputer lokal ke port pada Pod tertentu selama perintah itu berjalan. Koneksi diteruskan melalui API server, sehingga akses tidak memerlukan Service maupun pengaturan jaringan tambahan di kluster. Alat ini cocok untuk menguji respons aplikasi secara langsung, misalnya memastikan endpoint /health merespons dengan benar sebelum aturan Service ditulis. Proses penerusan berhenti ketika perintah dihentikan dengan Ctrl-C, dan port yang diteruskan kembali bebas setelahnya.
# tidak-dijalankan
# meneruskan port 8080 lokal ke port 8080 pada Pod
kubectl port-forward pod/catatan-api-7d9c4b6d5f-xk2qz 8080:8080 -n aplikasi-catatanForwarding from 127.0.0.1:8080 -> 8080Membaca event di tingkat namespace#
Event adalah catatan singkat yang dibuat komponen kluster setiap kali kejadian penting terjadi, misalnya Pod dijadwalkan, image ditarik, atau probe gagal. Event terikat pada namespace dan disimpan hanya untuk waktu terbatas, secara default sekitar satu jam, sehingga perlu dibaca segera setelah gejala muncul. Perintah kubectl get events menampilkan seluruh event pada satu namespace, dan flag --sort-by mengurutkannya menurut bidang mana pun, biasanya .lastTimestamp agar kejadian terbaru muncul lebih dahulu.
# tidak-dijalankan
# menampilkan event namespace diurutkan dari waktu terbaru
kubectl get events -n aplikasi-catatan --sort-by=.lastTimestampLAST SEEN TYPE REASON OBJECT MESSAGE
94s Warning BackOff pod/catatan-api-7d9c4b6d5f-xk2qz Back-off restarting failed container catatan-api
3m12s Warning Unhealthy pod/catatan-api-7d9c4b6d5f-xk2qz Readiness probe failed: HTTP probe failed with statuscode: 503
5m Normal Scheduled pod/catatan-api-7d9c4b6d5f-xk2qz Successfully assigned aplikasi-catatan/catatan-api-7d9c4b6d5f-xk2qz to node-02Keluaran kubectl get events juga dapat dibaca sebagai JSON melalui -o json untuk disaring secara terprogram. Berkas berikut merupakan salinan ringkas dari bentuk keluaran tersebut pada namespace contoh, berisi lima event.
{
"kind": "List",
"apiVersion": "v1",
"items": [
{
"type": "Normal",
"reason": "Scheduled",
"involvedObject": {
"kind": "Pod",
"name": "catatan-api-7d9c4b6d5f-xk2qz",
"namespace": "aplikasi-catatan"
},
"lastTimestamp": "2026-11-07T09:12:31Z",
"message": "Successfully assigned aplikasi-catatan/catatan-api-7d9c4b6d5f-xk2qz to node-02"
},
{
"type": "Normal",
"reason": "Pulled",
"involvedObject": {
"kind": "Pod",
"name": "catatan-api-7d9c4b6d5f-xk2qz",
"namespace": "aplikasi-catatan"
},
"lastTimestamp": "2026-11-07T09:12:33Z",
"message": "Successfully pulled image \"catatan-api:1.4.0\" in 1.9s"
},
{
"type": "Warning",
"reason": "Unhealthy",
"involvedObject": {
"kind": "Pod",
"name": "catatan-api-7d9c4b6d5f-xk2qz",
"namespace": "aplikasi-catatan"
},
"lastTimestamp": "2026-11-07T09:14:50Z",
"message": "Readiness probe failed: HTTP probe failed with statuscode: 503"
},
{
"type": "Warning",
"reason": "BackOff",
"involvedObject": {
"kind": "Pod",
"name": "catatan-api-7d9c4b6d5f-xk2qz",
"namespace": "aplikasi-catatan"
},
"lastTimestamp": "2026-11-07T09:15:02Z",
"message": "Back-off restarting failed container catatan-api in pod catatan-api-7d9c4b6d5f-xk2qz_aplikasi-catatan(f0e1c9a4)"
},
{
"type": "Warning",
"reason": "FailedScheduling",
"involvedObject": {
"kind": "Pod",
"name": "laporan-bulanan-28471",
"namespace": "aplikasi-catatan"
},
"lastTimestamp": "2026-11-07T09:16:10Z",
"message": "0/3 nodes are available: 3 Insufficient cpu. preemption: 0/3 nodes are available: 3 No preemption victims found for incoming pod."
}
]
}Skrip berikut menyaring event bertipe Warning dan menampilkan waktu, nama objek, serta pesannya menggunakan jq, sehingga pola yang sama dapat dilatih tanpa kluster.
# menyaring event bertipe Warning dan menampilkan waktu, objek, serta pesannya
jq -r '.items[] | select(.type == "Warning") | [.lastTimestamp, .involvedObject.name, .message] | join(" | ")' events.json2026-11-07T09:14:50Z | catatan-api-7d9c4b6d5f-xk2qz | Readiness probe failed: HTTP probe failed with statuscode: 503
2026-11-07T09:15:02Z | catatan-api-7d9c4b6d5f-xk2qz | Back-off restarting failed container catatan-api in pod catatan-api-7d9c4b6d5f-xk2qz_aplikasi-catatan(f0e1c9a4)
2026-11-07T09:16:10Z | laporan-bulanan-28471 | 0/3 nodes are available: 3 Insufficient cpu. preemption: 0/3 nodes are available: 3 No preemption victims found for incoming pod.Tiga baris di atas menghasilkan kesimpulan yang sama dengan pembacaan seluruh event secara manual, yaitu probe yang gagal, container yang berulang kali berakhir, dan Pod baru yang tidak dapat dijadwalkan karena CPU kluster tidak mencukupi. Baris terakhir berasal dari Pod yang berbeda, yaitu laporan-bulanan-28471, sehingga satu penyaringan memuat laporan dua kejadian yang terpisah. Pola penyaringan yang sama dapat dikembangkan menjadi pemeriksaan rutin apabila keluaran -o json dikumpulkan secara berkala.
Ringkasan#
- kubectl describe menampilkan status objek beserta daftar event di bagian bawah, sehingga penyebab umum kegagalan sering terbaca dari satu perintah.
- kubectl logs membaca keluaran container, dan flag
--previousmengambil log container yang berakhir sebelum restart terakhir. - kubectl exec menjalankan perintah di dalam container, sedangkan kubectl port-forward meneruskan port Pod ke komputer lokal untuk pengujian.
- Event namespace diurutkan dengan
--sort-bydan dapat disaring secara terprogram dari keluaran-o jsonmenggunakan jq.
Referensi#
- Debug Pods — Kubernetes — Panduan resmi diagnosis Pod, termasuk pembacaan describe, log, dan contoh kasus kegagalannya.
- Command line tool (kubectl) — Kubernetes — Dokumen referensi perintah kubectl beserta konvensi keluarannya.
- kubectl Cheat Sheet — Kubernetes — Daftar ringkas perintah kubectl yang sering digunakan, termasuk jsonpath dan event.