# 📋 Cấu trúc kỳ thi CKA và tiêu chí chấm điểm

Chào bạn, mình đỗ CKA ngay lần thi đầu tiên. Điều mình ước mình biết trước khi bắt đầu ôn là: kỳ thi này không kiểm tra bạn biết bao nhiêu thuật ngữ, mà kiểm tra bạn có tạo ra đúng trạng thái cluster trong thời gian cho phép hay không. Hiểu rõ đề thi được cấu trúc và chấm điểm thế nào sẽ giúp bạn phân bổ thời gian ôn tập đúng chỗ ngay từ hôm nay, thay vì học tràn lan rồi hối hận.

---

## Mục tiêu bài học

Sau bài này, bạn sẽ:

- Mô tả được hình thức kỳ thi CKA: thời lượng, số task, môi trường làm bài.
- Liệt kê được 5 domain thi kèm trọng số phần trăm của từng domain.
- Giải thích được cách grader chấm điểm một task và vì sao có task bạn "làm đúng" nhưng vẫn 0 điểm.
- Tính được ngưỡng điểm đỗ 66% và biết mình cần ăn chắc bao nhiêu phần trăm khối lượng đề.
- Bóc tách một đề bài mẫu thành checklist các yêu cầu cần thoả.

---

## Ôn tập nhanh

Đây là bài đầu tiên của khoá nên không cần kiến thức nền. Bạn chỉ cần biết ở mức khái niệm: `kubectl` là công cụ dòng lệnh để làm việc với Kubernetes cluster, và mọi thứ trong Kubernetes (Pod, Deployment, Service, ...) đều là object được khai báo bằng YAML. Nếu hai câu đó nghe quen, bạn đã sẵn sàng.

---

## Lý thuyết

### 1. CKA là bài thi thực hành thuần tuý

| Hạng mục | Thông tin |
| --- | --- |
| Hình thức | 100% performance-based, không có câu hỏi trắc nghiệm |
| Thời lượng | 120 phút (2 giờ) |
| Số task | Thường 15 đến 20 task, mỗi task gồm nhiều bước |
| Môi trường | Terminal trong trình duyệt, kết nối tới các cluster thật |
| Giám sát | Proctor qua webcam và chia sẻ màn hình |
| Điểm đỗ | 66% |
| Kết quả | Thường có qua email trong vòng 24 giờ |

Bạn sẽ gõ lệnh thật trên cluster thật. Không có chỗ để "đoán", cũng không có điểm cho việc giải thích lý thuyết. Đây là tin tốt: kỹ năng gõ lệnh nhanh và chính xác là thứ luyện được.

### 2. Năm domain và trọng số

Đây là bảng bạn nên in ra dán trước mặt trong suốt thời gian ôn:

| Domain | Trọng số |
| --- | --- |
| Cluster Architecture, Installation & Configuration | 25% |
| Workloads & Scheduling | 15% |
| Services & Networking | 20% |
| Storage | 10% |
| Troubleshooting | 30% |
| **Tổng** | **100%** |

Vài nhận xét thực dụng từ góc nhìn người đi thi:

- ==Troubleshooting chiếm 30%, là domain lớn nhất== và cũng là domain khó "học tủ" nhất. Đừng để nó xuống cuối lịch ôn.
- Cluster Architecture (25%) cộng Troubleshooting (30%) đã là 55%, hơn nửa số điểm. Hai domain này thường dính tới nhau: sửa được node NotReady là bạn đang làm cả hai.
- Storage chỉ 10%, nhưng đây là 10% dễ lấy nhất nếu bạn nắm chắc PV, PVC và StorageClass. Đừng bỏ.
- Toàn bộ nội dung thi nằm trong CNCF Curriculum công bố công khai. Bạn nên đọc bản curriculum gốc một lần để đối chiếu.

### 3. Ngưỡng điểm 66% nghĩa là gì

$$
\text{Điểm cần đạt} = 0.66 \times 100 = 66
$$

Nói cách khác, bạn chỉ được phép "mất" tối đa 34% khối lượng đề. Nghe thì thoải mái, nhưng vì mỗi task có trọng số khác nhau, mất một task lớn là mất luôn một phần đáng kể. Bạn sẽ thấy con số này nguy hiểm thế nào ở phần ví dụ.

### 4. Grader chấm điểm như thế nào

Đây là phần quan trọng nhất của bài học, và là lý do nhiều người thi trượt dù tay nghề không tệ.

- Grader là script tự động, nó kiểm tra ==trạng thái cuối cùng của cluster==, không quan tâm bạn làm bằng `kubectl run`, `kubectl create deployment` hay `kubectl apply -f`.
- Mỗi task có trọng số riêng, thường được ghi rõ theo phần trăm ngay trên đề bài.
- Task nhiều bước thường được chia nhiều "check" nhỏ, nên có thể có điểm một phần (partial credit). Ví dụ task yêu cầu tạo Deployment rồi expose Service: tạo đúng Deployment vẫn được điểm của phần đó.
- Grader kiểm tra đúng tên object, đúng namespace, đúng cluster. Sai một trong ba thứ này thì phần đó 0 điểm, kể cả object tạo ra hoàn toàn hợp lệ.
- Một số task yêu cầu ghi kết quả ra file (ví dụ lưu output vào `/opt/...`). Nếu bạn làm đúng nhưng không ghi file, hoặc ghi sai đường dẫn, bạn mất điểm.

> [!WARNING]
> Mỗi task trong đề đều ghi rõ cluster và context cần dùng. Nhiều bạn hì hục tạo object đúng yêu cầu nhưng quên `kubectl config use-context`, thế là object nằm ở cluster khác và grader chấm 0 điểm. Trước mỗi task, luôn đổi context và namespace trước khi gõ lệnh đầu tiên.

### 5. Môi trường thi, ở mức bạn cần biết hôm nay

Bài sau sẽ đi sâu vào phần dựng lab và tài khoản thi, nên ở đây mình chỉ nêu những gì ảnh hưởng tới cách bạn làm bài:

- Bạn được mở một tab phụ duy nhất trới tài liệu chính thức `kubernetes.io/docs` (và blog `kubernetes.io`). Mọi trang khác đều bị coi là vi phạm.
- Đề bài bằng tiếng Anh, câu chữ thường dài và có yêu cầu phụ ở cuối câu.
- Có nhiều cluster trong bài thi, không phải một. Tên context thường có dạng `cluster1`, `cluster2`, ...
- Bạn được điều hướng tự do giữa các task và đánh dấu (flag) task để quay lại.

### 6. Chứng chỉ và chuyện thi lại

- Gói thi thường kèm một lần thi lại miễn phí. Cứ kiểm tra lại ở trang mua vé trước khi đặt lịch, vì chính sách có thể thay đổi.
- Chứng chỉ CKA có thời hạn và cần gia hạn. Bạn không cần lo chuyện này hôm nay, nhưng nên biết để không bất ngờ sau này.

### 7. Kiểm tra nhanh bằng cloze

```cloze
Kỳ thi CKA kéo dài {{c1::120}} phút và bạn cần đạt tối thiểu {{c2::66}}% để đỗ.
Domain có trọng số lớn nhất là {{c3::Troubleshooting}}, chiếm {{c4::30}}% tổng điểm.
Domain có trọng số nhỏ nhất là {{c5::Storage}}, chỉ chiếm 10%.
Cluster Architecture, Installation & Configuration chiếm {{c6::25}}%, còn Services & Networking chiếm {{c7::20}}%.
Workloads & Scheduling chiếm {{c8::15}}% tổng điểm.
```

---

## Ví dụ minh họa

### Ví dụ 1: Bóc tách một đề bài thật

Đề bài trong kỳ thi trông như sau (rút gọn):

> Task 3 (weight 7%): In cluster `k8s-prod`, namespace `web`, create a Deployment named `nginx-deploy` with image `nginx:1.27`, 3 replicas. Then expose it as a Service named `nginx-svc`, type ClusterIP, port 80, targetPort 80.

Đừng đọc rồi gõ ngay. Mình luôn bóc đề thành checklist trước, mất khoảng 10 giây nhưng tiết kiệm vài phút sửa lỗi:

```steps
1. Xác định cluster và context: `k8s-prod`.
2. Xác định namespace: `web`, phải tạo namespace hoặc thêm `-n web` vào mọi lệnh.
3. Xác định object loại 1: Deployment, tên chính xác `nginx-deploy`.
4. Xác định tham số: image `nginx:1.27`, replicas `3`.
5. Xác định object loại 2: Service tên `nginx-svc`, type `ClusterIP`, port `80`, targetPort `80`.
6. Xác định cách kiểm chứng: `kubectl -n web get deploy,svc`.
```

Chú ý hai bẫy nhỏ trong đề này. Thứ nhất, image có tag cụ thể `1.27`, không phải `latest`, grader có thể kiểm tra đúng chuỗi image. Thứ hai, targetPort 80 phải khai báo rõ, vì nếu bạn dùng `kubectl expose` nó có thể tự suy ra giá trị khác.

### Ví dụ 2: Bài toán điểm, phần khiến mình tỉnh người

Giả sử đề có 9 task với trọng số như sau (tổng đúng 100%):

| Task | Trọng số |
| --- | --- |
| 1 | 20% |
| 2 | 18% |
| 3 | 15% |
| 4 | 12% |
| 5 | 10% |
| 6 | 8% |
| 7 | 7% |
| 8 | 6% |
| 9 | 4% |

Bạn làm tốt 7 task đầu tiên nhưng hết giờ ở task 1 (20%) và làm sai task 3 (15%). Điểm tối đa của bạn:

$$
100 - 20 - 15 = 65 < 66
$$

Trượt đúng 1 điểm phần trăm. Bài học: đừng bao giờ để một task 15 đến 20% xuống cuối giờ. Với ngưỡng 66%, sai một task lớn là bạn gần như không còn biên an toàn.

### Ví dụ 3: Phân bổ thời gian theo trọng số

120 phút, trừ khoảng 20 phút cho việc đọc đề và rà soát cuối giờ, còn 100 phút thực làm. Vậy:

$$
\text{Thời gian cho một task} \approx 1 \text{ phút} \times \text{trọng số (%) của task đó}
$$

Task 12% thì có khoảng 12 phút. Task 4% thì có khoảng 4 phút. Đây là quy tắc ngón tay cái mình dùng suốt buổi thi: nếu một task vượt quá gấp đôi ngân sách thời gian của nó, flag lại và đi tiếp.

---

## Luyện tập có hướng dẫn

Bài này là lý thuyết, nên phần luyện tập tập trung vào đúng kỹ năng sẽ quyết định điểm của bạn: đọc đề, bóc yêu cầu, và tính toán chiến lược.

### Bài tập 1: Lập kế hoạch 120 phút

Đề thi của bạn có 10 task với trọng số: 18, 14, 12, 10, 10, 9, 8, 8, 6, 5 (tổng 100%).

a) Với mỗi task, tính ngân sách thời gian theo quy tắc 1 phút cho mỗi 1%.
b) Nếu bạn chỉ chắc chắn làm đúng các task 18, 14, 12, 10 và 9, bạn đang có bao nhiêu phần trăm? Có đỗ không? Cần thêm tối thiểu bao nhiêu?
c) Bạn nên xử lý task 5% và task 6% ở thời điểm nào trong bài thi?

<details><summary>Xem gợi ý và đáp án</summary>

a) Ngân sách lần lượt: 18, 14, 12, 10, 10, 9, 8, 8, 6, 5 phút. Cộng lại đúng 100 phút, còn 20 phút dự phòng cho đọc đề và rà soát.

b) 18 + 14 + 12 + 10 + 9 = 63%. Chưa đỗ (cần 66%). Bạn cần thêm ít nhất 3%, tức là phải ăn thêm ít nhất một task nhỏ (5% hoặc 6%) và không được sai gì trong nhóm trên.

c) Làm ngay sau khi xong các task lớn, đừng để cuối. Đây là những task rẻ điểm nhất: 5 đến 6 phút cho 5 đến 6%. Nếu kẹt ở một task lớn quá lâu, bạn sẽ mất luôn phần điểm dễ này.

</details>

### Bài tập 2: Bóc tách đề bài thành checklist

Đọc đề bài sau và viết ra checklist 7 dòng, mỗi dòng là một yêu cầu grader có thể kiểm tra:

> Task 5 (weight 8%): On cluster `k8s-02`, create a namespace named `staging`. In that namespace, create a Pod named `web-pod` using image `nginx:1.27-alpine`, with label `tier=frontend`. Then save the YAML manifest of that Pod to `/opt/web-pod.yaml`.

<details><summary>Xem gợi ý và đáp án</summary>

Checklist đúng:

1. Đúng cluster/context: `k8s-02`.
2. Namespace `staging` tồn tại (phải tạo mới, không được giả định là có sẵn).
3. Object là Pod (không phải Deployment), tên chính xác `web-pod`.
4. Image đúng chuỗi `nginx:1.27-alpine`.
5. Label `tier=frontend` có trên Pod.
6. File `/opt/web-pod.yaml` tồn tại và chứa manifest của chính Pod đó.
7. Kiểm chứng: `kubectl -n staging get pod web-pod --show-labels` và `cat /opt/web-pod.yaml`.

Lưu ý: yêu cầu ghi file nằm ở cuối câu và rất dễ bị bỏ qua. Đây là kiểu bẫy phổ biến nhất trong đề CKA.

</details>

### Bài tập 3: Ghép task với domain

Với mỗi mô tả task dưới đây, cho biết nó thuộc domain nào trong 5 domain của CKA và chiếm trọng số bao nhiêu.

a) Sao lưu etcd rồi restore từ bản backup.
b) Tạo CronJob chạy mỗi 5 phút.
c) Pod không lên được vì `ImagePullBackOff`, tìm nguyên nhân và sửa.
d) Tạo Ingress route traffic tới một Service.
e) Tạo PVC và kiểm tra nó bind vào PV.

<details><summary>Xem đáp án</summary>

a) Cluster Architecture, Installation & Configuration (25%).
b) Workloads & Scheduling (15%).
c) Troubleshooting (30%).
d) Services & Networking (20%).
e) Storage (10%).

</details>

### Bài tập 4: Tự đặt mục tiêu ôn tập

Dựa trên bảng trọng số, viết ra 3 domain bạn sẽ dành nhiều thời gian nhất và 1 domain bạn sẽ học chắc nhưng không lan man. Ghi rõ lý do bằng con số.

<details><summary>Xem gợi ý</summary>

Một câu trả lời hợp lý: ưu tiên Troubleshooting (30%), Cluster Architecture (25%), Services & Networking (20%) vì ba domain này là 75% tổng điểm. Storage (10%) học đủ để ăn trọn điểm phần PV, PVC, StorageClass nhưng không sa đà vào các loại volume ít gặp. Workloads & Scheduling (15%) luyện qua các bài tập Deployment, DaemonSet, Job, CronJob là đủ.

</details>

---

## Góc chuyên gia

**Năm lỗi mình thấy nhiều người mắc, và mình cũng từng mắc:**

1. **Không đổi context trước khi làm.** Mỗi task ghi rõ cluster. Gõ `kubectl config use-context` trước, rồi `kubectl config set-context --current --namespace=<ns>` cho namespace. Đây là hai lệnh đầu tiên của mọi task.
2. **Bỏ qua yêu cầu phụ ở cuối câu.** Đề CKA rất hay có câu cuối kiểu "save the output to /opt/..." hoặc "also scale to 5 replicas". Đọc hết câu, kể cả khi câu dài ba dòng.
3. **Sai tag image.** `nginx` và `nginx:1.27` là hai thứ khác nhau với grader. Chép nguyên chuỗi image trong đề.
4. **Loay hoay quá lâu ở một task.** Quy tắc: nếu vượt gấp đôi ngân sách thời gian, flag và đi tiếp. Task 20% không đáng để bạn mất ba task nhỏ.
5. **Không kiểm chứng lại.** Sau mỗi task, chạy một lệnh `kubectl get` để nhìn tận mắt object đã đúng tên, đúng namespace, đúng trạng thái. Mất 5 giây, cứu cả task.

**Ba quy tắc ngón tay cái:**

- 1% trọng số tương đương khoảng 1 phút làm bài.
- Làm task lớn trước, task nhỏ sau, nhưng đừng bao giờ bỏ task nhỏ.
- Đọc đề hai lần: lần một hiểu tổng thể, lần hai bóc thành checklist.

> [!TIP]
> Trước khi vào phòng thi, hãy tự viết tay bảng 5 domain và trọng số của chúng. Việc này mất 2 phút và giúp bạn nhớ chính xác nên ưu tiên gì khi ôn tập.

---

## Tóm tắt và bước tiếp theo

Tóm lại những gì cần nhớ:

- CKA là bài thi thực hành 120 phút, khoảng 15 đến 20 task, điểm đỗ 66%.
- Năm domain với trọng số: Troubleshooting 30%, Cluster Architecture 25%, Services & Networking 20%, Workloads & Scheduling 15%, Storage 10%.
- Grader chấm theo trạng thái cuối cùng của cluster, theo từng check nhỏ, và rất nghiêm khắc với context, namespace, tên object và file output.
- Quy tắc thời gian: 1 phút cho mỗi 1% trọng số, giữ 20 phút dự phòng.

### Thẻ ghi nhớ nhanh

```flashcard
[
  { "front": "Kỳ thi CKA kéo dài bao lâu?", "back": "120 phút (2 giờ)." },
  { "front": "Điểm đỗ của CKA là bao nhiêu?", "back": "66%." },
  { "front": "Hình thức thi CKA?", "back": "100% performance-based, làm bài trực tiếp trên cluster thật qua terminal trong trình duyệt." },
  { "front": "Đề thi thường có bao nhiêu task?", "back": "Khoảng 15 đến 20 task, mỗi task gồm nhiều bước." },
  { "front": "Domain nào có trọng số lớn nhất và bao nhiêu?", "back": "Troubleshooting, 30%." },
  { "front": "Trọng số của Cluster Architecture, Installation & Configuration?", "back": "25%." },
  { "front": "Trọng số của Services & Networking?", "back": "20%." },
  { "front": "Trọng số của Workloads & Scheduling?", "back": "15%." },
  { "front": "Domain nào có trọng số nhỏ nhất?", "back": "Storage, 10%." },
  { "front": "Grader chấm điểm dựa trên gì?", "back": "Trạng thái cuối cùng của cluster, không dựa trên cách bạn làm." },
  { "front": "Tài liệu nào được phép mở trong khi thi?", "back": "Tài liệu chính thức kubernetes.io/docs (kèm blog kubernetes.io), một tab phụ duy nhất." },
  { "front": "Quên đổi context hoặc namespace thì hậu quả là gì?", "back": "Task đó 0 điểm dù object tạo ra hoàn toàn đúng yêu cầu." },
  { "front": "Task nhiều bước có được điểm một phần không?", "back": "Có, vì mỗi task thường gồm nhiều check nhỏ độc lập." },
  { "front": "Quy tắc phân bổ thời gian cho một task?", "back": "Khoảng 1 phút cho mỗi 1% trọng số của task đó." }
]
```

### Bài tiếp theo

Bài sau, **Thiết lập môi trường lab và tài khoản thi**, sẽ đi vào phần thực hành: dựng một cluster lab đủ dùng để luyện, chuẩn bị tài khoản và giấy tờ cho buổi thi, và làm quen với giao diện thi để không bị bỡ ngỡ trong 5 phút đầu. Bạn hãy chuẩn bị sẵn một máy có thể chạy máy ảo hoặc tài khoản cloud trước khi học bài đó.
