ยินดีต้อนรับสู่ วันที่ 4: การจัดการ Manifests แบบ Declarative YAML และการใช้ Headlamp Inline Editor!
วันนี้เราจะมาเรียนรู้วิธีสร้างและแก้ไขทรัพยากรใน Kubernetes ด้วยไฟล์ YAML แบบ Declarative และลองใช้ตัวแก้ไข YAML (Inline Editor) บน Headlamp UI เพื่อแก้ไขคอนฟิกและดูการอัปเดตแบบเรียลไทม์ครับ
ช่วงที่ 1: สรุปแนวคิดสถาปัตยกรรม
เข้าใจความต่างระหว่าง Imperative vs. Declarative Management และการทำงานของ Headlamp Inline YAML Editor
ช่วงที่ 2: การลงมือปฏิบัติจริง (5 ขั้นตอน)
สร้างไฟล์ YAML จาก dry-run นำไป apply บนคลัสเตอร์ ใช้ Inline Editor เพิ่ม label ตรวจสอบผล และสำรวจ Event Stream
สรุปแนวคิดและสถาปัตยกรรม (5–10 นาที)
Declarative vs. Imperative Management
Imperative: การสั่งสร้างหรือแก้ไขทรัพยากรตรงๆ ผ่านคำสั่ง เช่น kubectl run ... หรือ kubectl create ... เหมาะสำหรับการทดสอบด่วน แต่ติดตามประวัติยาก
Declarative: การระบุสถานะเป้าหมายที่ต้องการ (Desired State) ไว้ในไฟล์ YAML แล้วส่งให้ Kubernetes API Server ปรับสถานะจริงให้ตรงกันผ่านคำสั่ง kubectl apply -f ซึ่งเป็นมาตรฐานของการทำ GitOps และระบบ Production
Headlamp Inline YAML Editor
Headlamp มีฟีเจอร์ตัวแก้ไข YAML ในตัว (Inline YAML Editor) ช่วยให้เราสามารถกดดูโครงสร้าง Manifest ของทรัพยากรทุกชิ้นแบบสดๆ สามารถแก้ไขค่าต่างๆ เช่น labels, annotations, หรือ replicas แล้วกดบันทึกเพื่อ Apply การเปลี่ยนแปลงไปยัง API Server ได้ทันทีโดยไม่ต้องสลับกลับไปที่ Terminal
ขั้นตอนลงมือปฏิบัติจริง (15–20 นาที)
เปิด Terminal แล้วใช้คำสั่ง kubectl เพื่อสร้างไฟล์ web-pod.yaml โดยไม่ต้องสั่งสร้าง Pod จริงบน Cluster ด้วยพารามิเตอร์ --dry-run=client:
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
สร้าง Pod เข้าสู่ Cluster ด้วยวิธี Declarative โดยใช้คำสั่ง apply:
kubectl apply -f web-pod.yaml
kubectl get pod static-web
pod/static-web created และเมื่อรัน get pod จะเห็นสถานะเปลี่ยนเป็น Running
เปิดหน้าต่าง Headlamp ขึ้นมาเพื่อแก้ไขคอนฟิกของ Pod ด้วยโปรแกรมแก้ไข YAML ในตัว:
- เปิด Headlamp UI ขึ้นมา (ผ่าน http://localhost:8080 หรือ Headlamp Desktop)
- ไปที่เมนูด้านซ้าย Workloads > Pods แล้วคลิกเลือก Pod ชื่อ static-web
- คลิกปุ่ม Edit (ไอคอนดินสอ) บริเวณมุมบนขวา เพื่อเปิดหน้าต่าง Inline YAML Editor
-
เพิ่ม Label ใหม่
environment: stagingภายใต้ส่วนmetadata.labels:metadata: labels: environment: staging run: static-web - คลิกปุ่ม Save & Apply บนหน้าต่าง UI เพื่อบันทึกการเปลี่ยนแปลง
กลับมาที่ Terminal เพื่อตรวจสอบว่าค่า Labels ที่เราแก้ผ่าน Headlamp UI สะท้อนลงไปในคลัสเตอร์จริงๆ หรือไม่:
kubectl get pod static-web --show-labels
environment=staging,run=static-web ปรากฏอยู่ ยืนยันว่าการแก้ไขบน Web UI ได้อัปเดตเข้าสู่ API Server เรียบร้อยแล้ว
ดูประวัติเหตุการณ์วงจรชีวิต (Lifecycle Milestones) ของ Pod ผ่านแถบ Events:
- บนหน้ารายละเอียดของ Pod
static-webใน Headlamp UI ให้เลื่อนลงไปที่ส่วน Events - สังเกตเหตุการณ์สำคัญที่เกิดขึ้นตามลำดับเวลา:
- Scheduled: โหนดถูกเลือกให้ Pod เข้าไปรัน
- Pulling & Pulled: ดาวน์โหลด Image nginx:latest สำเร็จ
- Created: สร้าง Container สำเร็จ
- Started: Container เริ่มทำงานสมบูรณ์
ตาราง Events ใน Headlamp UI เป็นเครื่องมือวิเคราะห์ปัญหาอันดับ 1 ของวิศวกร Kubernetes เพราะหาก Pod รันไม่ขึ้น คุณจะเห็นข้อความแจ้งข้อผิดพลาด เช่น ImagePullBackOff หรือทรัพยากรไม่พอ ในตารางนี้ทันทีโดยไม่ต้องจำคำสั่งยาวๆ
ทดลองสร้างไฟล์ YAML แก้ไขบน Headlamp Inline Editor และตรวจสอบความถูกต้องดูนะครับ หากเรียบร้อยแล้วแจ้งได้เลยครับเพื่อไปต่อใน วันที่ 5: Pod Lifecycle, Logs และการวินิจฉัยปัญหา (Diagnostics)!
ImagePullBackOff ใน วันที่ 5