Node di Kubernetes
Pengertian Node dalam Kubernetes
Node adalah mesin fisik atau virtual yang menyediakan lingkungan untuk menjalankan Pod dalam sebuah cluster Kubernetes. Setiap Node memiliki komponen Kubernetes yang memungkinkan komunikasi antar Node dan pengelolaan Pod secara otomatis. Dalam cluster Kubernetes, ada dua jenis Node:
- Master Node: Bertugas mengelola dan mengontrol seluruh cluster. Node ini menjalankan komponen-komponen utama yang mengatur orkestrasi Pod dan koordinasi antar Node.
- Worker Node: Node ini adalah tempat container dan Pod di-deploy dan dijalankan. Worker Node menjalankan container runtime (seperti Docker atau containerd) untuk mengelola aplikasi sesuai yang diatur oleh Master Node.
Contoh Perintah:
Melihat Daftar Node:
kubectl get nodes
Perintah ini akan menampilkan daftar Node dalam cluster, termasuk status dan informasi singkatnya.
Mengecek Detail Node Tertentu:
kubectl describe node <nama-node>
Digunakan untuk melihat informasi lengkap Node tertentu, termasuk kondisi, kapasitas, label, dan resource yang digunakan.
Komponen-Komponen pada Node
Setiap Node dalam Kubernetes memiliki komponen penting sebagai berikut:
Kubelet: Agen yang berjalan di setiap Node untuk memastikan bahwa container yang diinginkan dijalankan dalam Pod, memantau status Pod, dan melaporkannya ke Master Node. Kubelet juga melakukan restart container jika terjadi error.
kubectl get pod -n kube-system -o wide | grep kubelet
Kube-Proxy: Mengelola aturan iptables atau ipvs untuk mengarahkan lalu lintas jaringan ke Pod yang benar, memungkinkan komunikasi antar-Pod di Node berbeda.
kubectl get pod -n kube-system -o wide | grep kube-proxy
Container Runtime: Kubernetes memerlukan container runtime untuk menjalankan container, seperti Docker atau containerd.
kubectl describe node <nama-node> | grep -i containerRuntime
Cara Node Bekerja dalam Cluster
Dalam cluster Kubernetes, Node bekerja dalam koordinasi dengan Master Node untuk menjalankan dan mengelola aplikasi secara efisien:
- Scheduler: Scheduler di Master Node menentukan Node yang cocok untuk menempatkan Pod berdasarkan sumber daya yang tersedia.
- Deployment: Saat aplikasi di-deploy, Master Node berkoordinasi dengan Kubelet di setiap Worker Node untuk menjalankan container pada Pod.
- Service Discovery dan Load Balancing: Kube-Proxy memastikan setiap Pod dalam Node dapat diakses oleh Pod atau Service lain dengan membuat aturan iptables atau ipvs.
- Monitoring dan Logging: Setiap Node mengirimkan metrik penggunaan sumber daya dan log event ke Master Node untuk pemantauan dan manajemen.
Contoh Perintah:
Melihat Resource yang Digunakan oleh Node:
kubectl top node
Menampilkan penggunaan CPU dan memori dari setiap Node dalam cluster.
Melihat Pod yang Berjalan di Node Tertentu:
kubectl get pods --all-namespaces -o wide | grep <nama-node>
Menampilkan daftar Pod yang sedang berjalan di Node tertentu untuk memantau workload pada Node tersebut.
Manajemen Node
Kubernetes menyediakan alat manajemen Node seperti penambahan label, drain, serta penambahan taint untuk mengontrol penempatan Pod.
- Scaling: Node dalam cluster dapat ditambah atau dikurangi secara otomatis (autoscaling) atau manual untuk menyesuaikan beban aplikasi.
- Draining Node: Proses drain dilakukan saat Node akan dihapus atau diperbarui. Node yang di-drain akan mengosongkan semua Pod yang ada dan memindahkannya ke Node lain.
kubectl drain <nama-node> --ignore-daemonsets
- Labeling dan Tainting: Setiap Node bisa diberi label atau taint untuk menandai atribut atau fitur khusus dan mengontrol Pod mana yang boleh atau tidak boleh dijalankan pada Node tertentu.
Memberikan label pada Node:
kubectl label node <nama-node> <key>=<value>
Menghapus label:
kubectl label node <nama-node> <key>-
Menambahkan taint pada Node:
kubectl taint nodes <nama-node> <key>=<value>:<effect>
Menghapus taint dari Node:
kubectl taint nodes <nama-node> <key>-
Node dalam Arsitektur Kubernetes
Node berperan sebagai unit kerja terkecil dalam Kubernetes yang mengandung semua komponen untuk menjalankan Pod dan aplikasi. Master Node mengatur koordinasi antar Worker Node sehingga memungkinkan Kubernetes untuk memiliki skalabilitas tinggi dan ketersediaan yang baik.
Peran Node dalam High Availability (HA)
Dalam lingkungan produksi, Node diimplementasikan dengan konfigurasi High Availability (HA) untuk meminimalkan downtime. Dengan konfigurasi HA, beberapa Node Master dan Worker digunakan, sehingga jika satu Node mengalami kegagalan, Pod dan aplikasi dapat tetap berjalan di Node lain.
Memastikan Kondisi Kesehatan Node:
kubectl get nodes -o wide
Melihat kondisi kesehatan Node untuk mendeteksi masalah di Node tertentu.
Melihat Event Terkait Node:
kubectl describe node <nama-node> | grep -i events
Memunculkan event log pada Node yang digunakan untuk troubleshooting jika Node mengalami masalah atau error.
Kesimpulan
Node dalam Kubernetes memainkan peran vital sebagai unit kerja yang menjalankan Pod dan aplikasi dalam container. Dengan komponen seperti Kubelet, Kube-Proxy, dan Container Runtime, Node mendukung komunikasi dan kinerja aplikasi di dalam cluster. Melalui pengelolaan Node yang efektif, Kubernetes mampu menghadirkan skalabilitas dan ketersediaan tinggi yang dibutuhkan untuk aplikasi modern.