การ Deploy, Scale และ Monitor แอปพลิเคชันแบบ Stateful

Introduction to Kubernetes

Frank Heilmann

Platform Architect and Freelance Instructor

ทบทวนแอปพลิเคชันแบบ Stateless

  • สรุปสั้น ๆ: แอปพลิเคชันแบบ Stateless จะใช้ "Deployments" ใน Kubernetes
  • ใช้เมื่อแต่ละ Pod ของแอปพลิเคชันทำงานเหมือนกันทุกประการ
  • แอปพลิเคชันแบบ Stateful ต้องการ Pod ที่อยู่ในชุดเดียวกัน แต่อาจทำงานต่างกันและใช้ข้อมูลต่างกัน
  • สิ่งที่เรียนรู้เกี่ยวกับ Deployments ส่วนใหญ่สามารถนำมาใช้กับ StatefulSets ได้เช่นกัน
Introduction to Kubernetes

แอปพลิเคชันแบบ Stateful

  • แอปแบบ Stateful:

    • แนวคิดทั่วไป
    • เหมาะกับ Kubernetes
    • บันทึก State บางส่วน
  • เมื่อถูกหยุดหรือขัดจังหวะ Replica ใหม่ (Pod) สามารถอ่าน State ที่บันทึกไว้และทำงานต่อจากจุดนั้นได้

  • ตัวอย่าง:
    • ฐานข้อมูล backend (เช่น PostgreSQL) ส่งข้อมูลไปยัง frontend โดยใช้ 3 Pod
    • ทุกครั้งที่อัปเดตข้อมูลผ่าน Pod ใด ๆ ข้อมูลนั้นต้องถูกบันทึกไว้อย่างถาวร
    • เมื่อ Pod หนึ่งสิ้นสุดลง Pod ใหม่จะถูกสร้างขึ้นและต้องรับ State ที่บันทึกไว้ต่อ
Introduction to Kubernetes

Kubernetes StatefulSets

  • แอปพลิเคชันแบบ Stateful จะถูกแปลงเป็น "Kubernetes StatefulSets"
  • Manifest ตัวอย่างประกอบด้วยส่วนเดียวกับ:
    • apiVersion, kind, metadata, spec, template
  • replicas กำหนดจำนวน Pod ใน StatefulSet
  • รายละเอียดของ selector จะกล่าวถึงในภายหลัง
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: <deployment name>
  labels:
    app: <a label for the application>
spec:
  replicas: <number of initial replicas>
  selector:
    matchLabels:
      app: <matches the label above>
  template:
    metadata:
      labels:
        app: <label to be given to each pod>
    spec:
      containers:
      - name: <container name>
        image: <the image to be used>
        ports:
        - containerPort: <ports for networking>
Introduction to Kubernetes

การ Deploy ไปยัง Kubernetes Cluster

  • StatefulSet ถูก deploy คล้ายกับ Deployments: kubectl apply -f <manifest.yml>
  • เมื่อ deploy แล้ว StatefulSet จะถูกสร้างต่างจาก Deployment:
    • Pod จะถูกสร้างทีละตัวตามลำดับ ไม่ใช่พร้อมกันทั้งหมดเหมือน Deployment
    • Pod จะได้รับชื่อที่คาดเดาได้ เช่น pod-0, pod-1, pod-2 เป็นต้น
  • หมายความว่า: ต่างจาก Pod ของ Deployment, Pod ของ StatefulSet มี Identity และ State เป็นของตัวเอง
  • ดังนั้น Pod ต่าง ๆ ใน StatefulSet ที่มี Identity ต่างกันสามารถทำหน้าที่ต่างกันในแอปพลิเคชันได้
Introduction to Kubernetes

การ Scale StatefulSet

  • เช่นเดียวกับ Deployments, StatefulSets สามารถ Scale ขึ้นหรือลงได้:
    • เปลี่ยนจำนวน replicas ใน Manifest แล้ว apply ใหม่
    • หรือใช้คำสั่ง kubectl scale statefulsets ...
  • เมื่อ Scale ขึ้น Pod ใหม่จะถูกสร้างทีละตัวตามลำดับ:
    • เช่น มี pod-0, pod-1, pod-2 แล้ว pod-3 จากนั้น pod-4 จะถูกเพิ่ม
  • เมื่อ Scale ลง Pod ที่สร้างล่าสุดจะถูกลบก่อน:
    • เช่น pod-4 ก่อน แล้วจึง pod-3
Introduction to Kubernetes

การ Monitor StatefulSet

  • เช่นเดียวกับ Deployments การ Monitor ช่วยให้รับมือกับปัญหาต่าง ๆ ได้ เช่น ระบบล่ม, โหลดพุ่งสูง หรือ Storage ขาดหาย
  • ที่นี่เราจะใช้ kubectl สำหรับงาน Monitor พื้นฐาน
  • คำสั่งที่ใช้บ่อย: เหมือนกับ Deployments
  • ตัวอย่างที่ 1: kubectl get pods แสดง Pod ทั้งหมดใน StatefulSet พร้อมสถานะปัจจุบัน
  • ตัวอย่างที่ 2: kubectl get services แสดง Service ทั้งหมดที่ StatefulSet อาจใช้งาน
Introduction to Kubernetes

มาฝึกกันเถอะ!

Introduction to Kubernetes

Preparing Video For Download...