Skip to content

⚔️ Challenge: The Broken Storage

Chào mừng đến với bài tập thực chiến Storage Debugging. Bạn được giao nhiệm vụ deploy một Database, nhưng Pod mãi mãi ở trạng thái Pending hoặc ContainerCreating. Hãy đóng vai Sherlock Holmes để tìm ra nguyên nhân.

Scenario 1: The Greedy Request (Class Mismatch)

Bạn nhận được một file YAML yêu cầu cấp phát ổ cứng như sau:

yaml
kind: PersistentVolumeClaim
metadata:
  name: db-pv-claim
spec:
  storageClassName: fast-nvme  # 👈 Chú ý vào đây
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi

Triệu chứng:

  • kubectl get pvc -> Status: Pending.
  • Pod không thể start được.

Nhiệm vụ của bạn:

  1. Kiểm tra xem Cluster có những loại ổ cứng nào:

    bash
    kubectl get sc

    Gợi ý: Nếu bạn chỉ thấy standard, thì ai là người cung cấp fast-nvme?

  2. Đọc Lá thư tuyệt mệnh (Events) của PVC:

    bash
    kubectl describe pvc db-pv-claim

    Tìm dòng Events. Bạn sẽ thấy một thông báo lỗi dạng: storageclass.storage.k8s.io "fast-nvme" not found.

👉 Bài học: Nếu bạn xin một loại "thẻ bài" (StorageClass) mà "nhà máy" (Cluster) không sản xuất, đơn hàng (PVC) của bạn sẽ bị treo vĩnh viễn.


Scenario 2: The Impossible Dream (Access Mode Mismatch)

Lần này, bạn sửa lại storageClassName thành standard (AWS EBS hoặc Default Storage). Nhưng bạn lại có một yêu cầu khác:

yaml
kind: PersistentVolumeClaim
metadata:
  name: web-assets-claim
spec:
  storageClassName: standard # (Giả sử đây là AWS EBS / GCE Disk)
  accessModes:
    - ReadWriteMany      # 👈 Chú ý vào đây (RWX)
  resources:
    requests:
      storage: 10Gi

Triệu chứng:

  • kubectl get pvc -> Status: Pending (hoặc Bound nhưng Pod không mount được).
  • Event báo lỗi liên quan đến Capabilities.

Nhiệm vụ:

  1. Tự hỏi: "Ổ cứng vật lý (Block Storage) có thể cắm vào 10 máy tính cùng lúc để ghi dữ liệu không?"
  2. Câu trả lời là KHÔNG. Block Storage (như ổ C: của bạn) chỉ hỗ trợ ReadWriteOnce (RWO).

👉 Bài học: Bạn không thể ép một công nghệ làm điều nó không thể.

  • Muốn RWO (Database): Dùng Block Storage (EBS, Disk).
  • Muốn RWX (File Sharing): Dùng File Storage (NFS, EFS).

🕵️‍♂️ Summary Checklist

Khi gặp lỗi liên quan đến Storage, hãy check theo thứ tự:

  1. [ ] StorageClass name có đúng không? Cluster có hỗ trợ không?
  2. [ ] Access Mode có phù hợp với loại Storage đó không? (Block vs File).
  3. [ ] Capacity có đủ không? (Bạn xin 1000TB mà Cluster chỉ còn 10GB?).

Happy Debugging! 🔍