Bài 20: Tổng Kết, Mẹo Thi CKAD, Bài Tập Thực Hành Cuối

Nay dậy sớm ending series. Đến đây là cũng oải phết đấy nhưng nghĩ đến việc cũng giúp được khá nhiều anh em là cũng chốt sổ xong series 20 bài, ngày trước lên nội dung còn tưởng không làm được sợ bận, nhớ lúc bắt đầu từ tháng 9 mỗi lúc rảnh viết một tí vào docs local và đăng dần lên DevOps VietNam vì cơ bản là những kiến thức này làm nhiều rồi nên với mình cũng không khó nữa.

Sau 19 bài học chi tiết, từng mảng kiến thức, chúng ta đã đi qua toàn bộ hành trình Kubernetes thực tế. Bài viết này không chỉ tổng kết toàn bộ series mà còn tập trung vào mẹo thi, chiến lược làm bài, và một bài thực hành tổng hợp mô phỏng đề CKAD thật.

Trong kỳ thi CKAD, bạn sẽ có 15-20 câu hỏi hands-on trong 120 phút, yêu cầu tạo, sửa, debug YAML và resources trong cluster sẵn. Bài cuối này sẽ giúp bạn hệ thống lại toàn bộ domains, điểm trọng tâm, mẹo làm nhanh và chiến lược quản lý thời gian.

Liên Hệ Với Chứng Chỉ CKAD

Kỳ thi CKAD (Certified Kubernetes Application Developer) kiểm tra 7 domains chính với tỉ lệ như mình cũng đã có làm ở bài lộ trình đầu tiên:

  • Core Concepts (15%)
  • Configuration (20%)
  • Multi-Container Pods (18%)
  • Observability (10%)
  • Pod Design (18%)
  • Services & Networking (20%)
  • State Persistence (10%)

Series này đã bao phủ 100% nội dung kỳ thi mỗi bài đều bám theo domain, cấu trúc YAML và mẹo làm nhanh. Trong kỳ thi, bạn có thể gặp các dạng câu hỏi như:

  • “Tạo Pod có resource limit, probe, và configmap mount.”
  • “Viết NetworkPolicy deny-all rồi allow traffic có label cụ thể.”
  • “Tạo PVC bind với PV có hostPath /mnt/data.”
  • “Debug Ingress rule 404 not found.”

Mẹo thi:

  • Thi CKAD cho phép dùng tài liệu kubernetes.io => bookmark trước các phần: Pods, Deployments, Services, Volumes, NetworkPolicy.
  • Luôn bắt đầu mỗi câu bằng `kubectl explain –recursive | less` để hiểu cấu trúc.
  • Dùng lệnh kubectl run --image=nginx --dry-run=client -o yaml > pod.yaml để tạo nhanh file mẫu.
  • Nếu stuck >3 phút, flag câu hỏi, chuyển sang câu khác quay lại sau.
  • Chuẩn bị YAML template riêng cho Pod, Deployment, Service, NetworkPolicy, PV/PVC.

Phần 1: Tổng Kết Series Những Gì Bạn Đã Học Và Cách Áp Dụng

Series gồm 20 bài, chia thành 5 giai đoạn tương ứng với 7 domains CKAD:

Giai Đoạn Bài Domain CKAD Kỹ Năng Chính Ứng Dụng Thực Tế
Cơ bản 1–3 Core Concepts (15%) Cluster, node, pod, kubectl cơ bản Nền tảng triển khai
Cấu hình và quản lý 4–6 Configuration (20%) ConfigMap, Secret, Deployment Quản lý config, rollout
Multi-Container Pods 7–9 Multi-Container Pods (18%) Sidecar, init container Logging & monitoring
Quan sát và tối ưu 10–14 Observability, Pod Design Logs, probes, resource limits, HPA Giám sát, scale
Mạng và lưu trữ 15–19 Services & Networking, State Persistence Service, Ingress, NetworkPolicy, PV/PVC Routing và storage bền vững
Chuẩn bị thi 20 Toàn bộ Tổng hợp và chiến lược thi Ôn tập CKAD thực chiến

Tổng kết: Nếu bạn đã thực hành hết 19 bài trước, bạn đã cover hơn 80% nội dung thi thật, phần còn lại là tốc độ và debug.

Phần 2: Mẹo Thi CKAD Chiến Lược Và Kinh Nghiệm Thực Chiến

2.1. Quản Lý Thời Gian

  • Mỗi câu ~5–7 phút, không dừng quá lâu ở một câu.
  • Luôn flag lại câu chưa xong, dành 10 phút cuối để kiểm tra.
  • Ghi chú nhanh bằng # TODO trong YAML nếu tạm bỏ.

2.2. Môi Trường Thi

  • Thi online, proctored (giám sát camera).
  • Chuẩn bị đường truyền ổn định, tắt background apps.
  • Dùng terminal một cửa sổ duy nhất, có sẵn kubectl, vim, cat.

2.3. Lệnh Imperative & YAML

  • Imperative: dùng khi cần nhanh kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deploy.yaml
  • YAML: luôn clean, indent 2 spaces.
  • Validate nhanh: kubectl apply -f file.yaml --dry-run=server.

2.4. Alias Và Autocomplete

alias k=kubectl
complete -F __start_kubectl k
alias kgp='k get pod -o wide'
alias kdp='k describe pod'

2.5. Debug Nhanh

  • kubectl describe => xem events (Pending, CrashLoopBackOff, không endpoints).
  • kubectl logs => container crash.
  • `kubectl exec -it — sh` => test DNS, curl Service.

Phần 3: Bài Tập Thực Hành Cuối Tổng Hợp Nhiều Domain

Đề: Trong namespace final-exam:

  1. Tạo Deployment app-final (2 replicas, image nginx:alpine, label app: final, requests cpu:100m, limits cpu:200m).
  2. Tạo Service app-svc (ClusterIP, port 80=>80).
  3. Tạo Ingress app-ingress route /final => app-svc:80.
  4. Tạo NetworkPolicy app-policy allow từ Pod label role: client trên port 80, deny all khác.
  5. Tạo PVC app-pvc 1Gi RWX, storageClass: manual. Mount vào /data.
  6. Verify bằng Pod test curl /final từ Pod khác.

Yêu cầu nộp: Các file YAML: deploy.yaml, svc.yaml, ingress.yaml, netpol.yaml, pvc.yaml. (Cập nhật Deployment với volumeMounts).

Đáp Án Chi Tiết (Luyện Tập Trước Khi Xem)

deploy.yaml (Sau tạo PVC, update với volume):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-final
  namespace: final-exam
spec:
  replicas: 2
  selector:
    matchLabels:
      app: final
  template:
    metadata:
      labels:
        app: final
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        resources:
          requests:
            cpu: 100m
          limits:
            cpu: 200m
        ports:
        - containerPort: 80
        volumeMounts:
        - name: data-vol
          mountPath: /data
      volumes:
      - name: data-vol
        persistentVolumeClaim:
          claimName: app-pvc

svc.yaml:

apiVersion: v1
kind: Service
metadata:
  name: app-svc
  namespace: final-exam
spec:
  selector:
    app: final
  ports:
  - port: 80
    targetPort: 80
  type: ClusterIP

ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
  namespace: final-exam
spec:
  rules:
  - http:
      paths:
      - path: /final
        pathType: Prefix
        backend:
          service:
            name: app-svc
            port:
              number: 80

netpol.yaml:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: app-policy
  namespace: final-exam
spec:
  podSelector:
    matchLabels:
      app: final
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: client
    ports:
    - protocol: TCP
      port: 80

pvc.yaml (Giả sử PV manual tồn tại):

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: app-pvc
  namespace: final-exam
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  storageClassName: manual

Verify:

kubectl create ns final-exam
kubectl apply -f all.yaml  # Gộp file
kubectl run test-client --image=busybox -l role=client --rm -it -- sh
wget -qO- http://app-svc:80  # OK nếu policy allow

Phân tích: Bài tập cover Pod Design (resources), Services & Networking (Service, Ingress, NetworkPolicy), State Persistence (PVC) giống đề thi.

Kết Luận

Bài này tổng kết toàn bộ hành trình CKAD, từ lý thuyết, thực hành, đến mẹo thi và chiến lược làm bài. Bạn giờ đã có thể tự tin bước vào kỳ thi thật, xử lý mọi câu hỏi trong 7 domains một cách có hệ thống và hiệu quả.

Chúc mừng bạn đã hoàn thành Series “Kubernetes Từ Cơ Bản Đến Chứng Chỉ CKAD”. Áp dụng kiến thức này không chỉ cho CKAD mà còn công việc DevOps thực tế. Hãy đăng ký thi sớm trên CNCF, luyện thêm mock. Chúc bạn hoàn thành bài thi CKAD với kết quả xuất sắc và áp dụng Kubernetes trong công việc DevOps thực tế.

Điều hướng chuỗi bài viết<< Bài 19: Cấu Hình Persistent Volume Và Persistent Volume Claim

Thông tin nổi bật

Sự kiện phát trực tiếp​

Event Thumbnail

Báo cáo quan trọng

Article Thumbnail
Article Thumbnail
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Tiêu điểm chuyên gia