前幾天剛考完 Certified Kubernetes Administrator(CKA),在全職工作的同時我大約花了兩個月備考,趁記憶還新鮮,把真正有用的和踩到的坑都寫下來。
在這個 Coding assistants 猖獗(?)的時代,我已經很習慣直接問 AI 指令怎麼寫。CKA 完全不吃這套。它是全實作的終端機考試,兩小時,沒有任何提示,就是你跟一堆壞掉的 cluster 面對面,然後看著 kubectl 指令卡住、時間一秒一秒跑掉。
如果你跟我一樣之前沒考過這種純動手的考試,要克服的不只是 Kubernetes 本身,還有「在壓力下快速、正確地打指令」這件事。這個比我預期花了更多時間。
從一門 Udemy 課程開始,把核心概念先弄紮實。課程整體不錯,但網路那章節涵蓋得不夠全,建議另外補充。這個階段我用了很多 Gemini 來填補概念空缺 —— 能夠跟它說「幫我用考試會考的角度解釋這個」,真的滿好用的。
第一次跑 Killer.sh 模擬考,我考了 16/75 (!),而且根本做不完所有題目。
Killer.sh 設計得比正式考試難很多、題量也更密集。它的目的就是讓你覺得自己不行,這樣真正上場時才會覺得題目是人能解的。但話說回來,16/75 這個數字確實讓我楞了一下,它清楚地告訴我問題在哪:太慢,而且對工具還不夠熟練。
帶著不同目標重做 Udemy 的 lab —— 不是「把答案做出來」,而是「快速把答案做出來」。這裡需要的肌肉記憶,不是背指令,而是消除猶豫:知道該去找哪個資源、怎麼快速拉一個 YAML 模板來改、哪題該先跳過之後再回來。
第二次模擬考:兩小時內做到 53/93,延時 12 分鐘後推到 58/93。和第一次完全是不同的體驗。還不完美,但我感覺準備好了。
我的準備時程其實有點趕,部分原因是低估了建立肌肉記憶需要多久,加上之前沒有考過這類實作考試。如果重來(或之後準備 CKS),我會照這個順序:
官方 K8s 文件 → Killercoda → Udemy Lab → 報名考試 → 刷 Killer.sh
關鍵差異:更早開始用 Killercoda,從一開始就在真實終端機環境裡累積手感,而不是後期才補。
考試終端機裡要用 Ctrl + Shift + C / Ctrl + Shift + V 複製貼上,一般的快捷鍵沒用。查文件時用 Ctrl + F 直接跳到你需要的 YAML,不要一直滾。聽起來很基本,但緊張又趕時間的時候,連這種事都需要肌肉記憶。
control plane 的指令如果卡住了,不要盯著它看。開第二個終端機分頁,去做下一題,之後再回來。這個習慣在整場考試幫我省了大概 5-10 分鐘。
一題花了超過五分鐘還不確定怎麼做,就先標記、跳過。先把有把握的分數拿到,再用剩下的時間回來攻難題。這是很顯而易見的策略,但當你做到一半覺得「再多一點就解出來了」的時候,很容易忘記。
如果題目要你修復某個 cluster 元件,先看同個 cluster 裡(或另一個 cluster 的)正常節點是怎麼設定的。拿一份能跑的 config 當基底,比從記憶裡重建快多了,也安全多了。
用 kubectl get <resource> -o yaml 把現有資源拉出來改。在時間壓力下從零開始寫 manifest,是最容易因為手殘打錯字而丟分的方式。
systemctl status kubelet 和 journalctl -u kubelet -f
crictl ps 和 crictl logs
/var/log/pods
/etc/kubernetes/manifests
/var/lib/kubelet(PKI 在 /var/lib/kubelet/pki)/etc/cni/net.d/
<service>.<namespace>.svc.cluster.local
<pod-ip-with-hyphens>.<namespace>.pod.cluster.local
實際用到的指令,不是 kubectl 全功能說明書。
kubectl get all
kubectl get pod -l env=prod
kubectl -n <namespace> get deploy,ds,sts,pv,pvc
kubectl --kubeconfig <file> config current-context
kubectl cluster-info --kubeconfig <file>
kubectl api-resources --namespaced -o name
kubectl kustomize <dir>
kubectl kustomize <dir> | kubectl diff -f -
kubectl kustomize <dir> | kubectl apply -f -
openssl x509 -text -noout -in <cert_file>
kubeadm certs check-expiration
kubeadm certs renew <name>
kubeadm token create --print-join-command
systemctl daemon-reload && systemctl restart kubelet
crictl ps -a
crictl logs <container_id>
crictl inspect <container_id>
kubectl auth can-i <verb> <resource> --as=system:serviceaccount:<namespace>:<serviceaccount-name>
# Base64 編碼,不換行(這個很重要)
echo -n "secret-data" | base64 -w 0
# 把 pod 直接 expose 成 ClusterIP service
kubectl expose pod nginx-resolver --name=nginx-resolver-service --port=80 --target-port=80 --type=ClusterIP
# 臨時 debug pod,離開後自動刪除
kubectl run test-nslookup --image=busybox:1.28 --rm -it --restart=Never -- nslookup nginx-resolver-service
# 建立帶多個 label 的 pod
kubectl -n <ns> run <pod-name> --image=<image> --labels "key1=val1,key2=val2"
# 從 pod 內部 curl 一個 FQDN
kubectl -n <ns> exec <pod-name> -it -- curl <service>.<namespace>.svc.cluster.local
# ConfigMap 更新後 rolling restart
kubectl rollout restart deploy <deployment-name> -n <ns>
# 查路由表
ip route show
在 AI 能幾秒內生出一份能跑的 YAML manifest 之前,純實作考試的邏輯是說得通的 —— 在壓力下正確打出指令,代表你真的懂這些東西。但我不確定這個邏輯現在還站不站得住腳。
話雖如此,我不覺得 CKA 沒有價值。被丟進一堆壞掉的環境、要自己想辦法排查出來,這跟背語法是完全不同的事。只是我確實在想,兩小時的倒數計時,測的到底是真正重要的能力,還是只是最容易量化的那個。
也許這個形式需要的是演進,而不是消失 —— 少一點「你能不能打得夠快」,多一點「沒有任何提示,你能不能找出問題在哪」。後者感覺才是現在真正重要的東西。
每一題都要完整讀完再開始打指令。緊張的時候掃題很容易看漏細節,然後 namespace 設錯、白白丟分。
祝您考試順利!
在台灣這張證照沒用,還不如累積實作經驗。
別這麼說,真要說的話幾乎所有這類的認證都比國內的資訊碩士有用,念研究所不如累積產業經驗。
至少別人還有持續學習的熱誠,很可貴
這是敲門磚,至少在人資或主管看履歷時,有證照,機會比較高,履歷不被扔掉。