Giao diện
⚔️ 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: 100GiTriệu chứng:
kubectl get pvc-> Status: Pending.- Pod không thể start được.
Nhiệm vụ của bạn:
Kiểm tra xem Cluster có những loại ổ cứng nào:
bashkubectl get scGợi ý: Nếu bạn chỉ thấy
standard, thì ai là người cung cấpfast-nvme?Đọc Lá thư tuyệt mệnh (Events) của PVC:
bashkubectl describe pvc db-pv-claimTì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: 10GiTriệ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ụ:
- 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?"
- 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ự:
- [ ] StorageClass name có đúng không? Cluster có hỗ trợ không?
- [ ] Access Mode có phù hợp với loại Storage đó không? (Block vs File).
- [ ] Capacity có đủ không? (Bạn xin 1000TB mà Cluster chỉ còn 10GB?).
Happy Debugging! 🔍