StatefulSets สำหรับแอปแบบมีสถานะ
นำแอปพลิเคชันแบบมีสถานะ เช่น ฐานข้อมูล ไปใช้งานและจัดการด้วย StatefulSets พร้อมรับประกันตัวระบุเครือข่ายที่เสถียรและพื้นที่จัดเก็บถาวร
StatefulSets สำหรับแอปแบบมีสถานะ เป็นบทเรียน Kubernetes Basics ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kubernetes Basics และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kubernetes Basics มีบทเรียนทั้งหมด 4 บทเรียน
StatefulSets สำหรับแอปพลิเคชันที่มีสถานะ
ยินดีต้อนรับ! ในบทเรียนนี้ เราจะเจาะลึกเรื่อง StatefulSets ซึ่งเป็นออบเจ็กต์ของ Kubernetes ที่ออกแบบมาสำหรับจัดการแอปพลิเคชันที่มีสถานะ
แอปพลิเคชันไร้สถานะสามารถเพิ่มขนาดและแทนที่ได้ง่าย แต่แอปพลิเคชันที่มีสถานะต้องการข้อมูลระบุตัวตนที่ไม่ซ้ำกันและพื้นที่จัดเก็บถาวรสำหรับแต่ละอินสแตนซ์ ลองนึกถึงฐานข้อมูล คิวข้อความ หรือแอปพลิเคชันที่กำหนดเองซึ่งจัดเก็บข้อมูลไว้ภายในเครื่อง
เหตุใดจึงต้องมีสถานะ: ความท้าทาย
Deployments แบบดั้งเดิมเหมาะอย่างยิ่งสำหรับแอปพลิเคชันไร้สถานะ หากพ็อดหยุดทำงาน พ็อดใหม่จะเข้ามาแทนที่ และไม่สำคัญว่าพ็อดใดจะเป็นผู้ให้บริการคำขอ
แต่สำหรับแอปพลิเคชันที่มีสถานะ แต่ละแบบจำลองมักต้องมีข้อมูลระบุตัวตนที่เสถียรและไม่ซ้ำกัน รวมถึงพื้นที่จัดเก็บเฉพาะของตนเอง หากพ็อดฐานข้อมูลเริ่มทำงานใหม่ พ็อดนั้นต้องเชื่อมต่อกลับไปยังโวลุมข้อมูลเฉพาะของตน
ข้อมูลระบุตัวตนเครือข่ายและพ็อดที่เสถียร
คุณสมบัติสำคัญของ StatefulSets คือการจัดเตรียม ตัวระบุเครือข่ายที่เสถียรและไม่ซ้ำกัน สำหรับแต่ละพ็อด
- พ็อดจะมีชื่อในลำดับที่คาดเดาได้ เช่น
web-0และweb-1 - พ็อดจะคงชื่อโฮสต์เดิมไว้แม้เริ่มทำงานใหม่
- วิธีนี้ทำให้บริการอื่นเชื่อมต่อไปยังแบบจำลองเฉพาะได้อย่างเชื่อถือได้
พื้นที่จัดเก็บที่เสถียรและถาวร
StatefulSets รับรองว่าพ็อดแต่ละตัวจะได้รับ พื้นที่จัดเก็บที่เสถียรและถาวร โดยใช้ Persistent Volume Claims (PVCs)
เมื่อสร้างพ็อดของ StatefulSet ระบบจะจัดเตรียม PVC โดยอัตโนมัติตามคำจำกัดความของ volumeClaimTemplates หากพ็อดหยุดทำงานและถูกสร้างขึ้นใหม่ พ็อดจะเชื่อมต่อกับ PVC เดิมอีกครั้ง จึงยังคงใช้ข้อมูลเดิมได้
โครงสร้างของ StatefulSet YAML
คำจำกัดความ StatefulSet ใน YAML มีลักษณะคล้ายกับ Deployment แต่มีส่วนเพิ่มเติมที่สำคัญ โดยประกอบด้วย:
apiVersion,kind,metadataspec.replicas,spec.selector,spec.templateเช่นเดียวกับ Deploymentsspec.serviceName: เชื่อมโยงกับบริการแบบไม่มีหัวspec.volumeClaimTemplates: กำหนดวิธีสร้าง PVC สำหรับพ็อดแต่ละตัว
บริการแบบไม่มีหัวสำหรับรหัสประจำตัวที่เสถียร
StatefulSets จำเป็นต้องมี บริการแบบไม่มีหัว เพื่อให้ข้อมูลระบุตัวตนบนเครือข่ายมีความเสถียร บริการแบบไม่มีหัวจะไม่มี cluster IP แต่จะส่งคืนที่อยู่ IP ของพ็อดที่บริการเลือกไว้โดยตรง
StatefulSet ใช้บริการนี้เพื่อลงทะเบียนรายการ DNS สำหรับพ็อดแต่ละตัว เช่น pod-0.my-service.my-namespace.svc.cluster.local
apiVersion: v1
kind: Service
metadata:
name: my-app-headless
spec:
ports:
- port: 80
name: web
clusterIP: None # This makes it a headless service
selector:
app: my-appVolumeClaimTemplates
ส่วน volumeClaimTemplates เป็นส่วนเฉพาะของ StatefulSets โดยเป็นแม่แบบสำหรับ Persistent Volume Claims (PVCs) ที่จะสร้างขึ้นสำหรับแต่ละแบบจำลอง
พ็อดแต่ละตัวใน StatefulSet เช่น my-app-0 และ my-app-1 จะได้รับ PVC ของตนเอง เช่น data-my-app-0 และ data-my-app-1 ตามแม่แบบนี้ ทำให้มีพื้นที่จัดเก็บเฉพาะ
volumeClaimTemplates:
- metadata:
name: data # This name is used in Pod's volumeMounts
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: standard
resources:
requests:
storage: 1Giตัวอย่าง StatefulSet ฉบับสมบูรณ์
ต่อไปนี้คือตัวอย่าง StatefulSet ของ Nginx แบบง่ายฉบับสมบูรณ์ โปรดสังเกต serviceName ที่เชื่อมโยงกับบริการแบบไม่มีหัว และ volumeClaimTemplates
หากต้องการนำไปใช้งาน ให้บันทึกเป็น nginx-statefulset.yaml แล้วเรียกใช้ kubectl apply -f nginx-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx-headless" # Must match headless service name
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www # Mounts the volume from the PVC
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www # This name links to volumeMounts.name
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: standard
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: nginx-headless
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginxการตั้งชื่อและลำดับของพ็อด
หลังจากนำไปใช้งานแล้ว คุณจะเห็นพ็อดที่มีชื่อในลักษณะ web-0 และ web-1 ดัชนีเหล่านี้มีความเสถียรและไม่ซ้ำกัน
StatefulSets บังคับใช้ลำดับอย่างเคร่งครัดสำหรับการดำเนินการปรับขนาด พ็อดจะถูกสร้างตามลำดับ (0, 1, 2...) และยุติการทำงานในลำดับย้อนกลับ (..., 2, 1, 0)
แนวทางที่เป็นลำดับนี้สำคัญอย่างยิ่งต่อระบบแบบกระจายที่มีสถานะจำนวนมาก เพื่อรักษาความสอดคล้องของข้อมูล
การปรับขนาดและการอัปเดตแบบทยอย
คุณสามารถปรับขนาด StatefulSet ได้เช่นเดียวกับ Deployment โดยใช้ kubectl scale statefulset web --replicas=3
การอัปเดตแบบทยอยก็ทำงานได้เช่นกัน โดยยังคงรับประกันลำดับเดิม: พ็อดจะได้รับการอัปเดตทีละตัวตามลำดับหมายเลขย้อนกลับ และจะไม่อัปเดตพ็อดถัดไปจนกว่าพ็อดก่อนหน้าจะพร้อมใช้งาน
การจัดการอย่างรอบคอบนี้ช่วยลดการหยุดชะงักของแอปพลิเคชันที่มีสถานะ
ตรวจสอบความเข้าใจของคุณ
ข้อใดต่อไปนี้เป็นคุณลักษณะสำคัญหรือข้อกำหนดของ Kubernetes StatefulSets
ทบทวน: StatefulSets ในการใช้งานจริง
ทำได้ดีมาก! ในบทเรียนนี้ เราได้สำรวจ StatefulSets ซึ่งเป็นออบเจ็กต์ Kubernetes ที่ทรงพลังสำหรับจัดการแอปพลิเคชันที่มีสถานะ
- มีข้อมูลระบุตัวตนบนเครือข่ายที่เสถียรและดำเนินการตามลำดับ
- ใช้
volumeClaimTemplatesเพื่อจัดเตรียมพื้นที่จัดเก็บเฉพาะและถาวรสำหรับแต่ละแบบจำลอง - บริการแบบไม่มีหัว เป็นสิ่งจำเป็นสำหรับรหัสประจำตัวเครือข่ายที่เสถียร
StatefulSets เป็นพื้นฐานสำคัญสำหรับการเรียกใช้ฐานข้อมูลและเวิร์กโหลดที่มีสถานะสำคัญอื่น ๆ บน Kubernetes อย่างเชื่อถือได้
คำถามที่พบบ่อย
บทเรียน “StatefulSets สำหรับแอปแบบมีสถานะ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “StatefulSets สำหรับแอปแบบมีสถานะ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kubernetes Basics ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kubernetes Basics มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “StatefulSets สำหรับแอปแบบมีสถานะ”
นำแอปพลิเคชันแบบมีสถานะ เช่น ฐานข้อมูล ไปใช้งานและจัดการด้วย StatefulSets พร้อมรับประกันตัวระบุเครือข่ายที่เสถียรและพื้นที่จัดเก็บถาวร คุณปฏิบัติ Kubernetes Basics ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kubernetes Basics หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kubernetes Basics บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “StatefulSets สำหรับแอปแบบมีสถานะ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kubernetes Basics นี้ได้ไหม
ได้ บทเรียน Kubernetes Basics ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- StatefulSets สำหรับแอปแบบมีสถานะ
- DaemonSets สำหรับงานเฉพาะโหนด
- ทำความเข้าใจ Kubernetes Operators
- คำจำกัดความทรัพยากรแบบกำหนดเอง (CRDs)