Lộ trình
Cloud Native Computing FoundationAssociateTuần 2: Đào sâu dịch vụ cốt lõiBài 8 / 30

Ngày 8: Deployment cơ bản

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

Tạo Deployment nhanh và viết YAML có chủ đích: selector/template contract, ReplicaSet ownership, replicas, rollout status, labels và cleanup namespaced.

đọ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

Tạo Deployment nhanh và viết YAML có chủ đích: selector/template contract, ReplicaSet ownership, replicas, rollout status, labels và cleanup namespaced.

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

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

  • Thực hành tạo Deployment bằng imperative command
  • Luyện viết nhanh YAML Deployment từ trí nhớ
Instructor walkthrough

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

Scenario xuyên suốt

Deployment có thể apply thành công nhưng không tạo Pod đúng vì selector không match template, label drift hoặc update nhầm Deployment khác. Bài học biến imperative command thành skeleton có thể đọc, sau đó kiểm chứng controller chain và desired state.

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ế
  • Deployment quản lý ReplicaSet, ReplicaSet quản lý Pods; selector phải match template labels và không nên đổi tùy tiện sau khi tạo.
  • Imperative `kubectl create deployment` giúp khởi tạo nhanh nhưng cần chỉnh replicas, strategy, labels, resources, probes và image contract trong YAML.
  • Desired replicas khác Available/Ready replicas; rollout status, conditions, ReplicaSet revision và events mới chứng minh controller converge.
  • Selector/label là ownership boundary; đổi label của Pod hoặc template có thể làm orphan/extra workload và gây traffic/scale confusion.

Deployment là controller chain

Deployment → ReplicaSet → Pod. Selector/template labels là contract ownership; imperative command chỉ là cách tạo skeleton. YAML cần explicit replicas, image, labels, strategy/resources/probes theo yêu cầu.

Desired state và evidence

spec.replicas không đồng nghĩa Available. Kiểm tra conditions, rollout status, ReplicaSet revision, Pod Ready, events và ownerReferences. Selector drift/image lỗi có thể tạo rollout không healthy hoặc orphan; sửa manifest/owner đúng scope, không chữa bằng delete mù.

Bài tập

Sinh Deployment, chỉnh/validate/apply, kiểm tra controller chain, scale và mô phỏng selector/image failure. Tạo variant label/namespace, thu evidence và cleanup orphan-safe.

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 create deployment web --image=nginx:stable --dry-run=client -o yaml > deployment.yaml
kubectl apply --dry-run=server -f deployment.yaml
kubectl apply -f deployment.yaml -n ckad-day8
kubectl rollout status deployment/web -n ckad-day8
kubectl get deployment,rs,pods -n ckad-day8 -o wide --show-labels
kubectl describe deployment web -n ckad-day8
kubectl get events -n ckad-day8 --sort-by=.lastTimestamp
Hands-on lab

Thực hành theo scenario

  1. Tạo namespace `ckad-day8`; sinh Deployment bằng imperative dry-run, chỉnh YAML với explicit replicas/labels/image/resources/probe, validate rồi apply. Ghi selector→template→ReplicaSet→Pod chain.
  2. Kiểm tra Deployment/ReplicaSet/Pods, ownerReferences, conditions, Available/Ready, events và rollout status; tạo Service chỉ nếu cần test labels.
  3. Scale replicas và quan sát desired/current/available; tạo lỗi selector/template label hoặc image để xem rollout/ReplicaSet evidence, sau đó sửa đúng manifest.
  4. Tạo variant đổi app label hoặc target namespace trong file để chứng minh không update nhầm object; dùng `kubectl diff`/server dry-run trước mutation.
  5. Cleanup Deployment/ReplicaSet/Pod/Service trong namespace lab và xác nhận không còn orphan; không sửa selector của workload shared/production.
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:

  • Imperative skeleton chuyển thành YAML hợp lệ có selector/template match.
  • Controller chain và owner evidence đầy đủ.
  • Scale/rollout status/conditions phân biệt đúng.
  • Có selector/image/label failure variant và recovery.
  • Cleanup không để orphan/shared mutation.
Transfer to exam / production

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

CKAD Deployment task thường cần nhanh nhưng selector phải bất biến và match template. Sau apply kiểm tra `rollout status`, `get rs,pods`, labels và Available; đừng chỉ nhìn Deployment tồn tại.

Checkpoint · 3 phút

Kiểm tra nhanh

Câu hỏi: Deployment apply thành công nhưng không có Pod Ready. Kiểm tra ưu tiên nào?

Kết thúc bài

Checklist trước khi sang Ngày 2