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