We couldn't find a match for given <KEYWORD>, please try again.

什麼是 Kubernetes Pod?

Pod 為 Kubernetes 的最小執行單位,當中可封裝一個或多個應用程式。Pod 具有暫時性,如果 Pod (或其用來執行的節點) 發生故障,Kubernetes 可自動為該 Pod 建立新的複本,以繼續進行作業。Pod 包含一個或多個容器 (例如 Docker 容器)。

此外,Pod 也會提供環境相依性,包括持續性儲存磁區 (永久性儲存空間,可供叢集中的所有 Pod 使用),以及在 Pod 中執行容器所需的設定資料。

Kubernetes 5 分鐘簡介

2021 年 Kubernetes 現況

Pod 有哪些功能?

Pod 代表在叢集上執行的流程。Kubernetes 可將 Pod 限制在單一流程中,以回報在叢集中所執行每道流程的運作狀況。Pod 具備:

  • 一個不重複的 IP 位址 (可供其相互通訊)
  • 持續性儲存磁區 (依照需求)
  • 判斷容器執行方式的設定資訊

雖然多數 Pod 僅包含單一容器,許多 Pod 會包含幾個容器,而這些容器可密切合作,以執行所需的功能。

Pod 具備哪些優勢?

如果 Pod 包含多個容器,容器之間的通訊和資料共用可加以簡化。由於 Pod 中的所有容器會共用相同的網路命名空間,因此它們可透過 localhost 找出各自位置,並進行通訊。Pod 能使用其他 Pod 的 IP 位址,或參照保存在其他 Pod 中的資源,藉此彼此通訊。

Pod 可包含會在 Pod 啟動時執行的容器,以執行應用程式容器執行前必備的初始化作業。此外,Pod 可簡化延展性,如此就能建立複本 Pod,並根據需求變化來自動將其關閉。

Pod 如何運作?

Pod 會由名為「控制器」的工作負載資源建立,控制器會負責管理叢集中的 Pod 部署、複寫和運作狀況。舉例來說,如果叢集中的節點發生故障,控制器就會偵測到該節點上的 Pod 沒有回應,並在其他節點上建立替換用的 Pod。

最常見的三種控制器類型分別為:

  • Jobs:適用於暫時性的批次類型工作,會負責完成工作的執行作業
  • Deployments:適用於無狀態和持續性應用程式,例如網頁伺服器 (HPPT 伺服器)
  • StatefulSets:適用於具狀態的持續性應用程式,例如資料庫

如果 Pod 包含多個容器,這些容器都會一同排程在叢集中的相同伺服器上,無論該伺服器為虛擬機或實體伺服器。Pod 中的所有容器都會共用其資源和相依性,且可協調自身的執行和終止。舉例來說,Pod 可包含會在應用程式容器執行前執行的「init」容器,以設定環境,繼而供隨後的應用程式使用。

Pod 大多會由控制器建立,建立完成後,控制器可自動管理 Pod 的生命週期,包括替換故障的 Pod、在必要時複寫 Pod,以及在 Pod 完成或不再需要時,將其逐出叢集節點。

控制器可使用 Pod 範本中的資訊來建立 Pod,並確保執行中的 Pod 符合 Pod 範本中定義的部署;例如透過建立複本,以符合部署中定義的數量。

Pod 如何相互通訊?

Pod 建立時,會指派專屬且不重複的 IP 位址。如果 Pod 中包含多個容器,這些容器只需使用 localhost,就能彼此通訊。Pod 的外部通訊,會透過公開連接埠來進行。叢集內多個 Pod 之間的通訊,則會利用 Kubernetes 為每個叢集內每個 PID 指派叢集私有 IP 位址的方式進行,藉此免除在 Pod 之間明確建立連結,或是將容器連接埠對應至主機連接埠的必要性。如此一來,叢集內的每個 Pod 就能在不使用 NAT 的情況下「看見」彼此。

基本 kubectl 指令包含哪些指令?

Kubectl 可提供眾多指令,以協助使用者建立 Pod、透過部署來加以執行、查看執行中 Pod 的狀態,並於不再需要 Pod 時加以停用。無論 JSON (JavaScript Object Notation) 或 YAML (YAML Ain’t Markup Language) 指令,都能有效編寫指令。

下方列出了常用的 kubectl 指令:

Get

kubectl 的「get」指令,將顯示一個或多個資源的表格式資訊。資訊可使用標籤選取器加以篩選。顯示的資訊可僅限來自現有命名空間,或是來自叢集中所有命名空間。
「kubectl api-resources」指令將產生清單,以列出可透過「get」指令取得的所有受支援資源。kubectl「get」指令的一般格式如下:

$ kubectl get [(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...](TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...)[flags]

Create Pods

Pod 會使用下列格式的建立指令來建立:

$ kubectl create -f FILENAME.

舉例來說,以下指令:

kubectl create -f ./mypod.yaml,將從 YAML 檔案「mypod」建立新的 Pod。

Delete Pods

指令「kubectl delete -f ./mypod.yaml」將從叢集中刪除 Pod「mypod」。Pod 刪除作業會享有寬限期;在強制終止前,Pod 將持續於寬限期 (預設為 30 秒) 內執行。如有需要,可透過 –grace-period 旗標覆寫寬限期的值。

相關解決方案與產品

企業立即可用的 Kubernetes 執行階段

簡化跨多雲環境的基礎架構作業。

Kubernetes 與 Docker

您應該選用哪些工具,以成功使用容器?

Kubernetes 上的 Docker 容器

掌握何謂容器Kubernetes 後的下一步,就是瞭解兩者如何搭配運作。