Kubernetes Pod:Overview

更新於 發佈於 閱讀時間約 12 分鐘

Kubernetes是現代應用程序開發和部署的重要技術,而Pod是Kubernetes中最小的部署單位。Pod是一個或多個container的集合,它們共享一個網路命名空間和一個網路接口。Pod不僅提供了一個簡單而強大的container環境,還可以用於實現多種container編排方案,例如負載平衡、數據管理、多container協作等。

本文將深入探討Kubernetes中的Pod,介紹Pod的基本概念、設計原則和實現方式,以及與其他資源的關係。您將學習如何創建和配置Pod,如何使用Kubernetes管理Pod,以及如何通過Pod實現高效、彈性和可靠的應用程序部署。

什麼是Kubernetes Pod

Kubernetes Pod是Kubernetes集群中最小的部署單位。一個Pod可以包含一個或多個container,這些container共享相同的網路和儲存空間。Pod提供了一個環境,讓container可以協同工作,形成一個應用程序。

Pod的結構和特性

Pod包含以下元素:

  • 共享網路空間 (Networking):Pod 中的所有container共享相同的網路空間,可以在container之間通過 localhost 進行通信。
  • 共享儲存空間 (Shared Storage):Pod 中的所有container共享相同的儲存空間,可以在container之間共享文件、環境變量等。
  • 容器 (Containers):Pod 中可以包含一個或多個container,這些container可以共享同一個網路和儲存空間,方便container之間的互相協作。
  • 存活和重啟策略 (Liveness and Restart Policy):Pod 的存活策略指定了在容器出現異常情況時,Kubernetes 如何應對,如重新啟動 container 或者將其標記為失敗。Pod 的重啟策略則指定了當 Pod 中的所有 container 都停止運行時,Kubernetes 如何進行重啟。
  • 元數據 (Metadata):Pod 中包含一些元數據,如 Pod 名稱、命名空間、標籤等,這些元數據可以用於管理和監控 Pod。

Pod的特性包括:

  • 生命週期短暫
  • 可以擁有多個container
  • 具有唯一的IP地址
  • 具有獨立的儲存空間
  • 具有網路隔離

如何創建和管理Pod

  • 要創建 Kubernetes Pod,可以使用以下兩種方式:
  1. 宣告式(Declarative):使用 YAML 或 JSON 格式的文件來定義 Pod 的結構、元資料和規格,包括 Pod 名稱、container image、資源限制、網路設定等。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80

接著使用kubectl創建pod

kubectl create -f my-pod.yaml

2. 命令式(Imperative):命令式方式是通過在命令行中執行指令,將 Pod、Service、Replication Controller 或其他 Kubernetes 資源創建和管理。

kubectl run my-pod --image=nginx --port=80
  • 要管理pod,則有以下幾種方式:
  1. Pod 的查詢:使用 kubectl get pods 或是 kubectl describe pods 命令查詢 Kubernetes 集群中的 Pod,以了解其狀態、命名空間、IP 地址等信息。
  2. Pod 的更新:當container image或配置發生變化時,可以通過kubectl edit pod 來編輯Pod的 YAML 或 JSON 文件,然後使用 kubectl apply 命令來更新 Pod。
  3. Pod 的刪除:使用 kubectl delete pod 命令刪除 Kubernetes 集群中的 Pod。
  4. Pod 的擴展:可以使用 Deployment、ReplicaSet 等 Kubernetes 資源進行 Pod 的擴展,自動創建、管理多個 Pod,以實現應用程序的高可用性。
  5. Pod 的健康檢查:可以定義 Pod 的 LivenessProbe、ReadinessProbe 檢查container是否正常運行,當container不可用時,Kubernetes 會自動重啟container或調度 Pod 到其他節點。
  6. Pod 的日誌查詢:可以使用 kubectl logs pod 命令查詢 Pod 中 container 的日誌,以了解 container 運行情況。
  7. Pod 的port轉發:可以使用 kubectl port-forward pod 命令將 Pod 中 container 的 port 轉發到本地 port,以便進行調試和測試。

Pod的生命週期

Pod的生命週期包括以下階段:

  • Pending:Pod正在等待Kubernetes集群分配資源
  • Running:Pod正在運行中
  • Succeeded:Pod已經完成工作並成功退出
  • Failed:Pod因為某些原因無法運行或者已經退出
  • Unknown:Kubernetes無法獲取Pod的狀態

Pod的網路和儲存設定

Pod的網路和儲存設定包括以下方面:

container的port和協議

在 Pod 配置中,可以通過 containerPort 屬性來指定container需要暴露的port和協議。下面是一個示例:

apiVersion: v1
kind: Pod
metadata:
name: web-pod
spec:
containers:
- name: web-container
image: nginx
ports:
- containerPort: 80
protocol: TCP

在這個範例中,定義了一個名為 web-pod 的 Pod,其中包含一個名為 web-container 的container,該container需要暴露 TCP 協議的 80 port。

Pod的IP地址和主機名稱

在 Pod 中,每個container都有自己的 IP 地址和主機名稱。可以通過 hostname、subdomain 和 ip 屬性來設定它們。

apiVersion: v1
kind: Pod
metadata:
name: web-pod
spec:
hostname: web-host
subdomain: example.com
containers:
- name: web-container
image: nginx

在這個範例中,定義了一個名為 web-pod 的 Pod,其中包含一個名為 web-container 的container。還通過 hostname 屬性設定了container的主機名稱為 web-host,通過 subdomain 屬性設定了container的子域名為 example.com。

Pod的網路策略

在 Kubernetes 中,可以通過 networkPolicy 屬性設定 Pod 的網路策略,以控制哪些 Pod 可以訪問該 Pod。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
  • 在這個範例中,定義了一個名為 test-network-policy 的NetworkPolicy ,其中套用此規則的pod為label → role:db
  • policyType有ingress以及egress
  • ingress有三種規則
  1. 來源 IP 地址必須在 IP block 172.17.0.0/16中,但不能在 172.17.1.0/24中
  2. 來源 Pod 必須符合在namespace label為project=myproject 底下和 pod label為role=frontend
  3. 流量必須使用 TCP 協議,且target port必須是 6379。
  • egress有兩種規則
  1. 目標 IP 地址必須在IP block 10.0.0.0/24
  2. 流量必須使用 TCP 協議,且target port必須是 5978。

Pod的儲存設定

在 Pod 中,可以通過 volumes 屬性設定儲存設定。

apiVersion: v1
kind: Pod
metadata:
name: web-pod
spec:
containers:
- name: web-container
image: nginx
volumeMounts:
- name: data-volume
mountPath: /data
volumes:
- name: data-volume
emptyDir: {}

在這個範例中,定義了一個名為 web-pod 的 Pod,其中包含一個名為 web-container 的container。通過 volumeMounts 屬性設定了一個名為 data-volume 的卷並將其掛載到container的 /data 目錄下,並通過 volumes 屬性定義了這個卷的內容,這裡使用了一個 emptyDir 卷,表示它是一個空目錄。

Reference

留言
avatar-img
留言分享你的想法!
avatar-img
Alan的開發者天地
18會員
83內容數
golang
Alan的開發者天地的其他內容
2024/09/15
本文介紹如何使用 MongoDB 的命令行工具 Mongorestore 將先前備份的資料還原到資料庫中。Mongorestore 支援資料庫的整體恢復、特定集合的恢復,以及從遠端伺服器進行恢復等功能。無論是初學者還是有經驗的使用者,都能夠快速掌握如何使用 Mongorestore 工具。
Thumbnail
2024/09/15
本文介紹如何使用 MongoDB 的命令行工具 Mongorestore 將先前備份的資料還原到資料庫中。Mongorestore 支援資料庫的整體恢復、特定集合的恢復,以及從遠端伺服器進行恢復等功能。無論是初學者還是有經驗的使用者,都能夠快速掌握如何使用 Mongorestore 工具。
Thumbnail
2024/09/08
👨‍💻簡介 在資料庫管理和系統維護中,備份是非常重要的一環。對於使用 MongoDB 的開發者和資料庫管理員來說,mongodump 是一個非常實用的命令行工具,能夠快速且輕鬆地完成資料庫的備份和恢復。無論是進行資料遷移、系統升級,還是面對突發的故障,mongodump 都能提供穩定的資料保護
Thumbnail
2024/09/08
👨‍💻簡介 在資料庫管理和系統維護中,備份是非常重要的一環。對於使用 MongoDB 的開發者和資料庫管理員來說,mongodump 是一個非常實用的命令行工具,能夠快速且輕鬆地完成資料庫的備份和恢復。無論是進行資料遷移、系統升級,還是面對突發的故障,mongodump 都能提供穩定的資料保護
Thumbnail
2024/06/20
本文介紹如何對 Telegram 憑證監控機器人的代碼進行優化,包括新增指令、讀取變數、提高可讀性和可維護性。
Thumbnail
2024/06/20
本文介紹如何對 Telegram 憑證監控機器人的代碼進行優化,包括新增指令、讀取變數、提高可讀性和可維護性。
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
從官網可以知道,我們在建立一組高可用的Kubernetes Cluster時,針對ETCD有二種做法,一種是與Master節點共用,另一種則是將ETCD再獨立出來三個節點成為一組Cluster來進行運作。 本文將說明如何建置出外部的ETCD Cluster,並以Static Pod的方式運行與管理
Thumbnail
從官網可以知道,我們在建立一組高可用的Kubernetes Cluster時,針對ETCD有二種做法,一種是與Master節點共用,另一種則是將ETCD再獨立出來三個節點成為一組Cluster來進行運作。 本文將說明如何建置出外部的ETCD Cluster,並以Static Pod的方式運行與管理
Thumbnail
本文將說明關於Local volume 與hostPath二種類型的差異與一些注意事項。
Thumbnail
本文將說明關於Local volume 與hostPath二種類型的差異與一些注意事項。
Thumbnail
宣告式管理是一種管理方法,其中您描述系統或資源的期望狀態,而不必關心實際如何達到該狀態。kubectl apply 命令在 Kubernetes 中實現了這種宣告式管理方式,以下是執行指令時的運作流程...
Thumbnail
宣告式管理是一種管理方法,其中您描述系統或資源的期望狀態,而不必關心實際如何達到該狀態。kubectl apply 命令在 Kubernetes 中實現了這種宣告式管理方式,以下是執行指令時的運作流程...
Thumbnail
什麼是 Kubernetes Deployment? 一樣先來個官網解說 A Deployment provides declarative updates for Pods and ReplicaSets. You describe a desired state in a Deployment,
Thumbnail
什麼是 Kubernetes Deployment? 一樣先來個官網解說 A Deployment provides declarative updates for Pods and ReplicaSets. You describe a desired state in a Deployment,
Thumbnail
什麼是Kubernetes Service? 先來個官網的解說 A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them. 白話文就是
Thumbnail
什麼是Kubernetes Service? 先來個官網的解說 A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them. 白話文就是
Thumbnail
Kubernetes是現代應用程序開發和部署的重要技術,而Pod是Kubernetes中最小的部署單位。Pod是一個或多個container的集合,它們共享一個網路命名空間和一個網路接口。Pod不僅提供了一個簡單而強大的container環境,還可以用於實現多種container編排方案,例如負載平
Thumbnail
Kubernetes是現代應用程序開發和部署的重要技術,而Pod是Kubernetes中最小的部署單位。Pod是一個或多個container的集合,它們共享一個網路命名空間和一個網路接口。Pod不僅提供了一個簡單而強大的container環境,還可以用於實現多種container編排方案,例如負載平
Thumbnail
這篇分享希望能讓你了解 什麼Container、與Kubernetes和Docker是什麼關係,以及Kubernetes中又包含了哪些 組件?
Thumbnail
這篇分享希望能讓你了解 什麼Container、與Kubernetes和Docker是什麼關係,以及Kubernetes中又包含了哪些 組件?
Thumbnail
Kubernetes是什麼? 1. Kubernetes是Google嚴格保密十幾年的秘密武器——Borg的一個開放原始碼版本。 2. Kubernetes是一個開放的開發平台。 3. Kubernetes是一個完備的分散式系統支撐平台。
Thumbnail
Kubernetes是什麼? 1. Kubernetes是Google嚴格保密十幾年的秘密武器——Borg的一個開放原始碼版本。 2. Kubernetes是一個開放的開發平台。 3. Kubernetes是一個完備的分散式系統支撐平台。
Thumbnail
透過K8S Ingress 和 NodePort service直接連線Pod中的App
Thumbnail
透過K8S Ingress 和 NodePort service直接連線Pod中的App
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News