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

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

บทนำ

ในบทความก่อนหน้าของการปรับใช้แอปพลิเคชันบน AKS ภาค 1 คุณได้ตรวจสอบการปรับใช้ Redis Master ที่สร้างขึ้น คุณเห็นว่า Deployment เกี่ยวข้องกับ ReplicaSet อย่างไร และ ReplicaSet เกี่ยวข้องกับ Pods อย่างไร ในภาค 2 นี้ คุณจะสร้าง Redis Master ใหม่ด้วยการกำหนดค่าที่เฉพาะเจาะจงสำหรับสภาพแวดล้อมซึ่งได้รับผ่าน ConfigMap แต่ก่อนอื่น เรามาสำรวจกันก่อนว่า ConfigMap คืออะไร

ConfigMap คืออะไร?

ConfigMap เป็นออบเจ็กต์ที่ใช้ให้รายละเอียดการกำหนดค่ากับ Pods มันช่วยให้คุณเก็บการตั้งค่าคอนฟิกูเรชันไว้นอกคอนเทนเนอร์จริง จากนั้นคุณสามารถส่งมอบรายละเอียดการกำหนดค่าเหล่านี้ให้แอปพลิเคชันของคุณได้โดยการเชื่อมต่อ ConfigMap กับ Deployment ของคุณ

Redis Master พร้อม ConfigMap

ไม่มีอะไรผิดปกติกับ Deployment ก่อนหน้า ในกรณีการใช้งานจริง จะเป็นเรื่องนادرةที่คุณจะเปิดแอปพลิเคชันโดยไม่มีการตั้งค่าคอนฟิกูเรชันบางอย่าง ในกรณีนี้ เราจะตั้งค่าคอนฟิกูเรชันสำหรับ redis-master โดยใช้ ConfigMap ConfigMap เป็นวิธีที่พกพาได้ในการกำหนดค่าคอนเทนเนอร์โดยไม่ต้องมีอิมเมจเฉพาะสำหรับแต่ละการกำหนดค่า มันมีคู่คีย์-ค่า (key-value pair) สำหรับข้อมูลที่ต้องตั้งค่าบนคอนเทนเนอร์ ConfigMap ใช้สำหรับการกำหนดค่าที่ไม่ใช่ข้อมูลลับ Kubernetes มีออบเจ็กต์แยกต่างหากที่เรียกว่า Secret ซึ่งใช้สำหรับการกำหนดค่าที่มีข้อมูลสำคัญ เช่น รหัสผ่าน

ในตัวอย่างนี้ เราจะสร้าง ConfigMap ใน ConfigMap นี้ เราจะกำหนดค่า redis-config เป็นคีย์ และค่าจะเป็นดังนี้:

maxmemory: "2mb"
maxmemory-policy: "allkeys-lru"

ตอนนี้ มาสร้าง ConfigMap นี้กัน มี 2 วิธีในการสร้าง ConfigMap:

  • สร้าง ConfigMap จากไฟล์
  • สร้าง ConfigMap จากไฟล์ YAML

เราจะสำรวจแต่ละวิธีอย่างละเอียด

การสร้าง ConfigMap จากไฟล์

ขั้นตอนต่อไปนี้จะช่วยให้เราสร้าง ConfigMap จากไฟล์ได้:

ขั้นตอนที่ 1. เปิดตัวแก้ไขโค้ด Azure Cloud Shell โดยพิมพ์ code redis-config ในเทอร์มินัล คัดลอกและวาง 2 บรรทัดต่อไปนี้และบันทึกเป็น 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

ขั้นตอนที่ 4. คำสั่งนี้จะส่งคืนผลลัพธ์เดียวกับครั้งก่อน

ตามที่คุณเห็น การใช้ไฟล์ YAML คุณสามารถสร้าง ConfigMap เดียวกันได้

หมายเหตุ. kubectl get มีตัวเลือกที่มีประโยชน์คือ -o ซึ่งสามารถใช้เพื่อรับเอาต์พุตของออบเจ็กต์ในรูปแบบ YAML หรือ JSON นี่เป็นประโยชน์มากในกรณีที่คุณทำการเปลี่ยนแปลงด้วยตนเองระบบและต้องการดูออบเจ็กต์ที่เป็นผลลัพธ์ในรูปแบบ YAML คุณสามารถรับ ConfigMap ปัจจุบันในรูปแบบ YAML โดยใช้คำสั่งต่อไปนี้:

kubectl get -o yaml configmap/example-redis-config

ตอนนี้ที่คุณมี ConfigMap ที่กำหนดไว้แล้ว มาใช้มันกัน

การใช้ ConfigMap เพื่ออ่านข้อมูลการกำหนดค่า

ในส่วนนี้ คุณจะกำหนดค่า Redis Master Deployment ใหม่เพื่ออ่านการกำหนดค่าจาก ConfigMap

ขั้นตอนที่ 1. เริ่มต้นด้วยการแก้ไข redis-master-deployment.yaml เพื่อใช้ ConfigMap ดังนี้ การเปลี่ยนแปลงที่คุณต้องทำจะได้รับการอธิบายหลังจากโค้ดต้นฉบับ

หมายเหตุ. หากคุณดาวน์โหลดโค้ดต้นฉบับจาก GitHub จะมีไฟล์ในโฟลเดอร์ deployment: Application deployment on AKS ชื่อ redis-master-deployment_Modified.yaml ซึ่งมีการเปลี่ยนแปลงที่จำเป็นแล้ว

apiVersion: apps/v1 # สำหรับเวอร์ชันก่อน 1.9.0 ใช้ 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-server โดยชี้ไปที่ไฟล์กำหนดค่าเฉพาะ

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 เป็น true แอปพลิเคชันของคุณสามารถอ่านการตั้งค่าตัวแปรสภาพแวดล้อมเพื่อการกำหนดค่าได้

env:
- name: MASTER
  value: "true"

บรรทัดที่ 30-32

บรรทัดเหล่านี้แม้ตะแกรงโวล्यूमที่เรียกว่า config (โวล्यุมนี้ถูกกำหนดในบรรทัดที่ 39-45) บนเส้นทาง /redis-master บนคอนเทนเนอร์ที่กำลังทำงาน มันจะซ่อนสิ่งที่มีอยู่บน /redis-master บนคอนเทนเนอร์เดิม ในแง่ของ Docker จะเทียบเท่ากับ docker run -v config:/redis-master -e "MASTER=TRUE" --name master -p 6379:6379 -m 100M -c 100m -d Kubernetes /redis:v1

volumeMounts:
- mountPath: /redis-master
  name: config

บรรทัดที่ 40

ตั้งชื่อโวลยูมว่า config ชื่อนี้จะถูกใช้ภายในบริบทของ Pod นี้

name: config

บรรทัดที่ 41-42

ประกาศว่าโวลยูมนี้ควรโหลดจาก ConfigMap example-redis-config ConfigMap นี้ควรมีอยู่ในระบบแล้ว คุณได้กำหนดไว้แล้ว จึงพร้อมใช้งาน

configMap:
  name: example-redis-config

บรรทัดที่ 43-45

ที่นี่ คุณกำลังโหลดค่าของคีย์ redis-config (การตั้งค่า maxmemory 2 บรรทัด) เป็นไฟล์ redis.conf

items:
- key: redis-config
  path: redis.conf

ขั้นตอนที่ 2. มาสร้าง Deployment ที่อัปเดตแล้วกัน

kubectl create -f redis-master-deployment_Modified.yml

ควรแสดงผลดังนี้:

deployment.apps/redis-master created

ขั้นตอนที่ 3. ตอนนี้มาตรวจสอบว่าการกำหนดค่าถูกนำไปใช้สำเร็จหรือไม่ ก่อนอื่น ให้หาชื่อ Pod

kubectl get pods

ขั้นตอนที่ 4. จากนั้น exec เข้าไปใน 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

สรุปคือ คุณเพิ่งดำเนินการส่วนที่สำคัญและท้าทายของการกำหนดค่าแอปพลิเคชัน Cloud-native คุณจะสังเกตเห็นว่าแอปต้องถูกกำหนดค่าเพื่ออ่านคอนฟิกแบบไดนามิก หลังจากตั้งค่าแอปของคุณด้วยการกำหนดค่า คุณเข้าถึงคอนเทนเนอร์ที่กำลังทำงานเพื่อตรวจสอบการกำหนดค่าที่กำลังทำงานอยู่

ในภาค 2 นี้ คุณได้กำหนดค่า Redis Master ให้โหลดข้อมูลการกำหนดค่าจาก ConfigMap ในภาคสุดท้ายภาค 3 เราจะปรับใช้แอปพลิเคชันแบบ end-to-end