Install Kubernetes di Ubuntu 20.04 dengan MicroK8s

4 min read

Install Kubernetes di Ubuntu dengan MicroK8s
Ilustrasi MicroK8s (Sumber: microk8s.io)

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

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    <none>   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   <none>        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   <none>           <none>

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
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

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    <none>        443/TCP        3h45m
nginx        NodePort    10.152.183.31   <none>        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:              <none>
Selector:                 app=nginx
Type:                     NodePort
IP:                       10.152.183.31
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30595/TCP
Endpoints:                10.1.167.130:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

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
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

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.