Arsitektur Kubernetes
Setelah memahami kubernetes dan fungsinya, mari kita lanjut untuk memahami bagaimana grafik arsitektur dari kubernetes. Arsitektur dibawah ini tidak menunjukkan secara detail namun menunjukkan high-level architecture diagram dari komponen kubernetes saja.
Setiap node menjalankan kontainer yang memiliki kubelet dan kube-proxy, berikut gambarnya:
Kubernetes itu terdiri dua komponen yakni master node (central manager) dan worker node yang juga disebut minion. Kubernetes bisa dibangun dengan cluster atau single node. Komponen manager menjalankan API Server, scheduler, beberapa kontroler dan sebuah sistem storage untuk menjaga state cluster, container setting, dan konfigurasi jaringan.
Kubernetes mengeskpose sebuah API via API Server. Anda bisa berkomunikasi dengan API tersebut dengan komponen local node yakni kubectl. Sedangkan kube-scheduler melakukan forwarding proses data melalui API ke node yang cocok untuk menjalankan kontainer.
Setiap node dalam sebuah cluster memiliki dua proses yakni kubelet dan kube-proxy.
Dimana kubelet menerima request untuk menjalankan kontainer, mengelola berbagai macam resource dan melakukan monitoring resource tersebut. Kubelet berinteraksi dengan lokal mesin kontainer seperti docker (default), selain docker bisa menggunakan rkt atau cri-o yang sedang trend saat ini.
Sedangkan kube-proxy berfungsi untuk membuat dan mengelola rule jaringan untuk mengekspose kontainer di jaringan.
Karena skema komunikasi kubernetes berbasis API sehingga bisa mengizinkan worker node dan kontainer Non-Linux. Selain itu support Windows Server 2019 ditingkatkan ke versi stable dengan rilis 1.14. Namun hanya Linux saja yang bisa dijadikan sebagai master node.
Komponen Utama
Kubernetes memiliki komponen utama yaitu :
a. Master dan worker node
b. Controllers
c. Services
d. Pod
e. Namespaces dan quota
f. Network dan policy, dan
g. Storage
Kubernetes cluster memiliki dua komponen utama yaitu master node dan worker node. Cluster tersebut berkomunikasi dengan API Call baik secara internal maupun eksternal.
Master Node
Master node kubernetes menjalankan berbagai macam server dan proses manajer untuk cluster. Adapun komponen master node adalah kube-apiserver, kube scheduler, dan database etcd. Seiring dengan berkembangnya software secara pesat, ada tool yang bisa menangani hal secara khusus termasuk cloud-controller-manager. Cloud-controller-manager juga membantu adanya proses yang dilakukan oleh kube-controller-manager untuk berinteraksi dengan tool lain seperti Rancher untuk pengelolahan cluster pihak ketiga.
a. Kube-apiserver
Kube-apiserver merupakan central operation dari kubernetes cluster. Semua panggilan termasuk trafik internal dan eksternal dihandle oleh agent ini. Semua action disetujui dan divalidasi oleh agent ini dan hanya agent ini yang bisa berkomunikasi dengan database etcd. Hal ini memvalidasi dan melakukan konfigurasi data untuk objek API dan melayani operasi REST. Sehingga agent ini sebagai master dari komponen kubernetes cluster dan bertindak sebagai frontend dari cluster tersebut.
b. Kube-scheduler
Kube-scheduler menggunakan algoritma untuk menentukan Node mana yang cocok untuk menampung Pod container. Kube-scheduler juga resource (seperti volume) untuk bisa dibind oleh Pod container. Selain itu, Anda juga bisa melakukan custome Node untuk Pod container Anda.
c. Etcd database
State cluster, networking, dan informasi persistent lain disimpan didalam database etcd. Karena itu, status persistent dari seluruh cluster harus dilindungi dan diamankan. Sebelum melakukan upgrade atau maintenance, Anda harus melakukan backup plan untuk etcd database. Perintah etcdctl dapat membantu Anda untuk melakukan snapshot save dan snapshot restore.
Referensi: https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/
d. Agent lain
Kube-controller-manager merupakan daemon loop kontrol inti yang berinteraksi dengan kube-apiserver untuk menentukan status cluster. Apabila terdapat state yang tidak cocok, maka kube-controller-manager akan menghubungi kontroller yang diperlukan untuk menyesuaikan kondisi yang diinginkan.
Pada versi beta di v1.19, cloud-controller-manager (ccm) berinteraksi dengan agent diluar cluster. Cloud-controller-manager menghandle tugas yang pernah ditangani juga oleh Kube-controller-manager.
Worker Node
Semua Node memiliki dua komponen penting yakni kubelet dan kube-proxy termasuk container engine yakni Docker, cri-o.
Kubelet berinteraksi dengan docker engine untuk yang telah diinstall pada setiap node. dan memastikan kontainer berstatus running pada node tersebut. Sedangkan kube-proxy mengatur jaringan konektifitas kontainer dan juga melakukannya dari entri iptables.
Sumber gambar: https://kubernetes.io/blog/2018/07/18/11-ways-not-to-get-hacked/
Supervisord merupakan proses monitor yang ringan secara tradisional dilingkungan linux untuk melakukan monitor dan memberikan notifikasi tentang sebuah proses. Di cluster non-systemd merupakan daemon yang digunakan untuk memonitor kedua proses kubernetes yakni kubelet dan docker. Dia akan mencoba untuk restart apabila terdapat proses yang gagal dan log events. Supervisord juga tidak berupa file installer akan tetapi bisa dibuat sebagai reporting.
Kubernetes juga belum memkiliki cluster-wide logging, penggantinya adalah fluentd (projek CNCF) yang jika diimpelementasikan bisa menyediakan lapisan logging terpadu yang memfilter, buffer dan route pesan.
Lanjutan pembahasan arsitektur kubernetes bisa melihat post berikut.