Practice makes perfect:CKAD 考取之路經驗分享

㊣港都🦭豹哥㊣
新加坡商鈦坦科技
9 min readMar 23, 2023

為了提升開發團隊對於 Kubernetes 的掌握程度,鈦坦科技在 2022 年間找了原格科技的陳大慶老師兼創辦人,以企業包班的形式,在五天的時間帶著大家從容器化的原理到 Kubernetes 的進階應用進行講授,其中也探討了許多在實務上遇到的問題、分享相關經驗,並以考取 CKAD(Certified Kubernetes Application Developer)為目標帶大家做練習。

I passed my CKAD exam!. Despite working with Kubernetes daily… | by  Christopher Parker, MSc | ITNEXT

當然「師父引進門,修行在個人」,真正的學習還是要靠自身花時間的練習,希望透過這份紀錄,統整一下自身學習及考試的過程,也期望能幫助到想往這塊發展的工程師們。

這篇文章會從考試報名、考前準備、考試過程及感想結語等段落做介紹。

目錄
1. 考試報名
2. 考試前準備
3. 考試過程
4. 答題過程
5. 結語

考試報名

若有想要考取相關證照(如 CKAD、CKA、CKS 等等),可以不時的關注一下 linuxfoundation 官網,偶爾會有一些 coupon code,能透過優惠價格購買,只要是在購買後的一年內都能使用。筆者在購買後過了半年才進行考試,但大約省下了 120 美金(撰寫文章當下原價是 395 美金)這筆不小的開銷。

若不知道從何學習,官方也有提供可重複觀看的線上課程可以學習,只要在購買時選擇 Bundle 的版本便可以有以下的內容,當中也包含許多練習題可以熟悉各項操作來迎接考試。

Bundle 版本會包含 Course 的部分

考試報名時可以選擇考試的語言及監考老師的語言,也能夠選擇自己適合的時間,也因為了解自己 Deadline Trigger 的個性,在規劃複習計畫前,先有個確定的考試日期才能夠推進自己的進度,也因此就排定了過年後的一周進行考試,期許藉著這個年假這幾天來好好地複習並練習,在這大約兩周的時間來衝刺。

繼續閱讀|回目錄

考試前準備

為了能夠有自己的練習環境,在開始複習前的第一件事便是建立自己的 Kubernetes 環境,筆者本身是使用 Windows 的作業系統,因此是透過 WSL(Windows Subsystem for Linux)來安裝 Docker,並將 minikube 安裝在 Docker 上來運行 Kubernetes cluster。當然也可以使用官網上介紹的kubeadm、 k3dkind 或是其他線上拋棄式的 Kubernetes 環境(https://labs.play-with-k8s.com/)來練習,只要確保考試報名時的版本和練習環境所安裝的 Kubernetes 版本一致即可。

WSL 上運行 minikube

有了練習環境後便開始重新看一遍上課的錄影檔,搭配著自己的環境做練習(上課時講師有準備線上的 Kubernetes 環境供學員練習),當然為了節省時間,除了開 1.5 倍速外,確定熟悉的部分也會快速的帶過,來確保時間花在重要的部分(雖然光複習及練習完上課內容就已經花掉一周)。

複習完畢後,除了講師提供的練習題外,筆者還有透過 CNCF (Cloud Native Computing Foundation)在 Github 上所提供的 CKAD 練習題來做練習,但因為題目眾多,因此僅針對看過去覺得沒有百分百把握的題目做練習,讓效益最大化。

最後在考前約三天左右,開始做 CKAD 考試的模擬考。這份模擬考會從網頁中連線到一台虛擬機器(印象是一個 Ubuntu 環境)來進行測驗,而為了模擬正式考試的環境,也僅透過虛擬機內的 Firefox 來開啟 Kubernetes 文件查查資料並複製到終端機中(考試中僅能用機器內瀏覽器查資料,並且有限定僅能開啟幾個官方文件,可參考這裡)。這個模擬考機器可以在 36 小時內無限使用,在這期間可以回答題目、檢視分數及觀看解析,也能重置倒數時間及作答狀況來達成無限次的練習。而這個模擬考總共可以使用兩次,也就是有 72 小時使用的時間。筆者是透過第一次 36 小時內反覆練習並透過詳解學習,第二次盡可能地模擬正式的情境,要求自己在時間內透過有限的資源來答題。完成後也差不多到了考試前一天了,保持著這樣備戰的心態迎接正式考試。

這邊附帶一提的是,隨著練習的數量變多,慢慢會感受到輸入 kubectl 指令以及其中 flag 的繁瑣,因此除了設定 alias k=kubectl 外(目前考試版本預設已有此 alias),筆者也有設定 export dry="--dry-run=client -o yaml" 來快速的產生 yaml 檔案,建議可依照自己的經驗及習慣,在考試開始時先設定一下環境。

透過變數的代換減少重複 command 的輸入
繼續閱讀|回目錄

考試過程

考試開始前請務必做網站上要求的環境檢查,來確保網路連線、硬體設備、軟體設備有符合考試的需求,最好是在幾天前先確定,考試開始前再做一次來確保一切沒問題。

考試時間到了之後,在網站上可以下載一個遠端桌面的安裝檔(不同測驗皆須重新下載該安裝檔),此次該檔案將近 400 MB,因此也建議一定要在網路通暢的環境中進行,否則光是下載就要等待很久。下載完畢後開啟該檔案會要求關閉電腦上幾乎所有不相干的應用程式,接著等待數分鐘後,便會有監考官透過即時通訊的視窗來做所有考前的確認:

  1. 護照資訊正確:監考官會要求考生將護照放在鏡頭前,因此請確保鏡頭的畫質足夠,或是可以透過透明水杯(有飲水需求只接受透明水杯)來當放大鏡使用。
  2. 檢查考生身上:監考官會依序要求檢查耳朵、雙手等等部位以確保沒有任何通訊設備或是小抄。
  3. 檢查周遭環境:監考官會要求將視訊鏡頭環繞四周、桌面、桌底、桌角、天花板、鍵盤上下、螢幕前後、筆電前後等等地方,因此建議盡可能使用外接的視訊鏡頭,否則用筆電鏡頭可能會很辛苦。筆者選擇的是公司內明亮、牆上無任何掛飾且桌面桌底皆乾淨的會議室來進行,希望盡可能減少監考官的疑慮。

完成後等待一下便會進入考試的畫面。

繼續閱讀|回目錄

答題過程

筆者這次考試總共有不到 20 題的題目,個人認為整體難度由簡單到難是平均分配的,因此遇到較難的問題時要記得先註記並跳過,待完成盡可能多的題目後再回來研究。筆者在最後花了約 20 分鐘完成一題當初看不懂的題目,也慶幸當時有先跳過,否則可能會浪費許多時間還不一定能答對。

答題過程中有幾點需要特別注意:

  1. 要修改既有的物件時,先透過 kubectl get deploy XXX -o yaml > deploy.yaml 這類的指令將 yaml 複製出來,複製一份修改後再 apply 上去,才能避免不可逆的錯誤發生。
  2. 不論是多簡單的物件,建立時多透過 --dry-run=client -o yaml 的指令來產出基礎 yaml 後再 apply 使其生效,也方便後續的檢查及調整。
  3. 遇到不熟悉透過指令產生的物件時,直接複製官方文件上的 yaml 來做調整。
  4. 每題皆有對應可能要切換的 cluster 及 namespace,一定要記得切換才會有對應的分數。

考試中間有發生一項小插曲,在考試開始後約一小時,公司樓上的樓層剛好在進行整修,瘋狂的鑽牆壁敲地板進行施工,一度讓監考官詢問為何有那麼多聲音,還好經過解說後仍允許繼續作答。但也有沒那麼幸運的,同事在考試過程中,收到大樓的廣播,結果直接停止考試,大家要多多注意並提前協調避免這樣的情況發生。

繼續閱讀|回目錄

結語

經歷了複習及考取證照的階段,重要的還是回到團隊帶來的影響。好巧不巧的是幾天後系統監控到一個僅有兩個 Pod 並且部署在公有雲的服務中斷,透過這一系列習得的知識,很快的可以追出問題所在--兩個 Pod 剛好同時在同個節點上,而節點的 Auto Scaling (此次問題是離峰時段的 node scale down)造成了兩個 Pod 同時被刪除並同時在另一個節點重新建立,導致了服務中斷的結果,並在和 IT 人員討論後,很迅速地透過 PDB (Pod Disruption Budget)的設定為服務加上了最少 Pod 的限制,讓下次同樣情況發生時能先讓 Pod 在別的節點正常運作後再做節點的 Scale down;此外,也為 Pod 加入反親合性(Anti-affinity)的設定來讓多個 Pod 能盡可能的分散在不同的節點中。若沒有這次的課程及練習,在這除錯及防範的過程中肯定會花上更多的時間及心力,也讓服務更長的時間持續暴露在風險中。

## 透過 PDB 來設定最小可存取 Pod 數量 ##
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: my-app-pdb
spec:
minAvailable: 1
selector:
matchLabels:
app: my-app

最後,還是回到這一連串的學習過程。想要盡可能地掌握容器化這門硬底子的技術,在學習上勢必是需要花一些時間來從基礎學起。在 CKAD 的考試過程中,不論是模擬考或是正式考試,都會有一題是關於 Docker 或是其他容器化技術的操作(如 Containerd、Podman),雖然都不會太複雜(建置、加入環境變數、打包 image、運行等等),解題過程也不時的會需要 -h 或是 --help 的協助,但也提醒著我們即便 Kubernetes 操作已經相當順暢,也別忘了其運行的基礎,就好比練武也要站穩馬步、棒球投球要求下盤穩定一樣,各項技術基礎學得好才能走得長遠又穩定。

通過 CKAD 考試後官方給予的線上 Badge

--

--

㊣港都🦭豹哥㊣
新加坡商鈦坦科技

從北方的南港登陸南方的海港,沐浴在港都的陽光下,想要一展豹負。豹持著 Never Stop Improving 的精神,在此跟大家分享哥的開發日常😎