Halo Minikube
Tutorial ini menunjukkan bagaimana caranya menjalankan aplikasi sederhana Node.js Halo Dunia di Kubernetes, dengan minikube
dan Katacoda.
Katacoda menyediakan environment Kubernetes secara gratis di dalam browser.
Catatan: Kamupun bisa mengikuti tutorial ini kalau sudah instalasi minikube di lokal. Silakan lihat memulaiminikube
untuk instruksi instalasi.
Tujuan
- Deploy aplikasi halo dunia pada minikube.
- Jalankan aplikasinya.
- Melihat log aplikasi.
Sebelum kamu memulai
Tutorial ini menyediakan image Kontainer yang dibuat melalui barisan kode berikut:
var http = require('http');
var handleRequest = function(request, response) {
console.log('Received request for URL: ' + request.url);
response.writeHead(200);
response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8080);
FROM node:6.14.2
EXPOSE 8080
COPY server.js .
CMD node server.js
Untuk info lebih lanjut tentang perintah docker build
, baca dokumentasi Docker.
Membuat sebuah klaster Minikube
-
Tekan Launch Terminal
Catatan: Kalau kamu memilih instalasi minikube secara lokal, jalankanminikube start
. -
Buka dasbor Kubernetes di dalam browser:
minikube dashboard
-
Hanya untuk environment Katacoda: Di layar terminal paling atas, tekan tombol plus, lalu lanjut tekan Select port to view on Host 1.
-
Hanya untuk environment Katacoda: Ketik
30000
, lalu lanjut tekan Display Port.
Membuat sebuah Deployment
Sebuah Kubernetes Pod adalah kumpulan dari satu atau banyak Kontainer, saling terhubung untuk kebutuhan administrasi dan jaringan. Pod dalam tutorial ini hanya punya satu Kontainer. Sebuah Kubernetes Deployment selalu memeriksa kesehatan Pod kamu dan melakukan restart saat Kontainer di dalam Pod tersebut mati. Deployment adalah cara jitu untuk membuat dan mereplikasi Pod.
-
Gunakan perintah
kubectl create
untuk membuat Deployment yang dapat mengatur Pod. Pod menjalankan Kontainer sesuai dengan image Docker yang telah diberikan.kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
-
Lihat Deployment:
kubectl get deployments
Keluaran:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-node 1 1 1 1 1m
-
Lihat Pod:
kubectl get pods
Keluaran:
NAME READY STATUS RESTARTS AGE hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
-
Lihat event klaster:
kubectl get events
-
Lihat konfigurasi
kubectl
:kubectl config view
Catatan: Untuk info lebih lanjut tentang perintahkubectl
, lihat ringkasan kubectl.
Membuat sebuah Servis
Secara default, Pod hanya bisa diakses melalui alamat IP internal di dalam klaster Kubernetes.
Supaya Kontainer hello-node
bisa diakses dari luar jaringan virtual Kubernetes, kamu harus ekspos Pod sebagai Servis Kubernetes.
-
Ekspos Pod pada internet publik menggunakan perintah
kubectl expose
:kubectl expose deployment hello-node --type=LoadBalancer --port=8080
Tanda
--type=LoadBalancer
menunjukkan bahwa kamu ingin ekspos Servis keluar dari klaster. -
Lihat Servis yang baru kamu buat:
kubectl get services
Keluaran:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
Untuk penyedia cloud yang memiliki load balancer, sebuah alamat IP eksternal akan disediakan untuk mengakses Servis tersebut. Pada minikube, tipe
LoadBalancer
membuat Servis tersebut dapat diakses melalui perintahminikube service
. -
Jalankan perintah berikut:
minikube service hello-node
-
Hanya untuk environment Katacoda: Tekan tombol plus, lalu lanjut tekan Select port to view on Host 1.
-
Hanya untuk environment Katacoda: Ketik
30369
(lihat port di samping8080
pada keluaran servis), lalu lanjut tekanIni akan membuka jendela browser yang menjalankan aplikasimu dan memperlihatkan pesan "Halo Dunia".
Aktifkan addons
Perangkat minikube meliputi sekumpulan addons bawaan yang bisa diaktifkan, dinonaktifkan, maupun dibuka di dalam environment Kubernetes lokal.
-
Daftar addons yang ada saat ini:
minikube addons list
Keluaran:
addon-manager: enabled coredns: disabled dashboard: enabled default-storageclass: enabled efk: disabled freshpod: disabled heapster: disabled ingress: disabled kube-dns: enabled metrics-server: disabled nvidia-driver-installer: disabled nvidia-gpu-device-plugin: disabled registry: disabled registry-creds: disabled storage-provisioner: enabled
-
Aktifkan sebuah addon, misalnya
heapster
:minikube addons enable heapster
Keluaran:
heapster was successfully enabled
-
Lihat Pod dan Servis yang baru saja kamu buat:
kubectl get pod,svc -n kube-system
Keluaran:
NAME READY STATUS RESTARTS AGE pod/heapster-9jttx 1/1 Running 0 26s pod/influxdb-grafana-b29w8 2/2 Running 0 26s pod/kube-addon-manager-minikube 1/1 Running 0 34m pod/kube-dns-6dcb57bcc8-gv7mw 3/3 Running 0 34m pod/kubernetes-dashboard-5498ccf677-cgspw 1/1 Running 0 34m pod/storage-provisioner 1/1 Running 0 34m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/heapster ClusterIP 10.96.241.45 <none> 80/TCP 26s service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m service/kubernetes-dashboard NodePort 10.109.29.1 <none> 80:30000/TCP 34m service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s
-
Non-aktifkan
heapster
:minikube addons disable heapster
Keluaran:
heapster was successfully disabled
Bersih-bersih
Sekarang, mari kita bersihkan semua resource yang kamu buat di klaster:
kubectl delete service hello-node
kubectl delete deployment hello-node
Kamu juga boleh mematikan mesin virtual atau virtual machine (VM) untuk minikube:
minikube stop
Kamu juga boleh menghapus minikube VM:
minikube delete
Selanjutnya
- Pelajari lebih lanjut tentang Deployment.
- Pelajari lebih lanjut tentang Deploy aplikasi.
- Pelajari lebih lanjut tentang Servis.