รู้จักกับ Kubernetes (K8s) เครื่องมือที่ DevOps พลาดไม่ได้
Kubernetes (K8s) เป็นเครื่องมือที่จะมาช่วยให้การมองโลกของ infrastructure เปลี่ยนไป จริง ๆ บางคนมองว่า Kubenetes เป็นการต่อยอดจาก Docker ต้องเป็น Docker ก่อนถึงจะเข้าใจ Kubenetes ได้ สำหรับคำตอบของคำถามนี้คงจะตอบได้ทั้ง ใช่ และ ไม่ใช่ ครับ
หากใครคุ้นเคยกับการมีแผนก Infrastructure (Operation) เตรียมของเตรียม Tools ให้ เช่น การติดตั้ง application server, การตั้งค่า load balance, การเปิด-ปิด port หรืออื่น ๆ สิ่งเหล่านี้จะมีการขยับเข้ามาใกล้ฝั่ง Developer มากขึ้น เพื่อใช้งานในลักษณะ Infrastructure-as-a-Code (IaaS) ซึ่งเป็นการรวมกันของฝั่ง Developer และ Operation หรือที่เรียกกันว่า DevOps นั่นเอง
Virtualization คงจะเป็นคำที่เหมาะสมสำหรับโครงสร้างแบบนี้ ซึ่งเราไม่ได้รู้จักกับมันเป็นครั้งแรก ไม่ว่าจะ Cloud ที่สามารถสร้างเลือกสร้างเครื่องเสมือน หรือ Docker ที่เป็น containerize platform อย่างชัดเจน ก็ล้วนแต่ไม่ใช่ physical hardware ทั้งสิ้น
มาลองใช้งานกันเลยดีกว่า
1. ติดตั้ง Kubenetes
สำหรับการทดสอบ ถ้าเราติดตั้ง Docker Desktop อยู่แล้ว เราสามารถเปิด Kubernetes เพื่อลองใช้งานได้ ส่วนการติดตั้งบนเครื่องจริงนั้น ลองดูที่ Kubernetes Doc.
image คือแม่แบบของการสร้าง container จริง ๆ แล้ว K8s รองรับ image หลายรูปแบบ เช่น containerd หรือ CRI-O แต่สำหรับวันนี้ เราสามารถใช้ docker image ได้
3. รู้จักไฟล์ yaml
การติดตั้ง resource ใด ๆ บน K8s เราจะใช้ไฟล์นามสกุล *.yml เป็นตัว setup
การใช้งานคือต้องใช้ command-line ดังนี้ ติดตั้ง
$ kubectl apply -f kube-starter.yml service/discov-svc created deployment.apps/discov-deploy created
ลบ
$ kubectl delete -f kube-starter.yml service "discov-svc" deleted deployment.apps "discov-deploy" deleted
K8s จะมีการเช็คเองว่า resource ที่เราเขียนใน yml มีการเปลี่ยนแปลงหรือไม่ ถ้ามีก็จะเป็นการ update resource นั้น ๆ ทันที โดยเราสามารถรวมหลาย ๆ resource ไว้ใน yml ไฟล์เดียวหรือแยกก็ได้ ขึ้นอยู่กับการใช้งาน ลองเบิ้ล apply ให้ดูตัวอย่าง
$ kubectl apply -f kube-starter.yml service/discov-svc created deployment.apps/discov-deploy created $ kubectl apply -f kube-starter.yml service/discov-svc unchanged deployment.apps/discov-deploy unchanged
4. ลองใช้คำสั่ง
ดูสถานะของ pod$ kubectl get pod NAME READY STATUS RESTARTS AGE discov-deploy-74f444bfc7-s876r 1/1 Running 0 59sดูสถานะของ service
$ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE discov-svc ClusterIP 10.96.73.23 <none> 8888/TCP 59sดูสถานะของ deployment
$ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE discov-deploy 1/1 1 1 59sดู log ของแอปฯ
$ kubectl logs pod_name -fshell เข้าไปภายใน container
$ kubectl exec -it pod_name shนอกจากนี้ยังมี resource อื่น ๆ ให้ใช้งานอีกมาก https://kubernetes.io/docs/home/ ซึ่งหากเข้าใจในเบื้องต้นแล้ว ก็จะสามารถต่อยอดได้หลากหลาย สะดวก และสามารถเก็บไว้ใช้หลาย ๆ งานด้วยครับ