ข้ามไปเนื้อหาหลัก
คอนเทนเนอร์· ~15 นาที

ภาพรวมโปรเจกต์ + เตรียมเครื่องมือ

รู้จักสถาปัตยกรรมทั้งระบบที่กำลังจะสร้าง และติดตั้งเครื่องมือให้พร้อม

ยินดีต้อนรับสู่ 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
💻 ติดตั้งเครื่องมือทั้งหมด (macOS)

สร้างโครงโปรเจกต์

mkdir -p ~/projects/k8s-video-pipeline/{api/public,transcoder,k8s}
cd ~/projects/k8s-video-pipeline
💻 สร้างโฟลเดอร์โปรเจกต์
k8s-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
โครงสร้างสุดท้ายเมื่อจบ workshop (ตอนนี้ยังว่างอยู่ เดี๋ยวเติมทีละบท)

สรุป Key Takeaways

  • ระบบ = Upload API + MinIO + Transcode Job + Ingress ทั้งหมดรันบน kind ในเครื่องเอง
  • งานเสิร์ฟตลอดเวลาใช้ Deployment/StatefulSet · งานทำแล้วจบใช้ Job
  • เครื่องมือหลัก: Docker, kind, kubectl, FFmpeg, Node.js
อ่านจบแล้วอย่าลืมทำเครื่องหมาย