
Belajar Kubernetes bukan hanya tentang menghafal command atau menulis konfigurasi YAML. Tantangan sebenarnya adalah memahami bagaimana setiap komponen bekerja dan bagaimana Kubernetes merespons ketika terjadi masalah.
Kesalahan sederhana seperti tidak menentukan resource limit, salah menggunakan health check, atau menyimpan seluruh workload dalam satu namespace dapat menjadi masalah besar ketika cluster mulai berkembang.
Berikut 5 tips Kubernetes yang dapat membantu kita mengelola cluster dengan lebih terstruktur dan mengurangi masalah saat menjalankan aplikasi di production.
Saat baru belajar Kubernetes, kita sering menempatkan hampir semua resource di namespace default.
Cara ini mungkin masih nyaman untuk cluster kecil. Namun, ketika jumlah aplikasi dan tim bertambah, resource akan semakin sulit dikelola.
Gunakan namespace untuk memisahkan workload berdasarkan environment, aplikasi, atau kebutuhan tertentu.
Contohnya:
| Namespace | Penggunaan |
|---|---|
production | Aplikasi production |
staging | Pengujian sebelum production |
dev | Development |
monitoring | Monitoring, metrics, dan logging |
infra | Infrastructure services |
Struktur namespace yang jelas membuat pengelolaan permission, resource, dan proses troubleshooting menjadi lebih mudah.
Tips: Hindari menjadikan namespace default sebagai tempat untuk seluruh workload.
Setiap Pod membutuhkan CPU dan memory untuk berjalan. Jika penggunaannya tidak dibatasi, satu Pod dapat mengonsumsi terlalu banyak resource dan memengaruhi Pod lain pada Node yang sama.
Kubernetes menyediakan dua konfigurasi penting:
Jumlah minimum CPU atau memory yang dibutuhkan Pod. Kubernetes menggunakan nilai ini ketika menentukan Node tempat Pod akan dijalankan.
Jumlah maksimum resource yang dapat digunakan oleh Pod.
Tanpa konfigurasi yang tepat, aplikasi dengan memory leak misalnya dapat menyebabkan Pod lain kekurangan resource.
Jika belum mengetahui nilai ideal, mulai dengan estimasi yang masuk akal. Setelah aplikasi berjalan, pantau penggunaan CPU dan memory kemudian lakukan penyesuaian.
Tujuannya bukan mendapatkan konfigurasi sempurna sejak awal, tetapi memastikan setiap workload memiliki batas resource yang jelas.
Keduanya sama-sama digunakan untuk melakukan health check, tetapi memiliki fungsi yang berbeda.
Menjawab pertanyaan:
Apakah aplikasi masih berjalan dengan baik?
Jika pengecekan gagal, Kubernetes dapat melakukan restart terhadap container.
Menjawab pertanyaan:
Apakah aplikasi sudah siap menerima traffic?
Jika pengecekan gagal, Pod tidak akan menerima traffic sampai kondisinya kembali siap.
Perbedaan ini penting terutama untuk aplikasi yang membutuhkan waktu untuk melakukan startup.
Jika liveness probe dijalankan terlalu cepat, Kubernetes dapat melakukan restart terhadap aplikasi yang sebenarnya hanya belum selesai melakukan startup.
Karena itu:
File YAML Kubernetes menentukan bagaimana aplikasi dan infrastruktur dijalankan. Kesalahan pada satu konfigurasi saja dapat berdampak pada service di production.
Karena itu, hindari mengelola file YAML secara manual tanpa version control.
Praktik yang disarankan:
Pendekatan ini merupakan dasar dari praktik GitOps.
Tools seperti Argo CD dan Flux dapat digunakan untuk mengotomatisasi proses GitOps. Namun, Anda dapat memulainya secara sederhana dengan menyimpan seluruh Kubernetes manifest di Git.
Jangan menunggu aplikasi mengalami error sebelum mulai belajar membaca log Kubernetes.
Biasakan memahami bagaimana kondisi normal aplikasi terlihat sehingga ketika terjadi masalah, Anda lebih mudah menemukan anomali.
Beberapa status yang penting untuk dikenali:
CrashLoopBackOffContainer terus berjalan, mengalami crash, kemudian dijalankan kembali.
Periksa log dari container sebelumnya untuk menemukan penyebabnya.
PendingPod belum dapat dijalankan. Penyebabnya dapat berkaitan dengan ketersediaan resource, Node, atau volume.
OOMKilledContainer dihentikan karena kehabisan memory.
Periksa penggunaan memory dan konfigurasi resource pada Pod.
ImagePullBackOffKubernetes gagal mengambil container image.
Periksa nama image, tag, serta credential untuk container registry.
Semakin familiar dengan pola error tersebut, semakin cepat proses troubleshooting dapat dilakukan.
Mengelola Kubernetes dengan baik bukan hanya tentang menguasai banyak command. Hal yang lebih penting adalah membangun praktik operasional yang konsisten.
Mulailah dari lima hal sederhana:
Praktik tersebut terlihat sederhana, tetapi akan semakin penting ketika jumlah aplikasi, pengguna, dan Node di dalam cluster mulai bertambah.
Dengan fondasi operasional yang baik, Kubernetes akan menjadi lebih mudah dikelola, lebih mudah di-troubleshoot, dan lebih siap digunakan untuk workload production.