Kubernetes對(duì)象之Pod

學(xué)習(xí)本節(jié)內(nèi)容之前,希望你已經(jīng)對(duì)Kubernetes有了初步的概念铭污。具體請(qǐng)參考這篇文章:

Pod是Kubernetes調(diào)度的最小單元。一個(gè)Pod可以包含一個(gè)或多個(gè)容器,因此它可以被看作是內(nèi)部容器的邏輯宿主機(jī)饶氏。Pod的設(shè)計(jì)理念是為了支持多個(gè)容器在一個(gè)Pod中共享網(wǎng)絡(luò)和文件系統(tǒng)。因此處于一個(gè)Pod中的多個(gè)容器共享以下資源:

  • PID命名空間:Pod中不同的應(yīng)用程序可以看到其他應(yīng)用程序的進(jìn)程ID有勾。
  • network命名空間:Pod中多個(gè)容器處于同一個(gè)網(wǎng)絡(luò)命名空間疹启,因此能夠訪問(wèn)的IP和端口范圍都是相同的。也可以通過(guò)localhost相互訪問(wèn)蔼卡。
  • IPC命名空間:Pod中的多個(gè)容器共享Inner-process Communication命名空間喊崖,因此可以通過(guò)SystemV IPC或POSIX進(jìn)行進(jìn)程間通信。
    UTS命名空間:Pod中的多個(gè)容器共享同一個(gè)主機(jī)名雇逞。
    Volumes:Pod中各個(gè)容器可以共享在Pod中定義分存儲(chǔ)卷(Volume)荤懂。

Pod,容器與Node(工作主機(jī))之間的關(guān)系如下圖所示:


Pod塘砸,Container與Node之間的關(guān)系

1. Pod的定義

通過(guò)yaml文件或者json描述Pod和其內(nèi)容器的運(yùn)行環(huán)境和期望狀態(tài)节仿,例如一個(gè)最簡(jiǎn)單的運(yùn)行nginx應(yīng)用的pod,定義如下:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80

在生產(chǎn)環(huán)境中掉蔬,推薦使用諸如Deployment廊宪,StatefulSet矾瘾,Job或者CronJob等控制器來(lái)創(chuàng)建Pod,而不是直接創(chuàng)建箭启。

將上述pod描述文件保存為nginx-pod.yaml壕翩,使用kubectl apply命令運(yùn)行pod

kubectl apply -f nginx-pod.yaml

下面簡(jiǎn)要分析一下上面的Pod定義文件:

  • apiVersion: 使用哪個(gè)版本的Kubernetes API來(lái)創(chuàng)建此對(duì)象
  • kind:要?jiǎng)?chuàng)建的對(duì)象類(lèi)型,例如Pod册烈,Deployment等
  • metadata:用于唯一區(qū)分對(duì)象的元數(shù)據(jù)戈泼,包括:name,UID和namespace
  • labels:是一個(gè)個(gè)的key/value對(duì)赏僧,定義這樣的label到Pod后大猛,其他控制器對(duì)象可以通過(guò)這樣的label來(lái)定位到此Pod,從而對(duì)Pod進(jìn)行管理淀零。(參見(jiàn)Deployment等控制器對(duì)象)
  • spec: 其它描述信息挽绩,包含Pod中運(yùn)行的容器,容器中運(yùn)行的應(yīng)用等等驾中。不同類(lèi)型的對(duì)象擁有不同的spec定義唉堪。詳情參見(jiàn)API文檔:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.9/

Kubernetes在每個(gè)Pod啟動(dòng)時(shí),會(huì)自動(dòng)創(chuàng)建一個(gè)鏡像為gcr.io/google_containers/pause:version的容器肩民,所有處于該P(yáng)od中的容器在啟動(dòng)時(shí)都會(huì)添加諸如--net=container:pause --ipc=contianer:pause --pid=container:pause的啟動(dòng)參數(shù)唠亚,因此pause容器成為Pod內(nèi)共享命名空間的基礎(chǔ)。所有容器共享pause容器的IP地址持痰,也被稱(chēng)為Pod IP灶搜。

如果我們希望從外部訪問(wèn)這nginx應(yīng)用,那么我們還需要?jiǎng)?chuàng)建Service對(duì)象來(lái)暴露IP和port工窍。具體請(qǐng)參考后面的這篇文章:Kubernetes對(duì)象之Service

2. Pod的生命周期

Pod的生命周期是Replication Controller進(jìn)行管理的割卖。一個(gè)Pod的生命周期過(guò)程包括:

  • 通過(guò)yaml或json對(duì)Pod進(jìn)行描述
  • apiserver(運(yùn)行在Master主機(jī))收到創(chuàng)建Pod的請(qǐng)求后,將此Pod對(duì)象的定義存儲(chǔ)在etcd中
  • scheduler(運(yùn)行在Master主機(jī))將此Pod分配到Node上運(yùn)行
  • Pod內(nèi)所有容器運(yùn)行結(jié)束后此Pod也結(jié)束

在整個(gè)過(guò)程中患雏,Pod通常處于以下的五種階段之一:

  • Pending:Pod定義正確鹏溯,提交到Master,但其所包含的容器鏡像還未完全創(chuàng)建淹仑。通常丙挽,Master對(duì)Pod進(jìn)行調(diào)度需要一些時(shí)間,Node進(jìn)行容器鏡像的下載也需要一些時(shí)間匀借,啟動(dòng)容器也需要一定時(shí)間取试。(寫(xiě)數(shù)據(jù)到etcd,調(diào)度怀吻,pull鏡像,啟動(dòng)容器)初婆。
  • Running:Pod已經(jīng)被分配到某個(gè)Node上蓬坡,并且所有的容器都被創(chuàng)建完畢猿棉,至少有一個(gè)容器正在運(yùn)行中,或者有容器正在啟動(dòng)或重啟中屑咳。
  • Succeeded:Pod中所有的容器都成功運(yùn)行結(jié)束萨赁,并且不會(huì)被重啟。這是Pod的一種最終狀態(tài)兆龙。
  • Failed:Pod中所有的容器都運(yùn)行結(jié)束了杖爽,其中至少有一個(gè)容器是非正常結(jié)束的(exit code不是0)。這也是Pod的一種最終狀態(tài)紫皇。
  • Unknown:無(wú)法獲得Pod的狀態(tài)慰安,通常是由于無(wú)法和Pod所在的Node進(jìn)行通信。

2.1 Restart policy

定義Pod時(shí)聪铺,可以指定restartPolicy字段化焕,表明此Pod中的容器在何種條件下會(huì)重啟。restartPolicy擁有三個(gè)候選值:

  • Always:只要退出就重啟
  • OnFailure:失敗退出時(shí)(exit code不為0)才重啟
  • Never:永遠(yuǎn)不重啟

2.2 通過(guò)controller管理Pod

Pod本身不具備容錯(cuò)性铃剔,這意味著如果Pod運(yùn)行的Node宕機(jī)了撒桨,那么該P(yáng)od無(wú)法恢復(fù)。因此推薦使用Deployment等控制器來(lái)創(chuàng)建Pod并管理键兜。

一般來(lái)說(shuō)凤类,Pod不會(huì)自動(dòng)消失,只能手動(dòng)銷(xiāo)毀或者被預(yù)先定義好的controller銷(xiāo)毀普气。但有一種特殊情況谜疤,當(dāng)Pod處于Succeeded或Failed階段,并且超過(guò)一定時(shí)間后(由master決定)棋电,會(huì)觸發(fā)超時(shí)過(guò)期從而被銷(xiāo)毀茎截。

總體上來(lái)說(shuō),Kubernetes中擁有三種類(lèi)型的controller:

  • Job赶盔。通常用于管理一定會(huì)結(jié)束的Pod企锌。如果希望Pod被Job controller管理,那么restartPolicy必須指定為OnFailure或Never于未。
  • ReplicationController撕攒,ReplicaSet和Deployment。用于管理永遠(yuǎn)處于運(yùn)行狀態(tài)的Pod烘浦。如果希望Pod被此類(lèi)controller管理抖坪,那么restartPolicy必須指定為Always。
  • DaemonSet闷叉。它能夠保證你的Pod在每一臺(tái)Node都運(yùn)行一個(gè)副本擦俐。

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市握侧,隨后出現(xiàn)的幾起案子蚯瞧,更是在濱河造成了極大的恐慌嘿期,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埋合,死亡現(xiàn)場(chǎng)離奇詭異备徐,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)甚颂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)蜜猾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人振诬,你說(shuō)我怎么就攤上這事蹭睡。” “怎么了贷揽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵棠笑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我禽绪,道長(zhǎng)蓖救,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任印屁,我火速辦了婚禮循捺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雄人。我一直安慰自己从橘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布础钠。 她就那樣靜靜地躺著恰力,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旗吁。 梳的紋絲不亂的頭發(fā)上踩萎,一...
    開(kāi)封第一講書(shū)人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音很钓,去河邊找鬼香府。 笑死,一個(gè)胖子當(dāng)著我的面吹牛码倦,可吹牛的內(nèi)容都是我干的企孩。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼袁稽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼勿璃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蝗柔,失蹤者是張志新(化名)和其女友劉穎闻葵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體癣丧,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年栈妆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胁编。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鳞尔,死狀恐怖嬉橙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寥假,我是刑警寧澤市框,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站糕韧,受9級(jí)特大地震影響枫振,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜萤彩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一粪滤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雀扶,春花似錦杖小、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至浪册,卻和暖如春扫腺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背议经。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工斧账, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人煞肾。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓咧织,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親籍救。 傳聞我的和親對(duì)象是個(gè)殘疾皇子习绢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 1.獲取資源 kubectlget 2.查看資源詳情 kubectl describe <reousrce_typ...
    365a3735241a閱讀 836評(píng)論 0 0
  • Kubernetes 簡(jiǎn)介 Kubernetes 是什么? Kubernetes 是一個(gè)可移植的、可擴(kuò)展的開(kāi)源平臺(tái)...
    王勇1024閱讀 710評(píng)論 0 2
  • Pod是k8s系統(tǒng)中可以創(chuàng)建和管理的最小單元闪萄,是資源對(duì)象模型中由用戶(hù)創(chuàng)建或部署的最小資源對(duì)象模型梧却,也是在k8s上運(yùn)...
    程序員札記閱讀 963評(píng)論 0 1
  • 轉(zhuǎn):http://www.reibang.com/p/ce71385e0370 Pod是Kubernetes調(diào)度...
    沉淪2014閱讀 10,276評(píng)論 0 3
  • 5. kubernetes 資源控制器 一、簡(jiǎn)介 Controller Manager 由 kube-contro...
    升職哦閱讀 243評(píng)論 0 1