← กลับดัชนีเทคโนโลยี

☸️ Kubernetes สำหรับคนทำเว็บ — จำเป็นมั้ย? แล้วเมื่อไหร่ควรใช้?

☸️ Kubernetes คืออะไร — ฉบับคนทำเว็บ

ถ้า Docker คือ 'บ้าน' ของแอปเรา — Kubernetes หรือ K8s คือ 'เมือง' ทั้งเมืองที่มีการจัดการสาธารณูปโภค มีการกระจายผู้คน (traffic), มีการซ่อมแซมอาคารที่พัง (self-healing), มีการขยายตึกเมื่อคนเยอะขึ้น (auto-scaling), และมีการอัพเกรดอาคารโดยไม่ต้องปิดเมือง (rolling update)

Kubernetes เป็น open-source platform สำหรับ orchestrate container workloads — จัดการ container เป็นร้อยๆ ตัว ในหลายๆ server (node) โดยทำงานเป็น cluster เดียวกัน มี Google เป็นผู้สร้าง (ตอนนี้อยู่ภายใต้ CNCF)

แต่อย่าเพิ่งตื่นเต้นไป — K8s ไม่ใช่คำตอบของทุกปัญหา และไม่เหมาะกับทุกคน บทความนี้จะช่วยคุณตัดสินใจ

🏛️ สถาปัตยกรรม K8s — คร่าวๆ พอเข้าใจ

Kubernetes มีส่วนประกอบหลักๆ ดังนี้:

🧠 Control Plane (ฝั่งบริหาร):

  • API Server (kube-apiserver): จุดศูนย์กลาง — ทุกคำสั่งผ่าน API server หมด
  • Scheduler (kube-scheduler): กำหนดว่า container (pod) ควรไปรันที่ node ไหน
  • Controller Manager: ดูแลให้ cluster อยู่ในสถานะที่ต้องการ
  • etcd: ฐานข้อมูลของ cluster (เก็บ config, state ทั้งหมด)

⚙️ Worker Nodes (ฝั่งทำงาน):

  • Kubelet: ตัวแทนของ control plane บนแต่ละ node — ดูแล pods
  • Kube Proxy: จัดการ network rules, load balancing ภายใน
  • Container Runtime: ตัวรัน container (Docker, containerd, CRI-O)
  • Pods: หน่วยที่เล็กที่สุดใน K8s — 1 pod = 1+ containers ที่ทำงานร่วมกัน
┌─────────────────────────────────────────────────────────────┐
│                     ☸️ K8s Cluster                          │
│                                                             │
│  ┌──────────────────────────────────────┐                   │
│  │        🧠 Control Plane (Master)      │                   │
│  │  ┌──────┐ ┌──────────┐ ┌──────────┐  │                   │
│  │  │ API  │ │Scheduler │ │Controller│  │                   │
│  │  │Server│ │          │ │ Manager  │  │                   │
│  │  └──┬───┘ └──────────┘ └──────────┘  │                   │
│  │     │      ┌──────┐                  │                   │
│  │     └──────│ etcd │                  │                   │
│  │            └──────┘                  │                   │
│  └──────────────────────────────────────┘                   │
│                                                             │
│  ┌────────────────────────┐  ┌────────────────────────┐     │
│  │   ⚙️ Worker Node 1      │  │   ⚙️ Worker Node 2      │     │
│  │  ┌─────┐ ┌─────┐       │  │  ┌─────┐ ┌─────┐       │     │
│  │  │Pod A│ │Pod B│  ...  │  │  │Pod C│ │Pod D│  ...  │     │
│  │  └─────┘ └─────┘       │  │  └─────┘ └─────┘       │     │
│  │  Kubelet ─── Kube-Proxy│  │  Kubelet ─── Kube-Proxy│     │
│  └────────────────────────┘  └────────────────────────┘     │
│                                                             │
│  🌐 Service (Internal LB)  ───  Ingress (External LB)       │
└─────────────────────────────────────────────────────────────┘

🔵 devbot: ฟังดู cool ใช่ไหมครับ? — แต่ K8s เนี่ยสำหรับผมมัน 'overkill' สำหรับโปรเจคเล็กๆ นะ — เหมือนเราใช้รถบรรทุก 18 ล้อไปส่งของแค่ 2-3 ชิ้น — มันก็ไปได้นะ แต่ค่าน้ำมัน ค่าบำรุงรักษา ค่าที่จอดรถ แพงกว่าประโยชน์ที่ได้รับหลายเท่า

⚡ dev: ถูกต้องครับ devbot — K8s มี 'cognitive overhead' สูงมากสำหรับ developer ทั่วไป การจะ deploy แอป PHP ธรรมดาๆ สักตัวบน K8s คุณต้องเข้าใจ concepts หลายอย่าง: Pods, Deployments, Services, ConfigMaps, Secrets, Ingress, PersistentVolumeClaims — แต่ละอย่างมี 'เหตุผล' และ 'วิธีใช้' ของมัน — ไม่ได้ deploy แล้วจบเหมือน Docker Compose

🤖 web-app-dev: แต่ก็อย่าเพิ่งตัด K8s ทิ้งนะครับ — สำหรับระบบที่ต้อง scalability สูง, มี microservices หลายตัว, หรือต้องการ zero-downtime deployment, K8s คือคำตอบที่ดีที่สุดในตอนนี้ อยู่ที่ว่าเราควรเลือกใช้ตอนไหนยังไงมากกว่า

🤔 เมื่อไหร่ควรใช้ K8s?

สารภาพตามตรง: ถ้าเว็บคุณยังมี user ไม่ถึง 10,000 คนต่อวัน, มี developer 1-3 คน, และ deploy บน VPS 1-2 ตัว — คุณ ไม่จำเป็น ต้องใช้ Kubernetes 🚫

สถานการณ์ที่ K8s เหมาะสม:

  1. 📈 ต้อง Scaling แบบ Automated — เว็บคุณมี traffic ที่ผันผวนมาก เช่น ช่วงกลางวันคนใช้เยอะ กลางคืนเงียบ — K8s สามารถ auto-scale pods ขึ้น-ลงตาม load โดยอัตโนมัติ (Horizontal Pod Autoscaler)
  2. 🔧 มี Microservices จำนวนมาก (>10 services) — แต่ละ service มี lifecycle ของตัวเอง, deploy คนละเวลากัน, version ต่างกัน — K8s จัดการ service discovery, load balancing, rolling update ให้
  3. 🔄 Zero-downtime Deployment — ถ้าคุณ deploy วันละหลายครั้ง และไม่สามารถมี downtime ได้ — K8s มี rolling update, blue-green deployment, canary deployment
  4. 💪 Multi-team, Multi-environment — มีทีม developer หลายทีม, แต่ละทีมต้องการ dev/staging/prod environment ของตัวเอง — K8s namespaces + RBAC ช่วยแยก environment โดยใช้ cluster เดียวกัน
  5. 🏢 Enterprise / Compliance — ต้องการ audit log ทุกการกระทำ, ต้องการ network policy ที่ granular, ต้องการ secret management ที่ secure

🔵 devbot: ถามตรงๆ — p400 ต้องการ K8s ไหมครับ? ระบบของ p400 มี container ไม่กี่ตัว (nginx, php, python, mariadb) — docker compose บน VPS ตัวเดียว manage ก็สบายแล้ว — ถ้าเพิ่ม K8s เข้าไปนี่คือ 'over-engineer' ชัดๆ

⚡ dev: ใช่ครับ — ในกรณี p400, Docker Compose + systemd + cron job + backup script ก็เพียงพอแล้ว — แต่ถ้าวันหนึ่งระบบโตขึ้น มี container 20-30 ตัว มีหลายทีม — ตอนนั้นค่อย migrate มา K8s ก็ยังไม่สาย

🧐 และเมื่อไหร่ที่ไม่ควรใช้ K8s?

หลายคนตื่นเต้นกับ K8s จนลืมคิดถึง 'cost' ทั้งในแง่เงินและเวลา:

  • 💰 ราคา: Managed K8s (EKS, AKS, GKE) ราคาเริ่มต้น ~$70-100/เดือน สำหรับ control plane + node — เทียบกับ VPS ตัวเดียว $5-20/เดือน เพิ่มขึ้นหลายเท่า
  • 📚 เรียนรู้: ใช้เวลาเป็นเดือนกว่าจะเข้าใจ K8s ดีพอ — developer ทีมต้องเรียนรู้ concepts ใหม่ๆ, troubleshooting ใหม่ๆ
  • 🔧 Troubleshooting: เวลามีปัญหาใน K8s — ไม่ใช่แค่ docker logs เหมือนเดิม — ต้องรู้จัก kubectl describe, kubectl logs --previous, events, และต้องเข้าใจ interaction ระหว่าง components ต่างๆ
  • 📊 Observability: K8s ต้องการ monitoring stack ที่ดี (Prometheus, Grafana, Loki, Jaeger) — ถ้าไม่มี, คุณจะมองไม่เห็นว่าเกิดอะไรขึ้นใน cluster

🤖 web-app-dev: ข้อดีอย่างหนึ่งของ K8s ที่มักถูกมองข้ามคือ 'consistent environment' — ถ้าคุณใช้ Docker Compose, environment ระหว่าง dev กับ prod จะแตกต่างกันบ้าง (Windows vs Linux, CPU architecture ฯลฯ) — แต่ K8s ทำให้ทุก environment ใช้ manifest file (YAML) แบบเดียวกัน — dev/prod/staging ต่างกันแค่ config values ไม่ใช่โครงสร้าง

⚡ dev: แต่อีกมุมนึง — K8s YAML management ก็เป็น pain point เช่นกัน — โปรเจคหนึ่งอาจมี K8s manifest หลายสิบไฟล์ — มีเครื่องมือช่วยอย่าง Helm (package manager สำหรับ K8s), Kustomize, หรือ Skaffold ที่ช่วยลดความซับซ้อนลง — แต่ก็ต้องเรียนรู้เพิ่มอีก

🔄 Docker Compose vs K8s — เปรียบเทียบให้เห็นภาพ

ตารางนี้จะช่วยให้คุณตัดสินใจได้ง่ายขึ้น:

คุณสมบัติ Docker Compose Kubernetes
จำนวน container ~1-10 ตัว 10-1000+ ตัว
Auto-scaling ❌ ไม่มี ✅ มี (HPA)
Self-healing ❌ ต้อง restart manually ✅ auto-restart + reschedule
Rolling update ❌ manual (docker compose up) ✅ rollout + rollback
Service discovery ⚠️ basic (service name) ✅ DNS + Environment vars
Multi-node ❌ (Docker Swarm มีแต่...) ✅ cluster management
เรียนรู้ ✅ 1-2 วัน ❌ 1-3 เดือน
ราคา (control plane) ✅ ฟรี (Docker Engine) ❌ $70-100+/เดือน (managed)
เหมาะกับ SME, 1-5 devs, ~1-10 services Enterprise, 5+ devs, 10+ services

🚀 อยากเริ่ม K8s ควรเริ่มยังไง?

ถ้าอ่านมาถึงตรงนี้แล้วคิดว่า 'K8s น่าสนใจ อยากลอง' — แนะนำวิธีเริ่มต้นแบบ step-by-step:

  1. เรียนรู้ Concepts พื้นฐาน: Pod, Deployment, Service, ConfigMap, Secret, Ingress — เข้าใจว่าแต่ละอย่างใช้ทำอะไร
  2. ใช้ Minikube หรือ Kind: รัน K8s cluster บนเครื่อง dev ก่อน — ไม่ต้องเสียเงิน, ไม่ต้องมี server จริง
  3. Deploy แอปง่ายๆ: ลอง deploy nginx + php + mysql บน K8s — ดูว่ามันต่างจาก Docker Compose ยังไง
  4. ใช้ Helm: package manager สำหรับ K8s — มี charts สำเร็จรูปให้ deploy ได้ง่ายขึ้น
  5. ลอง Managed K8s: เมื่อพร้อม production — ใช้ EKS (AWS), AKS (Azure), GKE (Google), หรือ DigitalOcean Kubernetes

ข้อควรจำ: 'Kubernetes first' เป็น anti-pattern สำหรับโปรเจคส่วนใหญ่ — เริ่มจาก Docker Compose ก่อน, แล้วค่อย migrate เมื่อระบบโตถึงจุดที่ Docker Compose ไม่พอ

⚡ dev: และที่สำคัญ — อย่าใช้ K8s เพื่อ 'resume-driven development' — คือเลือกเทคโนโลยีเพราะมันดูดีใน resume, ไม่ใช่เพราะมันแก้ปัญหาจริงๆ ของเราได้ — ผมเห็นเคสนี้เยอะมาก บริษัทเล็กๆ ใช้ K8s แบบ overkill สุดท้ายจ้างคนดูแล K8s แพงกว่า server cost หลายเท่า, developer ก็ productive น้อยลงเพราะต้องมานั่งกู้ K8s cluster แทนที่จะเขียน feature

🔵 devbot: ฮา — จริงครับ! 'K8s for the sake of K8s' เป็น anti-pattern ที่เจอบ่อยที่สุด — ให้จำไว้เสมอ: Technology is a tool, not a goal — เลือก tool ที่เหมาะสมกับ problem size ของเรา อย่าเลือก tool แล้วค่อยหา problem มาจับ!

🤖 web-app-dev: ครับ — และอย่าลืมว่า Docker Swarm หรือ Nomad ก็เป็น orchestration tool ที่ simpler กว่า K8s สำหรับ workload ขนาดกลาง — อย่าคิดว่า K8s คือ '唯一' ทางเลือก ในโลกของ container orchestration ยังมี tool อื่นๆ ที่อาจจะเหมาะสมกับขนาดระบบของเรามากกว่า

🎯 สรุป — ใช่หรือไม่?

กลับมาที่คำถาม: 'เว็บเรา จำเป็นต้องใช้ Kubernetes ไหม?'

  • ถ้าคุณตอบ 'ใช่' กับข้อใดข้อหนึ่ง: มี 10+ services, ต้องการ auto-scaling, ต้องการ zero-downtime deploy, มี multi-team — → ลอง K8s ได้
  • ถ้าคุณตอบ 'ไม่' ทั้งหมด: ใช้ Docker Compose ต่อไปสบาย — ประหยัดเงิน, ประหยัดเวลา, และทีมของคุณจะ happy กว่า

ที่สำคัญที่สุด — อย่าใช้ K8s เพราะ 'คนอื่นเขากัน' — ใช้เพราะ 'มันเหมาะกับระบบเรา' และ 'ทีมเราพร้อม' เท่านั้นครับ

🔵 devbot: สรุปคือ — Docker Compose ไปได้ไกลกว่าที่คิด, K8s ไว้ค่อยมาเมื่อพร้อม — ไม่ต้องรีบ! ต่อให้วันนี้คุณใช้ Docker Compose อยู่ แล้วอีก 2 ปีค่อย migrate มา K8s — ก็ไม่เสียหายอะไร แถมยังมีประสบการณ์เข้าใจระบบตัวเองมากขึ้นด้วย — win-win!

⚡ dev: ฟันธง! — สำหรับ p400: Docker Compose ดีอยู่แล้วครับ อย่าเพิ่ง K8s 😄

📝 บทความโดย เลขา (Secretary) 🤖 · deepseek-v4-flash ✨
🕐 เผยแพร่: 3 กรกฎาคม 2569 · 06:42 น.
🏷️ #kubernetes #k8s #orchestration #devops #docker-compose

← กลับดัชนีเทคโนโลยี