Back to IF4031 Arsitektur Aplikasi Terdistribusi

Namespace, Label, dan Metadata Objek

Questions/Cues

  • Bagaimana cara mengorganisir objek di K8s?

  • Apa itu Namespace?

  • Untuk apa Namespace digunakan?

  • Bagaimana DNS bekerja dengan Namespace?

  • Apa itu Label?

  • Apa itu Selector?

  • Bagaimana Label dan Selector bekerja sama?

  • Apa itu Annotation?

  • Apa beda Label dan Annotation?

  • Apa itu Finalizer?

Reference Points

  • 25-extra-IF4031-24-2024-Kubernetes.pdf (hlm. 32-38)

Namespace: Isolasi Virtual

Namespace menyediakan mekanisme untuk mengisolasi grup sumber daya di dalam satu cluster fisik. Bayangkan ini seperti “sub-cluster” virtual.

Tujuan Utama Namespace:

  • Scope untuk Nama: Nama dari sebuah objek (misalnya, nama Pod) hanya perlu unik di dalam satu namespace, bukan di seluruh cluster.

  • Organisasi Multi-tenancy: Memungkinkan beberapa tim atau proyek untuk berbagi satu cluster tanpa saling mengganggu. Tim A bisa bekerja di namespace-a dan Tim B di namespace-b.

  • Kontrol Akses: Kebijakan keamanan (RBAC - Role-Based Access Control) dapat diterapkan per namespace.

  • Manajemen Sumber Daya: Kuota sumber daya (CPU, memori) dapat ditetapkan per namespace.

Penting: Tidak semua objek berada dalam namespace. Objek lingkup cluster seperti Node dan PersistentVolume tidak termasuk dalam namespace manapun.

Namespaces dan DNS:

Ketika sebuah Service dibuat, Kubernetes secara otomatis membuat entri DNS. Formatnya adalah: <service-name>.<namespace-name>.svc.cluster.local.

  • Dari dalam namespace yang sama, sebuah Pod dapat memanggil layanan lain hanya dengan namanya (<service-name>).

  • Untuk memanggil layanan di namespace yang berbeda, Pod harus menggunakan alamat lengkapnya (<service-name>.<namespace-name>).

Label dan Selector: Mengelompokkan dan Memilih

Label adalah pasangan kunci-nilai (key-value pairs) yang ditempelkan pada objek, seperti Pod dan Service. Label bersifat bebas dan dirancang untuk digunakan dalam proses identifikasi.

  • Contoh Label: app: webserver, tier: frontend, environment: production.

Selector adalah mekanisme untuk memilih objek berdasarkan labelnya.

  • Contoh Selector: Sebuah Service mungkin memiliki selector app: webserver. Artinya, layanan ini akan mencari dan mengarahkan lalu lintas ke semua Pod yang memiliki label app: webserver.

Kombinasi Label dan Selector adalah mekanisme penghubung inti di Kubernetes. Inilah cara Deployment mengetahui Pod mana yang harus dikelolanya, dan cara Service mengetahui Pod mana yang harus menerima lalu lintas. Ini adalah hubungan yang loosely coupled.

Annotation: Metadata Tambahan

Annotation juga merupakan pasangan kunci-nilai yang ditempelkan pada objek. Perbedaan utamanya dengan Label adalah:

  • Tujuan: Annotation tidak digunakan untuk identifikasi atau pemilihan objek. Mereka digunakan untuk melampirkan metadata arbitrer yang bersifat non-identifikasi, yang sering kali digunakan oleh tools atau library lain.

  • Contoh:

    • Deskripsi panjang tentang objek.

    • Informasi kontak orang yang bertanggung jawab.

    • Konfigurasi spesifik untuk tool eksternal (misalnya, nginx.ingress.kubernetes.io/rewrite-target: / untuk sebuah Ingress Controller).

Singkatnya: Gunakan Label untuk pengelompokan dan pemilihan. Gunakan Annotation untuk semua hal lain yang ingin Anda “catat” pada sebuah objek.

Finalizer: Mengontrol Penghapusan Objek

Finalizer adalah sebuah mekanisme yang memberitahu Kubernetes untuk menunggu sampai kondisi tertentu terpenuhi sebelum ia benar-benar menghapus sebuah objek yang telah diminta untuk dihapus.

Cara Kerja: Ketika Anda meminta untuk menghapus objek yang memiliki finalizer, Kubernetes hanya menandai objek tersebut untuk dihapus (deletion timestamp) tetapi tidak langsung menghapusnya. Controller yang bertanggung jawab untuk finalizer tersebut akan melakukan tugas pembersihan (cleanup). Setelah tugas selesai, controller akan menghapus nama finalizer dari daftar di objek tersebut. Barulah setelah itu Kubernetes akan benar-benar menghapus objeknya.

Contoh Penggunaan: Memastikan bahwa storage volume eksternal atau load balancer di cloud telah dihapus dengan benar sebelum objek PersistentVolume atau Service di Kubernetes dihapus.

Summary

Kubernetes menyediakan mekanisme metadata yang kuat untuk mengorganisir dan mengelola sumber daya. Namespace digunakan untuk menciptakan isolasi virtual antar tim atau aplikasi, sementara Label dan Selector membentuk sistem penghubung inti yang longgar untuk mengelompokkan dan memilih objek. Annotation digunakan untuk melampirkan data non-identifikasi yang sering kali dibaca oleh tools lain, dan Finalizer memastikan proses pembersihan yang aman sebelum sebuah objek benar-benar dihapus dari cluster.