Kalo mau belajar mengenai kubernetes, minikube pasti sering mendengar minikube, minikube adalah tools yang digunakan untuk menjalankan kubernetes di local, baik itu di komputer/laptop maupun VPS/Dedicated Server/On Premise.

Penggunaan ini juga sangat membantu untuk testing di local sebelum menggunakannya di server production ataupun development, dengan begitu kita tidak perlu melakukannya di server Development setiap kali melakukan perubahan cukup di minikube.

Buat yang baru mulai belajar kubernetes sangat disarankan menggunakan minikube agar lebih mendalami ekosistem kubernetes tersebut.

Agar minikube bisa dijalankan dengan lancar, spesifikasi yang direkomendasikan adalah
20 GB SSD
4 GB memory
2 CPU

Pada tulisan kali ini yang digunakan adalah docker karena yang paling mudah disetup dan irit hardisk, dibandingkan VirtualBox, VMWare, Hyper-V dan KVM.

Install Docker

Jalankan perintah dibawah ini untuk menginstall Docker dari repository yang dikelola oleh Docker.com. Hal ini penting digunakan karena kita akan tetap mendapatkan versi docker terbaru.

sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg -y
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y

Tambahkan user anda kedalam group docker, agar bisa menjalankan docker tanpa akses root

sudo usermod -aG docker $USER

Install kubectl

kubectl adalah CLI kubernetes yang digunakan untuk mengelola Kubernetes. Tool ini sangat penting, dan menjadi senjata wajib untuk mengelola kubernetes.
Download versi terbaru kubectl lalu install

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

Install Minikube

Minikube sangat berguna untuk mempelajari kubernetes dengan biaya minimal, karena bisa di install di komputer/laptop dengan kebutuhan memory yang ringan. Saat nanti beralih ke managed kubernetes seperti (Google Kubernetes Engine (GKE), DigitalOcean Managed Kubernetes, Amazon Elastic Kubernetes Service (EKS)) dan lain sebagainya menjadi lebih mudah karena hanya perlu menyesuaikan beberapa perintah.

Minimal CPU untuk minikube adalah 2 CPU, bila hanya menggunakan 1 CPU nanti muncul error

Automatically selected the docker driver
 
⛔  Exiting due to RSRC_INSUFFICIENT_CORES: Requested cpu count 2 is greater than the available cpus of 1

Agar bisa memulai, install minikube terlebih dahulu

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

Jalankan Minikube

minikube start

Untuk pertama kali proses ini akan berlangsung beberapa menit, karena akan mendownload images untuk kebutuhan minikube

# output
😄  minikube v1.19.0 on Debian 10.9 (vbox/amd64)
✨  Automatically selected the docker driver
👍  Starting control plane node minikube in cluster minikube
🚜  Pulling base image ...
💾  Downloading Kubernetes v1.20.2 preload ...
    > preloaded-images-k8s-v10-v1...: 491.71 MiB / 491.71 MiB  100.00% 3.82 MiB
    > gcr.io/k8s-minikube/kicbase...: 357.67 MiB / 357.67 MiB  100.00% 2.24 MiB
🔥  Creating docker container (CPUs=2, Memory=2200MB) ...
🐳  Preparing Kubernetes v1.20.2 on Docker 20.10.5 ...
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
🔎  Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  Enabled addons: default-storageclass, storage-provisioner
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

Satu hal yang perlu di ingat agar minikube bisa menggunakan docker dari local, jalankan

eval $(minikube -p minikube docker-env)

Perintah ini perlu dijalankan di tiap shell yang terbuka, atau bisa ditambahkan di ~/.bashrc agar dijalankan setiap membuka shell baru.
lalu build ulang image docker anda. Untuk melihat image tersebut dikenali oleh minikube periksa

minikube image list

Build Image Docker
Sebagai percobaan, kita akan membuat sebuah image untuk docker

mkdir -p ~/docker/busybox

buat Dockerfile di folder ~/docker/busybox yang berisi

# ~/docker/nginx/Dockerfile
FROM nginx
 
COPY index.html /usr/share/nginx/html/

buat file baru di ~/docker/nginx/index.html

Hai Minikube

lalu build docker image dari file konfigurasi tersebut

cd ~/docker/nginx
docker build -t nginx-custom .
# ouput
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM nginx
 ---> 62d49f9bab67
Step 2/2 : COPY index.html /usr/share/nginx/html/
 ---> d25c09a64d30
Successfully built d25c09a64d30
Successfully tagged nginx-custom:latest

Setelah berhasil sekarang deploy image tersebut ke minikube

kubectl run nginx-custom --image=nginx-custom --image-pull-policy=IfNotPresent

wajib digunakan agar image yang diambil dari local docker. Perintah satu ini akan sangat membantu anda tidak membuang waktu untuk troubleshooting kenapa pod nya tidak berjalan atau docker image tidak ditemukan.

Lihat pod dengan nama nginx-custom sudah berjalan, dengan kubectl get pods

NAME           READY   STATUS    RESTARTS   AGE
nginx-custom   1/1     Running   0          3m22s

Percobaan dengan Pod berhasil, sekarang mari kita coba dengan Deployment. Buat yang belum tau apa perbedaan antara Pod dan Deployment, disini akan coba saya jelaskan secara singkat.
Pod digunakan untuk menjalankan satu atau lebih container, sementara Deployment adalah service yang digunakan untuk menjalankan Pod yang sama secara bersamaan, tiap Pod yang dijalankan sama dan memonitor status setiap Pod yang dijalankan.

Buat file nginx-deployment.yaml, yang berisi

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx-custom
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

jalankan dengan

kubectl apply -f nginx-deployment.yaml

Cek pod yang dijalankan

kubectl get  pods
# output
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-b55f58cb5-9jvcl   1/1     Running   0          79s
nginx-deployment-b55f58cb5-dd5k8   1/1     Running   0          77s

Leave a comment

Your email address will not be published. Required fields are marked *