Kubernetes Administrator • 2026

Hướng Dẫn Thi CKA
Đạt Chứng Chỉ 2026

Ghi chú ôn thi thực tế, bài tập thực hành, kubectl cheat sheet, mẹo làm bài và phân tích toàn bộ syllabus Kubernetes v1.35. Bao gồm: etcd backup, RBAC, kubeadm, Gateway API, NetworkPolicy, xử lý sự cố, và luyện đề killer.sh. Kết quả: 89%.

89%
Điểm đạt được
66%
Điểm tối thiểu
2 giờ
Thời gian thi
17–25
Số câu hỏi
$445
Phí thi (USD)
v1.35
Phiên bản K8s
📋

Thông Tin Kỳ Thi CKA Tháng 3/2026

Tất cả thông tin cần biết trước khi đăng ký thi

Hạng mụcChi tiết
Hình thức thiThực hành trực tiếp trên terminal — KHÔNG phải trắc nghiệm
Thời gian2 giờ
Điểm đạt66% (nhiều guide cũ ghi 75% — đã thay đổi)
Phiên bản Kubernetesv1.35
Số câu hỏi~17–25 task (thay đổi theo phiên)
Chi phí$445 USD (bao gồm 1 lần thi lại miễn phí)
Hiệu lực chứng chỉ2 năm
Nền tảng thiPSI Secure Browser (giám sát từ xa)
Tài liệu được phépkubernetes.io/docs, kubernetes.io/blog, github.com/kubernetes
Hệ điều hành trong thiUbuntu Linux terminal
Ngôn ngữTiếng Anh, Nhật, Trung giản thể
Kèm theo2 session killer.sh simulator (24 giờ mỗi session), khoá học self-paced
⚠️
Lưu ý quan trọng: Điểm đạt là 66%, không phải 75% như nhiều guide cũ ghi. Tuy nhiên 2 giờ vẫn trôi đi rất nhanh khi bạn đang troubleshoot kubelet dưới áp lực.
💡
Mẹo tiết kiệm: CNCF thường giảm giá 30-40% vào Black Friday và tuần KubeCon. Bundle CKA + CKAD đôi khi chỉ ~$500. Đừng trả full price nếu có thể chờ đợt sale.
📊

Phân Bổ Tỉ Lệ Điểm

5 tên miền chính — tập trung vào Troubleshooting (30%) và Cluster Architecture (25%)

Domain 1: Storage
Lưu trữ
10%
  • StorageClass và PersistentVolume
  • Volume Mode, Access Modes, Reclaim Policy
  • Cấu hình ứng dụng với Persistent Storage
  • PV/PVC binding — storageClassName phải khớp chính xác
Domain 2: Troubleshooting
Xử lý sự cố — Domain lớn nhất
30%
  • Đánh giá cluster và node logging
  • Giám sát ứng dụng
  • Logs container stdout/stderr
  • Xử lý lỗi ứng dụng (Pending/CrashLoopBackOff/ImagePullBackOff)
  • Xử lý lỗi cluster component
  • Xử lý sự cố mạng
Domain 3: Workloads & Scheduling
Khối lượng công việc & Lịch trình
15%
  • Deployments, Rolling Update và Rollback
  • ConfigMaps và Secrets
  • Scale ứng dụng
  • DaemonSet, StatefulSet, tự phục hồi
  • Resource Limits và tác động đến scheduling
  • Static Pods, nodeSelector, Taints/Tolerations
Domain 4: Cluster Architecture
Kiến trúc, Cài đặt & Cấu hình
25%
  • RBAC — Role, ClusterRole, RoleBinding
  • Cài đặt cluster cơ bản với kubeadm
  • Cluster High Availability
  • Nâng cấp phiên bản cluster với kubeadm
  • Backup và Restore etcd
Domain 5: Services & Networking
Dịch vụ & Mạng
20%
  • Cấu hình mạng trên cluster node
  • Kết nối giữa các pod
  • ClusterIP, NodePort, LoadBalancer
  • Ingress Controller và Ingress Resources
  • Gateway API (GA trong v1.2+)
  • NetworkPolicy — kiểm soát traffic
  • CoreDNS
💾

Domain 1: Storage 10%

PV/PVC binding, StorageClass, Access Modes — câu hỏi thường thẳng và dễ điểm nếu nắm chắc

📌
Bẫy phổ biến nhất: storageClassName phải khớp chính xác giữa PV và PVC — bao gồm cả chữ hoa/thường. manualManual ≠ chuỗi rỗng.

Access Modes — Cần nhớ thuộc

ModeViết tắtÝ nghĩa thực tế
ReadWriteOnceRWOMột node mount đọc-ghi. Dùng 90% trường hợp.
ReadOnlyManyROXNhiều node mount chỉ đọc. Hiếm gặp trong thi.
ReadWriteManyRWXNhiều node mount đọc-ghi. Không hoạt động với hostPath.
ReadWriteOncePodRWOPChỉ một pod mount đọc-ghi. Mới từ v1.29+.

Reclaim Policy — Chính sách thu hồi

PolicyĐiều gì xảy ra
RetainPV tồn tại sau khi PVC bị xoá. Dữ liệu an toàn nhưng phải dọn thủ công. Dùng khi đề bài yêu cầu dữ liệu tồn tại.
DeletePV và storage bên dưới bị xoá. Mặc định của hầu hết cloud StorageClass. Cẩn thận!
RecycleDeprecated — không dùng, không cần nhớ.

YAML Mẫu — PV + PVC + Pod

pv-pvc-pod.yaml
# PersistentVolume — cluster-scoped (không có namespace)
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  accessModes: [ReadWriteOnce]
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual   # phải khớp với PVC!
  hostPath:
    path: /data/my-pv
---
# PersistentVolumeClaim — namespace-scoped
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
  namespace: default
spec:
  accessModes: [ReadWriteOnce]
  resources:
    requests:
      storage: 2Gi
  storageClassName: manual   # phải khớp với PV!
---
# Pod sử dụng PVC
spec:
  containers:
  - name: app
    image: nginx:1.27
    volumeMounts:
    - name: data
      mountPath: /usr/share/nginx/html
  volumes:
  - name: data
    persistentVolumeClaim:
      claimName: my-pvc
🔧

Domain 2: Troubleshooting 30%

Domain lớn nhất — phải xây dựng quy trình xử lý bài bản thay vì mò mẫm ngẫu nhiên

🎯
30% điểm số. Mất điểm nhiều nhất nếu không có hệ thống. Trình tự gợi ý: nodes → kubelet → control plane pods → describe → logs → endpoints.

Vị trí logs — Biết để tra cứu nhanh

ComponentLệnh kiểm tra log
kubeletjournalctl -u kubelet (systemd service)
kube-apiserverk logs -n kube-system kube-apiserver-<node>
kube-schedulerk logs -n kube-system kube-scheduler-<node>
kube-controller-managerk logs -n kube-system kube-controller-manager-<node>
etcdk logs -n kube-system etcd-<node>
containerdjournalctl -u containerd

Xử lý theo trạng thái Pod

🔴 Pending — Pod không được schedule
  • PVC chưa bound → k get pvc — kiểm tra storageClassName có khớp không
  • Taint không có toleration tương ứng → k describe node xem mục Taints
  • Không đủ tài nguyên → k describe pod events sẽ hiện "Insufficient cpu/memory"
  • nodeSelector hoặc affinity không khớp node nào → kiểm tra labels của node
  • ResourceQuota namespace bị đầy → k describe resourcequota -n <ns>
🔄 CrashLoopBackOff — Container khởi động rồi crash
  • k logs <pod> --previous — luôn chạy lệnh này đầu tiên, lỗi thường rõ ràng
  • Sai command/entrypoint — bẫy: ["sh", "-c"] vs ["sh -c"]
  • Thiếu cấu hình (env vars, configmaps, secrets)
🖼️ ImagePullBackOff — Không pull được image
  • Gần như luôn là lỗi đánh máy tên image — kiểm tra từng ký tự
  • Private registry thiếu imagePullSecrets

Lệnh debug toàn diện

troubleshoot-commands.sh
# Kiểm tra node
k get nodes
k describe node <node-name>
ssh <node> -- sudo systemctl status kubelet
ssh <node> -- sudo journalctl -u kubelet --no-pager | tail -50

# Kiểm tra pod
k describe pod <pod-name>           # xem phần Events ở cuối
k logs <pod-name>
k logs <pod-name> --previous        # pod đã crash
k logs <pod-name> -c <container>    # pod nhiều container

# Kiểm tra service/endpoint
k get endpoints <service-name>       # rỗng = selector không khớp pod
k describe svc <service-name>

# Kiểm tra DNS
k run test-dns --image=busybox:1.36 --rm -it -- nslookup kubernetes

# Kiểm tra control plane khi cluster bị lỗi
k get pods -n kube-system
sudo kubeadm certs check-expiration
ls /etc/kubernetes/manifests/
⚙️

Domain 3: Workloads & Scheduling 15%

Deployments, rolling updates, ConfigMaps, static pods, scheduling constraints

Rolling Update và Rollback

deployment-rollout.sh
k create deployment webapp --image=nginx:1.26 --replicas=3

# Cập nhật image (trigger rolling update)
k set image deployment/webapp nginx=nginx:1.27
# ⚠️ LƯU Ý: "nginx" ở đây là TÊN CONTAINER trong pod spec, không phải tên deployment!

k rollout status deployment/webapp
k rollout history deployment/webapp

# Rollback về phiên bản trước
k rollout undo deployment/webapp

# Rollback về revision cụ thể
k rollout undo deployment/webapp --to-revision=2

ConfigMap và Secret — 3 cách inject vào Pod

envFrom tất cả keys
envFrom:
- configMapRef:
    name: app-config
- secretRef:
    name: db-creds
env từng key cụ thể
env:
- name: DATABASE_USER
  valueFrom:
    secretKeyRef:
      name: db-creds
      key: DB_USER
mount dưới dạng file
volumeMounts:
- name: config-vol
  mountPath: /etc/config
volumes:
- name: config-vol
  configMap:
    name: app-config
# ⚠️ Mount volume ConfigMap vào thư mục sẽ thay thế toàn bộ nội dung thư mục đó!
# Dùng subPath nếu chỉ muốn mount 1 file.

Static Pods — Đặc biệt quan trọng

⚠️
Static pods do kubelet quản lý trực tiếp, không thể xoá bằng kubectl. Kubelet sẽ tự tạo lại nếu xoá. Để xoá: xoá file manifest trong /etc/kubernetes/manifests/.
static-pod.sh
# Tìm đường dẫn static pod
cat /var/lib/kubelet/config.yaml | grep staticPodPath
# Thường là: /etc/kubernetes/manifests

# Tạo static pod
sudo tee /etc/kubernetes/manifests/static-web.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: static-web
spec:
  containers:
  - name: web
    image: nginx:1.27
EOF
🏗️

Domain 4: Cluster Architecture 25%

etcd backup/restore, kubeadm, RBAC — phân biệt CKA với CKAD rõ nhất tại đây

RBAC — Kiểm soát truy cập

ObjectPhạm viGắn với
RoleNamespaceRoleBinding
ClusterRoleToàn clusterClusterRoleBinding hoặc RoleBinding
RoleBindingNamespaceRole hoặc ClusterRole
ClusterRoleBindingToàn clusterClusterRole
rbac.sh
# Tạo Role (quyền trong namespace)
k create role pod-reader \
  --verb=get,list,watch \
  --resource=pods \
  -n dev

# Tạo RoleBinding
k create rolebinding read-pods \
  --role=pod-reader \
  --serviceaccount=dev:my-sa \
  -n dev

# Kiểm tra quyền (rất hay dùng trong thi)
k auth can-i list pods -n dev \
  --as=system:serviceaccount:dev:my-sa

etcd Backup và Restore — GẦN NHƯ CHẮC CHẮN CÓ TRONG ĐỀ

🔥
Câu lệnh này xuất hiện gần như chắc chắn trong mọi đề thi CKA. Hãy nhớ thuộc 3 flag cert: --cacert, --cert, --key. Tìm đường dẫn cert trong /etc/kubernetes/manifests/etcd.yaml.
etcd-backup-restore.sh
# BACKUP etcd
ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-backup.db \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key

# Kiểm tra snapshot
ETCDCTL_API=3 etcdctl snapshot status /tmp/etcd-backup.db --write-table

# RESTORE etcd
# Bước 1: Restore ra thư mục mới
ETCDCTL_API=3 etcdctl snapshot restore /tmp/etcd-backup.db \
  --data-dir=/var/lib/etcd-restored

# Bước 2: Cập nhật etcd manifest để dùng thư mục mới
sudo vi /etc/kubernetes/manifests/etcd.yaml
# Đổi --data-dir=/var/lib/etcd → /var/lib/etcd-restored
# Đổi hostPath.path tương ứng

# Bước 3: Đợi etcd restart (~30-60s) — kubectl có thể không respond, bình thường!

kubeadm Upgrade — Control Plane → Worker

kubeadm-upgrade.sh
### CONTROL PLANE NODE ###
sudo apt-mark unhold kubeadm
sudo apt-get install -y kubeadm=1.35.0-1.1
sudo apt-mark hold kubeadm
sudo kubeadm upgrade plan
sudo kubeadm upgrade apply v1.35.0
sudo apt-get install -y kubelet=1.35.0-1.1 kubectl=1.35.0-1.1
sudo systemctl restart kubelet

### WORKER NODE ###
# Từ control plane: drain worker
k drain worker-1 --ignore-daemonsets --delete-emptydir-data

# SSH vào worker, upgrade
sudo apt-get install -y kubeadm=1.35.0-1.1 kubelet=1.35.0-1.1 kubectl=1.35.0-1.1
sudo kubeadm upgrade node   # ← worker dùng "node", không phải "apply"!
sudo systemctl restart kubelet

# Từ control plane: uncordon
k uncordon worker-1
🌐

Domain 5: Services & Networking 20%

Services, Ingress, Gateway API, NetworkPolicy, DNS — NetworkPolicy là nơi mất điểm nhiều nhất

Các loại Service

TypeCách hoạt độngKhi nào dùng
ClusterIPIP nội bộ clusterService nội bộ (mặc định)
NodePortClusterIP + cổng trên mọi node (30000-32767)Dev/test, truy cập trực tiếp qua node
LoadBalancerNodePort + cloud LBProduction trên cloud
ExternalNameCNAME đến DNS externalTrỏ đến dịch vụ bên ngoài

NetworkPolicy — Quy tắc quan trọng

Quy tắc then chốt: Khi có bất kỳ NetworkPolicy nào chọn một pod, tất cả traffic không được phép tường minh đều bị chặn. Đừng quên thêm rule cho DNS egress (port 53) nếu cần DNS lookup!
networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend
  namespace: prod
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - protocol: TCP
      port: 8080

Gateway API — Mới trong v1.35 (GA)

🆕
Gateway API đã GA từ v1.2+, đang dần thay thế Ingress. Trong thi, cần biết tạo GatewayHTTPRoute trỏ đến backend service.
gateway-api.yaml
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: my-gateway
spec:
  gatewayClassName: nginx
  listeners:
  - name: http
    protocol: HTTP
    port: 80
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: my-route
spec:
  parentRefs:
  - name: my-gateway
  rules:
  - backendRefs:
    - name: my-service
      port: 80

Lệnh Imperative Nhanh

Dưới áp lực 2 giờ thi, imperative nhanh hơn viết YAML nhiều lần

🚀
Nhớ 2 shorthand cực quan trọng: $do = --dry-run=client -o yaml$now = --force --grace-period=0. Dùng trong luyện tập nhưng nhớ phải gõ đầy đủ trong thi!
imperative-commands.sh
## POD
k run nginx --image=nginx:1.27
k run nginx --image=nginx:1.27 --port=80 --labels=app=web
k run nginx --image=nginx:1.27 --dry-run=client -o yaml > pod.yaml

## DEPLOYMENT
k create deployment webapp --image=nginx:1.27 --replicas=3
k scale deployment webapp --replicas=5
k set image deployment/webapp nginx=nginx:1.28

## SERVICE
k expose deployment webapp --port=80 --target-port=8080
k expose deployment webapp --port=80 --target-port=8080 --type=NodePort
k port-forward svc/webapp 8080:80   # test local

## RBAC
k create sa my-app -n prod
k create role pod-reader --verb=get,list,watch --resource=pods -n prod
k create rolebinding read-pods --role=pod-reader --serviceaccount=prod:my-app -n prod
k auth can-i list pods -n prod --as=system:serviceaccount:prod:my-app

## NODE
k cordon node-1
k drain node-1 --ignore-daemonsets --delete-emptydir-data
k uncordon node-1
k taint nodes node-1 key=value:NoSchedule

## CONFIGMAP / SECRET
k create configmap app-cfg --from-literal=LOG=debug --from-literal=ENV=prod
k create configmap nginx-conf --from-file=nginx.conf
k create secret generic db-creds --from-literal=user=admin --from-literal=pass=s3cr3t
📄

kubectl Cheat Sheet for CKA

Các lệnh dùng nhiều nhất trong thi — nhóm theo chức năng

context-namespace.sh
# ⚠️ LUÔN chạy trước mỗi câu hỏi!
k config use-context <context-name>
k config current-context

# Đặt namespace mặc định (alias kn)
kubectl config set-context --current --namespace=<namespace>

# Xem tất cả tài nguyên trong mọi namespace
k get pods -A
k get pods -o wide
debug.sh
k describe pod <pod>              # xem events — quan trọng nhất
k logs <pod>
k logs <pod> --previous
k exec -it <pod> -- /bin/bash
k exec <pod> -- curl http://localhost:8080
k get events --sort-by='.lastTimestamp'
k top pods -n prod
k top nodes
k debug node/<node> -it --image=busybox:1.36
yaml-generation.sh
# Tạo YAML mà không apply
k run nginx --image=nginx:1.27 --dry-run=client -o yaml > pod.yaml
k create deployment webapp --image=nginx --dry-run=client -o yaml > deploy.yaml
k expose deployment webapp --port=80 --dry-run=client -o yaml > svc.yaml
k create job myjob --image=busybox -- sh -c "echo done" --dry-run=client -o yaml > job.yaml
k create cronjob mycron --image=busybox --schedule="*/5 * * * *" -- sh -c "echo tick" \
    --dry-run=client -o yaml > cron.yaml

# Copy YAML từ resource có sẵn
k get deployment webapp -o yaml > webapp-backup.yaml
misc.sh
# Xoá nhanh
k delete pod <pod> --force --grace-period=0
k delete pods --all -n prod

# Patch resource
k patch deployment webapp -p '{"spec":{"replicas":5}}'

# JSONPath
k get pods -o jsonpath='{.items[*].metadata.name}'

# Custom columns
k get pods -o custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[0].image

# Copy file từ pod
k cp pod-name:/var/log/app.log ./app.log
🖥️

Môi Trường Thi (PSI Remote Desktop)

Những điều bất ngờ về môi trường thi mà phải biết trước

Copy/Paste trong terminal
Ctrl+Shift+C/V
Notepad dùng Ctrl+C/V bình thường
Tab trình duyệt
1 tab phụ
Chỉ cho kubernetes.io — dùng search thay vì navigate
Độ trễ bàn phím
~50–100ms
Mỗi phím có độ trễ nhỏ — tích lũy đáng kể
Terminal tabs
Nhiều tab
Mở 2 tab: 1 làm task, 1 verify
🔴
Quan trọng: Mỗi câu hỏi là một SSH connection mới. Alias và config bạn đặt sẽ KHÔNG được giữ lại qua câu tiếp theo. Chỉ có k alias cho kubectl là được pre-configure sẵn trên mọi máy.
🎯

Chiến Thuật Ngày Thi

Phương pháp two-pass đã giúp tiết kiệm thời gian đáng kể

Phương Pháp Two-Pass

Lượt 1 — Quét nhanh
Làm tất cả câu dễ
Câu dưới 3 phút → làm ngay. Câu khó → đánh dấu, bỏ qua.
Lượt 2 — Câu khó
Quay lại câu đã skip
Dùng thời gian còn lại cho câu phức tạp — troubleshooting, etcd.
⏱️
Quản lý thời gian: Nếu một câu mất quá 5-6 phút, hãy đánh dấu và bỏ qua. Điểm của câu đó không đáng bằng thời gian đủ để làm 3 câu khác.

Checklist Ngày Thi

Lỗi Thường Gặp Dẫn Đến Trượt

Học từ sai lầm của người đi trước — tránh những bẫy này

🎯 Quên switch context trước mỗi câu

Mỗi câu hỏi chạy trên một cluster khác nhau. Không chạy k config use-context <name> đầu tiên = bạn đang làm sai cluster = mất điểm hoàn toàn dù làm đúng.

🏷️ storageClassName không khớp giữa PV và PVC

PVC sẽ ở trạng thái Pending mãi mãi. Không có error message rõ ràng. Luôn kiểm tra storageClassName ở cả hai phía — kể cả case chữ hoa/thường.

📦 Dùng sai tên container trong k set image

k set image deployment/webapp webapp=nginx:1.27 — "webapp" đầu tiên là tên container trong pod spec, không phải tên deployment. Kiểm tra tên container bằng k describe deployment webapp.

⏰ Mất quá nhiều thời gian vào 1 câu khó

Nếu một câu khó tốn quá 6-7 phút → đánh dấu và bỏ qua. Quay lại sau khi đã làm hết câu dễ. Điểm của câu đó không bù đắp được thời gian mất đi.

🧹 Quên xoá static pod bằng cách xoá file manifest

k delete pod static-web-node1 sẽ không có tác dụng — kubelet tạo lại ngay. Phải rm /etc/kubernetes/manifests/static-web.yaml trên node tương ứng.

🔒 NetworkPolicy chặn DNS — service không resolve được

Khi thêm egress NetworkPolicy, nhớ cho phép port 53 UDP/TCP đến CoreDNS namespace. Nếu quên → DNS không resolve → service không kết nối được dù rule port đúng.

📅

Lộ Trình Học 4–5 Tuần

Kế hoạch học được tối ưu từ kinh nghiệm thực tế

Tuần 1
Cài đặt cluster với kubeadm từ đầu (x2)
Pod, Deployment, Service cơ bản
ConfigMap, Secret, các cách inject
PV/PVC/StorageClass
Làm bài tập 01–06
Tuần 2
RBAC — Role, ClusterRole, ServiceAccount
NetworkPolicy (luyện kỹ)
Ingress / Gateway API
Taints, Tolerations, NodeAffinity
Làm bài tập 07–15
Tuần 3
etcd backup/restore (luyện 10+ lần)
kubeadm upgrade control plane + worker
Troubleshooting nodes, kubelet
Troubleshooting pods, services, DNS
Làm bài tập 16–25
Tuần 4
killer.sh lần 1 — lấy điểm cơ sở
Review lỗi sai trong killer.sh
Luyện các topic yếu nhất
Làm bài tập 26–31
Mock Exam 01 + 02
Tuần 5 (trước thi)
killer.sh lần 2 (3 ngày trước thi)
Ôn lại cheat sheet
Luyện không dùng alias — gõ đầy đủ
Nghỉ ngơi ngày trước thi
✅ THI!
📚
Quick Start (Ít hơn 4 tuần): (1) Chạy exam-setup.sh → (2) Làm 31 bài labs theo thứ tự → (3) Dùng TEMPLATES.md → (4) Mock exam → (5) killer.sh 2 lần → (6) Đọc chiến thuật ngày thi.
⚔️

killer.sh vs Thi Thật

killer.sh khó hơn thi thật — nhưng đó là điều tốt

Tiêu chíkiller.shThi thật CKA
Độ khóKhó hơn — câu hỏi phức tạp hơnHarder trên thực tế do áp lực thời gian
Mục đíchLuyện tốc độ và tự tinChứng nhận thực sự
Khi làm2 lần: 2 tuần trước + 3 ngày trướcSau khi luyện xong
Điểm lần đầuThường thấp — bình thường!Mục tiêu ≥66%
Giá trịXây dựng muscle memoryKết quả cuối cùng
Điểm killer.sh lần đầu thấp là hoàn toàn bình thường. Giá trị thực sự là tốc độ và sự tự tin mà bạn xây dựng được sau đó.
🏆

CKA vs CKAD vs CKS — Nên Thi Cái Nào?

So sánh 3 chứng chỉ Kubernetes để chọn đúng hướng đi

CKACKADCKS
Focus Quản trị Cluster Phát triển ứng dụng Bảo mật
Dành cho SRE, Platform Eng, Admin Developer deploy lên K8s Security Eng, Senior Admin
Độ khó Khó — etcd và troubleshooting brutal Trung bình — nếu đã deploy K8s Khó nhất — Falco/AppArmor khó nhớ
Điểm đạt 66% 66% 67%
Điều kiện Không có Không có Phải có CKA đang còn hiệu lực
Nên học trước? Bắt đầu ở đây nếu quản lý cluster Nếu thuần dev Chỉ khi công việc yêu cầu
💼
Có khoảng 40% overlap giữa CKA và CKAD (pods, deployments, services, configmaps, secrets). Nếu đạt một cái, cái kia dễ hơn nhiều. Nên làm CKA trước vì troubleshooting và etcd backup khó tự học hơn.
🆕

Thay Đổi Trong Kubernetes v1.35

Nếu đang học từ guide cũ (v1.29/v1.30) — một số nội dung đã sai!

🚨
Nhiều blog cũ vẫn reference dockershim và --record flag trong rollout — đã deprecated/removed. Kiểm tra ngày viết của mọi tài liệu bạn tham khảo.
Tính năngTrạng thái v1.35Ảnh hưởng đến thi
Sidecar containers (native) GA Init container với restartPolicy: Always chạy như sidecar. CÓ thể gặp trong đề.
Gateway API GA (v1.2+) Đang thay thế Ingress. Có câu hỏi trong thực tế. Biết tạo Gateway + HTTPRoute.
kubectl debug GA k debug node/<name>k debug pod/<name> — hữu ích khi troubleshoot.
cgroup v2 Default Tất cả nodes dùng cgroup v2. Ảnh hưởng resource monitoring.
ValidatingAdmissionPolicy GA CEL-based admission không cần webhook. Trong curriculum — luyện 15 phút.
CSI migration hoàn tất Done In-tree volume plugin đã migrate sang CSI. StorageClass provisioner đều là CSI.
In-place pod vertical scaling Beta Resize CPU/memory không cần restart. Biết nó tồn tại, không cần học sâu.
📚

Tài Nguyên Luyện Thi

Môi trường thực hành và công cụ học tập

⚠️
Không thể đọc mà đậu CKA. Bắt buộc phải thực hành phá vỡ và sửa chữa trên cluster thật. Tạo môi trường ngay từ tuần đầu.

Môi trường thực hành

Local
kind / minikube
Chạy trên laptop — nhanh, miễn phí
Online Playground
Killercoda / KodeKloud
Browser-based — không cần cài đặt
Kèm theo khi mua thi
killer.sh × 2
2 session 24h — dùng đúng thời điểm!

Trước Khi Đặt Lịch Thi