CKA備考&常用指令筆記

最初因為工作需要而開始接觸Kubernetes,組內的前輩們花了一段時間建立了一個cluster,有好幾個worker node,上面也已經deployed了各種app。

身為一個剛被配屬的小菜鳥,也從來沒有接觸過k8s,前輩們於是決定幫我開一個ナレッジ共有会,從pod的基本概念講起,淘淘不絕分享了兩小時(其實仔細想想,線上課都要20幾小時,兩小時要是我就聽懂了也是滿神的),但是只換來我呆滯的眼神跟停止思考的腦袋……

總而言之,就是一知半解,但工作還是要做,日子還是要過。我就這樣半推半就(?)進入了kubernetes的世界,竟也跌跌撞撞但有驚無險的摸懂了基本操作,甚至還主導了幾次cluster upgrade跟cluster migration。幾句話的輕描淡寫,背後也是花了好幾年的時間,期間一直在想,我應該要找個線上課老老實實地從頭開始打基本功,能順便考個CKA就好了。

但行動力像條蟲的我,拖延病一發作就是一兩年,直到今年,各種層面上想要好好整頓一下自己的生活,也包括未來的職涯。也因此好好把CKA拿到手,就又回到我的待辦事項中,趁著4月新生活打折的時機,以30%off的價格買了CKA考試。

線上課程

跟網路上大部分人一樣,都是找了udemy上Mumshad Mannambeth的Certified Kubernetes Adminidtrator(CKA) with Practice Tests來看。

不得不說,真的清楚易懂,而且每個小單元都有練習題,最後還有三個模擬試題可以練習,雖然環境和真正考試環境並不是100%相同,但也相去不遠了。課程影片和hands on lab雖然是相輔相成的,但畢竟考試的形式不是選擇題,而是上機實際操作,hands on lab其實才是決定能不能順利通過考試的關鍵!!

說實在,若有無限的時間慢慢google的話其實都不是難事(畢竟是開書考XD),但難就難在必須在有限的時間內(2小時)完成17道題目,而且要敲的指令也不算少,做完題目也得檢查一下比較保險,因此把簡單的指令記下來,並知道要怎麼在doc中搜尋出複雜的指令就成了考試對策中一個重要的環節。(大概就跟考多益一樣,到最後也不見得是在考英文能力,而是耐心跟讀題速度XD)

kubectl常用指令

雖然說是為了考試而寫的筆記,但在自己過去的實務經驗上,好用實用的指令還是很多的,準備CKA也不只是為了那張證書,在自己的技術提升上也是受益良多了。

參考Document url

前置設定

create各種

修改、刪除等基本操作

select, operate on resource

一些yaml修改寫法

Install, Upgrade cluster

etcd backup

Context

kubectl config view
kubectl config current-context
kubectl config get-clusters
kubectl config use-context cluster1

CSR

kubectl certificate approve/deny xxx

Securitycontext

Networking

jsonpath

kubectl get pv -A -o=jsonpath='{.items[*].spec.capacity.storage}'
  (same as: kubectl get pv  -o=jsonpath={.items..spec.capacity.storage})
kubectl get pv --sort-by=.spec.capacity.storage | sort -r
kubectl get pv --sort-by=.spec.capacity.storage -o=custom-columns=NAME:.metadata.name,CAPACITY:.spec.capacity.storage
kubectl get pod --no-header
kubectl config view --kubeconfig=my-kube-config -o jsonpath="{.contexts[?(@.context.user=='aws-user')].name}" > /opt/outputs/aws-context-name
kubectl get pv -o jsonpath='{.items[?(@.metadata.name=="pv-log-1")].metadata.name}'

TroubleShooting

Linux指令

Grep

Get encryted public key

cat akshay.csr | base64 | tr -d "\n"

Count lines

kubectl get xxxxx | wc -l

Check listining port

netstat -nplt (numeric-ip program listen tcp)
netstat -anp | grep etcd | grep 2379 (list all program with etcd on port 2379)
kubectl top pods | awk {'print $1'}