DevOps
CICD
K8s
Docker
有了前面幾天的鋪墊後,大家應該對K8s
都有基本的認識了,還不太了解的朋友也沒關係,後面我們會藉由解題過程來講解觀念,這也就是我們的宗旨~ 那我們今天先來了解一下考前有哪些技巧是必備的吧~
不知道大家有沒有發現,筆者前幾天下的一些 command 好像怪怪的,例如kubectl get no
,這個 no
是甚麼呢?其實就是 node
的縮寫拉~ 其實在 K8s
中有很多類似這種的縮寫,下command時可以更快速,用 kubectl api-resources
就可以查看 K8s
所有物件和它們的縮寫喔~
其中有個 NAMESPACED
欄位是用來表示該物件是否可以用 namespaced
來區隔。若是true,則該物件屬於 namespaced
範圍的物件;若否,則該物件為 Cluster scoped
的物件,無法assign它的 namespaced
。
$ kubectl get <object> | wc -l
15
## 代表有14個<object>
Pod
$ kubectl run <pod-name> --image=<image> --restart=Never --dry-run=client -o yaml > pod-def.yaml
$ kubectl apply -f pod-def.yaml
restart=Never
用來識別Pod,若restart=Always
則是deployment;--dry-run=client
表示一些default的參數先拿掉,暫時不需要submit出去 (通常在輸出yaml時使用),若要直接創建物件不輸出yaml就無需加此參數
以前
kubectl run
命令可以用來創建幾乎所有物件,只要在後方加上不同參數識別即可 (例如創建Pod要加上--generator=run-pod/v1
)。但新版本kubectl run
子命令現在只能創建Pod
了,無法創建Deployment
、Job
等其他資源了。原因有二:
kubectl run
命令參數太多了,不利於新手學習。即使是Kubernetes
老手,也不一定能完全記住這麼多的參數,不同的參數行為還不一樣。- 程式碼維護越來越困難。
要用kubectl
創建其他物件可以用kubectl create
指令,例如:
$ kubectl create deploy nginx-deploy --image=nginx --dry-run=client -o yaml > deploy.yaml
其他資源比如
job
、cronjob
、namespace
、quota
、configmap
、service
、serviceaccount
等都可以通過kubectl create
命令很方便地快速創建
注意新版本是
--dry-run=client
,舊版本没有client
參數,新版本不寫會警告,建議加上。
這邊有個非常非常重要的觀念要提醒大家,那就是不要手刻YAML檔,非常浪費時間。你可以上 k8s官網 查找範例YAML (考試時是允許查找官方文件的,其他參考資料不行),或是用 kubectl run
命令先創建出一個基本YAML,再以此去修改。畢竟YAML文件真不是讓人寫的,應該讓電腦去自動生成。
Pod label
kubectl get pod --show-labels
Pod label
kubectl label po <pod-name> <key>=<value>
Pod label
kubectl label po <pod-name> <key>-
Pod
下內部指令kubectl exec <pod-name> -- <command>
Pod expose
出去 (創建一個Service
)
kubectl expose po <pod-name> --type=NodePort --name=<svc-name> --port=80
log
$ kubectl logs <pod-name>
$ kubectl logs <pod-name> > haha.txt
initContainer
的log
$ kubectl logs <pod-name> -c <initContainer-name>
Cluster
資訊$ kubectl config view
$ kubectl cluster-info
命令參數全部記住肯定是不可能的也完全沒必要,kubectl
的help
真是做得不錯,不僅有命令用法,還提供demo範例,很多直接複製就可以用。
$ kbbectl -h
$ kbbectl run -h
$ kbbectl expose -h
...
對於多值參數,如果後面的值為[]
,比--env=[]
,則表示該參數可以指定多次,如果後面不是[]
,則通常不可以指定多次,如何表示多值需要看參數描述,通常是逗號隔開,比如-l
或者--labels
就是通過逗號隔開指定多個值。
--
符號的意思是,這個參數表示命令行參數終止解析標誌
建議 kubectl run
命令的 --command
參數放到最後,且一定要使用--
符號隔開,避免kubectl
過度解析。
例如:
$ kubectl run nginx --image nginx \
--env='USERNAME=alice' \
--env 'PASSWORD=123456' \
-l 'app=web,env=test' \
-o yaml --dry-run=client \
--command -- sleep 3600 \
> test.yaml
如果忘了
Kubernetes
資源的宣告方式或者參數,除了可以網站搜索,還可以使用explain
查看。
比如忘了
hostPath
參數:
kubectl explain Pod.spec.volumes.hostPath
kubectl
自動補齊功能可參考這裡(考試環境通常都會幫你裝好)。安裝指令如下:
$ source <(kubectl completion bash) # setup autocomplete in bash into the current shell, bash-completion package should be installed first.
$ echo "source <(kubectl completion bash)" >> ~/.bashrc # add autocomplete permanently to your bash shell.
$ alias k=kubectl
$ complete -F __start_kubectl k
因為考試的時候是允許查找官網資料的,因此如何查找需要的資料是一個非常重要的技巧,這邊推薦一個超級超級超級超級重要的網站,就是kubectl Cheat Sheet,這個網站非常好用也非常重要,裡面有很多小技巧可以讓你節省非常多時間,考前一定要再三複習~
今天介紹一些考試前需要知道的小技巧,還有一些好用的參考資料。再提醒大家一次,不要手刻YAML,一定要善用k8s.io以及kubectl Cheat Sheet 這些資料。好啦,我們前置作業都準備好了,明天就開始做題目吧~
k8s.io
kubectl Cheat Sheet
CKA/CKAD Information Collation
You can find me on