PlusMagi's Blog By Pitt Phunsanit

Kubernetes: ReplicaSet (ทำซำ)

ReplicaSet คือ Object ชิ้นหนึ่งของ Kubernetes (K8s) ที่ทำหน้าที่หลักในการ ควบคุมและดูแลจำนวน Pod ให้ทำงานอยู่ในระบบตามจำนวนที่เรากำหนดไว้ตลอดเวลา (Desired State) เพื่อให้เข้าใจง่ายขึ้น ลองจินตนาการว่า ReplicaSet เป็น “ผู้จัดการฝ่ายควบคุมคุณภาพ” ที่คอยตรวจดูหน้างานตลอดเวลา ถ้าเราบอกว่าต้องการให้มีแอปพลิเคชันนี้ทำงานอยู่ 3 หน้าต่าง (3 Pods) ตัว ReplicaSet จะคอยนับจำนวนอยู่เสมอ หากมี Pod ไหนค้าง พัง หรือดับไป มันจะสั่งสร้าง Pod ใหม่ขึ้นมาทดแทนทันที หรือถ้าจู่ๆ มี Pod เกินมา มันก็จะลบออกให้เหลือเท่าที่สั่ง

นอกเรื่องนิดหน่อย ถ้าเคยดู star trek / star gate ชื่อ Replica มันคือแมลงมุมเหล็กที่ทำทุกอย่างเพื่อ clone เพิ่มตัวเองนั่นละ แต่ ReplicaSet มันทำกับ pod คิดว่าเป็นเครื่อง cloning อัตโนมัติละกัน


หน้าที่หลักของ ReplicaSet


โครงสร้างหน้าตาของ ReplicaSet (YAML)

ตัวอย่างไฟล์คอนฟิกเวลาเราจะสร้าง ReplicaSet ขึ้นมาใช้งาน

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend-replicaset
  labels:
    app: guestbook
    tier: frontend
spec:
  # 1. กำหนดจำนวน Pod ที่ต้องการให้รันตลอดเวลา
  replicas: 3
  # 2. ตัวเลือกในการมองหา Pod ที่ต้องการควบคุม
  selector:
    matchLabels:
      tier: frontend
  # 3. แม่พิมพ์ (Template) สำหรับสร้าง Pod ใหม่ขึ้นมาหากจำนวนไม่ครบ
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v3

ข้อควรทราบ: Deployment vs ReplicaSet

ในความเป็นจริงของการทำงานกับ Kubernetes เราแทบจะไม่สร้าง ReplicaSet ขึ้นมาใช้งานตรง ๆ แต่เราจะนิยมสร้าง Object ที่ชื่อว่า Deployment แทน เพราะ Deployment เป็น Object ระดับที่สูงกว่า ซึ่งมันจะครอบและเข้าไปบริหารจัดการ ReplicaSet อีกทีหนึ่ง ข้อดีของการใช้ Deployment คือมันจะช่วยจัดการเรื่อง Rolling Update (การอัปเดตเวอร์ชันแอปพลิเคชันแบบไม่ล่ม) และการ Rollback (ย้อนกลับไปเวอร์ชันเก่า) ได้อย่างราบรื่น โดยที่ Deployment จะไปสั่งสร้างและสลับใช้งาน ReplicaSet ตัวใหม่ให้อัตโนมัติเบื้องหลัง


อ่านเพิ่มเติม

Exit mobile version