บันทึกการใช้งาน Kubenetes บน Google Cloud

By KDBEER | Last updated Nov 23, 2020
การสร้าง-Cluser-บน-Google-Cloud-5fa803fef51d7fc104848fa1

Google Cloud Platform Command

คำสั่งการสร้าง Cluster

# export Cluster
export GCP_CLUSTER_NAME=starship-troopers
gcloud container clusters create ${GCP_CLUSTER_NAME} --num-nodes 3 --zone asia-southeast1-a

Nodes

Node คือสิ่งที่ cluster จะสร้างขึ้นมา เป็น vm เล็กๆ ที่จะเอาไว้รัน docker container หรือที่เรียกกันว่า pods การสร้าง node กำหนดได้ตั้งแต่ สร้าง cluster เลย หรือจะเอาไว้ปรับแต่ทีหลังก็ได้

Pods

Pods เป็นหน่วยที่เล็กที่สุดของ k8s เป็น docker container ที่จะถูกรันอยู่บน node หนึ่งโหนดสามารถมีหลาย pods ได้ แต่ส่วนมากนิยมแค่ pod เดียวเท่านั้น 

# การดูว่า มี pod อะไรรันอยู่บ้าง
kubectl get pod

** Note => บน GCP นั้น pod สามารถต่อไปหา vm ด้วย public ip ได้ด้วยนะ

==> ตัวอย่าง Pod Deployment Configuration File

Deployments

Deployment คือตัวที่คอยควบคุมการมีอยู่ของ node และ pod ซึ่งอ้างอิงจาก Kubernetes Deployment configuration เมื่อ configuration file ถูก apply Kubernetes master จะเอา docker image ไปดีพลอยให้ และจะคอยดูให้ว่ามี node ไหนตาย หรือว่าถูก delete ไปหรือไม่ ถ้า node ในระบบ ไม่ตรงตาม configuration file มีก็จะทำการสร้างขึ้นมาใหม่ หรือลบส่วนที่เกินทิ้งไป

# การสั่ง deploy ผ่าน kubenetes deployment
kubectl apply -f <configuration file>

# การดู deployment
kubectl get deplyment

==> ตัวอย่าง Deployment Configuration File

Service อ่านเพิ่มเติม

Service ก็คือกลุ่มของ pods นั่นเอง ซึ่งเราต้องจำไว้ว่าแต่ละ pod ที่เราสร้างขึ้นมา แม้จะมี ip แต่มันคุยกันเองไม่ได้ ซึ่งจริงๆ แล้วไม่ควรคุย เพราะว่า  pod มันถูกลบได้ตลอดเวลาครับ ดังนั้นการที่เราคุยกับ pod ผ่าน IP ก็ไม่น่าจะเวิร์ก เพราะว่า IP เองก็ต้องเปลี่ยนเหมือนกัน ดังนั้น วิธีแก้ ก็คือการใช้ Service ครับ

ตัวอย่าง Service Configuration File

สมมติเรามีงานที่เป็น fronted อยากจะคุยกับ backend ในเมื่อไม่สามารถคุยกันผ่าน IP ตรงๆ ได้ จึงจะต้องสร้าง Service ขึ้นมา 2 ตัวครับ 

เมื่อสร้าง Service ถูกสร้างขึ้นมา Kuberbetes Master จะให้ IP กับแต่ละ Service เพื่อให้ข้างนอกสามารถ Access เข้ามายังแต่ละ service ได้ครับ ซึ่ง IP ตรงนี้จะเรียกว่า "CLUSTER IP" ครับ แบ่งเป็น internal ip ซึ่ง service เอาไว้คุยกันเอง และ external ip ที่ให้ข้างนอก access เข้ามาได้

แต่ถึงแม้จะมี IP เป็นของตัวเองก็ตาม Cluster ก็ไม่ควรคุยกันเองผ่าน IP ครับ เพราะอย่างที่บอก ว่า IP มันเปลี่ยนกันได้ เราสามารถแทน IP ด้วย service_name ตรงๆ เลยครับ แล้วจากนั้น Kuberbetes Master จะรู้เองครับว่าแต่ละ service ใช้ IP อะไรกันบ้าง

# การสั่ง deploy service
kubectl apply -f <configuration file>

# การดู deployment
kubectl get service

Service มี 2 แบบ คือ 

  • LoadBalancer จะสร้าง Public IP ให้ข้างนอกต่อเข้ามาได้
  • ClusterIP จะสร้างแค่ ClusterIP เท่านั้น
  • Ingress คล้ายๆ กับ LoadBalancer แต่จะแชร์ร่วมกัน เพื่อให้ cluster สามารถใช้งานได้หลายๆ เว็บไวต์ได้

 

คำสั่ง Utils

การ execute เข้าไปใน pod

kubectl exec -it <pod_name> -c <container_name> sh

การลบ Cluster

gcloud container clusters delete ${GCP_CLUSTER_NAME} --zone asia-southeast1-a

 

Reference

https://kubernetes.io/docs/home/

https://github.com/winggundamth/gdg-demo