ภาพรวมโปรเจกต์ + เตรียมเครื่องมือ
รู้จักสถาปัตยกรรมทั้งระบบที่กำลังจะสร้าง และติดตั้งเครื่องมือให้พร้อม
ยินดีต้อนรับสู่ workshop! ใน module นี้เราจะสร้างระบบแบบ YouTube ย่อส่วนด้วยมือตัวเองทั้งหมด: ผู้ใช้อัปโหลดไฟล์วิดีโอผ่านหน้าเว็บ → ระบบสั่ง Kubernetes Job รัน FFmpeg แปลงไฟล์เป็น HLS → เก็บผลลัพธ์ลง MinIO (object storage แบบเดียวกับ S3) → ผู้ชมกดดูวิดีโอผ่านเว็บได้ทันที ทุกชิ้นส่วนรันอยู่บน cluster ในเครื่องคุณเอง
ระบบนี้เหมือนโรงงานแปรรูปอาหาร — วัตถุดิบ (ไฟล์ mp4 ต้นฉบับ) ถูกส่งเข้าโกดังรับของ (bucket uploads) → โรงงานเรียกพนักงานชั่วคราว (K8s Job) มาแปรรูป (FFmpeg แปลงเป็น HLS) → สินค้าสำเร็จรูปไปอยู่โกดังจัดส่ง (bucket vod) → หน้าร้าน (เว็บ + Ingress) ขายให้ลูกค้า
[Browser]
│ 1. POST /api/upload (ไฟล์ mp4)
▼
[Ingress (nginx)] ──── path "/" ────► [Upload API (Node.js Deployment)]
│ │ 2. เก็บต้นฉบับลง bucket "uploads"
│ │ 3. สั่งสร้าง K8s Job ผ่าน API server
│ ▼
│ [Transcode Job (FFmpeg Pod)]
│ │ 4. โหลดต้นฉบับ → แปลงเป็น HLS
│ │ 5. อัปโหลดผลลัพธ์ลง bucket "vod"
│ ▼
└──── path "/vod" ─────────────► [MinIO (StatefulSet + PVC)]
6. ผู้ชมเปิด /vod/<id>/index.m3u8 ดูวิดีโอติดตั้งเครื่องมือ
ต้องมี Docker Desktop เปิดอยู่ก่อน (ถ้ายังไม่มีให้ติดตั้งจาก docker.com) จากนั้นติดตั้งที่เหลือด้วย Homebrew:
brew install kind kubectl ffmpeg node
# ตรวจว่าครบทุกตัว
docker version --format 'Docker {{.Server.Version}}'
kind version
kubectl version --client
ffmpeg -version | head -1
node --versionสร้างโครงโปรเจกต์
mkdir -p ~/projects/k8s-video-pipeline/{api/public,transcoder,k8s}
cd ~/projects/k8s-video-pipelinek8s-video-pipeline/
├── api/ # Upload API (Node.js)
│ ├── server.js
│ ├── package.json
│ ├── Dockerfile
│ └── public/ # หน้าเว็บอัปโหลด + player
├── transcoder/ # อิมเมจ FFmpeg + สคริปต์แปลงไฟล์
│ ├── Dockerfile
│ └── transcode.sh
├── k8s/ # manifests ทั้งหมด
│ ├── kind-config.yaml
│ ├── minio.yaml
│ ├── api.yaml
│ ├── rbac.yaml
│ ├── job-test.yaml
│ └── ingress.yaml
├── chart/ # Helm chart + values แยก env (บท 8.9–8.10)
│ ├── video-pipeline/
│ ├── values-dev.yaml
│ └── values-prod.yaml
└── docker-compose.yaml # รันแบบ local ก่อนขึ้น K8sสรุป Key Takeaways
- ระบบ = Upload API + MinIO + Transcode Job + Ingress ทั้งหมดรันบน kind ในเครื่องเอง
- งานเสิร์ฟตลอดเวลาใช้ Deployment/StatefulSet · งานทำแล้วจบใช้ Job
- เครื่องมือหลัก: Docker, kind, kubectl, FFmpeg, Node.js

