GKE學習心得(四)-Pod

sasa :)
4 min readOct 8, 2020

--

#GKE #pod #k8s

終於想到要來寫第四集了

前三集這裡請:第一集 第二集 第三集

搞半天終於講到Pod

Pod

Pod 是k8s系統中運行的最小單位

Pod 是k8s系統中運行的最小單位

Pod 是k8s系統中運行的最小單位

一個Pod裡面可以包含很多個container,就看你yaml檔怎麼宣告

先來看一個最簡單的Pod的宣告:

one pod with two container sample

這是一個非常簡單的sample yaml,讓你可以直接deploy一個pod在你的worker node上。

如同上方程式碼中的註解,可以發現在 spec>containers 的地方

裡面有兩個array,就是在這裡讓k8s知道這個pod裡面會需要兩個container的

至於指令,就更簡單了。

只有兩個步驟:

  1. 先在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學習心得,咱們下次見:)

附上參考文件

--

--

sasa :)
sasa :)

Written by sasa :)

目標是做一個讓所有人都聽得懂技術語言的transfer person

No responses yet