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

ConfigMap — แยกค่าตั้งค่าออกจาก image

เปลี่ยน config โดยไม่ต้อง build image ใหม่

เปรียบเทียบให้เห็นภาพ

ConfigMap เหมือนป้ายตั้งค่าที่แปะข้างเครื่อง แทนที่จะสลักค่าลงในตัวเครื่อง (image) เลย · อยากเปลี่ยน "URL ของฐานข้อมูล" หรือ "โหมด debug" ก็แก้ที่ป้าย ไม่ต้องหล่อเครื่องใหม่

หลักการสำคัญ (จาก 12-factor app): แยก config ออกจากโค้ด · image เดียวกันควรรันได้ทั้ง dev/staging/prod โดยเปลี่ยนแค่ค่าตั้งค่า · ConfigMap เก็บค่าที่ไม่เป็นความลับ (URL, ชื่อ, flag) แล้วป้อนให้ container

ค่าตั้งค่า/ความลับป้อนเข้า Pod เป็น env var หรือไฟล์

ConfigMapค่าทั่วไป (plain)
Secretค่าลับ (base64)
env / volume
Pod
containerอ่านค่าจาก env/ไฟล์

image เดียวกันรันได้ทุก environment เพราะค่าอยู่ข้างนอก

ConfigMap (ค่าทั่วไป) และ Secret (ค่าลับ) ป้อนเข้า Pod ได้ทั้งเป็น env var หรือไฟล์
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_MODE: "production"
  DB_HOST: "db.production.svc.cluster.local"
---
# ในสเปกของ container:
envFrom:
  - configMapRef:
      name: app-config
สร้าง ConfigMap แล้วป้อนเป็น env var

สรุป Key Takeaways

  • ConfigMap = แยกค่าตั้งค่าที่ไม่ลับออกจาก image (image เดียวรันได้ทุก environment)
  • ป้อนเข้า container เป็น env var หรือ mount เป็นไฟล์
  • อย่าเก็บความลับใน ConfigMap (plain text) — ใช้ Secret
อ่านจบแล้วอย่าลืมทำเครื่องหมาย