หลังจากที่เราเรียนรู้วิธีเปิดใช้งาน Kubernetes บน Docker Desktop ไปแล้ว ในบทเรียนนี้เราจะมาดูวิธีการปรับแต่งและควบคุมแอปพลิเคชันอย่างเป็นระบบด้วย Deployment (YAML) ร่วมกับการจัดการคอนฟิกผ่าน ConfigMap และข้อมูลลับด้วย Secret ผ่านการ Mount Volume แบบไม่ต้องพึ่งพา Environment Variables ครับ
ทำความรู้จัก ConfigMap และ Secret
เพื่อแยกส่วนประกอบของการตั้งค่าออกจากตัว Container Image เราจึงใช้วัตถุ 2 ตัวนี้เข้ามาช่วยบริหารจัดการข้อมูล:
- ConfigMap: สำหรับเก็บข้อมูลการตั้งค่าทั่วไป เช่น ไฟล์ Config, พอร์ต หรือ URL ระบบ
- Secret: สำหรับเก็บข้อมูลสำคัญ เช่น Password, API Tokens หรือข้อมูลฐานข้อมูล
ขั้นตอนที่ 1: เตรียมไฟล์ ConfigMap และ Secret (config.yaml)
เราจะนิยามค่าคอนฟิกและรหัสผ่านไว้ในไฟล์ config.yaml เดียวกัน ดังนี้:
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
app.conf: "mode=development\nport=8080"
---
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
stringData:
db-password.txt: "SuperSecretPassword123"
รันคำสั่งเพื่อสร้าง Object เข้าสู่ Cluster:
kubectl apply -f config.yaml
ขั้นตอนที่ 2: สร้างไฟล์ Deployment พร้อมสั่ง Mount Volume (deployment.yaml)
การ Mount แบบ Volume จะทำให้ Key กลายเป็น ชื่อไฟล์ และ Value กลายเป็น เนื้อหาในไฟล์ โดยอัตโนมัติ ช่วยลดความซับซ้อนของการตั้งค่า System Environment Variables ใน Container
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-web-app
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx-app
image: nginx:latest
ports:
- containerPort: 80
# กำหนดจุดที่ต้องการนำไฟล์ไปวางใน Container
volumeMounts:
- name: config-volume
mountPath: /etc/config
- name: secret-volume
mountPath: /etc/secrets
readOnly: true
# ระบุแหล่งที่มาของข้อมูลจาก ConfigMap และ Secret
volumes:
- name: config-volume
configMap:
name: app-config
- name: secret-volume
secret:
secretName: app-secret
รันคำสั่งปรับใช้ Deployment:
kubectl apply -f deployment.yaml
ขั้นตอนที่ 3: ตรวจสอบผลลัพธ์ภายใน Container
เมื่อ Pod ทำงานแล้ว เราสามารถเข้าไปเช็กไฟล์การตั้งค่าภายใน Container ได้โดยตรง:
1. ตรวจสอบไฟล์ ConfigMap:
kubectl exec -it <ชื่อ-pod> -- cat /etc/config/app.conf
2. ตรวจสอบไฟล์ Secret:
kubectl exec -it <ชื่อ-pod> -- cat /etc/secrets/db-password.txt
ขั้นตอนที่ 4: การทำความสะอาด (Clean Up)
เมื่อทดลองเสร็จเรียบร้อยแล้ว สามารถลบ Resource ทั้งหมดได้ง่ายๆ ด้วยคำสั่ง:
kubectl delete -f deployment.yamlkubectl delete -f config.yaml
สรุปข้อดีของการใช้งาน Mount Volume
Pro Tip: การ mount แบบ Volume มีจุดเด่นคือเมื่อมีการอัปเดตข้อมูลใน ConfigMap หรือ Secret ข้อมูลไฟล์ในโฟลเดอร์ปลายทางของ Container จะถูกอัปเดตตามแบบ Live Reload อัตโนมัติ โดยไม่จำเป็นต้องสั่ง Restart Pod ใหม่เลยครับ
No comments:
Post a Comment