Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

การปรับใช้แอปพลิเคชันบนบริการ Azure Kubernetes:ส่วนที่ 2 – การกำหนดค่าขั้นสูง

บทนำ

เราจะกล่าวถึงอะไรในบทความนี้

  • 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  

การปรับใช้แอปพลิเคชันบนบริการ Azure Kubernetes:ส่วนที่ 2 – การกำหนดค่าขั้นสูง

ขั้นตอนที่ 3 คุณสามารถใช้คำสั่งเดียวกันเพื่ออธิบาย ConfigMap นี้

kubectl describe configmap/example-redis-config  

ผลลัพธ์จะเป็นดังที่แสดงในภาพหน้าจอด้านล่าง

การปรับใช้แอปพลิเคชันบนบริการ Azure Kubernetes:ส่วนที่ 2 – การกำหนดค่าขั้นสูง

การสร้าง 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  

การปรับใช้แอปพลิเคชันบนบริการ Azure Kubernetes:ส่วนที่ 2 – การกำหนดค่าขั้นสูง

ขั้นตอนที่ 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