k8s——Pod詳解

一、Pod基礎概念

? 1.1 Pod定義

? Pod是kubernetes中最小的資源管理組件,Pod也是最小化運行容器化應用的資源對象。一個Pod代表著集群中運行的一個進程。kubernetes中其他大多數組件都是圍繞著Pod來進行支撐和擴展Pod功能的,例如,用于管理Pod運行的StatefulSet和Deployment等控制器對象,用于暴露Pod應用的Service和Ingress對象,為Pod提供存儲的PersistentVolume存儲資源對象等。

? 一個Pod下的容器必須運行于同一節點上。現代容器技術建議一個容器只運行一個進程,該進程在容器中PID命令空間中的進程號為1,可直接接收并處理信號,進程終止時容器生命周期也就結束了。若想在容器內運行多個進程,需要有一個類似Linux操作系統init進程的管控類進程,以樹狀結構完成多進程的生命周期管理。運行于各自容器內的進程無法直接完成網絡通信,這是由于容器間的隔離機制導致,Pod對象是一組容器的集合,這些容器共享Network、UTS及IPC命令空間因此具有相同的域名、主機名和網絡接口,并可通過IPC直接通信

Pod資源中針對各容器提供網絡命令空間等共享機制的是底層基礎容器,又叫pause基礎容器(也可稱為父容器),pause就是為了管理Pod容器間的共享操作,這個父容器需要能夠準確地知道如何去創建共享運行環境的容器,還能管理這些容器的生命周期。為了實現這個父容器的構想,kubernetes中,用pause容器來作為一個Pod中所有容器的父容器。這個pause容器有兩個核心的功能,一是它提供整個Pod的Linux命名空間的基礎。二來啟用PID命名空間,它在每個Pod中都作為PID為1進程(init進程),并回收僵尸進程。

? 1.2 Pod管理方式

在Kubrenetes集群中Pod有如下兩種使用方式

  • 一個Pod中運行一個容器。“每個Pod中一個容器”的模式是最常見的用法;在這種使用方式中,你可以把Pod想象成是單個容器的封裝,kuberentes管理的是Pod而不是直接管理容器
  • 在一個Pod中同時運行多個容器。一個Pod中也可以同時封裝幾個需要緊密耦合互相協作的容器,它們之間共享資源。這些在同一個Pod中的容器可以互相協作成為一個service單位。比如一個容器共享文件,另一個“sidecar”容器來更新這些文件。Pod將這些容器的存儲資源作為一個實體來管理。

??

? 1.3?pod共享資源

? ? pause容器使得Pod中的所有容器可以共享兩種資源:網絡存儲

  • 網絡:每個Pod都會被分配一個唯一的IP地址。Pod中的所有容器共享網絡空間,包括IP地址和端口。Pod內部的容器可以使用localhost互相通信。Pod中的容器與外界通信時,必須分配共享網絡資源(例如使用宿主機的端口映射)。
  • 存儲:Pod可以指定多個共享的Volume。Pod中的所有容器都可以訪問共享的Volume。Volume也可以用來持久化Pod中的存儲資源,以防容器重啟后文件丟失。

? ? 總結:pause管理網絡命名空間、共享存儲、負載調用、健康檢查、生存探針和協調生命周期,目的是讓port之間能夠相互共享存儲、共享網絡

? 1.4?設計pod的用意

  • 在一組容器作為一個單元的情況下,難以對整體的容器簡單地進行判斷及有效地進行行動。比如,一個容器死亡了 那么引入與業務無關的Pause容器作為Pod的基礎容器,以它的狀態代表著整個容器組的狀態,這樣就可以解決該問題。
  • Pod里的多個應用容器共享Pause容器的IP,共享Pause容器掛載的Volume。這樣解決了應用容器之間的通信問題以及文件共享問題

? 1.5?pod分類

  • 自主式/靜態pod:不被控制器管理的pod,沒有自愈能力,一旦掛掉不會被重新拉起,而且副本數量不會因為達不到期望值而創建新的pod,即數據保存在節點上,一旦掛掉直接結束
  • 控制器管理的pod:被控制器管理的pod有自愈能力,一旦pod掛掉會被重新拉起,而且副本數量會因為達不到期望值而創建新的pod。簡而言之,pod出現問題(生命周期刪除、故障等)會自動重新拉起新的pod

? 1.6?pod容器分類

  • 基礎容器(infrastructure container)

??每次創建Pod時候就會創建,運行的每一個Pod都有一個pause-amd64的基礎容器自動會運行,對于用戶是透明的。

docker ps -a——進行docker容器的查看

  • 初始化容器(initcontainers)

? 阻塞或者延遲應用容器的啟動,可以為應用容器事先提供好運行環境和工具。多個init容器時是串行啟動,每個init容器都必須在下一個init容器啟動前完成啟動和退出

  • 應用容器(Maincontainer)

? 在所有init容器啟動和退出后應用容器才會啟動而且是并行啟動的應用,提供業務的程序業務

? 1.7?示例——啟動兩個init容器

? 1.7.1?在opt下創建demo文件夾

? 1.7.2?編輯demo1

官網示例:https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/init-containers/

?1.7.3?啟動服務并查看pod

? 查看pod后發現init為0/2

? 1.7.4?解決問題

? 1.7.4.1?過濾出myapp

? 1.7.4.2?查看pod詳細信息

kubectl describe pod myapp-pod

? 1.7.4.3?查看日志信息

? 1.7.4.4?查看系統信息和服務

? ? 發現服務下沒有,需要創建一個server

? 1.7.4.5?編輯svc-demo1文件

? 1.7.4.6?啟動文件

? ? 啟動文件后,再次查看pod有相應服務?

? 1.7.4.7?查看pod詳細信息

? ? 發現init-mydb如上方的操作方式一致

kubectl describe pod myapp-pod

? 1.7.4.8 查看日志信息

kubectl logs myapp-pod -c init-myservice

? 1.7.4.9?編輯svc-demo1文件

? 1.7.4.10?執行文件

? ? 執行文件后,需要等pod創建完

特別說明:

  • 在Pod啟動過程中,Init容器會按順序在網絡和數據卷初始化之后啟動。每個容器必須在下一個容器啟動之前成功退出。
  • 如果由于運行時或失敗退出,將導致容器啟動失敗,它會根據Pod的restartPolicy指定的策略進行重試。然而,如果Pod的restartPolicy設置為Always,Init容器失敗時會使用RestartPolicy策略。
  • 在所有的Init容器沒有成功之前,Pod將不會變成Ready狀態。Init容器的端口將不會在Service中進行聚集。正在初始化中的Pod處于Pending狀態,但應該會將Initializing狀態設置為true。
  • 如果Pod重啟,所有Init容器必須重新執行。
  • 對Init容器spec的修改被限制在容器image字段,修改其他字段都不會生效。更改Init容器的image字段,等價于重啟該Pod。
  • Init容器具有應用容器的所有字段。除了readinessProbe,因為Init容器無法定義不同于完成(completion)的就緒(readiness)之外的其他狀態。這會在驗證過程中強制執行。
  • 在Pod中的每個app和Init容器的名稱必須唯一;與任何其它容器共享同一個名稱,會在驗證時拋出錯誤。?

? 1.8?鏡像拉取策略

? ? Pod的核心是運行容器,必須指定容器引擎,比如Docker,啟動容器時,需要拉取鏡像,k8s的鏡像拉取策略可以由用戶指定,通常分為三類:

  • IfNotPresent:優先使用本地已存在的鏡像,如本地沒有則從倉庫去拉取鏡像
  • Always:總是從倉庫拉取鏡像,無論本地是否已存在鏡像
  • Never:總是不從倉庫拉取鏡像,僅使用本地鏡像

注意:

image nginx:latest或nginx 鏡像的標簽為latest或者無標簽時,默認拉取鏡像策略為always

nginx:1.14 鏡像的標簽為非latest時,默認的鏡像為獲取策略為IfNotPresent

? 1.8.1?實例一

官方示例:https://kubernetes.io/docs/concepts/containers/images?

? 1.8.1.1?編輯demo2?

? 1.8.1.2 執行demo2并查看pod

? 1.8.1.3?查看pod詳細信息

?kubectl describe pod myapp-pod

? 1.8.1.4?再次查看pod

? 1.8.1.5?過濾出restart

? 1.8.2?示例二

? 1.8.2.1?編輯demo2并執行,同時查看pod

? 1.8.2.2?查看pod詳細信息

kubectl describe pod myapp-pod

? 1.8.3?示例三?

? 1.8.3.1?編輯demo2并執行

? 1.8.3.2?查看日志信息

查看pod詳細信息?

? 1.8.3.3?查看pod

? 1.8.4?示例四

? ? 編輯demo2并執行,同時查看過濾出鏡像的pod

? 1.9?重啟策略(restartPolicy)

? ??pod容器重啟策略(restartPolicy)三種和container在同一層綁定。同時重啟策略也分為三種:

  • Always:容器退出時總是重啟容器,不管返回狀態碼如何,默認的Port重啟策略
  • OnFailure:僅在容器異常退出時(返回狀態碼非0時)會重啟策略
  • Never:容器退出時從不重啟容器,不管返回狀態如何

? 1.9.1?實例一

? 1.9.1.1?編輯并執行demo3,查看pod狀態

? 1.9.1.2?查看重啟策略

? 1.9.2?示例二

? 1.9.2.1?編輯并執行demo3,查看pod狀態

? 1.9.2.2?再次查看pod

? 1.9.3?示例三

? 1.9.3.1?編輯并執行demo3

? 1.9.3.2?查看pod狀態

? 1.9.4?示例四

? 1.9.4.1?編輯并啟動demo3?

? 1.9.4.2?查看pod狀態

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

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

相關文章

繆爾賽思又來到了你的面前(哈希)

定義一棵根節點為 1 1 1, n ( 2 ≤ n ≤ 1 0 3 ) n(2≤n≤10^3) n(2≤n≤103) 個節點的樹的哈希值為: H ∑ i 1 n X i Y f a ( i ) m o d 998244353 H∑^n_{i1}X^iY^{fa(i)}\ mod\ 998244353 Hi1∑n?XiYfa(i) mod 998244353 f a ( i ) fa(i) fa(i)…

斷網之后的頁面,Autox.js是點擊還是上下滑動比較好?

在處理斷網之后的頁面,選擇點擊還是上下滑動作為刷新操作,取決于應用的設計和用戶界面。通常,這兩種操作都可以作為刷新頁面的方式,但它們各自有不同的適用場景: 點擊刷新 - 適用場景:如果應用提供了一個明…

Java進階學習筆記7——權限修飾符

什么是權限修飾符? 就是用來限制類中的成員(成員變量、成員方法、構造器、代碼塊....)能夠被訪問的范圍。 protected使用的比較少,但是程序員還是要閱讀代碼,看官方文檔是怎么寫的,都會接觸到protected修飾…

C#串口通信-串口相關參數介紹

串口通訊(Serial Communication),是指外設和計算機間,通過數據信號線、地線等,按位進行傳輸數據的一種雙向通訊方式。 串口是一種接口標準,它規定了接口的電氣標準,沒有規定接口插件電纜以及使用的通信協議&#xff0c…

ssh 配置 authorized_keys 后無法免密登錄

查看日志: tail -f /var/log/auth.log May 25 15:55:13 121 sudo: pam_unix(sudo:session): session opened for user root by root(uid0) May 25 15:55:13 121 sshd[550561]: Received signal 15; terminating. May 25 15:55:13 121 sshd[922866]: Server liste…

性能測試場景的設計方法

引用:根據2008年Aberdeen Group的研究報告,對于Web網站,1秒的頁面加載延遲相當于少了11%的PV(page view),相當于降低了16%的顧客滿意度。如果從金錢的角度計算,就意味著:如果一個網站…

「探討」:什么是網絡審計?好用的網絡審計系統推薦【圖文詳解】

網絡是企業運營、政府管理、個人生活不可或缺的基礎設施。 然而網絡安全問題卻日益凸顯,數據泄露、網絡攻擊、欺詐行為等風險日益嚴重。 一、網絡審計的定義 網絡審計,又稱信息技術審計或電子審計,是指審計人員運用專業技能和工具&#xff…

fdk-aac將aac格式轉為pcm數據

int sampleRate 44100; // 采樣率int sampleSizeInBits 16; // 采樣位數,通常是16int channels 2; // 通道數,單聲道為1,立體聲為2FILE *m_fd NULL;FILE *m_fd2 NULL;HANDLE_AACDECODER decoder aacDecoder_Open(TT_MP4_ADTS, 1);if (!…

實戰之快速完成 ChatGLM3-6B 在 GPU-8G的 INT4 量化和本地部署

ChatGLM3 (ChatGLM3-6B) 項目地址 https://github.com/THUDM/ChatGLM3大模型是很吃CPU和顯卡的,所以,要不有一個好的CPU,要不有一塊好的顯卡,顯卡盡量13G,內存基本要32GB。 清華大模型分為三種(ChatGLM3-6B-Base&…

“大數據建模、分析、挖掘技術應用研修班”的通知!

隨著2015年9月國務院發布了《關于印發促進大數據發展行動綱要的通知》,各類型數據呈現出了指數級增長,數據成了每個組織的命脈。今天所產生的數據比過去幾年所產生的數據大好幾個數量級,企業有了能夠輕松訪問和分析數據以提高性能的新機會&am…

Vue3中為Ant Design Vue中table的checkbox加tooltip、popover

問題的產生 Vue版本:3.3.13 ant-design-vue 版本:3.x.x 在工作時遇到一個場景,需要在 ant-table 的 checkbox 被禁用的時候提示原因,但是在 ant-design-vue 文檔中并沒有發現有相關介紹。 首先我去看了issue中是否有提到相關問題…

【金磚賽】基于docker搭鏈

一.基于docker搭建 啟動并檢查是否啟動成功 #啟動命令 sudo systemctl start docker#檢查命令 sudo systemctl status docker修改權限 chomd 777 build_chain.sh 進行4節點聯盟鏈搭建(舉例) sudo ./build_chain.sh -d -l "127.0.0.1…

OOM不會導致JVM退出

問題來源 一次生產事故,由于一次性從數據庫查詢過多數據導致線程 OOM:Java heap space 異常(千萬級表,JVM堆內存2G),但是在線程OOM發生時,java進程卻沒有立即掛掉。 ##OOM與異常 說到底OutOfM…

基于Android Studio記事本系統

目錄 項目介紹 圖片展示 運行環境 獲取方式 項目介紹 具有登錄,注冊,記住密碼,自動登錄的功能; 可以新增記事本,編輯,刪除記事本信息,同時可以設置主標題,內容,以及…

Ansible自動化運維中的Setup收集模塊應用詳解

作者主頁:點擊! Ansible專欄:點擊! 創作時間:2024年5月22日13點14分 💯趣站推薦💯 前些天發現了一個巨牛的🤖人工智能學習網站,通俗易懂,風趣幽默&#xf…

服務器沒有圖形界面沒有顯示器怎么辦

可以用vnc。 vnc是開元的。什么是vnc? 使用vnc 下載vnc和vncserver命令。 每生成一個圖形界面就叫做開啟session會話。 vnc相關命令: start a new session: vncserver。 如果沒有會話,一般從:1開始 端口5901 vncserver :2 #指定會話為:2 端…

WinForm+SQL Server+.NET開發菜鳥驛站管理系統

完整效果看嗶哩嗶哩,有需要其他系統,可以私信

Leecode熱題100---55:跳躍游戲(貪心算法)

題目: 給你一個非負整數數組 nums ,你最初位于數組的 第一個下標 。數組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最后一個下標,如果可以,返回 true ;否則,返回 false 。 貪心算…

Spring中的三級緩存和循環依賴

三級緩存 在 Spring 中,Bean 的創建過程涉及到三級緩存。這三級緩存分別是 singletonObjects、earlySingletonObjects 和 singletonFactories。它們在 Spring 容器啟動時用于存儲正在創建的 Bean 實例。 在 Spring 源碼中,三級緩存涉及到了 DefaultSin…

python02 循環與容器

一、if的條件判斷 1-1 if elif else 判斷年齡屬于哪個年齡段 # 判斷學生 core input(請輸入成績) ? if int(core) >90 :print(優秀) elif int(core) >70 and int(core) <90:print(中等) elif int(core) >60 and int(core) <70:print(及格) else:print(不及…