Minikube Nedir? Nasıl Kurulur? Nasıl Kullanılır?

Bu makalede dünyada en popüler en çok kullanılan orchestration olarak bilinen kubernetes’i local ortamda nasıl çalıştıracağımı anlatacağım.

Minikube , Kubernetes üzerinde testlerimizi ve geliştirmelerimizi yapmak için local bilgisayarımızda kullandığımız mini kubernetes kümesidir. Minikube Windows, MacOS ve Linux işletim sistemlerinde çalışabilir.

Temel Olarak Minikube mimarisi ;

Minikube mimarisine baktığımızda Master ,Node ve Docker dan oluşmaktadır. Docker yerine rkt da kullanılabilir. Node sayımızı istediğimiz sayıda arttırabiliriz. Master için minikube’de bu durum geçerli değildir.

Minikube Sistem Gereksinimleri;

  • Windows , MacOS veya Linux işletim sistemi.
  • Default 2 Core CPU , 2 GB RAM , 20 GB Disk (Ölçeklendirme yapılabilir.)
  • VirtualBox
  • Bilgisayarınızın sanallaştırma etkin olması gerekir.

Windows Minikube Kurulumu

VirtualBox kurulumu yaparak başlayabiliriz.

https://download.virtualbox.org/virtualbox/6.0.14/VirtualBox-6.0.14-133895-Win.exe

Minikube kurulunu için minikube-installer.exe indirmemiz gerekiyor.

https://github.com/kubernetes/minikube/releases/latest/download/minikube-installer.exe

Ayrıca minikubenin yanında kubectl kurulması gerekmektedir. kubectl minikube cluster’ı yönetmek için gerekli komuttur.

https://storage.googleapis.com/kubernetes-release/release/v1.16.0/bin/windows/amd64/kubectl.exe

kubectl.exe’sini C:\Windows\System32 klasörüne attıktan sonra Windows PowerShell üzerinde kubectl — help yazdığınızda çıktı alacaksınız.

Windows PowerShell üzerinde minikube start diyerek cluster’ı oluşturuyoruz.

PS C:\WINDOWS\system32> minikube start
* minikube v1.2.0 on windows (amd64)
* Creating virtualbox VM (CPUs=2, Memory=2048MB, Disk=20000MB) …
* Configuring environment for Kubernetes v1.15.0 on Docker 18.09.6
* Pulling images …
* Launching Kubernetes …
* Verifying: apiserver proxy etcd scheduler controller dns
* Done! kubectl is now configured to use "minikube"

NOT: VirtualBox/Hyper-V conflict: WHvSetupPartition failed — VERR_NEM_VM_CREATE_FAILED Böyle bir hata ile karşılaştıysanız aşağıdaki adımları uygulayın.

https://github.com/kubernetes/minikube/issues/4587

RUN > CMD > bcdedit /set hypervisorlaunchtype off

Komutu girdikten sonra bilgisayarınızı yeniden başlatın. Bilgisayarınız açıldığında minikube’yi kullanabilirsiniz.

Minikube çalıştığında Virtualbox’ta sanal makinenin oluştuğunu göreceksiniz.

Minikube Kullanımı

Minikube cluster’ı oluştuktan sonra kubectl komutu ile cluster’ı yönetebiliriz . Cluster’ın hazır olduğunu aşağıdaki komutlardan görebiliriz.

Minikube üzerinde pod ve nodeları listeleyerek çalışır durumlarını görebiliriz.

Arayüzü aktif ederek yönetim kolaylığı ve cluster’ın sağlını burdan kontrol edebiliriz.

PS C:\WINDOWS\system32> minikube dashboard
* Verifying dashboard health …
* Launching proxy …
* Verifying proxy health …
* Opening http://127.0.0.1:56519/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/ in your default browser…

Minikube Örnek

Gelin Minikube üzerinde bir örnek yapalım. Hello world yazmadan olmaz :)

$ kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-nodedeployment.apps/hello-node created

Yukarıda hello-node adında bir deployment başlattık . Kısa bir süre sonra ;

$ kubectl get deploymentsNAME         READY   UP-TO-DATE   AVAILABLE   AGE
hello-node 1/1 1 1 78s

Deployment hazır duruma geldi . Sırada bu deployment’ın 8080 portunu expose yapmamız gerekiyor.

$ kubectl expose deployment hello-node --type=LoadBalancer --port=8080service/hello-node exposed

Oluşturduğumuz service de expose portunu görebilmemiz için ;

$ kubectl get servicesNAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
hello-node LoadBalancer 10.110.24.150 <pending> 8080:
31391/TCP 16m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 64m

VirtualBox üzerinde çalışan sanal makinemizin ipsini öğrendikten sonra 31391 portuna giderek Hello World çıktısını görebiliriz.

Yada daha kolay bir şekilde minikube service hello-node yazarak direk bizi çıktıya yönlendirir.

Hello World çıktısını yukarda görmekteyiz.

Minikube Eklentileri

Minikube eklentiler ile daha kullanışlı hale getirebilir , yönetimi daha kolaylaştırabiliriz.

Eklentileri listeleyecek olursak ;

PS C:\WINDOWS\system32> minikube addons list
- addon-manager: enabled
- dashboard: enabled
- default-storageclass: enabled
- efk: disabled
- freshpod: disabled
- gvisor: disabled
- heapster: enabled
- ingress: disabled
- logviewer: disabled
- metrics-server: disabled
- nvidia-driver-installer: disabled
- nvidia-gpu-device-plugin: disabled
- registry: disabled
- registry-creds: disabled
- storage-provisioner: enabled
- storage-provisioner-gluster: disabled

Örnek olarak monitoring özelliğini aktif edelim. Heapster eklentisini bunun için kullanabiliriz.

PS C:\WINDOWS\system32> minikube addons enable heapster
* heapster was successfully enabled

Kurulum bittikten sonra buna benzer bir çıktı görmeliyiz;

PS C:\WINDOWS\system32> kubectl get pod,svc -n kube-system
NAME READY STATUS RESTARTS AGE
pod/coredns-5c98db65d4-jjz8s 1/1 Running 0 84m
pod/coredns-5c98db65d4-txdpc 1/1 Running 0 84m
pod/etcd-minikube 1/1 Running 0 83m
pod/heapster-b6n49 1/1 Running 0 6m51s
pod/influxdb-grafana-sq7nb 2/2 Running 0 6m51s
pod/kube-addon-manager-minikube 1/1 Running 0 83m
pod/kube-apiserver-minikube 1/1 Running 0 83m
pod/kube-controller-manager-minikube 1/1 Running 0 83m
pod/kube-proxy-cvcdj 1/1 Running 0 84m
pod/kube-scheduler-minikube 1/1 Running 0 83m
pod/kubernetes-dashboard-7b8ddcb5d6-m4bzh 1/1 Running 0 84m
pod/storage-provisioner 1/1 Running 0 84m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/heapster ClusterIP 10.107.253.82 <none> 80/TCP 6m51s
service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 84m
service/kubernetes-dashboard ClusterIP 10.98.250.215 <none> 80/TCP 84m
service/monitoring-grafana NodePort 10.99.41.217 <none> 80:30002/TCP 6m51s
service/monitoring-influxdb ClusterIP 10.105.210.239 <none> 8083/TCP,8086/TCP 6m50s

Yukarıda monitoring yapacağımız Grafana expose portunun 30002 olduğunu görüyoruz.

Bağlantıya gidersek;

Yukarıda görüldüğü gibi minikube cluster’daki Node ,Pod monitoring yapabiliyoruz. CPU, RAM gibi kaynak tüketimlerini buradan kontrol edebiliriz.

Diğer bir eklentiye gelirsek metrics-server bu eklenti ile CLI ve Kubernetes Dashboard ile Pod ve Node Kaynak tüketimlerini görebiliriz.

PS C:\WINDOWS\system32> minikube addons enable metrics-server
* metrics-server was successfully enabled

Kurulum bittikten sonra böyle bir çıktı görmemiz lazım ;

PS C:\WINDOWS\system32> kubectl get deploy -n kube-system  metrics-server
NAME READY UP-TO-DATE AVAILABLE AGE
metrics-server 1/1 1 1 3m14s

Daha sonra cluster’daki bütün podların CPU ve RAM kaynak tüketimleri için;

PS C:\WINDOWS\system32> kubectl top pod --all-namespaces
NAMESPACE NAME CPU(cores) MEMORY(bytes)
default hello-node-55b49fb9f8-fzb5q 0m 10Mi
kube-system coredns-5c98db65d4-jjz8s 4m 11Mi
kube-system coredns-5c98db65d4-txdpc 4m 13Mi
kube-system etcd-minikube 29m 43Mi
kube-system heapster-b6n49 0m 16Mi
kube-system influxdb-grafana-sq7nb 1m 37Mi
kube-system kube-addon-manager-minikube 8m 5Mi
kube-system kube-apiserver-minikube 47m 254Mi
kube-system kube-controller-manager-minikube 20m 35Mi
kube-system kube-proxy-cvcdj 2m 9Mi
kube-system kube-scheduler-minikube 2m 10Mi
kube-system kubernetes-dashboard-7b8ddcb5m 0m 14Mi
kube-system metrics-server-84bb785897-nt4xs 0m 8Mi
kube-system storage-provisioner 0m 27Mi

Dashboard üzerinde metric değerleri yine görüyor olacağız.

--

--

Serdarcan Büyükdereli
Devops Türkiye☁️ 🐧 🐳 ☸️

Linux ,Bulut sistemleri hayranı paylaşımcı bir Jedi . Docker, Kubernetes , Linux …