TeknoCerdas.com – Salam cerdas untuk kita semua. Kubernetes saat ini adalah platform terpopuler untuk melakukan orkestrasi container atau deployment aplikasis berbasi container. Tulisan ini akan membahas secara singkat bagaimana melakukan install Kubernetes di Ubuntu 20.04 dengan MicroK8s.
Kubernetes jika dilihat dari segi arsitektur adalah sistem yang cukup kompleks. Sehingga banyak pihak mengembangkan versi mini dari Kubernetes untuk memudahkan developer atau memudahkan instalasi Kubernetes. Salah satunya adalah MicroK8s (baca: Micro Kubernetes).
MicroK8s sendiri dikembangkan oleh perusahaan Canonical yaitu perusahaan yang membuat distro Ubuntu Linux. Jika normal Kubernetes memerlukan master dan worker node untuk membentuk kluster yang terdiri dari beberapa mesin. Hal itu karena Kubernetes memerlukan beberapa mesin untuk mencapai High availability dan menghindari downtime.
Baca Juga
Managed Kubernetes Cluster dari Berbagai Cloud Provider
Pada MicroK8s hal itu disimplifikasi bahkan dengan satu mesin yang biasa digunakan untuk development, maka kluster Kubernetes dari MicroK8s dapat berjalan. Ditambah dengan beberapa add-on yang sudah dimasukkan secara default seperti sangat memudahkan developer dalam mengerjakan hal-hal yang berhubungan dengan Kubernetes.
Daftar Isi
- Install MicroK8s
- Menambahkan User ke Group
- Tes Instalasi MicroK8s
- Deployment pada MicroK8s
- Publish Service ke Internet
Install MicroK8s
Instalasi MicroK8s pada Ubuntu menggunakan package manager Snap. Cara instalasi MicroK8s sangat sederhana dengan Snap, ketikkan perinah berikut pada Terminal untuk melihat daftar versi yang ada.
$ sudo snap info microk8s
name: microk8s
summary: Lightweight Kubernetes for workstations and appliances
publisher: Canonical✓
store-url: https://snapcraft.io/microk8s
contact: https://github.com/ubuntu/microk8s
license: Apache-2.0
description: |
MicroK8s is the smallest, simplest, pure production Kubernetes for clusters, laptops, IoT and
Edge, on Intel and ARM. One command installs a single-node K8s cluster with carefully selected
add-ons on Linux, Windows and macOS. MicroK8s requires no configuration, supports automatic
updates and GPU acceleration. Use it for offline development, prototyping, testing, to build your
CI/CD pipeline or your IoT apps.
snap-id: EaXqgt1lyCaxKaQCU349mlodBkDCXRcg
channels:
1.19/stable: v1.19.3 2020-11-12 (1791) 214MB classic
1.19/candidate: v1.19.4 2020-11-27 (1810) 214MB classic
1.19/beta: v1.19.4 2020-11-27 (1810) 214MB classic
1.19/edge: v1.19.4 2020-11-16 (1810) 214MB classic
latest/stable: v1.19.3 2020-11-10 (1786) 214MB classic
latest/candidate: v1.19.3 2020-11-10 (1786) 214MB classic
latest/beta: v1.19.3 2020-11-10 (1786) 214MB classic
latest/edge: v1.19.4 2020-11-27 (1830) 213MB classic
dqlite/stable: –
dqlite/candidate: –
dqlite/beta: –
dqlite/edge: v1.16.2 2019-11-07 (1038) 189MB classic
1.20/stable: –
1.20/candidate: –
1.20/beta: v1.20.0-beta.2 2020-11-20 (1825) 215MB classic
1.20/edge: v1.20.0-alpha.3 2020-11-05 (1788) 214MB classic
[...CUT...]
Terlihat bahwa terdapat berbagai versi dari MicroK8s yang tersedia. Versi ini harusnya berkorelasi dengan upstream Kubernetes. Pada contoh ini digunakan versi 1.19.3
dari channel 1.19/stable
.
$ sudo snap install microk8s --classic --channel=1.19/stable
microk8s (1.19/stable) v1.19.3 from Canonical✓ installed
Snap akan mulai mendownload package yang berukuran lumayan besar. Kecepatan instalasi tentu bergantung pada koneksi internet. Jadi tunggu beberapa saat hingga instalasi selesai.
Baca Juga
Instal OpenLiteSpeed pada Ubuntu 20.04
Menambahkan User ke Group
Tambahkan user ubuntu
kedalam group micro8ks
untuk menghindari masalah permission ketika MicroK8s akan menulis ke sebuah file atau direktori ~/.kube
.
$ sudo usermod -a -G microk8s ubuntu
Ganti ubuntu
dengan username anda atau gunakan environment $HOME
untuk otomatis menggunakan user yang loign.
Setelah itu login ulang agar session mengenali group baru yang ditambahkan.
$ sudo -i -u ubuntu
Tes Instalasi MicroK8s
Tes instalasi dengan memanggil perintah utama dari Kubernetes yaitu kubectl
. Pada MicroK8s perintah pemanggilan harus diawali dengan microk8s.kubectl
atau microk8s kubectl
.
$ microk8s.kubectl
Client Version: version.Info{Major:"1", Minor:"19+", GitVersion:"v1.19.3-34+a56971609ff35a", GitCommit:"a56971609ff35ac8cc90b2aef89165208bff3fe1", GitTreeState:"clean", BuildDate:"2020-11-06T11:56:24Z", GoVersion:"go1.15.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19+", GitVersion:"v1.19.3-34+a56971609ff35a", GitCommit:"a56971609ff35ac8cc90b2aef89165208bff3fe1", GitTreeState:"clean", BuildDate:"2020-11-06T11:57:19Z", GoVersion:"go1.15.3", Compiler:"gc", Platform:"linux/amd64"}
Untuk melihat Nodes dan Services yang berjalan dapat menggunakan perintah-perintah berikut.
$ microk8s.kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-172-31-31-204 Ready 27m v1.19.3-34+a56971609ff35a
$ microk8s.kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.152.183.1 443/TCP 34m
Deployment pada MicroK8s
Untuk melakukan deployment aplikasi pada MicroK8s sama dengan yang dilakukan pada versi original Kubernetes. Aplikasi yang akan dideploy dalam bentuk container. Secara default registry yang digunakan adalah Docker Hub.
Berikut adalah perintah untuk melakukan deployment sebuah aplikasi. Disini digunakan Nginx container dari Docker Hub.
$ microk8s.kubectl create deployment nginx --image=nginx:stable
deployment.apps/nginx created
Deployment sebuah aplikasi container pada Kubernetes akan masuk pada sebuah Pod. Untuk melihatnya gunakan perintah berikut.
$ microk8s.kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-74774d4949-frq5n 1/1 Running 0 12m 10.1.167.130 ip-172-31-31-204
Terlihat bahwa Pod Nginx telah berjalan dan memiliki internal IP 10.1.167.30
. Untuk melakukan tes apakah Nginx pada pod berjalan maka lakukan HTTP request ke Pod tersebut.
$ curl http://10.1.167.130
Welcome to nginx!
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
Deployment container nginx berhasil dilakukan dan respon telah sesuai yang diinginkan.
Publish Service ke Internet
Secara default layanan yang ada pada Pod hanya dapat dipanggil dari dalam kluster Kubernetes. Jika request berasal dari publik atau internet maka perlu sebuah Service untuk mempublikasikan layanan ke internet. Perintah yang digunakan dalam contoh ini adalah expose
.
$ microk8s.kubectl expose deployment/nginx --type="NodePort" --port 80
service/nginx exposed
Sekarang lihat jumlah Services yang berjalan.
$ microk8s.kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.152.183.1 443/TCP 3h45m
nginx NodePort 10.152.183.31 80:30595/TCP 2m2s
Untuk mengetahui informasi lengkap tentang sebuah Service maka gunakan perintah describe
.
$ microk8s.kubectl describe service nginx
Name: nginx
Namespace: default
Labels: app=nginx
Annotations:
Selector: app=nginx
Type: NodePort
IP: 10.152.183.31
Port: 80/TCP
TargetPort: 80/TCP
NodePort: 30595/TCP
Endpoints: 10.1.167.130:80
Session Affinity: None
External Traffic Policy: Cluster
Events:
Yang perlu diperhatikan agar layanan dapat diakses dari luar adalah `NodePort`. Dimana ini adalah port acak yang dipublikasikan oleh Kubernetes pada host (OS).
Pastikan firewall terbuka untuk NodePort dalam contoh adalah 30595
. Sekarang coba akses alamat IP dari mesin dari luar jaringan atau jika anda menggunakan server dengan IP publik maka akses IP publik tersebut.
$ curl http://13.212.208.103:30595
Welcome to nginx!
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
Cara yang lebih direkomendiskan untuk mempublikasikan Service ke jaringan luar adalah dengan menggunakan Ingress Controller.
Cukup mudah bukan cara install Kubernetes di Ubuntu. MicroK8s dapat dijadikan sebagai development tools untuk pengembangan berbasis Kubernetes.