Kubernetes Pod:Overview

更新於 2023/04/24閱讀時間約 11 分鐘
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
17會員
83內容數
golang
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Alan的開發者天地 的其他內容
Intro👨‍💻 在gcp環境下使用ansible playbook 建立k8s cluster,目前base image為centos 7,安裝方式類似elk stack,一樣先等master安裝完後產生token,接著安裝slave。 使用的CRI為containerd,CNI為calico
標題:15 Best Practices when working with Docker 連結:15 Best Practices when working with Docker | by Ali Zeynalli | Dec, 2022 | Medium 本篇文章作者根據經驗以及自身研究整理出
紀錄有哪些方式可以ssh到gce機器 放key到中繼資料 Compute Enging -> 中繼資料 -> 安全殼層金鑰 2. 使用TCP Tunneling 3. 使用gcloud ssh 可編寫tunnel的script 使用 IAP 进行 TCP 转发 | Identity-Aware Pr
最近在研究terraform與ansible的整合,不過還在摸索中,機器的版控對於維運來講相對重要,這時候有terraform的出現,在建立機器後會隨之產生機器的狀態檔,而ansible則是在建立好機器後幫助我完成我所需的機器相關設定 這是一款terraform結合ansible的小玩具,在gcp環
安裝與設定所需依賴 安裝依賴套件 2. 啟動 SSH 服務 3. 防火牆開啟網頁要用的PORT網頁 4. 安裝 SMTP Server (Postfix),發送通知email用 添加gitlab repo以及安裝package Add Gitlab package 可自行選擇要安裝CE版還是EE版,
👨‍💻簡介 有時候修改掛載的config檔,無法即時更新,需要重啟pod才會生效,為了解決這個問題,k8s-reloader因此而誕生,透過觀察掛載的configmap或是secret的變化自動對掛載的物件做滾動更新。 以下為在minikube環境下,透過掛載nginx-config檔並搭配re
Intro👨‍💻 在gcp環境下使用ansible playbook 建立k8s cluster,目前base image為centos 7,安裝方式類似elk stack,一樣先等master安裝完後產生token,接著安裝slave。 使用的CRI為containerd,CNI為calico
標題:15 Best Practices when working with Docker 連結:15 Best Practices when working with Docker | by Ali Zeynalli | Dec, 2022 | Medium 本篇文章作者根據經驗以及自身研究整理出
紀錄有哪些方式可以ssh到gce機器 放key到中繼資料 Compute Enging -> 中繼資料 -> 安全殼層金鑰 2. 使用TCP Tunneling 3. 使用gcloud ssh 可編寫tunnel的script 使用 IAP 进行 TCP 转发 | Identity-Aware Pr
最近在研究terraform與ansible的整合,不過還在摸索中,機器的版控對於維運來講相對重要,這時候有terraform的出現,在建立機器後會隨之產生機器的狀態檔,而ansible則是在建立好機器後幫助我完成我所需的機器相關設定 這是一款terraform結合ansible的小玩具,在gcp環
安裝與設定所需依賴 安裝依賴套件 2. 啟動 SSH 服務 3. 防火牆開啟網頁要用的PORT網頁 4. 安裝 SMTP Server (Postfix),發送通知email用 添加gitlab repo以及安裝package Add Gitlab package 可自行選擇要安裝CE版還是EE版,
👨‍💻簡介 有時候修改掛載的config檔,無法即時更新,需要重啟pod才會生效,為了解決這個問題,k8s-reloader因此而誕生,透過觀察掛載的configmap或是secret的變化自動對掛載的物件做滾動更新。 以下為在minikube環境下,透過掛載nginx-config檔並搭配re
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
安裝環境需求 64位元Linux,核心版本為3.1以上,且能滿足Ducker安裝環境。 機器之間要能夠互通。 外部存取權限。 硬體資源:兩核心CPU、8G記憶體、硬碟30GB以上。 安裝Kubeadm與Ducker Kubeadm是Kubernetes的一鍵部署工具。 增加Kube
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
本篇說明如何利用Kubernetes特色,將PostgreSQL DB以HA的架構來提供服務,並說明相關的實作流程與說明。
Thumbnail
本文將演示在安裝完 Kubernetes Cluster 後的基本元件安裝,包括 Calico/Calicoctl、Metric Server 和 Dashboard UI 的安裝方法以及相關問題與解決方式。
Thumbnail
如果你一直想在家中開創自己的事業,但成本和庫存問題一直是困擾你的最大障礙,那麼Print On Demand商業模式就是你的救星!透過這個模式,你可以輕鬆地創建自己的Print On Demand平台,並開始賺取收入。這裡我有一份《POD快速入門指南電子書》等你來索取,讓你能夠順利地開始...
Thumbnail
Kubernetes是什麼? 1. Kubernetes是Google嚴格保密十幾年的秘密武器——Borg的一個開放原始碼版本。 2. Kubernetes是一個開放的開發平台。 3. Kubernetes是一個完備的分散式系統支撐平台。
Autoscaling 的目的是當有大量請求時,系統可以自動的增加運算資源,處理當下的大量請求;也可以根據當下資源使用率低時,自動降低運算資源,達到省錢的目的。
Thumbnail
Podcast第二集已經上架… 這次的主題是conveyor belt… 是前陣子的新聞,有人吃迴轉壽司時的「奇遇記」… 另外,使用的資料以及遇到的單字都放在資訊說明欄的地方,再請大家記得點進去使用,較常用的平台是Firstory或Spotify,那裡說明的欄位比較清楚 歡迎大家來玩. Firsto
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
安裝環境需求 64位元Linux,核心版本為3.1以上,且能滿足Ducker安裝環境。 機器之間要能夠互通。 外部存取權限。 硬體資源:兩核心CPU、8G記憶體、硬碟30GB以上。 安裝Kubeadm與Ducker Kubeadm是Kubernetes的一鍵部署工具。 增加Kube
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
本篇說明如何利用Kubernetes特色,將PostgreSQL DB以HA的架構來提供服務,並說明相關的實作流程與說明。
Thumbnail
本文將演示在安裝完 Kubernetes Cluster 後的基本元件安裝,包括 Calico/Calicoctl、Metric Server 和 Dashboard UI 的安裝方法以及相關問題與解決方式。
Thumbnail
如果你一直想在家中開創自己的事業,但成本和庫存問題一直是困擾你的最大障礙,那麼Print On Demand商業模式就是你的救星!透過這個模式,你可以輕鬆地創建自己的Print On Demand平台,並開始賺取收入。這裡我有一份《POD快速入門指南電子書》等你來索取,讓你能夠順利地開始...
Thumbnail
Kubernetes是什麼? 1. Kubernetes是Google嚴格保密十幾年的秘密武器——Borg的一個開放原始碼版本。 2. Kubernetes是一個開放的開發平台。 3. Kubernetes是一個完備的分散式系統支撐平台。
Autoscaling 的目的是當有大量請求時,系統可以自動的增加運算資源,處理當下的大量請求;也可以根據當下資源使用率低時,自動降低運算資源,達到省錢的目的。
Thumbnail
Podcast第二集已經上架… 這次的主題是conveyor belt… 是前陣子的新聞,有人吃迴轉壽司時的「奇遇記」… 另外,使用的資料以及遇到的單字都放在資訊說明欄的地方,再請大家記得點進去使用,較常用的平台是Firstory或Spotify,那裡說明的欄位比較清楚 歡迎大家來玩. Firsto