04
10-Day Kubernetes Track

วันที่ 4: Declarative YAML & Headlamp Editor

คู่มือปฏิบัติการ • 20–30 นาทีต่อวัน

ยินดีต้อนรับสู่ วันที่ 4: การจัดการ Manifests แบบ Declarative YAML และการใช้ Headlamp Inline Editor!

วันนี้เราจะมาเรียนรู้วิธีสร้างและแก้ไขทรัพยากรใน Kubernetes ด้วยไฟล์ YAML แบบ Declarative และลองใช้ตัวแก้ไข YAML (Inline Editor) บน Headlamp UI เพื่อแก้ไขคอนฟิกและดูการอัปเดตแบบเรียลไทม์ครับ

5-10m

ช่วงที่ 1: สรุปแนวคิดสถาปัตยกรรม

เข้าใจความต่างระหว่าง Imperative vs. Declarative Management และการทำงานของ Headlamp Inline YAML Editor

15-20m

ช่วงที่ 2: การลงมือปฏิบัติจริง (5 ขั้นตอน)

สร้างไฟล์ YAML จาก dry-run นำไป apply บนคลัสเตอร์ ใช้ Inline Editor เพิ่ม label ตรวจสอบผล และสำรวจ Event Stream

1

สรุปแนวคิดและสถาปัตยกรรม (5–10 นาที)

Declarative vs. Imperative Management

Imperative: การสั่งสร้างหรือแก้ไขทรัพยากรตรงๆ ผ่านคำสั่ง เช่น kubectl run ... หรือ kubectl create ... เหมาะสำหรับการทดสอบด่วน แต่ติดตามประวัติยาก

Declarative: การระบุสถานะเป้าหมายที่ต้องการ (Desired State) ไว้ในไฟล์ YAML แล้วส่งให้ Kubernetes API Server ปรับสถานะจริงให้ตรงกันผ่านคำสั่ง kubectl apply -f ซึ่งเป็นมาตรฐานของการทำ GitOps และระบบ Production

• หัวใจสำคัญคือการควบคุมเวอร์ชันของโครงสร้างระบบผ่านโค้ด (Infrastructure as Code)

Headlamp Inline YAML Editor

Headlamp มีฟีเจอร์ตัวแก้ไข YAML ในตัว (Inline YAML Editor) ช่วยให้เราสามารถกดดูโครงสร้าง Manifest ของทรัพยากรทุกชิ้นแบบสดๆ สามารถแก้ไขค่าต่างๆ เช่น labels, annotations, หรือ replicas แล้วกดบันทึกเพื่อ Apply การเปลี่ยนแปลงไปยัง API Server ได้ทันทีโดยไม่ต้องสลับกลับไปที่ Terminal

• เหมาะสำหรับการแก้ไขเร่งด่วน การทดลอง และการตรวจสอบ Manifest จริงบนคลัสเตอร์
2

ขั้นตอนลงมือปฏิบัติจริง (15–20 นาที)

ติ๊กถูกเมื่อทำแต่ละขั้นตอนเสร็จ
Step 1 of 5

เปิด Terminal แล้วใช้คำสั่ง kubectl เพื่อสร้างไฟล์ web-pod.yaml โดยไม่ต้องสั่งสร้าง Pod จริงบน Cluster ด้วยพารามิเตอร์ --dry-run=client:

Terminal Bash • Dry-Run Client to YAML
kubectl run static-web --image=nginx:latest --dry-run=client -o yaml > web-pod.yaml
cat web-pod.yaml
เปิดดูเนื้อหาในไฟล์ web-pod.yaml เพื่อสังเกต 4 โครงสร้างหลักของ Kubernetes: apiVersion, kind, metadata, และ spec
Step 2 of 5

สร้าง Pod เข้าสู่ Cluster ด้วยวิธี Declarative โดยใช้คำสั่ง apply:

Terminal Bash • Apply Manifest
kubectl apply -f web-pod.yaml
kubectl get pod static-web
✓ ผลลัพธ์ที่คาดหวัง: Terminal จะแสดงข้อความ pod/static-web created และเมื่อรัน get pod จะเห็นสถานะเปลี่ยนเป็น Running
Step 3 of 5

เปิดหน้าต่าง Headlamp ขึ้นมาเพื่อแก้ไขคอนฟิกของ Pod ด้วยโปรแกรมแก้ไข YAML ในตัว:

  1. เปิด Headlamp UI ขึ้นมา (ผ่าน http://localhost:8080 หรือ Headlamp Desktop)
  2. ไปที่เมนูด้านซ้าย Workloads > Pods แล้วคลิกเลือก Pod ชื่อ static-web
  3. คลิกปุ่ม Edit (ไอคอนดินสอ) บริเวณมุมบนขวา เพื่อเปิดหน้าต่าง Inline YAML Editor
  4. เพิ่ม Label ใหม่ environment: staging ภายใต้ส่วน metadata.labels:
    metadata:
      labels:
        environment: staging
        run: static-web
  5. คลิกปุ่ม Save & Apply บนหน้าต่าง UI เพื่อบันทึกการเปลี่ยนแปลง
เมื่อกด Save & Apply ตัว Headlamp จะส่งคำขออัปเดตไปยัง API Server ทันทีโดยไม่ต้องพิมพ์คำสั่งในคอนโซล
Step 4 of 5

กลับมาที่ Terminal เพื่อตรวจสอบว่าค่า Labels ที่เราแก้ผ่าน Headlamp UI สะท้อนลงไปในคลัสเตอร์จริงๆ หรือไม่:

Terminal Bash • Show Labels
kubectl get pod static-web --show-labels
✓ ผลลัพธ์ที่คาดหวัง: ในคอลัมน์ LABELS คุณจะเห็น environment=staging,run=static-web ปรากฏอยู่ ยืนยันว่าการแก้ไขบน Web UI ได้อัปเดตเข้าสู่ API Server เรียบร้อยแล้ว
Step 5 of 5

ดูประวัติเหตุการณ์วงจรชีวิต (Lifecycle Milestones) ของ Pod ผ่านแถบ Events:

  1. บนหน้ารายละเอียดของ Pod static-web ใน Headlamp UI ให้เลื่อนลงไปที่ส่วน Events
  2. สังเกตเหตุการณ์สำคัญที่เกิดขึ้นตามลำดับเวลา:
    • Scheduled: โหนดถูกเลือกให้ Pod เข้าไปรัน
    • Pulling & Pulled: ดาวน์โหลด Image nginx:latest สำเร็จ
    • Created: สร้าง Container สำเร็จ
    • Started: Container เริ่มทำงานสมบูรณ์
• ทำไม Event Stream ถึงสำคัญ?

ตาราง Events ใน Headlamp UI เป็นเครื่องมือวิเคราะห์ปัญหาอันดับ 1 ของวิศวกร Kubernetes เพราะหาก Pod รันไม่ขึ้น คุณจะเห็นข้อความแจ้งข้อผิดพลาด เช่น ImagePullBackOff หรือทรัพยากรไม่พอ ในตารางนี้ทันทีโดยไม่ต้องจำคำสั่งยาวๆ

ภารกิจสำหรับวันที่ 4 (Day 4 Mission)

ทดลองสร้างไฟล์ YAML แก้ไขบน Headlamp Inline Editor และตรวจสอบความถูกต้องดูนะครับ หากเรียบร้อยแล้วแจ้งได้เลยครับเพื่อไปต่อใน วันที่ 5: Pod Lifecycle, Logs และการวินิจฉัยปัญหา (Diagnostics)!

ขั้นตอนถัดไป: เตรียมพบกับการสตรีม Logs แบบสดๆ และการจำลอง Container Crash เพื่อแก้อาการ ImagePullBackOff ใน วันที่ 5
ข้อความแจ้งเตือน