Lộ trình
Cloud Native Computing FoundationAssociateTuần 1: Nền tảngBài 6 / 30

Ngày 6: Volume cơ bản trong Pod

Thời lượng: 45 phút
Mục tiêu: 2 nhiệm vụ chính
Tiến độ lộ trình
ckadngày 6
hoàn thành6 / 30 bài
Bối cảnh bài học

Thực hành Volume trong Pod: emptyDir chia sẻ dữ liệu tạm, ConfigMap/Secret volume injection, mount permissions và lựa chọn lifecycle đúng thay vì nhầm với persistent storage.

đọc hiểuthực hànhcheckpoint
Bài giảng hôm nay

Học hiểu, rồi mới thực hành

Thực hành Volume trong Pod: emptyDir chia sẻ dữ liệu tạm, ConfigMap/Secret volume injection, mount permissions và lựa chọn lifecycle đúng thay vì nhầm với persistent storage.

Bắt đầu đọc bài giảng

Nhiệm vụ bài học hôm nay

  • Thực hành emptyDir để chia sẻ dữ liệu giữa container
  • Học cách mount ConfigMap/Secret dạng volume
Instructor walkthrough

Bài giảng chi tiết: từ bài toán đến bằng chứng

Scenario xuyên suốt

Container ghi file nhưng container khác không đọc được vì mount sai; ConfigMap update không làm app tự reload; Secret được mount nhưng permission/path sai. Bài học xây data-lifecycle model trước khi viết volume YAML.

01Đọc bài toán

Xác định actor, workload, constraint và trạng thái cuối cần đạt.

02Vẽ luồng / boundary

Chỉ ra request, dependency, identity và failure domain trước khi chọn công cụ.

03Chọn và thực hành

Thay đổi nhỏ nhất trong lab cô lập; command nào cũng phải nói rõ nó kiểm tra điều gì.

04Kiểm chứng / recovery

Đối chiếu trạng thái thực tế, tạo một failure variant và ghi cách hoàn tác.

Cách nối lý thuyết với thực tế
  • emptyDir sống theo lifecycle của Pod và phù hợp scratch/cache/handoff nội bộ; Pod bị recreate thì dữ liệu mất.
  • ConfigMap/Secret volume là projection read-only từ API object, key trở thành filename; update propagation có delay và không tự reload mọi process.
  • Volume source phải mount đúng container/path; `subPath` có update semantics khác và dễ gây nhầm khi ConfigMap/Secret thay đổi.
  • hostPath gắn node filesystem, tạo coupling/security/data risk; không dùng để giả vờ persistence hoặc chia sẻ giữa node.

Chọn volume theo lifecycle

  • emptyDir: scratch/handoff trong cùng Pod; mất khi Pod recreate.
  • ConfigMap/Secret volume: projection key → file, phù hợp config/credential injection; read-only và update/reload tùy process.
  • hostPath: node-local, coupling và security risk cao; không mặc định là persistence.
  • PV/PVC: storage lifecycle/recovery riêng, cần bài storage và policy.

Debug mount

Đối chiếu volume name ở Pod với volumeMount name/path/container, key và mode; dùng describe/events rồi exec kiểm tra file/permission. subPath có caveat update. Secret phải được redact khỏi logs/output và không commit plaintext.

Bài tập

Dựng emptyDir handoff, ConfigMap/Secret volume, tạo lỗi mount/key/permission/subPath, quan sát update/lifecycle và sửa. Lập matrix chọn volume cho scratch, config, credential và persistent data; cleanup an toàn.

Terminal reference

Command list và cách dùng

Chạy từng lệnh theo đúng thứ tự. Trước các lệnh có thể tạo hoặc thay đổi tài nguyên, hãy kiểm tra profile, account và region.

Commands · read-only checkpoints
kubectl get pod -n ckad-day6 -o wide
kubectl describe pod POD_NAME -n ckad-day6
kubectl exec POD_NAME -n ckad-day6 -c CONTAINER_NAME -- ls -la /mount/path
kubectl get configmap,secret -n ckad-day6
kubectl get pod POD_NAME -n ckad-day6 -o jsonpath="{.spec.volumes} {.spec.containers[*].volumeMounts}{"\n"}"
kubectl get events -n ckad-day6 --sort-by=.lastTimestamp
Hands-on lab

Thực hành theo scenario

  1. Tạo namespace `ckad-day6`; dựng Pod hai container chia sẻ emptyDir, một container ghi marker và container kia đọc; ghi expected file path và mất dữ liệu khi Pod recreate.
  2. Tạo ConfigMap và Secret với key/file riêng, mount read-only vào app; kiểm tra file content, mode/ownership, logs không lộ Secret và thay đổi ConfigMap để quan sát propagation caveat.
  3. Cố ý sai volume name/mountPath/key/defaultMode/permission và dùng `describe`, events, `exec`, file listing để chẩn đoán; tạo variant dùng `subPath` và ghi rõ update behavior.
  4. So sánh emptyDir, ConfigMap/Secret, hostPath và PV/PVC theo lifecycle, scope, security, portability, capacity và recovery; chọn volume phù hợp cho ba case.
  5. Cleanup Pod/ConfigMap/Secret/namespace; xác nhận Secret không còn trong output/repository và không xóa host data/shared resource.
Evidence checkpoint

Kiểm chứng kết quả

Không coi lệnh chạy thành công là đủ. Hãy đối chiếu output với trạng thái mong đợi:

  • Mount/volume source/key/path đúng cho từng container.
  • emptyDir lifecycle và data loss được chứng minh.
  • ConfigMap/Secret projection/update/permissions có evidence.
  • hostPath risk và PV/PVC boundary được phân biệt.
  • Secret-safe cleanup và variant hoàn chỉnh.
Transfer to exam / production

Bẫy thường gặp và trade-off

CKAD volume task thường sai vì volume khai báo đúng nhưng volumeMount sai container hoặc key/path. Đọc Pod spec, dùng `exec` kiểm tra file, và nhớ ConfigMap/Secret không phải storage bền vững.

Checkpoint · 3 phút

Kiểm tra nhanh

Câu hỏi: Ứng dụng cần chia sẻ file tạm giữa hai container trong cùng Pod và chấp nhận mất file khi Pod bị recreate. Lựa chọn phù hợp là gì?

Kết thúc bài

Checklist trước khi sang Ngày 2