Taufik Mulyana
Taufik Mulyana
Linux System Administrator, Interested in Linux, Cloud, Containers
December 2, 2018 5 min read

Menjalankan Kubernetes di Lokal dengan Minikube

Menjalankan Kubernetes di Lokal dengan Minikube

Melanjutkan seri belajar kubernetes, kali ini saya mencoba minikube, apa itu minikube ? minikube merupakan sebuah perangkat lunak yang memungkinkan kita untuk menjalankan kubernetes pada komputer pribadi atau satu node untuk keperluan development dan testing.

Fitur dari Minikube

  • DNS
  • NodePorts
  • ConfigMaps and Secrets
  • Dashboard
  • Container Runtime: Docker, rkt, CRLO, containerd
  • Enabling CNI
  • Ingress

Minikube juga mendukung beberapa hypervisor diantaranya

  • virtualbox
  • vmwarefusion
  • kvm
  • kvm2
  • hyperkit
  • xhyve

kita bisa memilih salah satu list diatas, lalu memilih driver dengan menambahkan parameter –vm-driver=xxx, kita juga bisa menggunakan –vm-driver=none untuk menjalankan komponen kubernetes pada host bukan dalam vm, driver ini membutuhkan docker dan hanya berjalan di linux.

saya akan menggunakan kvm sebagai hypervisor, untuk memakai hypervisor kvm kita membutuhkan docker-machine dan juga drivernya

Instalasi KVM

pasang kvm dari repositori Ubuntu bionic menggunakan apt

$ sudo apt-get -y install qemu-kvm libvirt-bin virt-top libguestfs-tools \
virtinst bridge-utils

aktifkan modul vhost-net dan load saat boot

$ sudo modprobe vhost_net
$ sudo echo vhost_net >> /etc/modules

pastikan layanan libvirtd telah berjalan

$ sudo systemctl status libvitrd

Instalasi Docker Machine

Docker machine merupakan sebuah tool yang memungkinkan kita untuk memasang Docker Engine pada Virtual hosts, dan mengelola host dengan perintah doker-machine

instalasi Docker Machine

$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo install /tmp/docker-machine /usr/local/bin/docker-machine

Instalasi Docker Machine KVM Driver

$ curl -LO https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2
$ chmod +x docker-machine-driver-kvm2
$ sudo mv docker-machine-driver-kvm2 /usr/local/bin/

Instalasi Kubectl

unduh dan tambahkan gpg key terlebih dahulu

$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

tambahkan repositori kubernetes

$ echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list

pasang kubectl

$ sudo apt-get update && sudo apt-get install -y kubectl

Instalasi Minikube

unduh paket binari minikube

$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.30.0/minikube-linux-amd64

setelah terunduh pindahkan ke direktori /usr/local/bin

$ mv minikube /usr/local/bin/

tambahkan hak execute ke binari minikube

chmod +x /usr/local/bin/minikube

Menjalankan Minikube

baca juga  Mengoptimalkan Docker Image dengan Multi Stage Build

untuk menjalankan minikube hanya perlu menjalankan perintah minikube start, minikube akan mengunduh iso, membuat vm, mengalokasikan ip dan memasang beberapa komponen dan menjalankannya

$ minikube start --vm-driver kvm2
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Downloading Minikube ISO
150.53 MB / 150.53 MB [============================================] 100.00% 0s
Getting VM IP address...
Moving files into cluster...
Downloading kubeadm v1.10.0
Downloading kubelet v1.10.0
Finished Downloading kubeadm v1.10.0
Finished Downloading kubelet v1.10.0
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.

untuk mengecek status cluster gunakan kubectl

$ kubectl cluster-info
Kubernetes master is running at https://192.168.39.130:8443
CoreDNS is running at https://192.168.39.130:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

untuk mengecek nodes gunakan perintah kubectl get nodes dan akan menampilkan hanya 1 node

$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 52m v1.10.0

dan untuk mengakses vm minikube anda bisa langsung menggunakan perintah minikube ssh

minikube ssh

Kubernetes Dashboard

Kubernetes memiliki antarmuka web yang dapat digunakan untuk mengelola cluster tanpa harus menggunakan antarmuka konsol, antarmuka web aktif secara bawaan di minikube, untuk mendapatkan urlnya gunakan perintah berikut

$ minikube dashboard --url
http://127.0.0.1:46285/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/

dengan perintah minikube dashboard –url akan menampilkan pranala yang bisa diakses di peramban, berikut tampilan dari antarmuka web kubernetes

kubernetes dashboard

Minikube Pod

saya akan mencoba membangun pod hello-minikube yang menggunakan docker image yang bernama hello-minikube, dengan perintah dibawah akan membuat sebuah deployment untuk pod

$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
deployment "hello-minikube" created

kita bisa men-inspect pod dan deployment untuk memverifikasi perintah diatas

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-minikube-6c47c66d8-4rbxz 1/1 Running 0 19m
$ kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-minikube 1 1 1 1 19m

agar service hello-minikube bisa diakses, kita harus meng-expose deployment ke external IP dan mengunakan type NodePort karena minikube tidak mendukung LoadBalancer

$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed

kita bisa cek apakah service telah di expose

$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube NodePort 10.105.8.109 <none> 8080:32174/TCP 10s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1h

sekarang kita bisa mengakses service hello-minikube untuk mendapatkan pranalanya gunakan perintah berikut

$ minikube service hello-minikube --url
http://192.168.39.130:32174

pranala diatas bisa diakses melalui peramban maupun curl, saya akan mencoba mengaksesnya menggunakan curl

$ curl http://192.168.39.130:32174
CLIENT VALUES:
client_address=172.17.0.1
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://192.168.39.130:8080/

SERVER VALUES:
server_version=nginx: 1.10.0 - lua: 10001

HEADERS RECEIVED:
accept=*/*
host=192.168.39.130:32174
user-agent=curl/7.58.0
BODY:
-no body in request-%

sekian untuk artikel kali ini semoga bermanfaat

Leave a Reply

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