ลองเล่น Kubernetes แบบ localhost ด้วย Minikube
Minikube คืออะไร
Minikube คือ tools ที่ใช้จำลองสร้าง cluster สำหรับ Kubernetes ภายในเครื่อง โดย cluster ที่ถูกสร้างมานี้จะมีเพียงแค่ node เดียวเท่านั้น โดย Minikube รองรับทั้ง Linux, macOS และ Windows
และในวันนี้เราจะมาสอนวิธีใช้งานผ่าน macOS กัน สำหรับระบบปฏิบัติการอื่น ๆ สามารถเข้าไปอ่านในเว็ปของ Minikube ได้เช่นกัน
ติดตั้ง package ที่สำคัญ
Kubectl
kubectl คือ ชุดคำสั่งสำหรับจัดการ Kubernetes
ติดตั้งด้วยคำสั่ง
brew install kubernetes-cli
ทดสอบว่าติดตั้งเสร็จเรียบร้อยด้วยคำสั่ง
kubectl version --client
Hyperkit
Hyperkit คือ VM ตัวหนึ่ง ที่เอาไว้สำหรับรัน Minikube
ติดตั้งด้วยคำสั่ง
brew install hyperkit
ทดสอบว่าติดตั้งเสร็จเรียบร้อยด้วยคำสั่ง
hyperkit -v
Minikube
ติดตั้งด้วยคำสั่ง
brew install minikube
(หากยังไม่ได้ติดตั้ง kubectl จะถูกติดตั้งให้อัตโนมัติ)
ทดสอบว่าติดตั้งเสร็จเรียบร้อยด้วยคำสั่ง
minikube version
สร้าง Kubernetes cluster ด้วยคำสั่ง
minikube start
ตรวจสอบว่าทำงานได้เรียบร้อยด้วยคำสั่ง
minikube status
Deploy application ผ่าน YAML file
สร้าง deployment
ทำการสร้างไฟล์ deployment.yaml ขึ้นมา
- metadata.name คือชื่อสำหรับ deployment
- spec.selector.matchLabels คือ label ที่ใช้บอกว่า pods ไหนจะอยู่ใน deployment นี้บ้าง
- spec.replicas คือจำนวน pods ที่จะถูกสร้าง
- spec.template คือคุณสมบัติของ pods ที่จะถูก deployment นี้สร้าง
สั่ง deploy ด้วยคำสั่ง
$ kubectl apply -f deployment.yamldeployment.apps/hello-minikube created
เรียกดูการ deploy ด้วยคำสั่งตามนี้ โดยผลลัพธ์จะแสดงตามสิ่งที่คาดหวังที่เขียนไว้ในไฟล์ deployment.yaml
$ kubectl get deploymentNAME READY UP-TO-DATE AVAILABLE AGE
hello-minikube 2/2 2 2 2m50s
สร้าง Service เพื่อการเข้าถึง application
เพิ่ม service เข้าไปที่ไฟล์ deployment.yaml
apiVersion: v1
kind: Service
metadata:
name: hello-minikube
spec:
type: LoadBalancer
selector:
app: hello-minikube
ports:
- protocol: TCP
port: 8080
targetPort: 8080
จะได้ไฟล์ deployment.yaml ดังนี้
สั่ง deploy ด้วยคำสั่ง
$ kubectl apply -f deployment.yamlservice/hello-minikube created
deployment.apps/hello-minikube unchanged
เรียกดู service ด้วยคำสั่งตามนี้ โดยผลลัพธ์จะแสดงให้เห็นตาม service ที่คาดหวังที่เขียนไว้ในไฟล์ deployment.yaml
$ kubectl get services
จะสังเกตเห็นว่า EXTERNAL-IP ที่ service ที่เราสร้างขึ้นมาแสดง <pending> นั่นหมายความว่า application ของเราพร้อมที่จะถูกเรียกใช้งานแล้ว
เรียกดู url สำหรับเข้าถึงด้วยคำสั่ง
$ minikube service hello-minikube — urlhttp://192.168.64.3:31963
เมื่อนำ url ที่ได้ เข้าผ่าน browser จะได้ผลลัพธ์ดังนี้
ผลลัพธ์แสดงให้เห็นว่า application ของเราทำงานถูกต้องแล้ว 🎉
ทดลอง scale application
แก้ไขไฟล์ deployment.yaml โดยเพิ่ม replicas เป็น 3
replicas: 3
จะได้ไฟล์ deployment.yaml ดังนี้
สั่งให้ update ด้วยคำสั่ง
$ kubectl apply -f deployment.yamlservice/hello-minikube unchanged
deployment.apps/hello-minikube configured
เรียกดูผลลัพธ์การ update ด้วยคำสั่งตามนี้ โดยผลลัพธ์จะแสดงให้เห็นว่า application ของเราได้รับการ scale เรียบร้อยแล้ว
$ kubectl get deploymentNAME READY UP-TO-DATE AVAILABLE AGE
hello-minikube 3/3 3 3 27m
Clean up
เมื่อทำการทดสอบเสร็จเรียบร้อยทุกอย่างแล้ว ให้ใช้ชุดคำสั่งดังนี้ เพื่อ clear การ deploy ที่เราทดสอบไป
$ kubectl delete deployment hello-minikube
$ kubectl delete service hello-minikube
$ minikube stop
$ minikube delete
เพียงเท่านี้ก็ถือว่าเราได้ทำการทดลองเป็นอันเสร็จสมบูรณ์แล้ว 🎉
และนี่ก็เป็นเพียงการใช้งาน Kubernetes แบบง่าย ๆ เท่านั้น ซึ่งยังมี feature อีกหลายอย่างของ Kubernetes ที่จะช่วยทำให้ application ของเรามีประสิทธิภาพมากยิ่งขึ้น โดยหากใครมีความสนใจ สามารถหาอ่านได้ที่ doc ของ Kubernetes เลยครับ
สำหรับวันนี้ต้องลาไปก่อน ไว้พบกันใหม่ สวัสดีครับ 👏