K8S里的“豌豆莢”:Pod

1. 為什么要有pod

Pod 這個詞原意是“豌豆莢”,后來又延伸出“艙室”“太空艙”等含義,你可以看一下這張圖片,形 象地來說 Pod 就是包含了很多組件、成員的一種結構。

之前的容器技術讓進程在一個“沙盒”環境里運行,具有良好的隔離性,對應用是一個非常好的封裝。

不過,當容器技術進入到現實的生產環境中時,這種隔離性就帶來了一些麻煩。因為很少有應 用是完全獨立運行的,經常需要幾個進程互相協作才能完成任務,比如在我們搭建一個網站的時候,就需要Nginx,數據庫,應用服務等容器一起工作。這三個應用之間的關系還是比較松散的,它們可以分別調度,運行在不 同的機器上也能夠以 IP 地址通信。

但還有一些特殊情況,多個應用結合得非常緊密以至于無法把它們拆開。比如,有的應用運行 前需要其他應用幫它初始化一些配置,還有就是日志代理,它必須讀取另一個應用存儲在本地 磁盤的文件再轉發出去。這些應用如果被強制分離成兩個容器,切斷聯系,就無法正常工作 了。

為了解決這樣多應用聯合運行的問題,同時還要不破壞容器的隔離,就需要在容器外面再建立 一個“收納艙”,讓多個容器既保持相對獨立,又能夠小范圍共享網絡、存儲等資源,而且永遠 是“綁在一起”的狀態。

所以,Pod 的概念也就呼之欲出了,容器正是“豆莢”里那些小小的“豌豆”,你可以在 Pod 的 YAML 里看到,“spec.containers”字段其實是一個數組,里面允許定義多個容器。

2. 為什么 Pod 是 Kubernetes 的核心對象

因為 Pod 是對容器的“打包”,里面的容器是一個整體,總是能夠一起調度、一起運行,絕不會 出現分離的情況,而且 Pod 屬于 Kubernetes,可以在不觸碰下層容器的情況下任意定制修 改。所以有了 Pod 這個抽象概念,Kubernetes 在集群級別上管理應用就會“得心應手”了。

Kubernetes 讓 Pod 去編排處理容器,然后把 Pod 作為應用調度部署的最小單位,Pod 也因此成為了 Kubernetes 世界里的“原子”(當然這個“原子”內部是有結構的,不是鐵板一塊),基于 Pod 就可以構建出更多更復雜的業務形態了。

從這張圖中你也應該能夠看出來,所有的 Kubernetes 資源都直接或者間接地依附在 Pod 之 上,所有的 Kubernetes 功能都必須通過 Pod 來實現,所以 Pod 理所當然地成為了 Kubernetes 的核心對象。

3. 使用 YAML 描述 Pod

既然 Pod 這么重要,那么我們就很有必要來詳細了解一下 Pod,理解了 Pod 概念,我們的 Kubernetes 學習之旅就成功了一半。

在 K8S 中,我們通常使用 YAML 文件來定義和創建 Pod。YAML 文件以簡潔、易讀的格式描述了 Pod 的各種配置信息,就像是一份詳細的建筑藍圖,告訴 K8S 該如何構建我們的 Pod。

下面是一個使用 YAML 文件創建 Pod 的簡單示例:

apiVersion: v1
kind: Pod
metadata:name: my-podlabels:app: my-app
spec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80

在這個示例中,apiVersion字段指定了 K8S API 的版本,它就像是一個軟件的版本號,不同的版本可能會有不同的功能和特性 。kind字段明確了我們要創建的資源類型是 Pod,這是告訴 K8S 我們要構建的是一個 “房子”,而不是其他類型的資源。

metadata字段則包含了 Pod 的元數據信息,其中name是 Pod 的名稱,就像每個人都有自己的名字一樣,Pod 也需要一個唯一的名稱來標識自己 。labels是標簽,它是一種鍵值對形式的元數據,我們可以給 Pod 添加各種標簽,用于對 Pod 進行分類和篩選,比如這里的app: my-app標簽,就可以幫助我們快速找到所有屬于my-app應用的 Pod。

spec字段是整個 YAML 文件的核心部分,它定義了 Pod 的具體規格和配置。containers字段列出了 Pod 中包含的容器信息,這里我們定義了一個名為my-container的容器,它使用的鏡像nginx:latest,這就像是告訴 K8S 我們要在這個 “房間” 里安裝什么 “家具” 。ports字段指定了容器要暴露的端口,這里我們將容器的 80 端口暴露出來,這樣外界就可以通過這個端口訪問到容器內運行的 Nginx 服務。

當我們編寫好 YAML 文件后,只需要執行kubectl apply -f my-pod.yaml命令,K8S 就會根據這個文件的描述創建出對應的 Pod。

4. pod管理

創建好 Pod 之后,我們還需要對它進行各種管理操作,以確保它能夠穩定運行。kubectl 工具為我們提供了豐富的命令來實現這些操作 。?

要查看 Pod 的狀態和詳細信息,可以使用kubectl get pods命令,它會列出所有 Pod 的基本信息,包括名稱、狀態、運行的節點等 。如果想要查看某個 Pod 的詳細信息,比如容器的運行日志、資源使用情況等,可以使用kubectl describe pod my-pod命令,它就像是一個放大鏡,幫助我們深入了解 Pod 的內部狀態 。?

當我們需要進入 Pod 容器內部進行調試或執行一些命令時,可以使用kubectl exec -it my-pod -- /bin/bash命令,其中-it參數表示以交互模式進入容器,--后面的/bin/bash表示在容器內執行的命令,這里我們進入了容器的 bash 終端,就可以像在本地服務器上一樣執行各種命令了 。?

如果需要對 Pod 的配置進行修改,可以使用kubectl edit pod my-pod命令,它會打開一個編輯器,讓我們直接修改 Pod 的 YAML 配置文件,修改保存后,K8S 會自動應用這些更改,就像是給房子重新裝修一樣,讓 Pod 擁有新的 “面貌” 。?

當某個 Pod 不再需要時,我們可以使用kubectl delete pod my-pod命令將其刪除,釋放集群資源。但要注意,刪除 Pod 時要謹慎操作,避免誤刪重要的應用服務 。?

通過這些 kubectl 命令,我們可以輕松地對 Pod 進行創建、查看、管理和刪除等操作,讓我們能夠靈活地掌控 K8S 集群中的應用服務。

5. 小結

通過上面的學習,了解了Kubernetes 里最核心最基本的概念 Pod,知道了應該如何使用 YAML 來定制 Pod,還有如何使用 kubectl 命令來創建、刪除、查看、調試 Pod。

雖然 Pod 是 Kubernetes 的核心概念,非常重要,但事實上在 Kubernetes 里通常并不會直接 創建 Pod,因為它只是對容器做了簡單的包裝,比較脆弱,離復雜的業務需求還有些距離,需 要 Job、CronJob、Deployment 等其他對象增添更多的功能才能投入生產使用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/97943.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/97943.shtml
英文地址,請注明出處:http://en.pswp.cn/web/97943.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue3 基本教程-運行一個最小demo

Vue 3 基本教程 - 運行一個最小 Demo 1. 創建項目 使用 Vue 官方腳手架工具創建一個新項目: # 安裝 Vue CLI (如果尚未安裝) npm install -g vue/cli# 創建一個新項目 vue create vue3-demo# 選擇 Vue 3 預設 # 使用方向鍵選擇 "Default (Vue 3)" 然后按 …

大數據新視界 -- Hive 集群搭建與配置的最佳實踐(2 - 16 - 13)

??????親愛的朋友們,熱烈歡迎你們來到 青云交的博客!能與你們在此邂逅,我滿心歡喜,深感無比榮幸。在這個瞬息萬變的時代,我們每個人都在苦苦追尋一處能讓心靈安然棲息的港灣。而 我的博客,正是這樣一個溫暖美好的所在。在這里,你們不僅能夠收獲既富有趣味又極為實…

C/C++ 轉 Java 的數據結構初階對比指南

一、先遣了解和回顧1、預覽快速對比表格數據結構????C/C 實現????Java 實現????關鍵區別????數組??int arr[5];int[] arr new int[5];語法類似&#xff0c;Java 數組是對象??動態數組??vector<int> v;ArrayList<Integer> list new ArrayLi…

長連接和短連接

在網絡通信中&#xff0c;長連接&#xff08;Long Connection&#xff09;和短連接&#xff08;Short Connection&#xff09;是兩種核心的連接管理策略&#xff0c;其區別主要體現在連接生命周期、資源占用和適用場景上。以下是兩者的詳細解析&#xff1a;一、核心概念對比特性…

Java:使用spring-cloud-gateway的應用報DnsNameResolverTimeoutException原因和解決方法

使用spring-cloud-gateway時&#xff0c;有時會報DnsNameResolverTimeoutException異常。堆棧信息類似&#xff1a;Caused by: java.net.UnknownHostException: Failed to resolve cloudconnector.linkup-sage.comat io.netty.resolver.dns.DnsResolveContext.finishResolve(Dn…

SpringCloud概述

目錄 一、概念 1.1 微服務架構 1.2 SpringCloud概念 1.3 核心價值 1.4 能力邊界 1.5 微服務總體架構圖 二、生態圈 2.1 不同生態圈組件對比 2.2 組件介紹 2.2.1 服務發現與注冊 2.2.2 配置管理 2.2.3 API網關 2.2.4 容錯與熔斷 2.2.5 客戶端負載均衡 2.2.6 服務…

光伏電站環境監測儀—專為光伏電站設計的氣象監測設備

光伏電站環境監測儀是專為光伏電站設計的氣象監測設備&#xff0c;通過實時采集關鍵環境參數&#xff0c;為光伏系統的發電效率評估、運維決策和安全預警提供數據支撐。監測參數太陽輻射采用高精度總輻射表&#xff0c;測量水平面總輻射和傾斜面輻射&#xff0c;精度達 2% 以內…

Node.js ≥ 18 安裝教程

Windows 安裝 下載安裝包&#xff1a;訪問 Node.js官網&#xff0c;下載最新的 LTS 版本&#xff08;確保版本 ≥ 18&#xff09;運行安裝程序&#xff1a;雙擊下載的安裝文件&#xff0c;按照向導完成安裝驗證安裝&#xff1a;打開命令提示符或PowerShell&#xff0c;輸入以下…

電腦 hdmi 沒有聲音問題解決

問題現象&#xff1a;電腦耳機聲音正常輸出&#xff0c;使用hdmi連接電視后&#xff0c;沒有聲音輸出。&#xff08;正常會通過hdmi 在電視上播放視頻和聲音&#xff09;解決方案:出現該情況很可能原因是 顯卡的驅動不對。網上找了各種方法都沒有解決&#xff0c;最后系統升級后…

學習日記-XML-day55-9.14

1.xml基本介紹知識點核心內容重點XML定義可擴展標記語言&#xff0c;用于數據存儲和傳輸與HTML的區別&#xff08;HTML用于展示&#xff0c;XML用于結構化數據&#xff09;XML用途1. 配置文件&#xff08;Spring的beans.xml、Tomcat的server.xml&#xff09;;2. 數據交換&#…

【系統架構設計(27)】信息安全技術集成

文章目錄一、本文知識覆蓋范圍二、信息安全基礎要素詳解1、機密性保障技術2、完整性驗證技術3、可用性保障技術4、可控性管理技術5、可審查性追溯技術三、網絡安全威脅與防護策略1、非授權訪問防護2、拒絕服務攻擊防護3、惡意軟件傳播防護四、加密技術體系與應用1、對稱加密技術…

什么是 SaaS 安全?

什么是 SaaS 安全&#xff1f; SaaS 安全專注于保護云中的數據、應用程序和用戶身份。它旨在應對基于云的軟件所面臨的挑戰&#xff0c;以確保信息的安全性和可用性。SaaS 安全致力于降低未授權訪問、數據泄露等風險&#xff0c;同時增強 SaaS 應用程序的安全性。 SaaS 安全不僅…

mysql和postgresql如何選擇

h5打開以查看 簡單來說&#xff1a; MySQL&#xff1a;更像是一個“快速、可靠的工匠”&#xff0c;注重速度、簡單和穩定性&#xff0c;尤其在讀操作密集的Web應用中是經典選擇。 PostgreSQL&#xff1a;更像是一個“功能強大的學者”&#xff0c;追求功能的完備性、標準的符…

Redis最佳實踐——安全與穩定性保障之數據持久化詳解

Redis 在電商應用的安全與穩定性保障之數據持久化全面詳解一、持久化機制深度解析 1. 持久化策略矩陣策略觸發方式數據完整性恢復速度適用場景RDB定時快照分鐘級快容災備份/快速恢復AOF實時追加日志秒級慢金融交易/訂單關鍵操作混合模式RDBAOF同時啟用秒級中等高安全要求場景無…

Data Augmentation數據增強

目錄 數據增強是什么 為什么數據增強 數組增強分類 有監督數據增強 無監督數據增強 數據增強是什么 數據增強又稱數據擴增&#xff0c;是一種通過應用合理且隨機的變換&#xff08;例如圖像位移、旋轉&#xff09;來增加訓練集多樣性的技術。讓有限的數據產生等價于更多數…

OpenCV:特征提取

目錄 一、特征提取核心概念&#xff1a;什么是圖像特征&#xff1f; 二、實戰 1&#xff1a;Harris 角點檢測 1.1 角點的物理意義 1.2 Harris 算法原理 1.3 OpenCV 實戰代碼與解析 1.4 結果分析 三、實戰 2&#xff1a;SIFT 特征提取 3.1 SIFT 算法核心優勢 3.2 SIFT…

MySQL的查找加速器——索引

文章目錄 目錄 前言 一、基礎概念&#xff1a;什么是 MySQL 索引&#xff1f; 二、底層數據結構&#xff1a;為什么 InnoDB 偏愛 B 樹&#xff1f; B 樹的結構特點&#xff08;以短鏈接表short_link的short_code索引為例&#xff09;&#xff1a; B 樹的優勢&#xff1a…

【Vue2手錄11】Vue腳手架(@vue_cli)詳解(環境搭建+項目開發示例)

一、前言&#xff1a;為什么需要 Vue 腳手架&#xff1f; 手動搭建 Vue 項目存在諸多痛點&#xff08;原筆記提及&#xff09;&#xff1a; 依賴管理復雜&#xff1a;需手動下載 Vue、Babel、Webpack 等工具&#xff0c;處理版本兼容性。配置繁瑣&#xff1a;Webpack 配置、E…

自簽發、CA機構簽發、SSH、SCP、RSYNC,SUDO詳解

一、為什么&#xff1f; 1. 自建CA為什么比Lets Encrypt強&#xff1f; 不能把CA放公網&#xff01;Lets Encrypt是給公網服務用的&#xff08;比如10.0.0.30的Web服務&#xff09;&#xff0c;但內網服務&#xff08;比如OpenVPN&#xff09;必須用自簽CA。 CA私鑰必須物理隔…

【Python】Python解決阿里云DataWorks導出數據1萬條限制的問題

【Python】Python解決阿里云DataWorks導出數據1萬條限制的問題一、前言二、腳本功能概述三、核心代碼解析**1. 環境配置與安全設置****2. 用戶配置區****3. 數據清洗函數****4. 核心邏輯**四、完整代碼演示五、總結一、前言 在日常數據分析工作中&#xff0c;團隊經常需要從阿…