搞半天終於講到Pod
Pod
Pod 是k8s系統中運行的最小單位
Pod 是k8s系統中運行的最小單位
Pod 是k8s系統中運行的最小單位
一個Pod裡面可以包含很多個container,就看你yaml檔怎麼宣告
先來看一個最簡單的Pod的宣告:
這是一個非常簡單的sample yaml,讓你可以直接deploy一個pod在你的worker node上。
如同上方程式碼中的註解,可以發現在 spec>containers
的地方
裡面有兩個array,就是在這裡讓k8s知道這個pod裡面會需要兩個container的
至於指令,就更簡單了。
只有兩個步驟:
- 先在Cloud Shell裡面直接先下
get-credentials
這個指令你可以想像成kubernetes要跟gcp裡面的cluster取得授權,並指定要把資料assign給哪一個cluster去跑
gcloud container clusters get-credentials {YOUR_CLUSTER_NAME} --region={YOUR_REGION}
2. 就可以直接使用kubectl的指令去做deploy了。
kubectl apply -f {YOUR_YAML_FILE}
在 get-credentials
後,就都可以使用kubectl去控制kubernetes裡面的東西了。
且,接下來如果遇到問題,通常應該要找的是kubernetes的文件,而非GCP的範疇。
Pod的一些特性
(當然,這些都是k8s的範圍,說明有錯請告知!)
Pod的生命週期很短
有些人聽到這句話的時候,會把他解讀成:Pod很容易死掉。
其實這是不對的。
正確的說法應該是:
由於k8s是一個很聰明的大腦,
因此k8s會自動根據worker node的使用程度來適度的調整Pod運行的地方。
例如:你現在有三個worker node(A/B/C),原本PodA跑在nodeA上面,但突然nodeA有點忙,因此k8s會自動把PodA移到nodeB上面。
不過,若想要Pod固定跑在某個node上,也是可以透過yaml的宣告來做到這件事。
一個Pod可以內含多個container
在同一個pod裡面的container可以透過localhost彼此互相溝通。且資源都是共用的。
Pod的狀態
- pending: pod正在create中,container還沒跑起來。
- running: pod正在跑,且裡面的container也正在跑。
- succeeded: Pod裡面的container都跑完了。
- failed: Pod裡面有container死掉了。
(可以透過kubectl describe pod {POD_NAME}
來看相關log) - unknown: what happened??????
(去看log吧,他壞掉了XD)
以上的狀態可以透過 kubectl get pods
去看到對應的狀態。
最後,一個小提醒,
若想要操作pod,建議都使用deploy yaml的方式去做調整
不要利用 kubectl create pod
的方式直接操作pod
因為如果你手動調整了pod,那假如後人要重新deploy,又用了舊的yaml檔,這樣會出現悲劇啊!!!!!
以上,脫稿許久的GKE學習心得,咱們下次見:)
附上參考文件