Kontainer dan lingkungan Kubernetes (K8s) adalah pendekatan terkemuka untuk mengemas, menerapkan, dan mengelola aplikasi kontainer dalam skala besar. Konfigurasi Kubernetes yang dinamis, sumber terbuka, dan berbasis layanan mikro mungkin sangat kompatibel untuk bisnis yang ingin memaksimalkan kelincahan infrastruktur. Namun, fleksibilitas terdistribusi yang membuat Kubernetes menarik juga dapat membuat penerapan praktik pemantauan dan observabilitas Kubernetes menjadi tantangan.
Observabilitas terdiri dari serangkaian proses dan metrik yang membantu tim mendapatkan insight yang dapat ditindaklanjuti ke dalam kondisi internal sistem dengan memeriksa hasil sistem. Ini adalah bagian penting dari pemeliharaan infrastruktur TI apa pun. Namun, mengelola volume data, node, pod, layanan, dan titik akhir yang sangat besar yang membentuk lingkungan Kubernetes membutuhkan praktik observabilitas yang sesuai untuk pekerjaan tersebut.
Di blog ini, kami membahas cara kerja observabilitas Kubernetes, dan bagaimana organisasi dapat menggunakannya untuk mengoptimalkan arsitektur TI cloud native.
Secara garis besar, observabilitas menggambarkan seberapa baik keadaan sistem internal dapat diketahui dari hasil eksternalnya. Ini adalah kemampuan untuk mendiagnosis dan memahami mengapa sebuah sistem berperilaku dengan cara tertentu, yang sangat penting untuk memecahkan masalah, menguraikan masalah kinerja, dan meningkatkan desain sistem.
Dalam DevOps, konsep observabilitas telah berkembang dan merujuk kepada visibilitas menyeluruh atas keadaan sistem seperti yang ditentukan oleh data telemetri. Kelas data utama yang digunakan adalah log, metrik, dan jejak, yang juga dikenal sebagai tiga pilar observabilitas.
Log mencakup kejadian terpisah yang direkam setiap kali terjadi sesuatu dalam sistem, seperti pesan status atau kesalahan, atau detail transaksi. Log Kubernetes dapat ditulis dalam teks terstruktur dan tidak terstruktur.
Penggunaan CPU, konsumsi memori, I/O jaringan, latensi permintaan, atau indikator khusus bisnis apa pun. Metrik Kubernetes sering kali dikumpulkan untuk membuat data observabilitas deret waktu yang dapat membantu tim menemukan tren dan mengidentifikasi pola.
Jejak membantu tim mengikuti permintaan atau transaksi melalui berbagai layanan dan komponen dalam sistem terdistribusi. Jejak juga membantu tim memvisualisasikan ketergantungan antara berbagai komponen infrastruktur sehingga penundaan dan kesalahan dapat ditemukan dengan cepat.
Untuk mencapai observabilitas yang sukses, diperlukan penerapan alat pemantauan Kubernetes yang tepat dan penerapan proses yang efektif untuk mengumpulkan, menyimpan, dan menganalisis tiga hasil utama. Hal ini termasuk menyiapkan dan memelihara sistem pemantauan, agregator log aplikasi, alat Application Performance Management (APM) atau platform observabilitas lainnya.
Namun, lingkungan Kubernetes juga memerlukan pemeriksaan metrik standar yang lebih menyeluruh. Sistem Kubernetes adalah lingkungan luas yang terdiri dari kontainer yang saling terhubung, layanan mikro, dan komponen lainnya, yang semuanya menghasilkan sejumlah besar data. Kubernetes menjadwalkan dan mengotomatisasi tugas-tugas yang terkait dengan kontainer di seluruh siklus hidup aplikasi, termasuk:
Kubernetes dapat menerapkan sejumlah kontainer tertentu ke host tertentu dan membuatnya tetap berjalan dalam keadaan yang diinginkan.
Peluncuran adalah modifikasi penerapan Kubernetes. Kubernetes memungkinkan tim untuk memulai, menjeda, melanjutkan, dan mengurungkan peluncuran.
Kubernetes dapat secara otomatis mengekspos kontainer ke internet atau ke kontainer lain menggunakan nama DNS atau alamat IP.
Tim dapat menyiapkan Kubernetes untuk memasang penyimpanan lokal atau cloud persisten untuk kontainer.
Berdasarkan penggunaan CPU atau metrik khusus, fitur penyeimbangan beban Kubernetes dapat mendistribusikan beban kerja di seluruh jaringan untuk menjaga kinerja dan stabilitas.
Kubernetes dapat secara otomatis men-debug, memulai ulang, atau mengganti kontainer yang gagal untuk mencegah waktu henti. Kubernetes juga dapat menonaktifkan kontainer yang tidak memenuhi persyaratan pemeriksaan kesehatan.
Dengan begitu banyak komponen yang bergeser, berinteraksi, dan bertumpukan, ada banyak potensi masalah dan titik kegagalan. Karenanya, banyak area yang membutuhkan pemantauan real time. Berarti juga pendekatan konvensional untuk memantau log, metrik, dan jejak mungkin terbukti tidak memadai untuk observabilitas di lingkungan Kubernetes.
Karena setiap komponen dalam arsitektur Kubernetes saling bergantung pada komponen yang lain, observabilitas membutuhkan pendekatan yang lebih holistik.
Observabilitas Kubernetes mengharuskan organisasi untuk lebih dari sekadar mengumpulkan dan menganalisis data tingkat klaster dari log, jejak, dan metrik; menghubungkan titik-titik data untuk lebih memahami hubungan dan peristiwa di dalam klaster Kubernetes merupakan inti dari proses ini. Ini berarti bahwa organisasi harus mengandalkan strategi observabilitas cloud native yang disesuaikan dan meneliti setiap sumber data yang tersedia di dalam sistem.
Observabilitas dalam lingkungan K8s melibatkan:
1. Bergerak melampaui metrik, log, dan aplikasi. Sama seperti pemantauan mesin virtual (VM), observabilitas Kubernetes harus memperhitungkan semua data log (dari kontainer, node master dan worker, serta infrastruktur yang mendasarinya) dan metrik tingkat aplikasi. Namun, tidak seperti VM, Kubernetes mengatur interaksi kontainer yang melampaui aplikasi dan kluster. Dengan demikian, lingkungan Kubernetes menyimpan sejumlah besar data berharga baik di luar maupun di dalam kluster jaringan dan aplikasi. Data tersebut termasuk data dalam pipeline CI/CD (yang dimasukkan ke kluster K8s) dan alur kerja GitOps (yang mendukung kluster K8s).
Kubernetes juga tidak mengekspos metrik, log, dan data jejak dengan cara yang sama seperti aplikasi tradisional dan VM. Kubernetes cenderung merekam “snapshot” data, atau informasi yang diambil pada titik tertentu dalam siklus hidup. Dalam sebuah sistem di mana setiap komponen dalam setiap kluster merekam jenis data yang berbeda, dalam format yang berbeda, dengan kecepatan yang berbeda, akan sulit atau bahkan tidak mungkin untuk menetapkan observabilitas hanya dengan menganalisis titik-titik data yang terpisah.
Terlebih lagi, Kubernetes tidak membuat file log master di tingkat aplikasi atau kluster. Setiap aplikasi dan kluster merekam data di lingkungannya masing-masing, sehingga pengguna harus mengumpulkan dan mengekspor data secara manual untuk melihat semuanya di satu tempat. Dan karena kontainer dapat dijalankan, dihentikan, atau hilang sama sekali dalam hitungan detik, bahkan data yang dikumpulkan secara manual pun dapat memberikan gambaran yang tidak lengkap tanpa konteks yang tepat.
2. Memprioritaskan konteks dan korelasi data. Pemantauan dan observabilitas adalah bagian penting dalam mempertahankan infrastruktur Kubernetes yang efisien. Namun masing-masing memiliki tujuan yang berbeda. Jika pemantauan membantu memperjelas apa yang terjadi dalam sebuah sistem, observabilitas bertujuan untuk memperjelas mengapa sistem berperilaku seperti itu. Untuk itu, observabilitas Kubernetes yang efektif lebih mengutamakan hubungan berbagai aspek di antara titik data untuk mendapatkan akar masalah kemacetan kinerja dan masalah fungsionalitas.
Untuk memahami perilaku klaster Kubernetes, Anda harus memahami setiap peristiwa dalam klaster dalam konteks semua peristiwa klaster lainnya, perilaku umum klaster, dan peristiwa apa pun yang menyebabkan peristiwa yang dimaksud.
Misalnya, jika sebuah pemalut dimulai di satu node pekerja dan berakhir di node pekerja lain, Anda perlu memahami semua peristiwa yang terjadi secara serentak di node Kubernetes yang lain, dan semua peristiwa yang terjadi di seluruh layanan Kubernetes, server API, dan namespace Anda yang lain untuk memperoleh pemahaman yang jelas mengenai perubahan tersebut, akar masalahnya, dan potensi konsekuensinya.
Dengan kata lain, tugas pemantauan saja sering kali tidak memadai di lingkungan Kubernetes. Untuk mencapai observabilitas Kubernetes, mendapatkan insight sistem yang relevan, atau melakukan analisis akar masalahyang akurat, tim TI harus dapat mengumpulkan data dari seluruh jaringan dan mengontekstualisasikannya.
3. Menggunakan alat bantu observabilitas Kubernetes. Menerapkan dan memelihara observabilitas Kubernetes adalah tugas yang besar dan kompleks. Namun, menggunakan kerangka kerja dan alat yang tepat dapat menyederhanakan prosesnya dan meningkatkan visualisasi dan transparansi data secara keseluruhan.
Bisnis dapat memilih dari berbagai solusi observabilitas, termasuk program yang mengotomatiskan agregasi dan analisis metrik (seperti Prometheus dan Grafana), program yang mengotomatiskan pencatatan (seperti ELK, Fluentd, dan Elasticsearch), serta program yang memfasilitasi penelusuran visibilitas (seperti Jaeger). Solusi terintegrasi, seperti OpenTelemetry, dapat mengelola ketiga praktik observabilitas utama. Dan solusi cloud-native yang disesuaikan, seperti Google Cloud Operations, AWS X-Ray, Azure Monitor, dan IBM Instana Observability, menawarkan alat observabilitas dan dasbor Kubernetes yang dioptimalkan untuk klaster yang berjalan di infrastrukturnya.
• Tentukan KPI Anda. Cari tahu indikator kinerja utama, seperti kinerja aplikasi, kesehatan sistem, dan penggunaan sumber daya, yang memberi Anda insight paling berguna tentang perilaku infrastruktur Anda. Ubah sesuai kebutuhan.
• Memusatkan pencatatan. Lingkungan K8 menghasilkan data dalam jumlah besar. Mengumpulkan dan menyimpannya menggunakan solusi pencatatan terpusat merupakan bagian integral dari manajemen data.
• Memantau penggunaan sumber daya. Kumpulkan data real time tentang penggunaan memori, CPU, dan jaringan sehingga Anda dapat secara proaktif meningkatkan sumber daya jika perlu.
- Mengatur peringatan dan alarm. Gunakan ambang KPI yang ditetapkan untuk mengonfigurasi peringatan dan alarm. Praktik ini memungkinkan tim untuk menerima pemberitahuan secara tepat waktu saat masalah muncul.
Kubernetes adalah platform orkestrasi kontainer berstandar industri, yang mengelola beban kerja dalam kontainer dengan efisiensi yang luar biasa. Namun, arsitektur layanan mikro yang terdistribusi dan berlapis-lapis dari Kubernetes menuntut mekanisme observabilitas yang kuat dan solusi canggih, seperti IBM Instana Observability.
Instana Observability menyediakan observabilitas Kubernetes otomatis dan kemampuan APM yang dirancang untuk memantau seluruh tumpukan aplikasi Kubernetes Anda, mulai dari node dan pemalut hingga kontainer dan aplikasi, untuk semua distribusi Kubernetes.
Observabilitas di Kubernetes bukan hanya implementasi teknis; ini adalah pendekatan strategis yang membutuhkan perencanaan cermat dan budaya organisasi yang menghargai transparansi data.
Instana Observability membantu tim mendapatkan pemahaman yang komprehensif tentang lingkungan Kubernetes mereka dan menghadirkan aplikasi yang tangguh dan berkinerja tinggi di dunia yang semakin banyak menggunakan teknologi berbasis cloud.