08
10-Day Kubernetes Track • Week 2

วันที่ 8: ConfigMaps & Environment Variables

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

ยินดีต้อนรับสู่ วันที่ 8: ConfigMaps และการฉีด Environment Variables เข้าสู่ Pods!

วันนี้เราจะมาทำความเข้าใจแนวคิดการแยกข้อมูลคอนฟิกออกจากตัว Container Image โดยใช้ ConfigMaps ซึ่งช่วยให้แอปพลิเคชันของเรามีความยืดหยุ่น ย้ายไปรันในสภาพแวดล้อมต่างๆ (Dev, Staging, Prod) ได้ง่ายขึ้นโดยไม่ต้อง Rebuild Image ใหม่ครับ

5-10m

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

เข้าใจหลักการ 12-Factor App, การแยก Config ออกจาก Image, การส่งผ่านข้อมูลด้วย Environment Variables หรือ Mounted Volumes และการตรวจสอบบน Headlamp UI

15-20m

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

สร้าง ConfigMap จาก CLI, สำรวจ Key-Value บน Headlamp UI, ฉีดตัวแปรผ่าน envFrom, ทดสอบ printenv ภายใน Pod และแก้ไขค่าสดผ่าน UI

1

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

ทำไมต้องใช้ ConfigMaps?

ตามหลักการ 12-Factor App เราควรแยก Configuration ออกจาก Source Code เพื่อความมั่นคงปลอดภัยและความยืดหยุ่น โดย ConfigMap ทำหน้าที่เก็บข้อมูลไม่ลับแบบ Key-Value Pairs (เช่น พารามิเตอร์, URL, หรือไฟล์คอนฟิก)

• เปลี่ยนคอนฟิกได้โดยไม่ต้อง Rebuild Container Image

วิธีส่งผ่านค่าเข้าสู่ Pod

ทำได้ 2 วิธีหลัก:
1. Environment Variables: ฉีดค่าเข้าตรงๆ ผ่าน env หรือเหมาทั้งก้อนด้วย envFrom
2. Mounted Volumes: เมานต์ค่าออกมาเป็นไฟล์ลงในโฟลเดอร์ของ Container

• ยืดหยุ่นทั้งแบบตัวแปรเดี่ยวและแบบไฟล์การตั้งค่า

การบริหารผ่าน Headlamp UI

Headlamp มีเมนู Configuration > ConfigMaps ให้คุณสามารถตรวจสอบรายการ Key-Value Pairs ได้โดยตรง แก้ไขค่าสดๆ ผ่าน Inline Editor และตรวจสอบความสัมพันธ์กับ Pods ได้อย่างเป็นระเบียบ

• ส่องและแก้ไขคีย์คอนฟิกได้ง่ายเพียงไม่กี่คลิก
2

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

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

เปิด Terminal แล้วสร้าง ConfigMap ชื่อ app-config ที่บรรจุ Key-Value Pairs สำหรับตั้งค่าสีของแอปและระดับของ Log ด้วยพารามิเตอร์ --from-literal:

Terminal Bash • Create ConfigMap from Literals
kubectl create configmap app-config --from-literal=APP_COLOR=blue --from-literal=LOG_LEVEL=debug
✓ ผลลัพธ์ที่คาดหวัง: Terminal จะแสดงข้อความ configmap/app-config created พร้อมจัดเก็บคีย์ APP_COLOR: blue และ LOG_LEVEL: debug เข้าสู่คลัสเตอร์
Step 2 of 5

เปิด Headlamp UI เพื่อตรวจสอบการจัดเก็บข้อมูลคอนฟิกแบบกราฟิก:

  1. เปิด Headlamp UI ขึ้นมา (ผ่าน http://localhost:8080 หรือ Headlamp Desktop)
  2. ไปที่เมนูด้านซ้ายในส่วน Configuration > ConfigMaps
  3. คลิกเลือก app-config เพื่อตรวจสอบตาราง Data (จะเห็น APP_COLOR: blue และ LOG_LEVEL: debug อย่างชัดเจน)
บนหน้าจอ Headlamp คุณสามารถคลิกดูทั้งตาราง Data และโครงสร้าง Manifest YAML ต้นฉบับได้ในที่เดียว
Step 3 of 5

สร้างและปรับใช้ Pod ชื่อ config-demo ที่ดึงค่าทั้งหมดจาก app-config มาเป็น Environment Variables ภายใน Container:

Terminal Bash • Apply Pod with envFrom
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: config-demo
spec:
  containers:
    - name: web
      image: nginx:alpine
      envFrom:
        - configMapRef:
            name: app-config
EOF
✓ ผลลัพธ์ที่คาดหวัง: Terminal จะแสดงข้อความ pod/config-demo created และสถานะ Pod จะเปลี่ยนเป็น Running
Step 4 of 5

ทดสอบรันคำสั่งเช็กตัวแปรสภาพแวดล้อมภายในคอนเทนเนอร์ผ่าน CLI ด้วยคำสั่ง kubectl exec:

Terminal Bash • Verify printenv
kubectl exec config-demo -- printenv | grep APP_COLOR
✓ ผลลัพธ์ที่คาดหวัง: Terminal จะแสดงค่า APP_COLOR=blue ตรงตามที่นิยามไว้ใน ConfigMap ยืนยันว่าการฉีดตัวแปรผ่าน configMapRef สำเร็จสมบูรณ์
Step 5 of 5

ทดลองปรับเปลี่ยนค่าคอนฟิกสดๆ ผ่านตัวแก้ไขบนหน้าจอเว็บของ Headlamp:

  1. กลับมาที่หน้าต่าง Headlamp ในส่วน Configuration > ConfigMaps > app-config
  2. คลิกปุ่ม Edit (ไอคอนดินสอ) บริเวณมุมบนขวา
  3. แก้ไขค่าของคีย์ APP_COLOR จาก blue เป็น green
  4. คลิกปุ่ม Save & Apply เพื่อบันทึกการเปลี่ยนแปลงเข้าสู่คลัสเตอร์
• ข้อสังเกตสำคัญด้านสถาปัตยกรรม:

เมื่อแก้ไข ConfigMap แล้ว ตัวแปร Environment Variables ใน Pod เดิมจะไม่ถูกอัปเดตโดยอัตโนมัติ (เพราะกระบวนการ Process ภายในคอนเทนเนอร์รับค่า env ตั้งแต่ตอน Start เครื่อง) หากต้องการให้ Pod ใช้งานคอนฟิกใหม่ จำเป็นต้องรีสตาร์ต Pod หรือสั่ง rollout restart แต่หากใช้วิธี Mounted Volume ระบบจะอัปเดตไฟล์ให้แบบเรียลไทม์

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

ลองสร้างและฉีด ConfigMap เข้าสู่ Pod ดูนะครับ หากตรวจสอบค่า Environment Variable บน CLI และแก้ไขผ่าน Headlamp UI เรียบร้อยแล้ว แจ้งได้เลยครับ!

ขั้นตอนถัดไป: เมื่อพร้อมแล้ว บอกผมได้เลยนะครับเพื่อไปต่อใน วันที่ 9: Persistent Storage Primitives (PVs, PVCs และ StorageClasses)
ข้อความแจ้งเตือน