Docker & Kubernetes for Developers · บทเรียน

การจัดการแอปพลิเคชันแบบมีสถานะด้วย StatefulSets

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

บทเรียน 2 จาก 411 ขั้นตอน

การจัดการแอปพลิเคชันแบบมีสถานะด้วย StatefulSets เป็นบทเรียน Docker & Kubernetes for Developers ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Docker & Kubernetes for Developers และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Docker & Kubernetes for Developers มีบทเรียนทั้งหมด 4 บทเรียน

บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ

Stateful Applications in K8s

When deploying applications in Kubernetes, some applications are stateless, meaning they don't store data locally and can be easily scaled or replaced.

However, many critical applications, like databases or message queues, are stateful. They need persistent storage and stable network identities.

This lesson introduces StatefulSets, a Kubernetes API object designed specifically to manage these stateful workloads.

Why StatefulSets?

Traditional Kubernetes Deployments are great for stateless apps. They create Pods with arbitrary names and can replace them freely.

Stateful applications, however, require:

  • Stable, unique network identities: Each instance needs a consistent name.
  • Stable, persistent storage: Data must survive Pod restarts or rescheduling.
  • Ordered deployment and scaling: Sometimes, instances need to start or stop in a specific sequence.

StatefulSets provide these crucial capabilities.

Key Features of StatefulSets

StatefulSets offer several powerful features for managing stateful applications:

  • Stable Network ID: Each Pod gets a predictable name (e.g., web-0, web-1) and DNS hostname.
  • Stable Persistent Storage: Integrates with Persistent Volumes (PVs) and Persistent Volume Claims (PVCs) to give each Pod its own persistent storage.
  • Ordered Guarantees: Ensures Pods are created, scaled, and deleted in a strict, ordinal order.
  • Graceful Deployment: Pods are only created after their storage is ready, and only deleted after they've gracefully shut down.

StatefulSet Components

A StatefulSet typically works in conjunction with other Kubernetes resources:

  • Headless Service: Provides stable network identities for the Pods. It doesn't load-balance traffic, but creates unique DNS entries for each Pod.
  • Pod Template: Defines the specification for the Pods, including containers, resources, etc.
  • Volume Claim Templates: Generates a unique Persistent Volume Claim (PVC) for each Pod, ensuring dedicated storage.

Defining a Headless Service

Before creating a StatefulSet, you often define a Headless Service. This service is crucial for assigning stable network identities to your stateful Pods.

Notice clusterIP: None, which tells Kubernetes not to assign a cluster IP, making it 'headless'.

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
  labels:
    app: my-app
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None # This makes it a Headless Service
  selector:
    app: my-app

Creating a Basic StatefulSet

Now, let's look at a basic StatefulSet definition. It links to our Headless Service using serviceName and defines a volumeClaimTemplates for persistent storage.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-app
spec:
  serviceName: "my-app-service" # Link to Headless Service
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

Understanding Pod Identity

When the StatefulSet from the previous scene is deployed, it will create three Pods named my-app-0, my-app-1, and my-app-2.

Each Pod also gets its own stable DNS entry, like my-app-0.my-app-service.default.svc.cluster.local. This allows other services to reliably connect to specific instances.

Crucially, each Pod will also get its own unique Persistent Volume Claim (e.g., www-my-app-0), ensuring dedicated storage.

Ordered Deployment & Scaling

StatefulSets enforce a strict order for Pod creation, scaling, and deletion. This is vital for applications where sequence matters (e.g., a primary database and its replicas).

  • Creation: Pods are created in ascending ordinal order (my-app-0, then my-app-1, etc.). Each Pod is fully running and ready before the next is created.
  • Deletion: Pods are terminated in descending ordinal order (my-app-2, then my-app-1, etc.). Each Pod is fully shut down before the next is deleted.
  • Scaling: Similarly, scaling up adds Pods in order, and scaling down removes them in reverse order.

Updating StatefulSets

StatefulSets support controlled updates to their Pods, typically used for rolling out new versions of your application.

  • RollingUpdate (default): Pods are updated in reverse ordinal order (my-app-2, then my-app-1, etc.). Each Pod is updated and ready before the next one starts.
  • OnDelete: This strategy requires manual intervention. The StatefulSet controller will not automatically update Pods. You must manually delete Pods for the new template to take effect.

Rolling updates ensure minimal downtime and maintain the application's state during upgrades.

StatefulSet Features Check

Which of the following are key characteristics or requirements for Kubernetes StatefulSets?

StatefulSets Recap

Congratulations! You've learned about Kubernetes StatefulSets.

  • StatefulSets manage stateful applications, ensuring stable identities and persistent storage.
  • They provide stable network IDs, ordered operations, and leverage Volume Claim Templates for dedicated storage.
  • A Headless Service is often used to provide stable DNS entries for StatefulSet Pods.
  • They support controlled updates with strategies like RollingUpdate.

StatefulSets are essential for running databases, message queues, and other stateful services reliably on Kubernetes.

เริ่มต้นได้ฟรี

เรียนรู้ Docker & Kubernetes for Developers ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
12
บทเรียน
48

คำถามที่พบบ่อย

บทเรียน “การจัดการแอปพลิเคชันแบบมีสถานะด้วย StatefulSets” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจัดการแอปพลิเคชันแบบมีสถานะด้วย StatefulSets” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Docker & Kubernetes for Developers ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Docker & Kubernetes for Developers มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจัดการแอปพลิเคชันแบบมีสถานะด้วย StatefulSets”

นำแอปพลิเคชันแบบมีสถานะ เช่น ฐานข้อมูล ไปใช้งานและจัดการด้วย StatefulSets โดยคงข้อมูลระบุตัวตนเครือข่ายและพื้นที่จัดเก็บแบบถาวรให้เสถียร คุณปฏิบัติ Docker & Kubernetes for Developers ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Docker & Kubernetes for Developers หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Docker & Kubernetes for Developers บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การจัดการแอปพลิเคชันแบบมีสถานะด้วย StatefulSets” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Docker & Kubernetes for Developers นี้ได้ไหม

ได้ บทเรียน Docker & Kubernetes for Developers ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. วอลุ่มถาวรและคำขอวอลุ่มถาวร
  2. การจัดการแอปพลิเคชันแบบมีสถานะด้วย StatefulSets
  3. ConfigMaps และ Secrets สำหรับการกำหนดค่า
  4. คลาสพื้นที่จัดเก็บและการจัดสรรแบบไดนามิก
← กลับไปที่ Docker & Kubernetes for Developers