K8S-pod

POD的意義

我們知道, pod是k8s是項目的原子調(diào)度單位.?

那么為什么是pod, 而不能是container呢? 回答這個問題, 首先要明確container的本質(zhì)是進程, 那么k8s是什么呢? 當然是操作系統(tǒng), 負責整個云服務(wù)的調(diào)度。而pod在container和k8s之間, 可以被定義為進程組。

pod的定義來自于 Borg 項目, google工程師發(fā)現(xiàn), 他們部署的應(yīng)用往往存在類似進程和進程組的關(guān)系, 他們之間要求必須部署在同一臺機器, 而沒有組的概念, 這個要求就會變得很難實現(xiàn)。也就是典型的成組調(diào)度問題。

在云環(huán)境下, 比較有名的是mesos的資源囤積思路, 這會帶來調(diào)度效率損失和死鎖的可能性, 即使google提出樂觀鎖解決方案, 但是復(fù)雜的回滾和沖突解決方案也不是一般團隊可以駕馭。

pod作為一組容器, 將多個容器的調(diào)度變?yōu)樵硬僮鳌?可以優(yōu)雅的避免成組調(diào)度問題

pod當然不止上面一個優(yōu)勢。 pod是一個邏輯概念, pod是一組共享了某些資源的容器。例如Network NameSpace 或者 Volume。 當然這也可以通過docker去實現(xiàn), 但是這一實現(xiàn)會產(chǎn)生一組容器中先后啟動的順序。? pod 通過中間容器(Infra容器) “hold”資源后, 用戶容器就可以加入到network中了。 有了這個設(shè)計,? Volume、Network、Namespce等都設(shè)計到pod層級就好。

pod的第三個優(yōu)勢則是容器設(shè)計模式,? 具體可見 Design Patterns for Container-based Distributed Systems

解析Pod對象

可以參考kubernetes/vendor/k8s.io/api/core/v1/types.go: type pod struce 中的內(nèi)容

1. 哪些屬性屬于pod, 哪些屬性屬于container?

首先pod扮演的是部署環(huán)境中的“虛擬機”, container是虛擬機中的一個字段。 所以在定義的時候, 很容易想到, 調(diào)度、網(wǎng)絡(luò)、存儲、安全等描述整體的字段, 都是屬于pod的。

Pod的設(shè)計就是要讓其中的容器更多的共享Linux Namespace, 僅保留必要的隔離和限制能力。 這樣, Pod模擬出的效果就跟虛擬機里的程序間關(guān)系更相似了

2. 幾個重要字段的含義和用法

NodeSelector: 一個用戶將pod與node進行綁定的字段。

NodeName: 由調(diào)度器設(shè)置, 一旦我們配置, k8s會認為pod已調(diào)度, 常用語測試或者調(diào)試

HostAliases: 定義了pod的hosts文件里的內(nèi)容

shareProcessNamespace: true 意味著container要共享PID Namespace

hostNetwork/hostIPC/hostPID: pod里的容器會直接使用宿主機的網(wǎng)絡(luò), 直接與宿主機進行IPC通信, 看到宿主機的所有進程。

Container: 除了docker中常見的字段外, 還有幾個額外的屬性: ImagePullPolicy/Lifecycle

3. Pod對象在k8s中的生命周期

1. Pending:? Pod YAML文件已經(jīng)提交給K8S, API對象已經(jīng)被創(chuàng)建并保存到etcd中。因為某些原因沒有被創(chuàng)建, 例如調(diào)度失敗。

2. Running: Pod已經(jīng)調(diào)度成功,? 跟一個具體的node綁定, 他包含的容器都已經(jīng)創(chuàng)建成功, 且至少一個在運行。

3. Successded: Pod里的所有容器都正常運行完畢, 并且已經(jīng)退出了。 這種情況在運行一次性任務(wù)時最為常見。

4. Failed: Pod里至少一個處于不正常狀態(tài)退出(非0返回碼)。 出現(xiàn)這個狀態(tài)可以考慮查看下日志和events

5. Unknown: Pod狀態(tài)不能持續(xù)的被kubelet匯報給kube-apiserver, 可能主從節(jié)點(Master/kubelet)間的通信出現(xiàn)問題。

status字段還可以細分出一組conditions, 細分的狀態(tài)值包括: PodScheduled、Ready、Initialized以及Unschedulable

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 學(xué)習(xí)k8s 使用命令時 多用幫助命令 “-h”,這樣有助于幫助我們更好的學(xué)習(xí)K8s。 1、下載測試鏡像 docke...
    A文凱閱讀 689評論 0 1
  • 快速創(chuàng)建一個pod 創(chuàng)建一個pod: 查看是否創(chuàng)建成功: 刪除pod: 使用命令創(chuàng)建一個deploy k8s的資源...
    會倒立的香飄飄閱讀 914評論 0 3
  • 1. Pod的設(shè)計動機 1.1 玩法 容器介于操作系統(tǒng)和應(yīng)用之間,容器的推薦玩法是每個容器運行一個進程。 1.2 ...
    玄德公筆記閱讀 769評論 0 11
  • 這篇文章我們來深入了解Pod的基本概念及相關(guān)使用 一. Pod的設(shè)計思路 首先Pod是 Kubernetes 項目...
    Anson前行閱讀 2,423評論 0 4
  • 本文重點介紹k8s中所涉及的核心概念,能夠幫助讀者快速地從整體方面了解k8s,便于初學(xué)者在實際工作中從事相關(guān)工作!...
    測試開發(fā)Kevin閱讀 817評論 0 1

友情鏈接更多精彩內(nèi)容