Kraiwit W
Kraiwit.W
Cloud Native คืออะไร? แล้ว VM, Cloud Run, Kubernetes ต่างกันยังไง
Jun 1, 2026published

Cloud Native คืออะไร? แล้ว VM, Cloud Run, Kubernetes ต่างกันยังไง

สรุปความเข้าใจพื้นฐานเกี่ยวกับ Cloud Native, VM, Cloud Run และ Kubernetes สำหรับ Backend Engineer ที่อยากเข้าใจภาพรวมของการ deploy และดูแลระบบบน Cloud

Cloud Native คืออะไร? แล้ว VM, Cloud Run, Kubernetes ต่างกันยังไง

ช่วงหลังผมเริ่มสนใจเรื่อง Cloud Native มากขึ้น เพราะจากเดิมที่ผมเข้าใจแค่การเขียน Backend API แล้ว deploy ขึ้น server พอได้ลองทำโปรเจกต์จริงมากขึ้น ผมเริ่มเห็นว่า “การทำให้ระบบรันบน Cloud ได้” กับ “การออกแบบระบบให้เหมาะกับ Cloud” ไม่ใช่เรื่องเดียวกัน

Cloud Native ไม่ได้หมายถึงแค่เอาแอปไปวางบน Cloud แต่คือแนวคิดในการออกแบบระบบให้ deploy ง่าย, scale ได้, recover จากปัญหาได้, monitor ได้ และไม่ผูกทุกอย่างไว้กับเครื่องใดเครื่องหนึ่งมากเกินไป

บทความนี้เป็นสรุปความเข้าใจของผมเกี่ยวกับ Cloud Native โดยเฉพาะความแตกต่างระหว่าง VM, Cloud Run และ Kubernetes


Cloud Native คืออะไร

Cloud Native คือแนวทางการออกแบบและพัฒนาแอปพลิเคชันให้เหมาะกับการรันบน Cloud ตั้งแต่แรก

ระบบแบบ Cloud Native มักมีลักษณะประมาณนี้

- Application รันเป็น container
- Service แยกส่วนกันชัดเจน
- Config และ Secret แยกออกจาก source code
- Deploy ผ่าน CI/CD
- Scale ได้ตาม traffic
- มี health check
- มี logging / monitoring
- ถ้า service ล่ม ระบบสามารถ restart หรือ recover ได้

เป้าหมายของ Cloud Native คือทำให้ระบบมีความยืดหยุ่นและดูแลใน production ได้ง่ายขึ้น

พูดง่าย ๆ คือ

Cloud Native = ออกแบบระบบให้พร้อมสำหรับ production บน Cloud ไม่ใช่แค่ เอาแอปเดิมไปวางบน Cloud


VM คืออะไร

VM หรือ Virtual Machine คือเครื่อง server เสมือนที่เราเช่าจาก Cloud Provider เช่น Google Cloud Platform, AWS หรือ Azure ถ้าใช้ GCP ตัวอย่างของ VM คือ Compute Engine เวลาเราใช้ VM เราจะได้เครื่องมา 1 เครื่อง แล้วเราต้องจัดการหลายอย่างเอง เช่น

- ติดตั้ง runtime
- ติดตั้ง Docker
- ตั้งค่า firewall
- run container
- manage process
- restart service
- update application
- ดู log
- manage disk
- patch OS

ตัวอย่าง architecture แบบ VM

User
 ↓
VM
 ├── Backend API
 ├── Database
 ├── Upload files
 └── Logs

ข้อดีของ VM คือควบคุมได้เยอะ เหมาะกับการเรียน infra และเหมาะกับระบบที่ต้องการ custom environment

แต่ข้อเสียคือเราต้องดูแลเองเยอะ ถ้า VM ล่ม ทุกอย่างที่อยู่บน VM นั้นอาจได้รับผลกระทบ และการ scale ต้องจัดการเอง


Cloud Run คืออะไร

Cloud Run คือ serverless container platform ของ Google Cloud

แนวคิดคือ เรา build application เป็น Docker image แล้วส่ง image ไปให้ Cloud Run จากนั้น Cloud Run จะช่วยรัน container ให้เรา

สิ่งที่ Cloud Run ช่วยจัดการให้ เช่น

- Run container
- Auto scale
- Scale to zero
- HTTPS endpoint
- Revision
- Rollback
- Traffic splitting
- Logs integration

ตัวอย่าง flow

Go / Next.js App
 ↓
Docker Image
 ↓
Artifact Registry
 ↓
Cloud Run

Cloud Run เหมาะกับ service ที่เป็น HTTP API, Web app, Backend service หรือ Microservice ที่ไม่ต้องการดูแล server เอง

ตัวอย่าง architecture

User
 ↓
Cloud Run Frontend
 ↓
Cloud Run Backend API
 ↓
Managed Services เช่น Cloud SQL, Cloud Storage, Secret Manager

ข้อดีของ Cloud Run คือใช้ง่ายมากเมื่อเทียบกับ VM และ Kubernetes เพราะเราแทบไม่ต้องดูแล infrastructure เอง

เราแค่ focus ที่ application, Docker image, environment variables, health check และ deployment pipeline


Kubernetes คืออะไร

Kubernetes หรือ K8s คือ platform สำหรับจัดการ container จำนวนมาก

ถ้า Cloud Run เหมาะกับการ deploy container แบบง่าย ๆ Kubernetes จะเหมาะกับระบบที่มีหลาย service และต้องการควบคุมละเอียดกว่า

Kubernetes ช่วยจัดการเรื่องเหล่านี้

- Run container
- Restart container ถ้าล่ม
- Scale service เพิ่ม/ลด
- Load balance traffic
- Deploy version ใหม่แบบ rolling update
- Rollback version เก่า
- Manage config และ secret
- Health check
- Service discovery
- จัดการ worker, cron job, batch job

พูดแบบง่ายที่สุด

Kubernetes = ระบบจัดการ containerized applications ใน production

หรือ

Kubernetes = container orchestration platform

แนวคิดสำคัญของ Kubernetes: Desired State

Kubernetes ทำงานด้วยแนวคิดที่เรียกว่า Desired State

เราบอก Kubernetes ว่า “อยากให้ระบบเป็นแบบไหน” เช่น

อยากให้ backend service รัน 3 ตัว
ใช้ image version 1.0.0
เปิด port 8080
ถ้า container ตายให้ restart
ถ้า app ยังไม่ ready ห้ามส่ง traffic เข้าไป

จากนั้น Kubernetes จะพยายามทำให้ actual state ตรงกับ desired state อยู่เสมอ

ตัวอย่าง

Desired state: ต้องมี backend 3 pods
Actual state: ตอนนี้เหลือ 2 pods
Kubernetes: สร้าง pod ใหม่ให้กลับมาเป็น 3

นี่คือจุดสำคัญของ Kubernetes


Component หลักของ Kubernetes

1. Cluster

Cluster คือกลุ่มของเครื่องที่ Kubernetes ใช้รัน application

Kubernetes Cluster
├── Control Plane
└── Worker Nodes

ถ้าใช้บน GCP จะเรียกว่า GKE ถ้าใช้บน AWS จะเรียกว่า EKS ถ้าใช้บน Azure จะเรียกว่า AKS


2. Node

Node คือเครื่องที่ใช้รัน workload

มองง่าย ๆ ได้ว่า

Node = VM หนึ่งเครื่องใน Kubernetes cluster

ในแต่ละ Node จะมีหลาย Pod รันอยู่


3. Pod

Pod คือหน่วยเล็กที่สุดที่ Kubernetes ใช้รัน container

ส่วนใหญ่ใน backend service ทั่วไป

1 Pod = 1 application container

เช่น

quotation-service pod
policy-service pod
taskassigner-service pod

แต่ Pod ไม่ใช่สิ่งที่ควรมองว่าอยู่ถาวร เพราะ Pod อาจตายแล้วเกิดใหม่ได้ และ IP ของ Pod ก็เปลี่ยนได้


4. Deployment

Deployment คือ object ที่ใช้บอก Kubernetes ว่า application นี้ควรรันกี่ตัว ใช้ image อะไร และ deploy/rollback ยังไง

ตัวอย่างแนวคิด

kind: Deployment
spec:
  replicas: 3
  image: backend-api:1.0.0

แปลว่า

ให้ backend-api รัน 3 pods เสมอ

ถ้ามี pod ตัวหนึ่งล่ม Kubernetes จะสร้างใหม่ให้


5. Service

Service คือ stable endpoint สำหรับเข้าถึง Pod

เพราะ Pod IP เปลี่ยนได้ เราจึงไม่ควรเรียก Pod ตรง ๆ แต่ควรเรียกผ่าน Service

frontend
 ↓
backend-service
 ↓
backend pods

Service ทำหน้าที่เป็น load balancer ภายใน cluster และ route traffic ไปยัง Pod ที่อยู่ข้างหลัง


6. Ingress

Ingress คือทางเข้าจากภายนอก cluster

เช่น

https://api.example.com/quotation → quotation-service
https://api.example.com/policy    → policy-service
https://api.example.com/task      → taskassigner-service

Ingress มักทำงานร่วมกับ Ingress Controller เช่น Nginx หรือ Traefik

ถ้าในระบบที่เคยใช้ Traefik หรือ Reverse Proxy เพื่อ route path ไปยัง service ต่าง ๆ แนวคิดนี้คล้ายกับ Ingress มาก


7. ConfigMap

ConfigMap ใช้เก็บ configuration ที่ไม่ใช่ความลับ เช่น

APP_ENV=production
APP_PORT=8080
LOG_LEVEL=info

ถ้าใน VM หรือ Docker Compose เราใช้ .env ใน Kubernetes มักจะใช้ ConfigMap


8. Secret

Secret ใช้เก็บค่าที่เป็นความลับ เช่น

DB_PASSWORD
JWT_SECRET
API_KEY

ใน production จริง อาจใช้ร่วมกับระบบอย่าง Secret Manager หรือ Vault

จำง่าย ๆ

ConfigMap = config ทั่วไป
Secret    = config ที่เป็นความลับ

9. Liveness Probe และ Readiness Probe

Probe คือ health check ของ Kubernetes

มี 2 ตัวที่สำคัญมาก

Liveness Probe = ใช้เช็กว่า app ยังมีชีวิตอยู่ไหม ถ้า fail Kubernetes จะ restart container

Readiness Probe = ใช้เช็กว่า app พร้อมรับ traffic หรือยัง ถ้า fail Kubernetes จะไม่ส่ง request เข้า pod นั้น

ตัวอย่าง endpoint ที่มักใช้

/healthz = liveness
/readyz  = readiness

Readiness สำคัญมากตอน deploy version ใหม่ เพราะ Kubernetes จะยังไม่ส่ง traffic เข้า Pod ใหม่จนกว่า readiness จะผ่าน


10. HPA

HPA หรือ Horizontal Pod Autoscaler คือระบบ scale Pod อัตโนมัติ

เช่น

ถ้า CPU > 70%
เพิ่ม pod จาก 3 เป็น 6

ตัวอย่าง

ช่วง traffic ปกติ
backend = 3 pods

ช่วง traffic สูง
backend = 10 pods

11. Job และ CronJob

Job ใช้สำหรับงานที่รันครั้งเดียวแล้วจบ เช่น migration หรือ batch processing

CronJob ใช้สำหรับงานที่รันตามเวลา เช่น daily report, cleanup job หรือ scheduled task

ตัวอย่าง

Database migration → Job
Daily report       → CronJob
SLA checker        → CronJob

Flow เวลามี Request เข้า Kubernetes

สมมติ user เรียก API

POST /quotation/calculate

Flow แบบง่ายจะเป็นแบบนี้

1. User ส่ง request เข้า Load Balancer
2. Load Balancer ส่งเข้า Ingress Controller
3. Ingress ดู path /quotation
4. Route ไป quotation-service
5. Service เลือก Pod ตัวใดตัวหนึ่ง
6. Pod รับ request ผ่าน backend application
7. Application ทำงาน เช่น validate, process business logic, query service อื่น
8. Return response กลับไปหา user

จำภาพนี้ไว้

User
 ↓
Load Balancer
 ↓
Ingress
 ↓
Service
 ↓
Pod
 ↓
Application

Flow เวลามี Deploy Version ใหม่

สมมติเราจะ deploy backend จาก version 1.0.0 เป็น 1.1.0

Kubernetes จะทำ rolling update ประมาณนี้

1. สร้าง Pod version ใหม่ขึ้นมา
2. รอให้ readiness probe ผ่าน
3. เริ่มส่ง traffic เข้า Pod ใหม่
4. ค่อย ๆ ลด Pod เก่าลง
5. ทำซ้ำจนทุก Pod เป็น version ใหม่

ข้อดีคือช่วยลด downtime ตอน deploy

ถ้า Pod ใหม่ไม่ผ่าน readiness probe Kubernetes จะไม่ส่ง traffic เข้าไป

ถ้า deploy แล้วมีปัญหา ก็ rollback กลับ revision ก่อนหน้าได้


Kubernetes แก้ปัญหาอะไร

Kubernetes ช่วยแก้ปัญหาในมุม operation และ runtime เช่น

- Container orchestration
- Auto restart
- Auto scaling
- Load balancing
- Service discovery
- Rolling deployment
- Rollback
- Config / Secret management
- Health check
- Multi-service management

ตัวอย่าง

ถ้า Pod ล่ม → Kubernetes สร้างใหม่
ถ้า traffic เยอะ → HPA เพิ่ม Pod
ถ้า deploy version ใหม่ → Rolling update
ถ้า Pod ยังไม่ ready → ไม่ส่ง traffic เข้าไป

Kubernetes ไม่ได้แก้ปัญหาอะไร

Kubernetes ไม่ได้แก้ business logic ให้เรา

เช่น

- Database transaction ผิด
- Race condition ใน business logic
- Calculation logic ผิด
- SQL query ช้า
- Cache stale
- ไม่มี request_id ใน log
- Schema migration พัง

ดังนั้นต่อให้ระบบรันบน Kubernetes ถ้า application logic ออกแบบไม่ดี ระบบก็ยังพังได้

ประโยคที่ผมคิดว่าสำคัญมากคือ

Kubernetes ช่วยให้ระบบรันและ scale ได้ดีขึ้น
แต่ความถูกต้องของระบบยังขึ้นอยู่กับ application design และ database design

Cloud Run vs Kubernetes

Cloud Run และ Kubernetes ใช้รัน container เหมือนกัน แต่เหมาะกับคนละบริบท

Cloud Run = ง่ายกว่า เหมาะกับ service เดี่ยวหรือระบบที่ไม่ซับซ้อนมาก

Kubernetes = ควบคุมละเอียดกว่า เหมาะกับหลาย service และระบบที่ต้องการ orchestration จริงจัง
เรื่องCloud RunKubernetes
แนวคิดServerless container platformContainer orchestration platform
ความง่ายง่ายกว่าซับซ้อนกว่า
การดูแล infraCloud provider ดูแลให้เยอะทีมต้องดูแล cluster มากกว่า
การควบคุมปานกลางสูง
Auto scaleมีให้ในตัวมีผ่าน HPA แต่ต้อง config
เหมาะกับAPI / Web app / Backend serviceMicroservices หลายตัว
DeploymentRevision / RollbackRolling update / Rollback
RoutingService URL / Custom domainIngress / Gateway / Service
Config / SecretEnv vars / Secret ManagerConfigMap / Secret / External Secret
Use caseระบบเล็กถึงกลางระบบ production ใหญ่ / หลายทีม

สำหรับโปรเจกต์ที่มี frontend, backend, database และ storage แบบไม่ซับซ้อน Cloud Run มักเพียงพอแล้ว

แต่ถ้าระบบเริ่มมีหลาย service, worker, cron job, batch job, internal routing, custom deployment strategy และหลายทีม deploy ร่วมกัน Kubernetes จะเหมาะกว่า


VM vs Cloud Run vs Kubernetes

VM, Cloud Run และ Kubernetes เป็นคนละระดับของการรัน application บน Cloud

เรื่องVMCloud RunKubernetes
แนวคิดเช่าเครื่อง serverรัน container แบบ serverlessจัดการ container หลายตัว
การดูแล OSต้องดูแลเองแทบไม่ต้องดูแลขึ้นกับรูปแบบ cluster
Deploy containerทำได้ แต่ setup เองทำได้ง่ายทำได้และควบคุมละเอียด
Auto scaleต้องทำเองมีให้มีผ่าน HPA
Restart เมื่อ app ล่มต้องจัดการเองCloud Run จัดการให้Kubernetes จัดการให้
เหมาะกับLearning infra / legacy / custom setupAPI / web service ทั่วไปMicroservices / platform ขนาดใหญ่
Complexityกลางต่ำสูง
Controlสูงปานกลางสูงมาก
ภาระดูแลสูงต่ำสูงกว่า Cloud Run
ตัวอย่างบน GCPCompute EngineCloud RunGKE

ถ้าระบบยังไม่ซับซ้อน Cloud Run มักเป็นตัวเลือกที่ดี เพราะ deploy ง่าย ดูแลง่าย และลดภาระ infra ได้เยอะ

แต่ถ้าระบบมีหลาย service, ต้อง scale แยกแต่ละ service, มี worker, cron job, batch job, internal routing และหลายทีมทำงานร่วมกัน Kubernetes จะเริ่มมีประโยชน์มากขึ้น

จำแบบง่ายที่สุด

VM = ได้เครื่องมา ต้องดูแลเองเยอะ

Cloud Run = ได้ที่รัน container แบบง่ายและ serverless

Kubernetes = ได้ platform สำหรับจัดการ container หลายตัวแบบจริงจัง

ใช้ Kubernetes เมื่อไหร่

Kubernetes เหมาะเมื่อ

- มีหลาย service
- ต้อง scale แต่ละ service แยกกัน
- มี worker / cron / batch job หลายตัว
- ต้องการ rolling update / rollback ที่ควบคุมได้
- ต้องการ service discovery ภายในระบบ
- ต้องการ platform กลางให้หลายทีม deploy
- มีทีมที่ดูแล Kubernetes ได้
- ต้องการใช้ ecosystem เช่น Helm, Argo CD, Prometheus, Grafana

ตัวอย่างระบบที่มักเหมาะกับ Kubernetes

- Food delivery platform
- Banking platform
- Insurance platform
- E-commerce platform
- Payment platform
- Large microservices system

ยังไม่ควรใช้ Kubernetes เมื่อไหร่

Kubernetes อาจยังไม่จำเป็นถ้า

- มีแค่ frontend + backend + database
- ทีมเล็กมาก
- Cloud Run แก้ปัญหาได้พอแล้ว
- ไม่มีคนดูแล cluster
- ยังไม่ต้องการ control ละเอียด
- complexity และ cost สำคัญกว่า flexibility

Kubernetes ไม่ใช่คำตอบของทุกระบบ

บางครั้ง Cloud Run อาจเป็นตัวเลือกที่ดีกว่า เพราะง่ายกว่า ดูแลง่ายกว่า และเพียงพอกับ use case แล้ว


Mapping จาก Docker / Docker Compose ไป Kubernetes

สิ่งที่เห็นใน repoถ้าอยู่บน Kubernetes จะเป็นอะไร
DockerfileContainer Image
docker-compose serviceDeployment
container name / service nameKubernetes Service
Traefik path routingIngress / Ingress Controller
.envConfigMap + Secret
Jenkins deploykubectl apply / Helm upgrade / Argo CD sync
cron job ใน GoKubernetes CronJob หรือ app-level scheduler
migration commandKubernetes Job
health endpointLiveness / Readiness Probe
scale serviceHPA
logs stdout / ZapCloud Logging / Loki
metricsPrometheus
GCP Secret ManagerExternal Secrets / CSI Driver / Workload Identity

การเข้าใจ mapping นี้ช่วยให้เห็นภาพว่า Kubernetes ไม่ได้เป็นคนละโลกกับ Docker แต่เป็นขั้นต่อไปของการจัดการ container ในระดับ production

ความรู้ระดับที่ควรมีสำหรับ Backend Engineer

ถ้าเป็น Backend Engineer ไม่จำเป็นต้องลึกเท่า Platform Engineer ตั้งแต่แรก แต่ควรรู้ว่า Kubernetes ทำอะไร และระบบ backend ที่เราเขียนจะถูกรันบน Kubernetes อย่างไร

สิ่งที่ควรรู้ขั้นต่ำ

- Kubernetes คือ container orchestration
- Cluster / Node / Pod คืออะไร
- Deployment ใช้จัดการ replicas และ rollout
- Service ใช้เป็น stable endpoint
- Ingress ใช้ route traffic จากภายนอก
- ConfigMap / Secret ใช้จัดการ config
- Liveness / Readiness probe ใช้ทำ health check
- HPA ใช้ autoscale
- Job / CronJob ใช้กับ batch หรือ scheduled jobs
- Kubernetes ไม่ได้แก้ business logic หรือ database correctness ให้เอง

สรุป

Cloud Native คือแนวทางการออกแบบระบบให้เหมาะกับ production บน Cloud

VM, Cloud Run และ Kubernetes เป็นคนละระดับของการรัน application

VM = เราได้เครื่องและดูแลเองเยอะ

Cloud Run = เราส่ง container ไปให้ cloud provider รันให้แบบง่าย

Kubernetes = เราใช้ platform เพื่อจัดการ container หลายตัว หลาย service และควบคุม runtime ได้ละเอียด

สำหรับระบบเล็กหรือโปรเจกต์ส่วนตัว Cloud Run มักเพียงพอและดูแลง่ายกว่า

สำหรับระบบใหญ่ที่มีหลาย service, worker, batch job, deployment strategy และหลายทีมทำงานร่วมกัน Kubernetes จะเริ่มมีประโยชน์มากขึ้น

สิ่งสำคัญคือ Kubernetes ไม่ได้ทำให้ระบบถูกต้องโดยอัตโนมัติ มันช่วยด้าน runtime, scaling และ operation แต่ backend logic, database transaction, observability และ system design ยังเป็นหน้าที่ของ engineer ที่ต้องออกแบบให้ดี

ประโยคที่ผมอยากจำไว้คือ

Cloud Native ไม่ใช่แค่ deploy ขึ้น Cloud ได้
แต่คือการออกแบบระบบให้ deploy ง่าย scale ได้ recover ได้ monitor ได้ และพร้อมสำหรับ production