深入淺出 Kubernetes:初識(shí) Pod(上)

一 概念

Pod 的中文意為: 豆莢,從字面意思不難理解鳍置,它就像一個(gè)豆莢,里面包含許多豆子送淆,這些豆子就可以類比為 container 税产。實(shí)際上,Pod 是一個(gè)邏輯概念偷崩,Kubernetes 真正處理的辟拷,還是宿主機(jī)操作系統(tǒng)上 Linux 容器的 Namespace 和 Cgroups,而并不存在一個(gè)所謂的 Pod 的邊界或者隔離環(huán)境阐斜。 Pod 是一組共享了某些資源的容器衫冻,Pod里的所有容器,共享的是同一個(gè) Network Namespace谒出,并且可以聲明共享同一個(gè) Volume 羽杰。在 Kubernetes 項(xiàng)目里,Pod 的實(shí)現(xiàn)需要使用一個(gè)中間容器到推,這個(gè)容器叫做Infra容器( Infra容器k8s.gcr.io/pause占用極少的資源考赛,它的鏡像時(shí)用匯編語言編寫的,永遠(yuǎn)處于“暫屠虿猓”狀態(tài)的容器 )颜骤。 在Pod中,Infra 容器永遠(yuǎn)都是第一個(gè)被創(chuàng)建的容器捣卤,而其他用戶定義的容器忍抽,則通過 join Network Namespace的方式八孝,與Infra容器關(guān)聯(lián)在一起,對(duì)于同一個(gè)Pod里面的所有用戶容器鸠项,它們的進(jìn)出流量都是通過Infra容器完成的干跛。同一個(gè) Pod 里面的所有用戶容器來說,它們的進(jìn)出流量祟绊,也可以認(rèn)為都是通過 Infra 容器完成的楼入。凡是調(diào)度、網(wǎng)絡(luò)牧抽、存儲(chǔ)嘉熊,以及安全相關(guān)的屬性,基本上是 Pod 級(jí)別的扬舒。

二 Pod 中幾個(gè)重要字段的含義和用法

NodeSelector:是一個(gè)供用戶將 Pod 與 Node 進(jìn)行綁定的字段阐肤,用法如下所示:

apiVersion: v1

kind: Pod

metadata:

name: gysl-nodeselect

spec:

nodeSelector:

kubernetes.io/hostname: 172.31.2.12

containers:

- name: gysl-nginx

image: nginx

這就意味著這個(gè) Pod 只能在攜帶 kubernetes.io/hostname 標(biāo)簽的 Node 上運(yùn)行了,否則讲坎,調(diào)度失敗孕惜。

NodeName:一旦 Pod 的這個(gè)字段被賦值,Kubernetes 項(xiàng)目就會(huì)被認(rèn)為這個(gè) Pod 已經(jīng)經(jīng)過了調(diào)度晨炕,調(diào)度的結(jié)果就是賦值的節(jié)點(diǎn)名字诊赊。所以,這個(gè)字段一般由調(diào)度器負(fù)責(zé)設(shè)置府瞄,但用戶也可以設(shè)置它來“騙過”調(diào)度器碧磅,當(dāng)然這個(gè)做法一般是在測(cè)試或者調(diào)試的時(shí)候才會(huì)用到。

apiVersion: v1

kind: Pod

metadata:

name: gysl-nodename

spec:

nodeName: 172.31.2.12

containers:

- name: gysl-nginx

image: nginx

HostAliases:定義了 Pod 的 hosts 文件(比如 /etc/hosts)里的內(nèi)容遵馆。

apiVersion: v1

kind: Pod

metadata:

name: gysl-hostaliases

spec:

hostAliases:

- ip: "10.0.0.20"

hostnames:

- "test.gysl"

- "app.gysl"

containers:

- name: gysl-nginx

image: nginx

最下面兩行記錄鲸郊,就是我通過 HostAliases 字段為 Pod 設(shè)置的。需要指出的是货邓,在 Kubernetes 項(xiàng)目中秆撮,如果要設(shè)置 hosts 文件里的內(nèi)容,一定要通過這種方法换况。否則职辨,如果直接修改了 hosts 文件的話,在 Pod 被刪除重建之后戈二,kubelet 會(huì)自動(dòng)覆蓋掉被修改的內(nèi)容舒裤。

凡是跟容器的 Linux Namespace 相關(guān)的屬性,也一定是 Pod 級(jí)別的觉吭。這個(gè)原因也很容易理解:Pod 的設(shè)計(jì)腾供,就是要讓它里面的容器盡可能多地共享 Linux Namespace,僅保留必要的隔離和限制能力。

繼續(xù)看以下例子:

apiVersion: v1

kind: Pod

metadata:

name: gysl-shareprocessnamespace

spec:

shareProcessNamespace: true

containers:

- name: nginx

image: nginx

- name: busybox

image: busybox

tty: true

stdin: true

使用以下命令進(jìn)入指定的 container :

kubectl attach -it gysl-shareprocessnamespace -c busybox

進(jìn)入之后查看一下進(jìn)程共享情況:

/ # ps aux

PID USER TIME COMMAND

1 root 0:00 /pause

6 root 0:00 nginx: master process nginx -g daemon off;

11 101 0:00 nginx: worker process

12 root 0:00 sh

32 root 0:00 ps aux

在這個(gè)容器里伴鳖,我們不僅可以看到它本身的 ps aux 指令节值,還可以看到 nginx 容器的進(jìn)程,以及 Infra 容器的 /pause 進(jìn)程榜聂。這就意味著搞疗,整個(gè) Pod 里的每個(gè)容器的進(jìn)程,對(duì)于所有容器來說都是可見的:它們共享了同一個(gè) PID Namespace须肆。凡是 Pod 中的容器要共享宿主機(jī)的 Namespace匿乃,也一定是 Pod 級(jí)別的定義。

再看一個(gè)例子:

apiVersion: v1

kind: Pod

metadata:

name: gysl-share-namespace

spec:

hostPID: true

hostIPC: true

hostNetwork: true

nodeName: 172.31.2.11

shareProcessNamespace: true

containers:

- name: nginx-gysl

image: nginx

imagePullPolicy: IfNotPresent

- name: busybox-gysl

image: busybox

stdin: true

tty: true

imagePullPolicy: Always

lifecycle:

postStart:

exec:

command: ['/bin/sh','-c','echo "This is a test of gysl. ">/gysl.txt']

preStop:

exec:

command: ['/bin/sh','-c','echo "This is a demo of gysl."']

上面的例子中休吠,定義了共享宿主機(jī)的 Network、IPC 和 PID Namespace业簿。這就意味著瘤礁,這個(gè) Pod 里的所有容器,會(huì)直接使用宿主機(jī)的網(wǎng)絡(luò)梅尤、直接與宿主機(jī)進(jìn)行 IPC 通信柜思、看到宿主機(jī)里正在運(yùn)行的所有進(jìn)程。

除此之外巷燥,ImagePullPolicy 和 Lifecycle 也是值得我們關(guān)注的兩個(gè)字段赡盘。

ImagePullPolicy 字段定義了鏡像拉取的策略。而它之所以是一個(gè) Container 級(jí)別的屬性缰揪,是因?yàn)槿萜麋R像本來就是 Container 定義中的一部分陨享。ImagePullPolicy 的值默認(rèn)是 Always,即每次創(chuàng)建 Pod 都重新拉取一次鏡像钝腺。如果它的值被定義為 Never 或者 IfNotPresent抛姑,則意味著 Pod 永遠(yuǎn)不會(huì)主動(dòng)拉取這個(gè)鏡像,或者只在宿主機(jī)上不存在這個(gè)鏡像時(shí)才拉取艳狐。

Lifecycle 字段定硝。它定義的是 Container Lifecycle Hooks。顧名思義毫目,Container Lifecycle Hooks 的作用蔬啡,是在容器狀態(tài)發(fā)生變化時(shí)觸發(fā)一系列“鉤子”。在這個(gè)字段中镀虐,我們看到了 postStart 和 preStop 兩個(gè)參數(shù)箱蟆。postStart 參數(shù)在容器啟動(dòng)后,立刻執(zhí)行一個(gè)指定的操作刮便。需要明確的是顽腾,postStart 定義的操作,雖然是在 Docker 容器 ENTRYPOINT 執(zhí)行之后,但它并不嚴(yán)格保證順序抄肖。也就是說久信,在 postStart 啟動(dòng)時(shí),ENTRYPOINT 有可能還沒有結(jié)束漓摩。如果 postStart 執(zhí)行超時(shí)或者錯(cuò)誤裙士,Kubernetes 會(huì)在該 Pod 的 Events 中報(bào)出該容器啟動(dòng)失敗的錯(cuò)誤信息,導(dǎo)致 Pod 也處于失敗的狀態(tài)管毙。preStop 發(fā)生的時(shí)機(jī)腿椎,則是容器被殺死之前(比如,收到了 SIGKILL 信號(hào))夭咬。而需要明確的是啃炸,preStop 操作的執(zhí)行,是同步的卓舵。所以南用,它會(huì)阻塞當(dāng)前的容器殺死流程,直到這個(gè) Hook 定義操作完成之后掏湾,才允許容器被殺死裹虫,這跟 postStart 不一樣。

最新免費(fèi)java融击,架構(gòu)筑公,大數(shù)據(jù)AI編程資料獲取添加

薇信:18410263200

通過驗(yàn)證填寫“111”(備注必填)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市尊浪,隨后出現(xiàn)的幾起案子匣屡,更是在濱河造成了極大的恐慌,老刑警劉巖拇涤,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耸采,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡工育,警方通過查閱死者的電腦和手機(jī)虾宇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來如绸,“玉大人嘱朽,你說我怎么就攤上這事≌樱” “怎么了搪泳?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)扼脐。 經(jīng)常有香客問我岸军,道長(zhǎng)奋刽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任艰赞,我火速辦了婚禮佣谐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘方妖。我一直安慰自己狭魂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布党觅。 她就那樣靜靜地躺著雌澄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杯瞻。 梳的紋絲不亂的頭發(fā)上镐牺,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音魁莉,去河邊找鬼睬涧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沛厨,可吹牛的內(nèi)容都是我干的宙地。 我是一名探鬼主播摔认,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼逆皮,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了参袱?” 一聲冷哼從身側(cè)響起电谣,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抹蚀,沒想到半個(gè)月后剿牺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡环壤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年晒来,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郑现。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡湃崩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出接箫,到底是詐尸還是另有隱情攒读,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布辛友,位于F島的核電站薄扁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜邓梅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一脱盲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧震放,春花似錦宾毒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至墨礁,卻和暖如春幢竹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恩静。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工焕毫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驶乾。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓邑飒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親级乐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疙咸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

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