# Instalasi  Kubernetes dengan Containerd pada Ubuntu 20.04

### 1\. Pendahuluan

Pada artikel ini, penulis ingin membagikan pengetahuan mengenai instalasi **Kubernetes** dengan runtime container menggunakan **containerd**. Kenapa tidak menggunakan **Docker** saja? karena pada **Kubernetes** dengan versi &gt;1.20 sudah tidak mendukung container runtime **Docker** ([baca](https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/)), dan pada artikel ini penulis menginstall Kubernetes versi 1.26 (supaya sinkron dengan exam CKA tahun ini 😁).

Penulis menyiapkan 4 server berwujud vm untuk prepare pembuatan Kubernetes cluster, dengan 1 vm berfungsi sebagai **master node** dan 3 vm difungsikan sebagai **worker node**. Masing-masing vm yang dibuat memiliki spesifikasi dan IP address seperti pada tabel dibawah ini.

| Server | Spesifikasi | Private IP |
| --- | --- | --- |
| master | 30GB Disk, 4GB RAM, 4vcpu | 10.10.51.240 |
| worker1 | 40GB Disk, 4GB RAM, 4vcpu | 10.10.51.241 |
| worker2 | 40GB Disk, 4GB RAM, 4vcpu | 10.10.51.242 |
| worker3 | 40GB Disk, 4GB RAM, 4vcpu | 10.10.51.243 |

Untuk spesifikasi vm yang penulis buat melebihi spefikasi minimum. Kubernetes cluster dapat dibangun dengan memliki setidaknya 1 master node dan 1 worker node. Untuk master node memiliki minimum spesifikasi sekitar 2GB RAM 2vcpu, dan worker memiliki minimum spesifikasi 1GB RAM 1vcpu.

### 2\. Langkah-Langkah

Berikut langkah-langkah pengerjaan untuk membangun Kubernetes Cluster.

1. Melakukan enable kernel module netfilter dan overlay, mematikan mode swap, serta menambah setting sysctl, kemudian save dengan mengetikkan perintah `sysctl --system`. Langkah ini dilakukan pada **semua node**.
    
    ```bash
    $ sudo modprobe br_netfilter
    $ sudo modprobe overlay
    $ swapoff -a
    $ cat <<EOF | sudo tee /etc/sysctl.d/k8s-cri.conf
    > net.bridge.bridge-nf-call-iptables =1
    > net.ipv4.ip_forward =1
    > net.bridge.bridge-nf-call-ip6tables=1
    > EOF
    ```
    
2. Menambahkan repositori Kubernetes. Untuk containerd pada Ubuntu sudah tersedia secara bawaan, jadi untuk saat ini tidak perlu menambahkan repositori. Langkah ini dilakukan pada **semua node**.
    
    ```bash
    $ cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
    > deb https://apt.kubernetes.io/ kubernetes-xenial main
    > EOF
    ```
    
3. Melakukan update repositori. Langkah ini dilakukan pada **semua node**.
    
    ```bash
    $ sudo wget https://packages.cloud.google.com/apt/doc/apt-key.gpg
    $ sudo mv apt-key.gpg /etc/apt/trusted.gpg.d/
    $ sudo apt-get update
    ```
    
4. Melakukan instalasi dan konfigurasi containerd. Langkah ini dilakukan pada **semua node**.
    
    ```bash
    $ sudo apt-get install containerd
    $ sudo mkdir -p /etc/containerd
    $ sudo containerd config default | sudo tee /etc/containerd/config.toml
    $ nano /etc/containerd/config.toml
    # Pada pada file config.toml, cari section:[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    # Kemudian ubah SystemdCgroup = false menjadi true
    ```
    
5. Selanjutnya, melakukan instalasi package-package Kubernetes (kubadm, kubelet, kubectl) versi 1.26. Langkah ini dilakukan pada **semua node**.
    
    ```bash
    $ sudo apt-get install kubectl=1.26.0-00 kubeadm=1.26.0-00 kubelet=1.26.0-00
    ```
    
6. Kemudian, pada **master node** dilakukan pembuatan cluster dengan menggunakan perintah seperti dibawah ini.
    

```bash
$ kubeadm init --pod-network-cidr=10.244.0.0/16 --cri-socket /run/containerd/containerd.sockasd
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1684055665547/68e28d86-dff4-4362-846b-649262d4d7a5.png align="center")

Pada output instalasi terdapat perintah untuk **worker node** untuk melakukan join cluster. Salin perintah yang berkotak merah tersebut.

1. Kemudian eksekusi perintah yang disalin sebelumnya kepada semua **worker node**.
    
    ```bash
    $ sudo kubeadm join 10.10.51.240:6443 --token ojns7s.vnknfgclxs8ccbxs         --discovery-token-ca-cert-hash sha256:97dbc7de0fe3c4ecd243a06591a92add93b30c3d8b2bd2bad4061a0740d045e5
    ```
    
2. Kemudian lakukan perintah dibawah ini pada master node supaya dapat mengakses Kubernetes cluster. Pada gambar dibawah, penulis menggunakan perintah `kubectl get no` untuk melihat node-node yang berada di Kubernetes cluster, menunjukkan bahwa semua node sudah berada pada cluster.
    
    ```bash
    $ mkdir -p $HOME/.kube
    $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
    $ kubectl get no #untuk melihat node pada cluster
    ```
    
    ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1684057224357/321182da-e782-4022-9191-19485bd52561.png align="center")
    
3. Selanjutnya menambahkan plugin CNI untuk pod network didalam Kubernetes. Penulis menggunakan [Kube-OVN](https://kubeovn.github.io/docs/v1.11.x/en/start/one-step-install/) untuk CNI nya.
    
    ```bash
    $ wget https://raw.githubusercontent.com/kubeovn/kube-ovn/release-1.11/dist/images/install.sh 
    $ sudo bash install.sh
    ```
    
4. Voila! Kubernetes Cluster berhasil dibangun dan siap digunakan :)
    
    ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1684057304705/26f95d11-3ad7-4383-9179-ea1632c2d48e.png align="center")
