Kubernetes คืออะไร — อธิบายแบบไม่อ้อมค้อม
ลองนึกภาพ: คุณมี Docker containers 50 ตัว รันบน server 5 เครื่อง ถ้า server 1 เครื่องล่ม ใครจะย้าย containers ไปเครื่องอื่น? ถ้าต้อง scale จาก 50 เป็น 200 containers ตอนช่วง peak ใครจะจัดการ?
คำตอบคือ Kubernetes (K8s) มันคือ "ผู้จัดการ" ที่ดูแล containers ทั้งหมดให้อัตโนมัติ
ผมเริ่มใช้ K8s ตั้งแต่ปี 2020 ตอนนั้น migrate ระบบ e-commerce ของลูกค้าจาก Docker Compose มา K8s downtime ลดจากเดือนละ 2-3 ชั่วโมง เหลือเดือนละไม่ถึง 5 นาที
Concept หลักที่ต้องรู้
| Concept | คือ | เปรียบเทียบ |
|---|---|---|
| Pod | หน่วยเล็กสุด ห่อ 1+ containers | เหมือน 1 ห้องในตึก |
| Deployment | บอก K8s ว่าจะรัน Pod กี่ตัว | เหมือนผู้จัดการตึก |
| Service | เปิดทาง network เข้า Pods | เหมือนประตูทางเข้าตึก |
| Node | เครื่อง server จริง | เหมือนตึก 1 หลัง |
| Cluster | กลุ่ม Nodes ทั้งหมด | เหมือนนิคมอุตสาหกรรม |
ติดตั้ง Minikube เพื่อทดลอง
ก่อนไปลง cluster จริง ลอง Minikube ก่อน — รัน K8s บนเครื่องเดียว
# ติดตั้ง kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# ติดตั้ง Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# เริ่ม cluster
minikube start --driver=docker
# เช็คว่าทำงาน
kubectl get nodes
Deploy app แรกบน K8s
# สร้างไฟล์ deployment.yaml
cat > deployment.yaml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-app
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
selector:
app: nginx
ports:
- port: 80
targetPort: 80
nodePort: 30080
EOF
# Apply
kubectl apply -f deployment.yaml
# ดูสถานะ
kubectl get pods
kubectl get services
แค่นี้คุณมี Nginx 3 replicas ที่ K8s จัดการให้ ถ้า pod ไหนตาย K8s จะสร้างใหม่อัตโนมัติ
คำสั่ง kubectl ที่ใช้ทุกวัน
| คำสั่ง | ทำอะไร |
|---|---|
kubectl get pods | ดู pods ที่รัน |
kubectl get svc | ดู services |
kubectl describe pod <name> | ดูรายละเอียด pod |
kubectl logs <pod> | ดู log |
kubectl scale deployment <name> --replicas=5 | Scale เพิ่ม/ลด |
kubectl rollout restart deployment <name> | Restart ทั้ง deployment |
เมื่อไหร่ควรใช้ K8s เมื่อไหร่แค่ Docker Compose พอ
- Docker Compose → app เล็ก, server เดียว, ทีม 1-3 คน
- Kubernetes → app ใหญ่, หลาย server, ต้อง auto-scale, ต้อง zero-downtime
ผมมีลูกค้าหลายรายที่เริ่มจาก Docker Compose พอ traffic เพิ่มจาก 1,000 เป็น 50,000 users/day จึงค่อย migrate มา K8s ไม่ต้องรีบ
FAQ
Q: K8s ยากไหม?
ตอนเริ่มใหม่ ยากครับ แต่ถ้าเข้าใจ Pod, Deployment, Service 3 ตัวนี้ก่อน ที่เหลือค่อยเรียนรู้เพิ่ม ผมใช้เวลาเรียนรู้จริงจังประมาณ 2 เดือน
Q: ใช้ managed K8s (EKS, GKE) ดีกว่าตั้งเองไหม?
ถ้ามีงบ ใช้ managed ดีกว่ามาก ไม่ต้องดูแล control plane เอง GKE ของ Google ง่ายที่สุดสำหรับมือใหม่
Q: K8s กับ Docker Swarm ต่างกันยังไง?
Swarm ง่ายกว่าแต่ feature น้อยกว่า K8s เป็นมาตรฐานอุตสาหกรรม หางานง่ายกว่า community ใหญ่กว่า
สำหรับผู้ที่สนใจเรื่องการเงินและการลงทุน ศึกษาเพิ่มได้ที่ iCafeForex.com