Docker Compose to Kubernetes Converter: แปลงไฟล์ Compose เป็น Starter K8s Manifests ได้ในคลิกเดียว
แปลง service ใน Docker Compose เป็น Kubernetes Deployment, Service และ ConfigMap เบื้องต้นได้ใน browser ล้วน ๆ — จุดเริ่มต้นที่อ่านง่ายสำหรับการ migrate ขึ้น cluster ครั้งแรกของคุณ
Table of Contents
Docker Compose to Kubernetes Converter: แปลงไฟล์ Compose เป็น Starter K8s Manifests ได้ในคลิกเดียว
ทุกไฟล์ Compose แฝงเมล็ดของ Kubernetes deployment เอาไว้แล้ว services ที่คุณนิยามไว้ตอนพัฒนาบนเครื่องคือชื่อ workload ของคุณ image ที่ pin ไว้มีอยู่ใน registry และ port ที่ publish ไว้ก็บอกอยู่แล้วว่า traffic ควรเข้าถึง container แต่ละตัวอย่างไร Docker Compose to Kubernetes Converter อ่าน service เหล่านั้นใน browser ของคุณแล้วสร้าง starter manifests ทั้ง Deployment, Service และ ConfigMap ให้ทันที ทำให้วัน migrate ของคุณเริ่มจาก YAML ที่ใช้งานได้ ไม่ใช่หน้า editor เปล่า ๆ
ต้องพูดให้ชัดก่อนว่าเครื่องมือนี้คือ starter generator ไม่ใช่ตัวแทนเต็มตัวของ Kompose มันแปลงแก่นของไฟล์ Compose — image, port, environment variable และจำนวน replica — ให้เป็น Kubernetes objects ที่สะอาด และตั้งใจให้คุณลงมือเก็บรายละเอียดต่อเอง ผลลัพธ์ที่เล็กแบบนี้คือข้อดี เพราะคุณอ่านได้ทุกบรรทัดและปรับด้วยความเข้าใจ ไม่ใช่รับ wall of YAML ที่เกิดจากเครื่องแล้วกลัวไปแตะ ที่สำคัญทุกอย่างประมวลผลฝั่ง client ล้วน ๆ ไฟล์ที่อ้างถึง internal registry หรือค่า environment ต่าง ๆ จึงไม่หลุดออกจากเครื่องคุณ
ทำไมต้องใช้ Docker Compose to Kubernetes Converter?
- ตัดปัญหา cold-start ทิ้ง สิ่งที่ยากที่สุดของการ migrate ครั้งแรกคือการเผชิญหน้ากับไฟล์เปล่า ตัว converter ส่ง skeleton ที่โครงสร้างถูกต้องให้ภายในไม่กี่วินาที
- ผลลัพธ์เล็กพอที่จะอ่านจบ แต่ละ service ได้ Deployment หนึ่งชุด พร้อม Service และ ConfigMap แบบ optional — อ่านจบได้ในไม่กี่นาที จึงเป็นทั้งเครื่องมือสอนและเครื่องมือสร้าง
- แมปสิ่งสำคัญได้ตรงจุด image, port, environment variable และจำนวน replica จาก deploy.replicas หรือ replicas ระดับ service ถูกส่งต่อเข้า objects ที่แทนความหมายเดียวกัน
- มี toggle ให้เลือก ไม่ได้หรือไม่ได้เลย เปิดปิดการสร้าง Service เลือก namespace และกำหนด image pull policy ให้ตรงกับ cluster ของคุณ
- ข้อมูลไม่หลุดออกจากเครื่อง การแปลงเกิดขึ้นในเครื่องด้วย JavaScript ปลอดภัยแม้กับชื่อ image ภายในและค่า configuration ต่าง ๆ
- ฟรีและไม่มีพิธีรีตอง ไม่ต้อง install ไม่ต้องสมัคร ไม่ต้องผูก CLI เปิดแท็บ paste แล้วแปลงได้เลย
ฟีเจอร์หลัก
| สิ่งที่รับจาก Compose | Object ที่ได้ | รายละเอียด |
|---|---|---|
| services.<name>.image | Deployment | กลายเป็น container image ใน pod template |
| services.<name>.ports | Service | สร้างให้เมื่อเปิดการสร้าง Service เอาไว้ |
| services.<name>.environment | ConfigMap | รวบรวมและอ้างอิงจากฝั่ง container |
| deploy.replicas หรือ replicas | Deployment | ส่งต่อเข้า spec.replicas ค่าเริ่มต้นคือ 1 |
| Namespace และ pull policy | ทุก manifests | ใช้สม่ำเสมอกับทุกอย่างที่เครื่องมือสร้างให้ |
- แยกผลลัพธ์เป็นราย service ไฟล์หลาย service ถูกแปลงทีละ service ทำให้ stack สาม container ได้กลุ่ม manifest แยกชัดเจนสามชุด รับเข้า cluster ทีละส่วนได้
- Copy หรือ download ได้ หยิบ YAML ไป kubectl apply ด่วน ๆ หรือเซฟทั้งชุดลง repository ของคุณได้เลย
วิธีใช้งาน
- Paste ไฟล์ Compose วาง docker-compose.yml ทั้งไฟล์ลงช่อง input — จะเป็น service เดียวหรือทั้ง stack ก็ได้
- ตรวจ service ที่ parse ได้ แต่ละ service จะถูกแสดงพร้อม image, port, environment และจำนวน replica เพื่อให้คุณยืนยันก่อนสร้างอะไร
- ตั้งค่า options เลือก namespace กำหนด image pull policy และเปิดปิดการสร้าง Service ตามวิธีที่ cluster ของคุณเปิด traffic
- Convert แล้วอ่านผลลัพธ์ จะได้ Deployment ต่อหนึ่ง service, ConfigMap เมื่อมี environment variable และ Service เมื่อเปิดไว้ — สั้นดีไอีกแบบอ่านจบได้แน่นอน
- Copy ปรับ แล้ว apply เติมสิ่งที่ Compose ไม่เคยมีให้ (probe, resource, volume) แล้วค่อย kubectl apply -f ใส่ namespace ทดสอบก่อน
มโนทัศน์ของ Compose เทียบกับ Object ใน Kubernetes
Compose กับ Kubernetes แก้ปัญหาที่ทับซ้อนกันด้วยคำศัพท์คนละชุด การเข้าใจ mapping นี้เปลี่ยนผลลัพธ์จาก magic ให้เป็นสิ่งที่คุณป้องกันตัวได้ใน code review
services กลายเป็น Deployments
แต่ละ entry ใต้ services อธิบาย container ที่รันต่อเนื่อง ซึ่งคือสิ่งที่ Deployment ดูแลพอดี ตัว converter สร้างหนึ่ง Deployment ต่อหนึ่ง service ตั้งชื่อตาม key ของ service และวาง image ลงใน pod template ส่วน replica มาจาก deploy.replicas ก่อน แล้ว fallback เป็น replicas ระดับ service และค่าเริ่มต้นคือ 1 เพราะ Deployment ต้องการตัวเลขที่ระบุชัดเจน ไม่ใช่สิ่งที่ implicit
ports กลายเป็น Services
Port ที่ publish ใน Compose บอกวิธีเข้าถึง container ส่วนใน Kubernetes งานนี้เป็นของ Service เมื่อเปิดการสร้าง Service ทุก port ที่ expose จะได้ Service ที่ route ไปยัง pod ของ Deployment binding แบบ 8080:80 จะไม่กลายเป็น NodePort หรือ LoadBalancer ให้อัตโนมัติ — กลยุทธ์การเปิดหน้าบ้าน รวมถึง Ingress ยังเป็นของคุณเอง
environment กลายเป็น ConfigMaps
Environment variable ถูกย้ายออกจาก pod spec ไปอยู่ใน ConfigMap ที่ Deployment อ้างอิงผ่าน envFrom ทำให้ configuration ถูก version ได้ แชร์ได้ และอัปเดตแยกจาก workload definition
สิ่งที่ตัว converter ตั้งใจไม่แปลงให้
- Volume bind mount ไม่มีคำตอบเดียวใน Kubernetes — จะใช้ emptyDir, PersistentVolumeClaim หรือ storage class ของ cloud เป็นดุลยพินิจของคุณ
- การ tune healthcheck probe จริงทั้ง liveness และ readiness ต้องใช้ path, port และ threshold เฉพาะของ application ที่ converter เดาไม่ได้
- Ingress routing ภายนอก, TLS และ host rule ขึ้นกับ ingress controller ของ cluster คุณทั้งหมด
- แนวปฏิบัติเรื่อง secret credential ใน environment block ของ Compose จะถูกใส่ ConfigMap ตามความจริงของต้นทาง แต่ค่าสำหรับ production ควรอยู่ใน Kubernetes Secrets
ตัวอย่างก่อนและหลัง
Compose ชุดนี้:
services:
web:
image: nginx:1.27
ports:
- '8080:80'
environment:
- NGINX_HOST=example.test
deploy:
replicas: 2
กลายเป็น Deployment ลักษณะนี้ (บวก ConfigMap และ Service เมื่อเปิด toggle ไว้):
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 2
template:
spec:
containers:
- name: web
image: nginx:1.27
envFrom:
- configMapRef:
name: web
workload เดิม คำศัพท์ใหม่ — และไม่มีบรรทัดไหนที่คุณอ่านไม่ออก
กรณีการใช้งานจริง
ย้ายแอป Compose บนเครื่องขึ้น managed cluster
Stack ของ web app, API และ database ที่เขียนด้วย Compose กำลังถูกส่งขึ้น EKS, GKE หรือ AKS แปลงครั้งเดียวได้ Deployment ต่อ service ภายในไม่กี่นาที แล้วเอาเวลาไปคุมสิ่งที่ต้องคิดจริง ๆ อย่าง storage ของ database และ probe ของ API แทนการพิมพ์ YAML ซ้ำ ๆ
เรียนรู้ Kubernetes manifests จากไฟล์ที่คุณคุ้นเคย
เอกสารอธิบาย Deployment แบบนามธรรม แต่ไฟล์ Compose ของคุณอธิบายมันในภาษาของแอปที่คุณเขียนเอง การแปลงไฟล์ที่เข้าใจอยู่แล้วแล้วอ่านผลลัพธ์เคียงข้างกันคือวิธีที่เร็วมากทางหนึ่งในการซึมซับ spec.replicas, envFrom และ Service selector
Bootstrap repository สำหรับ GitOps
ทั้ง Flux และ Argo CD เริ่มจาก manifests ใน git สร้างชุดแรกจาก Compose commit ลงไป แล้วให้ pipeline เป็นเจ้าของต่อ — ผลลัพธ์จาก converter จะกลายเป็น commit แรกของ deployment history ไม่ใช่ artifact ใช้ครั้งเดียวทิ้ง
แนวทางปฏิบัติที่ดี
- ทบทวน replica และเติม resource requests/limits ตัว converter ส่งต่อจำนวน replica ให้ แต่เดาค่า CPU และ memory ที่พอดีไม่ได้ — ตั้งก่อนเจอ traffic จริง
- ย้าย credential ไป Secrets อะไรใน environment ที่หน้าตาเหมือน password, token หรือ connection string ควรอยู่ใน Kubernetes Secret ไม่ใช่ ConfigMap ที่ถูกสร้างให้
- เติม liveness และ readiness probe ให้ถือว่า Deployment ที่ได้มายังขาดสายสุขภาพ จนกว่า probe ทั้งสองจะชี้ไปที่ endpoint จริง
- ตัดสินใจเรื่อง volume ให้ชัด เปลี่ยนสมมติฐาน storage ของ Compose ให้เป็น PersistentVolumeClaim ที่ระบุชัด หรือออกแบบให้ stateless ซะเลย
- Commit manifests ลง git starter YAML คือจุดเริ่มของ infrastructure history ไม่ใช่จุดจบ — เก็บเข้า version control เพื่อให้ทุกการแก้ทีหลังผ่านการ review
- Dry-run ก่อน apply จริง kubectl apply --dry-run=server ใน namespace สำหรับ staging ช่วยจับปัญหา naming, quota และ API version ก่อนกลายเป็นเหตุการณ์
เริ่มแปลงไฟล์ Compose เป็น Kubernetes YAML ตั้งแต่วันนี้
ถ้าไฟล์ Compose คือบันทึกที่แม่นยำที่สุดเกี่ยวกับแอปของคุณที่มีอยู่จริง ก็ควรใช้มันให้คุ้ม วางไฟล์ลง Docker Compose to Kubernetes Converter อ่าน starter manifests ที่ได้ แล้วก้าวเข้าสู่การ migrate ครั้งแรกด้วย YAML ที่ใช้งานได้ แทนหน้ากระดาษเปล่า
เครื่องมือที่เกี่ยวข้องที่คุณอาจสนใจ:
- Dockerfile Linter — จับปัญหา security, cache และขนาด image ก่อน build
- Dockerfile Generator — สร้าง Dockerfile ที่มีโครงสร้างดีสำหรับ service ที่กำลัง containerize
- YAML Formatter — จัดรูปแบบและตรวจ manifest ที่สร้างได้ก่อน commit
ขอให้การเดินทางจาก Compose สู่ Kubernetes ของคุณราบรื่นตั้งแต่ก้าวแรก
คำถามที่พบบ่อย
ถ: ไฟล์ Compose ของฉันถูกอัปโหลดขึ้น server ไหม?
ตอบ: ไม่ การ parse และสร้างผลลัพธ์ทำงานใน browser ของคุณล้วน ๆ ชื่อ image ภายใน, hostname และค่า environment ต่าง ๆ ไม่เคยออกจากเครื่องคุณ
ถ: ตัวนี้ใช้แทน Kompose ได้ไหม?
ตอบ: ไม่ — และมันก็ไม่ได้ตั้งใจแบบนั้น Kompose ครอบคลุม field ของ Compose กว้างกว่า ส่วนเครื่องมือนี้โฟกัสสามอย่างหลักคือ Deployment, Service และ ConfigMap ด้วยผลลัพธ์ที่สั้นพอจะอ่านและเก็บรายละเอียดด้วยมือเอง
ถ: ทำไม Deployment ของฉันมี replica เท่ากับ 1 ทั้งที่ไฟล์ Compose ไม่เคยระบุ replica?
ตอบ: Compose ใช้ instance เดียวแบบ implicit ขณะที่ Deployment ต้องการตัวเลขชัดเจน ตัว converter จะใช้ deploy.replicas หรือ replicas ระดับ service ถ้ามี และ fallback เป็น 1 เมื่อไม่ได้ระบุ
ถ: volume และ healthcheck ของฉันหายไปไหน?
ตอบ: ถูกเว้นไว้ตั้งใจ เพราะ volume ต้องการการตัดสินใจด้าน storage เฉพาะ cluster และ probe ต้องใช้ endpoint เฉพาะของ application ให้เติมลงใน manifest ที่ได้มาเหมือน YAML ที่พิมพ์เองทั่วไป