Instalasi Kubernetes dengan Minikube

Minikube adalah alat yang memudahkan untuk menjalankan Kubernetes pada komputer lokal. Minikube menjalankan satu Node klaster Kubernetes di dalam Virtual Machine (VM) pada laptop kamu untuk pengguna yang ingin mencoba Kubernetes atau mengembangkannya.

Fitur Minikube

Minikube mendukung fitur Kubernetes berikut:

Instalasi

Lihat Instalasi Minikube.

Memulai Cepat

Demonstrasi singkat ini memandu kamu tentang bagaimana memulai, menggunakan dan menghapus Minikube secara lokal. Ikuti langkah berikut untuk memulai dan menjelajahi Minikube.

  1. Mulailah Minikube dan buatlah sebuah klaster:

     minikube start
    

    Keluaran menyerupai:

    Starting local Kubernetes cluster...
    Running pre-create checks...
    Creating machine...
    Starting local Kubernetes cluster...
    

    Untuk informasi lebih lanjut mengenai bagaimana memulai klaster pada versi Kubernetes tertentu, VM atau Container runtime, lihatlah Memulai klaster.

  2. Kini kamu bisa berinteraksi dengan klaster kamu dengan kubectl. Untuk informasi lebih lanjut, lihatlah Interaksi dengan klaster kamu.

    Mari kita buat Kubernetes Deployment menggunakan image bernama echoserver, yaitu sebuah server HTTP sederhana dan buka layanan pada porta 8080 dengan menggunakan opsi --port.

    kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
    

    Keluaran menyerupai:

    deployment.apps/hello-minikube created
    
  3. Untuk mengakses Deployment hello-minikube, bukalah dia sebagai sebuah Service:

    kubectl expose deployment hello-minikube --type=NodePort --port=8080
    

    Opsi --type=NodePort menentukan tipe Service.

    Keluarannya menyerupai:

    service/hello-minikube exposed
    
  4. Pod hello-minikube saat ini telah dibuat namun kamu harus menunggu hingga Pod selesai dijalankan sebelum dapat mengaksesnya melalui Service yang telah dibuka.

    Cek apakah Pod sudah berjalan dan beroperasi:

    kubectl get pod
    

    Jika keluaran menampilkan STATUS sebagai ContainerCreating, maka Pod sedang dalam proses pembuatan:

    NAME                              READY     STATUS              RESTARTS   AGE
    hello-minikube-3383150820-vctvh   0/1       ContainerCreating   0          3s
    

    Jika keluaran menampilkan STATUS sebagai Running, maka Pod sudah berjalan dan beroperasi:

    NAME                              READY     STATUS    RESTARTS   AGE
    hello-minikube-3383150820-vctvh   1/1       Running   0          13s
    
  5. Ambil URL Service yang telah dibuka untuk melihat Service secara detail:

    minikube service hello-minikube --url
    
  6. Untuk melihat detail dari klaster lokal kamu, salin dan tempel URL yang kamu dapatkan dari keluaran pada peramban kamu.

    Keluarannya menyerupai:

    Hostname: hello-minikube-7c77b68cff-8wdzq
    
    Pod Information:
     -no pod information available-
    
    Server values:
     server_version=nginx: 1.13.3 - lua: 10008
    
    Request Information:
     client_address=172.17.0.1
     method=GET
     real path=/
     query=
     request_version=1.1
     request_scheme=http
     request_uri=http://192.168.99.100:8080/
    
    Request Headers:
         accept=*/*
         host=192.168.99.100:30674
         user-agent=curl/7.47.0
    
    Request Body:
         -no body in request-
    

    Jika kamu tidak lagi membutuhkan Service dan klaster, maka kamu bisa menghapusnya.

  7. Hapuslah Service hello-minikube:

    kubectl delete services hello-minikube
    

    Keluarannya menyerupai:

    service "hello-minikube" deleted
    
  8. Hapuslah Deployment hello-minikube:

    kubectl delete deployment hello-minikube
    

    Keluarannya menyerupai:

    deployment.extensions "hello-minikube" deleted
    
  9. Hentikanlah klaster Minikube lokal:

    minikube stop
    

    Keluarannya menyerupai:

    Stopping "minikube"...
    "minikube" stopped.
    

    Untuk informasi lebih lanjut, lihatlah Menghentikan Klaster.

  10. Hapuslah klaster Minikube lokal

    minikube delete
    

    Keluarannya menyerupai:

    Deleting "minikube" ...
    The "minikube" cluster has been deleted.
    

    Untuk informasi lebih lanjut, lihat Menghapus Klaster.

Mengelola Klaster

Memulai Klaster

Perintah minikube start bisa digunakan untuk memulai klaster kamu. Perintah ini membuat dan mengonfigurasi sebuah mesin virtual yang menjalankan klaster Kubernetes dengan satu Node. Perintah ini juga mengonfigurasi instalasi kubectl untuk berkomunikasi dengan klaster ini.

Catatan:

Jika kamu menggunakan proksi web, maka kamu harus meneruskan informasi berikut ini ke perintah minikube start:

https_proxy=<my proxy> minikube start --docker-env http_proxy=<my proxy> --docker-env https_proxy=<my proxy> --docker-env no_proxy=192.168.99.0/24

Sayangnya, pengaturan dengan environment variable saja tidak berguna.

Minikube juga membuat konteks "minikube", dan menetapkannya sebagai bawaan di kubectl. Untuk kembali menggunakan konteks ini, jalankan perintah: kubectl config use-context minikube.

Menentukan Versi Kubernetes

Kamu bisa menentukan versi Kubernetes yang digunakan oleh Minikube dengan menambahkan --kubernetes-version ke perintah minikube start. Sebagai contoh, untuk menjalankan versi v1.19.0, kamu akan menjalankan perintah berikut:

minikube start --kubernetes-version v1.19.0

Menentukan driver VM

Kamu bisa mengubah driver VM dengan menambahkan tanda --driver=<masukan_nama_driver> pada minikube start. Sebagai contoh:

minikube start --driver=<nama_driver>

Minikube mendukung driver berikut ini:

Catatan: Lihat DRIVER untuk detail tentang driver yang didukung dan proses instalasi plugin.

Perhatian: Jika kamu menggunakan driver none, beberapa komponen Kubernetes dijalankan sebagai Container istimewa yang memiliki efek samping di luar lingkungan Minikube. Efek samping tersebut berarti bahwa driver none tidak direkomendasikan untuk komputer pribadi.

Memulai klaster pada runtime kontainer alternatif

Kamu bisa memulai Minikube pada runtime kontainer berikut.

Untuk menggunakan containerd sebagai runtime kontainer, jalankan:

minikube start \
    --network-plugin=cni \
    --enable-default-cni \
    --container-runtime=containerd \
    --bootstrapper=kubeadm

Atau kamu bisa menggunakan versi yang diperpanjang:

minikube start \
    --network-plugin=cni \
    --enable-default-cni \
    --extra-config=kubelet.container-runtime=remote \
    --extra-config=kubelet.container-runtime-endpoint=unix:///run/containerd/containerd.sock \
    --extra-config=kubelet.image-service-endpoint=unix:///run/containerd/containerd.sock \
    --bootstrapper=kubeadm

Untuk menggunakan CRI-O sebagain runtime kontainer, jalankan:

minikube start \
    --network-plugin=cni \
    --enable-default-cni \
    --container-runtime=cri-o \
    --bootstrapper=kubeadm

Atau kamu bisa menggunakan versi yang diperpanjang:

minikube start \
    --network-plugin=cni \
    --enable-default-cni \
    --extra-config=kubelet.container-runtime=remote \
    --extra-config=kubelet.container-runtime-endpoint=/var/run/crio.sock \
    --extra-config=kubelet.image-service-endpoint=/var/run/crio.sock \
    --bootstrapper=kubeadm

Menggunakan image lokal degan menggunakan kembali daemon Docker

Saat menggunakan sebuah VM untuk Kubernetes, akan lebih baik jika daemon Docker bawaan Minikube digunakan kembali. Menggunakan kembali daemon bawaan membuat kamu tidak perlu membangun registri Docker pada mesin hos kamu dan mengunggah image ke dalamnya. Namun, kamu dapat membangun di dalam daemon Docker yang sama dengan Minikube, yang tentunya dapat mempercepat percobaan lokal.

Catatan: Pastikan untuk memberi tag pada Docker image kamu dengan sesuatu selain latest dan gunakan tag tersebut untuk menarik image. Karena :latest adalah bawaan, dengan kebijakan penarikan image bawaan, yaitu Always, kesalahan penarikan image (ErrImagePull) akhirnya dapat terjadi jika kamu tidak memiliki image Docker di register Docker bawaan (biasanya DockerHub).

Untuk bekerja dengan daemon Docker pada mesin Mac/Linux, jalankan baris terakhir dari minikube docker-env.

Kamu sekarang dapat menggunakan Docker di terminal mesin Mac/Linux kamu untuk berkomunikasi dengan daemon Docker di dalam VM Minikube:

docker ps
Catatan:

Pada Centos 7, Docker bisa memberikan kesalahan berikut:

Could not read CA certificate "/etc/docker/ca.pem": open /etc/docker/ca.pem: no such file or directory

Kamu bisa memperbaikinya dengan memperbaharui /etc/sysconfig/docker untuk memastikan bahwa lingkungan Minikube dikenali:

< DOCKER_CERT_PATH=/etc/docker
---
> if [ -z "${DOCKER_CERT_PATH}" ]; then
>   DOCKER_CERT_PATH=/etc/docker
> fi

Mengonfigurasi Kubernetes

Minikube memiliki sebuah fitur "pengonfigurasi" yang memperbolehkan pengguna untuk mengkonfigurasi komponen Kubernetes dengan sembarang nilai. Untuk menggunakan fitur ini, kamu bisa menggunakan flag --extra-config pada perintah minikube start.

Flag ini berulang, jadi kamu bisa menggunakannya beberapa kali dengan beberapa nilai yang berbeda untuk mengatur beberapa opsi.

Flag ini menerima sebuah string dalam format component.key=value, di mana component adalah salah satu string dari list di bawah, key adalah nilai dari struct configurasi dan value adalah nilai yang digunakan.

Kunci yang valid bisa ditemukan dengan memeriksa dokumentasi componentconfigs Kubernetes untuk setiap komponen. Berikut adalah dokumentasi untuk setiap konfigurasi yang didukung:

Contoh

Untuk mengubah pengaturan MaxPods menjadi 5 pada Kubelet, gunakan flag ini: --extra-config=kubelet.MaxPods=5.

Fitur ini juga mendukung struct yang berulang. Untuk mengubah pengaturan LeaderElection.LeaderElect menjadi true pada penjadwal, gunakan flag: --extra-config=scheduler.LeaderElection.LeaderElect=true.

Untuk mengatur AuthorizationMode pada apiserver menjadi RBAC, kamu bisa menggunakan: --extra-config=apiserver.authorization-mode=RBAC.

Menghentikan klaster

Perintah minikube stop bisa digunakan untuk menghentikan klaster kamu. Perintah ini menghentikan mesin virtual Minikube, tapi mempertahankan semua status dan data klaster. Memulai klaster lagi akan mengembalikannya ke keadaan sebelumnya.

Menghapus klaster

Perintah minikube delete bisa digunakan untuk menghapus klaster kamu. Perintah ini menghentikan dan menghapus mesin virtual Minikube. Tidak ada data atau state yang dipertahankan.

Memperbaharui Minikube

Jika kamu menggunakan MacOS dan Brew Package Manager sudah terpasang, jalankan:

brew update
brew upgrade minikube

Interaksi dengan Klaster Kamu

Kubectl

Perintah minikube start membuat sebuah konteks kubectl yang disebut "minikube". Konteks ini menyimpan pengaturan untuk berkomunikasi dengan klaster Minikube kamu.

Minikube menetapkan konteks ini sebagai bawaan secara otomatis, tetapi jika kamu ingin mengubah kembali ke konteks tersebut di kemudian hari, gunakan:

kubectl config use-context minikube

Atau berikan konteks untuk setiap perintah seperti ini:

kubectl get pods --context=minikube

Dashboard

Untuk mengakses Kubernetes Dashboard, gunakan perintah ini pada terminal setelah memulai Minikube untuk mendapatkan alamatnya:

minikube dashboard

Service

Untuk mengakses Service yang dibuka via NodePort, jalankan perintah ini pada terminal setelah memulai Minikube untuk mendapatkan alamat:

minikube service [-n NAMESPACE] [--url] NAME

Jaringan

Mesin virtual Minikube dibuka ke sistem hos melalui alamat IP host-only , yang bisa didapatkan dengan perintah minikube ip. Seluruh Service dengan jenis NodePort bisa diakses melalui alamat IP pada NodePort.

Untuk mementukan NodePort pada Service kamu, kamu bisa menggunakan perintah kubectl sebagai berikut:

kubectl get service $SERVICE --output='jsonpath="{.spec.ports[0].nodePort}"'

PersistentVolume

Minikube mendukung PersistentVolume dengan jenis hostPath. PersistenVolume ini dipetakan ke direktori di dalam mesin virtual Minikube.

Mesin virtual Minikube melakukan booting ke tmpfs, sehingga sebagian besar direktori tidak akan bertahan setelah di reboot (minikube stop).

Namun, Minikube diatur untuk mempertahankan berkas yang tersimpan didalam direktori hos berikut:

  • /data
  • /var/lib/minikube
  • /var/lib/docker

Ini adalah contoh pengaturan PersistentVolume untuk mempertahankan data di dalam direktori /data:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 5Gi
  hostPath:
    path: /data/pv0001/

Folder hos yang di mount

Beberapa driver akan memasang folder hos dalam VM sehingga kamu dapat dengan mudah berbagi berkas antara VM dan hos. Saat ini, hal tersebut tidak dapat dikonfigurasi dan berbeda untuk setiap driver dan sistem operasi yang kamu gunakan.

Catatan: Berbagi folder hos belum diimplementasikan pada driver KVM.
DriverOSHostFolderVM
VirtualBoxLinux/home/hosthome
VirtualBoxmacOS/Users/Users
VirtualBoxWindowsC://Users/c/Users
VMware FusionmacOS/Users/mnt/hgfs/Users
XhyvemacOS/Users/Users

Registri Container Pribadi

Untuk mengakses registri Container pribadi, ikuti langkah berikut pada halaman ini.

Kami merekomendasi penggunaan ImagePullSecrets, tetapi jika kamu ingin mengonfigurasi akses pada virtual mesin Minikube, kamu bisa menempatkan .dockercfg pada direktori /home/docker atau config.json dalam direktori /home/docker/.docker.

Tambahan (Add-on)

Supaya Minikube memulai atau memulai kembali kustom tambahan dengan benar, tempatkan tambahan yang ingin kamu jalankan di dalam direktori ~/.minikube/addons. Tambahan dalam folder akan dipindahkan ke virtual mesin Minikube dan dijalankan setiap kali Minikube dimulai atau dimulai ulang.

Menggunakan Minikube dengan Proksi HTTP

Minikube membuat sebuah mesin virtual yang memasukkan Kubernetes dan daemon Docker. Ketika Kubernetes berusaha untuk menjadwalkan Container dengan Docker, daemon Docker mungkin membutuhkan akses jaringan eksternal untuk menarik Container.

Jika kamu berada di belakang proxy HTTP, kamu mungkin perlu menyediakan Docker dengan pengaturan proksi. Untuk melakukan ini, berikan environment variable yang dibutuhkan sebagai flag pada saat minikube start.

Contoh:

minikube start --docker-env http_proxy=http://$YOURPROXY:PORT \
                 --docker-env https_proxy=https://$YOURPROXY:PORT

Jika alamat mesin virtual kamu adalah 192.168.99.100, maka ada kemungkinan pengaturan proksi kamu akan mencegah kubectl untuk mencapainya. Untuk melewatkan konfigurasi proxy untuk alamat IP ini, kamu harus memodifikasi pengaturan _no_proxy` kamu. Kamu bisa melakukannya dengan:

export no_proxy=$no_proxy,$(minikube ip)

Masalah yang Diketahui

Fitur yang memerlukan banyak Node tidak akan berfungsi dalam Minikube.

Desain

Minikube menggunakan libmachine untuk menyediakan mesin virtual, dan kubeadm untuk menyediakan klaster Kubernetes.

Untuk info lebih lanjut tentang Minikube, lihat proposal.

Tautan Tambahan

  • Tujuan and Non-Tujuan: Untuk tujuan dan non-tujuan dari projek Minikube, lihat roadmap.
  • Petunjuk Pengembangan: Lihat Berkontribusi untuk ikhtisar bagaimana cara mengirimkan pull request.
  • Membangun Minikube: Untuk instruksi bagaimana membangun atau mengetes Minikube dari sumber kode, lihat petunjuk membangun.
  • Menambahkan Dependensi Baru: Untuk instruksi bagaimana menambahkan dependensi baru ke Minikube, lihat petunjuk penambahan dependensi.
  • Menambahkan Addon Baru: Untuk instruksi bagaimana menambahkan tambahan baru untuk Minikube, lihat petunjuk menambahkan addon baru.
  • MicroK8s: Pengguna Linux yang ingin menghindari penggunaan mesin virtual, bisa mempertimbangkan MicroK8s sebagai alternatif.

Komunitas

Kontribusi, pertanyaan, dan komentar sangat diharapkan! Pengembang Minikube berkumpul dalam Slack di channel #minikube (dapatkan undangan di sini). Kami juga memiliki milis kubernetes-dev Google Groups. Jika kamu memposting sesuatu, awali subjek kamu dengan "minikube: ".

Last modified October 01, 2020 at 6:31 PM PST: Translate Minikube page to Bahasa Indonesia (70ffafaae)