Kubernetest
ประเภท Nodes
- Worker Node : ทำหน้าที่ run application ซึ่ง Application ที่ Run บน Nodes จะทำงานอยู่ในรูปแบบของ “Container” Worker Nodes สามารถมีได้หลายเครื่อง เพื่อช่วยกัน แบ่งเบาภาระการทำงาน เมื่อนำหลาย ๆ เครื่องมาจัดกลุ่มรวมกัน จะเรียกว่า “Cluster”
- Master Node : ทำหน้าที่คอยควบคุมดูแล Cluster หรือ Worker Nodes ให้ทำงานตามที่ผู้ดูแลระบบสั่งการ Master Nodes อาจมีหลายเครื่องเพื่อช่วยกันดูแล Cluster
Application / Kind / Resources
-
Pod : คือ Application / Kind / Resources หน่วย (Unit) ที่เล็กที่สุดของ Kubernetes 1 Pod สามารถมีได้ 1 หรือมากกว่า 1 Container แต่ส่วนใหญ่มักที่จะเป็น 1 Container ReplicaSet คือ ตัวคอยควบคุมจำนวนของ Pods ให้เป็นไปตามที่ได้ตั้งค่าไว้
-
Deployment : Deployment = Pods + ReplicaSet เป็น Description / Definition file ที่เอาไว้อธิบายรายละเอียดของ Pods + ReplicaSet ว่าการ Run Application นี้ ให้สร้าง Pods ขึ้นมาจาก Docker Image ใดและให้มี Replicas (หรือ จำนวนของ Pods) เป็นเท่าใดใน Cluster
-
Labels : เป็นสิ่งที่เอาไว้แปะใส่ Application/Kind/Resources แต่ละประเภท เพื่อใช้สำหรับอธิบายหรือเอาไว้ค้นหา (Search) หรือเอาไว้เลือก (Select) Object ของ Kind ต่าง ๆ จาก Labels ที่แปะ (กำหนด) ไว้
-
Services : Services = Pods Load Balancer + etc. หน้าที่หลัก ๆ ของ Services คือ ทำหน้าที่กระจาย Load ไปยัง Pods ที่ตัวเองดูแลอยู่โดยดูจาก Pods ที่มี Label ตรงตามที่กำหนดไว้ รวมถึงทำหน้าที่ Abstract ปลายทางที่ Service นั้นกำลังเชื่อมต่อด้วย
การทำงานภายใน Kubernetes จะไม่ทำการเชื่อมต่อไปที่ Pods ตรง ๆ แต่จะเชื่อมต่อไปที่ Services แทน
Service Types
-
ClusterIP : เป็น Services ที่เอาไว้ Expose เพื่อใช้งานกันเฉพาะภายใน Cluster เท่านั ้น ภายนอกไม่สามารถเข้าถึง Service Type นี้ได้ เช่น การใช้งาน Database หรือ Service ภายในที่ไม่ต้องการให้ข้างนอกเข้าถึง Service นั้น ๆ
-
NodePort : เป็นการทำให้ Service ภายใน Cluster ของเราสามารถ Expose ออกไปข้างนอก Cluster ได้ ผ่าน Port ของ Node ทำให้ภายนอกสามารถเข้าถึง Service ของเราได้
หมายเหตุ Port ที่สามารถกำหนดได้ของ Service Type : NodePort คือ 30,000–32,767
-
LoadBalancer : เป็นการทำให้ Service ภายใน Cluster ของเราสามารถ Expose ออกไปข้างนอกได้ แบบ NodePort แต่ Expose ผ่าน Load Balancer ของ Cloud Provider ทำให้ภายนอกสามารถเข้าถึง Service ของเราได้
Service Type นี้ใช้ได้เฉพาะ Kubernetes Service บน Cloud เท่านั้น
-
ExternalName : เป็นการทำให้ Application ของเรา (Pods) สามารถเข้าถึง External Service ภายนอก Cluster ได้ด้วยการ Mapping External Service ให้เป็น Kubernetes Service
Endpoints
- เป็นการทำให้ Application ของเรา (Pods) สามารถเข้าถึง External Service ภายนอก Cluster ได้ด้วยการชี้ Service ไปที่ Endpoints ของ External Service
Ingress
- Ingress = Reverse Proxy
- Ingress Controller
- Nginx Ingress Controller
- HAProxy Ingress
- Kong Ingress Controller
- AWS ALB Ingress Controller
- AKS Application Gateway Ingress Controller
- etc.
Namespace
- เป็นการจัดกลุ่มของ Resources ต่าง ๆ เช่น Pods, ReplicaSet,Deployment, Services, Ingress, etc. ให้อยู่ในกลุ่ม (Namespace) เดียวกัน
ConfigMap
- เป็นการกำหนด Configuration ที่เราต้องการ ให้อยู่ในรูปแบบของ Configuration บน Kebernetes เพื่อให้ Resources ต่าง ๆ สามารถอ่านค่า Configuration นี้ไปใช้ได้
Secret
- เป็นการจัดเก็บ Configuration แบบที่ต้องการเก็บเป็นความลับ ที่เราต้องการ ให้อยู่ในรูปแบบของ Secret บน Kebernetes เพื่อให้ Resources ต่าง ๆ สามารถอ่านค่า Secret นี้ไปใช้ได้ เช่น Username/Password หรือ Token ที่ใช้ในการเข้าถึง External Resources ต่าง ๆ
kubectl
create
- kubectl create -f <file.yml>
kubectl create -f hello.ymldelete
- kubectl delete -f <file.yml>
get
- kubectl get pods