บทนำ
ป>
เราจะกล่าวถึงอะไรในบทความนี้
- ConfigMap คืออะไร
- ต้นแบบ Redis ด้วย ConfigMap
- การสร้าง ConfigMap จากไฟล์
- การสร้าง ConfigMap จากไฟล์ YAML
- การใช้ ConfigMap เพื่ออ่านข้อมูลการกำหนดค่า
ข้อกำหนดเบื้องต้น ป>
- การปรับใช้แอปพลิเคชันบน AKS | ส่วนหนึ่ง – 1
ในบทความก่อนหน้าของการปรับใช้แอปพลิเคชันใน AKS ตอนที่ 1 คุณได้ตรวจสอบการปรับใช้ต้นแบบ Redis ที่คุณสร้างขึ้น คุณเห็นว่าการปรับใช้เกี่ยวข้องกับ ReplicaSet อย่างไร และ ReplicaSet เกี่ยวข้องกับพ็อดอย่างไร ในส่วนที่ 2 นี้ คุณจะสร้างต้นแบบ Redis นี้ขึ้นมาใหม่ด้วยการกำหนดค่าเฉพาะสภาพแวดล้อมที่มีให้ผ่าน ConfigMap แต่ก่อนอื่น มาสำรวจว่า ConfigMap คืออะไร
ConfigMap คืออะไร
นอกจากนี้คุณยังจะต้องแก้ไขแอปพลิเคชันตัวอย่างเพื่อให้รายละเอียดการกำหนดค่าโดยใช้ ConfigMap ConfigMap คือออบเจ็กต์ที่ใช้เพื่อให้รายละเอียดการกำหนดค่าแก่ Pods ช่วยให้คุณสามารถเก็บการตั้งค่าไว้นอกคอนเทนเนอร์จริงได้ จากนั้น คุณสามารถให้รายละเอียดการกำหนดค่าเหล่านี้แก่แอปพลิเคชันของคุณได้โดยการเชื่อมต่อ ConfigMap กับการปรับใช้ของคุณ
ต้นแบบ Redis ด้วย ConfigMap
ไม่มีอะไรผิดปกติกับการปรับใช้ครั้งก่อน ในกรณีการใช้งานจริง เป็นเรื่องยากที่คุณจะเปิดแอปพลิเคชันโดยไม่มีการตั้งค่าบางอย่าง ในกรณีนี้ เราจะตั้งค่าการกำหนดค่าสำหรับ redis-master โดยใช้ ConfigMap ConfigMap เป็นวิธีการกำหนดค่าคอนเทนเนอร์แบบพกพาโดยไม่ต้องมีอิมเมจเฉพาะสำหรับการกำหนดค่าแต่ละรายการ มีคู่คีย์-ค่าสำหรับข้อมูลที่จำเป็นต้องตั้งค่าบนคอนเทนเนอร์ ConfigMap ใช้สำหรับการกำหนดค่าที่ไม่เป็นความลับ Kubernetes มีวัตถุแยกต่างหากที่เรียกว่าความลับ ข้อมูลลับใช้สำหรับการกำหนดค่าที่มีข้อมูลสำคัญ เช่น รหัสผ่าน
ในตัวอย่างนี้ เราจะสร้าง ConfigMap ใน ConfigMap นี้ เราจะกำหนดค่า redis-config เป็นคีย์และค่าจะเป็น
maxmemory: "2mb"
maxmemory-policy: "allkeys-lru"
ตอนนี้ เรามาสร้าง ConfigMap นี้กันดีกว่า มีสองวิธีในการสร้าง ConfigMap
- การสร้าง ConfigMap จากไฟล์
- การสร้าง ConfigMap จากไฟล์ YAML
เราจะสำรวจแต่ละรายการโดยละเอียด
การสร้าง ConfigMap จากไฟล์
ขั้นตอนต่อไปนี้จะช่วยเราสร้าง ConfigMap จากไฟล์:
ขั้นตอนที่ 1 เปิดตัวแก้ไขโค้ด Azure Cloud Shell โดยพิมพ์ code redis-config ในเทอร์มินัล คัดลอกและวางสองบรรทัดต่อไปนี้แล้วบันทึกเป็น redis-config
maxmemory: "2mb"
maxmemory-policy: "allkeys-lru"
ป>
ขั้นตอนที่ 2 ตอนนี้คุณสามารถสร้าง ConfigMap โดยใช้โค้ดต่อไปนี้
kubectl create configmap example-redis-config --from-file=redis-config
คุณควรได้ผลลัพธ์ตามที่แสดงด้านล่าง
configmap/example-redis-config created
ขั้นตอนที่ 3 คุณสามารถใช้คำสั่งเดียวกันเพื่ออธิบาย ConfigMap นี้
kubectl describe configmap/example-redis-config ผลลัพธ์จะเป็นดังที่แสดงในภาพหน้าจอด้านล่าง
การสร้าง ConfigMap จากไฟล์ YAML
ในส่วนนี้ คุณจะสร้าง ConfigMap ขึ้นใหม่จากส่วนก่อนหน้าโดยใช้ไฟล์ YAML
ขั้นตอนที่ 1 ในการเริ่มต้น ให้ลบ ConfigMap ที่สร้างไว้ก่อนหน้านี้
kubectl delete configmap/example-redis-config ป>
ขั้นตอนที่ 2 คัดลอกและวางบรรทัดต่อไปนี้ลงในไฟล์ชื่อ example-redis-config.yaml จากนั้นจึงบันทึกไฟล์
apiVersion: v1
data:
redis-config: |-
maxmemory 2mb
maxmemory-policy allkeys-lru
kind: ConfigMap
metadata:
name: example-redis-config
namespace: default
ขั้นตอนที่ 3 ตอนนี้คุณสามารถสร้าง ConfigMap ของคุณใหม่ได้โดยใช้คำสั่งต่อไปนี้
kubectl create -f example-redis-config.yaml คุณควรได้ผลลัพธ์ตามที่แสดงด้านล่าง
configmap/example-redis-config created
ขั้นตอนที่ 5 คำสั่งนี้ส่งคืนเอาต์พุตเดียวกันกับเอาต์พุตก่อนหน้า
อย่างที่คุณเห็น เมื่อใช้ไฟล์ YAML คุณสามารถสร้าง ConfigMap เดียวกันได้
หมายเหตุ kubectl get มีตัวเลือกที่มีประโยชน์ -o ซึ่งสามารถใช้เพื่อรับเอาต์พุตของอ็อบเจ็กต์ใน YAML หรือ JSON สิ่งนี้มีประโยชน์มากในกรณีที่คุณทำการเปลี่ยนแปลงระบบด้วยตนเองและต้องการดูออบเจ็กต์ผลลัพธ์ในรูปแบบ YAML คุณสามารถรับ ConfigMap ปัจจุบันใน YAML ได้โดยใช้คำสั่งต่อไปนี้
kubectl get -o yaml configmap/example-redis-config ป>
ตอนนี้คุณได้กำหนด ConfigMap แล้ว มาใช้งานกัน
การใช้ ConfigMap เพื่ออ่านข้อมูลการกำหนดค่า
ในส่วนนี้ คุณจะกำหนดค่าการปรับใช้ Redis-master ใหม่เพื่ออ่านการกำหนดค่าจาก ConfgMap
ขั้นตอนที่ 1 ในการเริ่มต้น ให้แก้ไข redis-master-deployment.yaml เพื่อใช้ ConfigMap ดังต่อไปนี้ การเปลี่ยนแปลงที่คุณต้องทำจะมีการอธิบายหลังซอร์สโค้ด
หมายเหตุ หากคุณดาวน์โหลดซอร์สโค้ดจาก GitHub จะมีไฟล์อยู่ในโฟลเดอร์การปรับใช้:การปรับใช้แอปพลิเคชันบน AKS เรียกว่า redis-master-deployment_ Modified.yaml ซึ่งมีการเปลี่ยนแปลงที่จำเป็น
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: redis-master
labels:
app: redis
spec:
selector:
matchLabels:
app: redis
role: master
tier: backend
replicas: 1
template:
metadata:
labels:
app: redis
role: master
tier: backend
spec:
containers:
- name: master
image: k8s.gcr.io/redis:e2e
command:
- redis-server
- "/redis-master/redis.conf"
env:
- name: MASTER
value: "true"
volumeMounts:
- mountPath: /redis-master
name: config
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 6379
volumes:
- name: config
configMap:
name: example-redis-config
items:
- key: redis-config
path: redis.conf
มาเจาะลึกโค้ดเพื่อทำความเข้าใจส่วนต่างๆ กัน
บรรทัดที่ 24-26
บรรทัดเหล่านี้แนะนำคำสั่งที่จะดำเนินการเมื่อ Pod ของคุณเริ่มทำงาน ในกรณีนี้ การดำเนินการนี้จะเริ่มต้นเซิร์ฟเวอร์ Redis ที่ชี้ไปยังไฟล์การกำหนดค่าเฉพาะ
command:
- redis-server
- "/redis-master/redis.conf" บรรทัดที่ 27-29
แสดงวิธีส่งข้อมูลการกำหนดค่าไปยังคอนเทนเนอร์ที่ทำงานอยู่ วิธีการนี้ใช้ตัวแปรสภาพแวดล้อม ในรูปแบบ Docker สิ่งนี้จะเทียบเท่ากับ docker run -e "MASTER=true" --name master -p 6379:6379 -m 100M -c 100m -d Kubernetes /redis:v1. สิ่งนี้จะตั้งค่าตัวแปรสภาพแวดล้อม MASTER ให้เป็นจริง แอปพลิเคชันของคุณสามารถอ่านการตั้งค่าตัวแปรสภาพแวดล้อมสำหรับการกำหนดค่าได้
env:
- name: MASTER
value: "true" บรรทัดที่ 30-32
บรรทัดเหล่านี้เมานต์ไดรฟ์ข้อมูลที่เรียกว่า config (ไดรฟ์ข้อมูลนี้กำหนดไว้ในบรรทัดที่ 39-45) บนเส้นทาง /redis-master บนคอนเทนเนอร์ที่ทำงานอยู่ มันจะซ่อนสิ่งที่มีอยู่ใน /redis-master บนคอนเทนเนอร์ดั้งเดิม ในแง่ของนักเทียบท่า มันจะเทียบเท่ากับนักเทียบท่า run -v config:/redis-master -e "MASTER=TRUE" --ชื่อ มาสเตอร์ -p 6379:6379 -m 100M -c 100m -d Kubernetes / redis:v1
volumeMounts:
- mountPath: /redis-master
name: config
บรรทัดที่ 40
กำหนดชื่อให้กับวอลุ่ม ชื่อนี้จะถูกใช้ภายในบริบทของพ็อดนี้
name: config บรรทัดที่ 41-42
ประกาศว่าควรโหลดวอลุ่มนี้จากการกำหนดค่า example-redis ConfigMap ConfigMap นี้ควรมีอยู่แล้วในระบบ คุณได้กำหนดสิ่งนี้แล้ว ดังนั้นคุณก็สบายดี
configMap:
name: example-redis-config บรรทัดที่ 43-45
ที่นี่ คุณกำลังโหลดค่าของคีย์ redis-config (การตั้งค่าหน่วยความจำสูงสุดสองบรรทัด) เป็นไฟล์ redis.conf
items:
- key: redis-config
path: redis.conf
ขั้นตอนที่ 2 มาสร้างการปรับใช้ที่อัปเดตนี้กันดีกว่า
kubectl create -f redis-master-deployment_Modified.yml
สิ่งนี้ควรแสดงผลลัพธ์ดังต่อไปนี้
deployment.apps/redis-master created
ป>
ขั้นตอนที่ 3 ตอนนี้ตรวจสอบให้แน่ใจว่านำการกำหนดค่าไปใช้สำเร็จแล้ว ขั้นแรก หาชื่อพ็อด
kubectl get pods ป>
ขั้นตอนที่ 4 จากนั้นดำเนินการใน Pod และตรวจสอบว่าใช้การตั้งค่าแล้ว
kubectl exec -it redis-master-<pod-id> redis-cli
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "2097152"
127.0.0.1:6379> CONFIG GET maxmemory-policy
"maxmemory-policy"
"allkeys-lru"
127.0.0.1:6379> exit
ป>
โดยสรุป คุณเพิ่งดำเนินการในส่วนที่สำคัญและยุ่งยากในการกำหนดค่าแอปพลิเคชันบนระบบคลาวด์ คุณจะสังเกตด้วยว่าต้องกำหนดค่าแอปให้อ่านการกำหนดค่าแบบไดนามิก หลังจากที่คุณตั้งค่าแอปด้วยการกำหนดค่าแล้ว คุณจะเข้าถึงคอนเทนเนอร์ที่ทำงานอยู่เพื่อตรวจสอบการกำหนดค่าที่ทำงานอยู่
ในส่วนที่ 2 นี้ คุณได้กำหนดค่า Redis Master ให้โหลดข้อมูลการกำหนดค่าจาก ConfigMap ในตอนสุดท้ายส่วนที่ 3 เราจะปรับใช้แอปพลิเคชันแบบ end-to-end