Kubernetes:DaemonSet剖析

一. 簡(jiǎn)介

DaemonSet 的主要作用,是在 Kubernetes 集群里矮固,運(yùn)行一個(gè) Daemon Pod评雌。 DaemonSet 只管理 Pod 對(duì)象,然后通過(guò) nodeAffinity 和 Toleration 這兩個(gè)調(diào)度器的小功能螟加,保證了每個(gè)節(jié)點(diǎn)上有且只有一個(gè) Pod徘溢。
所以,這個(gè) Pod 有如下三個(gè)特征:

  • 這個(gè) Pod 運(yùn)行在 Kubernetes 集群里的每一個(gè)節(jié)點(diǎn)(Node)上捆探。
  • 每個(gè)節(jié)點(diǎn)上只有一個(gè)這樣的 Pod 實(shí)例然爆。
  • 當(dāng)有新的節(jié)點(diǎn)加入 Kubernetes 集群后,該 Pod 會(huì)自動(dòng)地在新節(jié)點(diǎn)上被創(chuàng)建出來(lái)徐许。
  • 當(dāng)舊節(jié)點(diǎn)被刪除后施蜜,它上面的 Pod 也相應(yīng)地會(huì)被回收掉。

Daemon Pod 的意義確實(shí)是非常重要的雌隅。比如的作用:

  • 網(wǎng)絡(luò)插件的 Agent 組件翻默,都必須運(yùn)行在每一個(gè)節(jié)點(diǎn)上,用來(lái)處理這個(gè)節(jié)點(diǎn)上的容器網(wǎng)絡(luò)恰起。
  • 存儲(chǔ)插件的 Agent 組件修械,也必須運(yùn)行在每一個(gè)節(jié)點(diǎn)上,用來(lái)在這個(gè)節(jié)點(diǎn)上掛載遠(yuǎn)程存儲(chǔ)目錄检盼,操作容器的 Volume 目錄肯污。
  • 監(jiān)控組件和日志組件,也必須運(yùn)行在每一個(gè)節(jié)點(diǎn)上吨枉,負(fù)責(zé)這個(gè)節(jié)點(diǎn)上的監(jiān)控信息和日志搜集蹦渣。

二. nodeAffinity

我們的 DaemonSet Controller 會(huì)在創(chuàng)建 Pod 的時(shí)候,自動(dòng)在這個(gè) Pod 的 API 對(duì)象里貌亭,加上這樣一個(gè) nodeAffinity 定義柬唯。

2.1 場(chǎng)景

在這個(gè) Pod 里,聲明了一個(gè) spec.affinity 字段圃庭,然后定義了一個(gè) nodeAffinity锄奢。其中,spec.affinity 字段剧腻,是 Pod 里跟調(diào)度相關(guān)的一個(gè)字段拘央。

2.2 案例

比如我們創(chuàng)建如下的一個(gè)YAML文件:

apiVersion: v1
kind: Pod
metadata:
  name: demo-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: metadata.name
            operator: In
            values:
            - demo-node

關(guān)于上面參數(shù)的具體含義:

  • requiredDuringSchedulingIgnoredDuringExecution
    這個(gè)代表nodeAffinity 必須在每次調(diào)度的時(shí)候予以考慮,同時(shí)书在,這也意味著可以設(shè)置在某些情況下不考慮這個(gè) nodeAffinity灰伟;
  • 這個(gè) Pod,將來(lái)只允許運(yùn)行在“metadata.name”是“demo-node”的節(jié)點(diǎn)上儒旬。

2.3 作用

在 nodeAffinity 的定義處袱箱,可以支持更加豐富的語(yǔ)法遏乔,比如operator: In(即:部分匹配)。
我們的 DaemonSet Controller 會(huì)在創(chuàng)建 Pod 的時(shí)候发笔,自動(dòng)在這個(gè) Pod 的 API 對(duì)象里盟萨,加上這樣一個(gè) nodeAffinity 定義。

三. Toleration

3.1 場(chǎng)景

DaemonSet 還會(huì)給這個(gè) Pod 自動(dòng)加上另外一個(gè)與調(diào)度相關(guān)的字段了讨,叫作 tolerations捻激。這個(gè)字段意味著這個(gè) Pod,會(huì)“容忍”(Toleration)某些 Node 的“污點(diǎn)”(Taint)前计。

3.2 案例

apiVersion: v1
kind: Pod
metadata:
  name: with-toleration
spec:
  tolerations:
  - key: node.kubernetes.io/unschedulable
    operator: Exists
    effect: NoSchedule

在正常情況下胞谭,被標(biāo)記了 unschedulable“污點(diǎn)”的 Node,是不會(huì)有任何 Pod 被調(diào)度上去的(effect: NoSchedule)男杈≌梢伲可是,DaemonSet 自動(dòng)地給被管理的 Pod 加上了這個(gè)特殊的 Toleration伶棒,就使得這些 Pod 可以忽略這個(gè)限制旺垒,繼而保證每個(gè)節(jié)點(diǎn)上都會(huì)被調(diào)度一個(gè) Pod。
當(dāng)然肤无,如果這個(gè)節(jié)點(diǎn)有故障的話先蒋,這個(gè) Pod 可能會(huì)啟動(dòng)失敗,而 DaemonSet 則會(huì)始終嘗試下去宛渐,直到 Pod 啟動(dòng)成功竞漾。

3.3 作用

通過(guò)這樣一個(gè) Toleration,調(diào)度器在調(diào)度這個(gè) Pod 的時(shí)候窥翩,就會(huì)忽略當(dāng)前節(jié)點(diǎn)上的“污點(diǎn)”业岁,從而成功地將網(wǎng)絡(luò)插件的 Agent 組件調(diào)度到這臺(tái)機(jī)器上啟動(dòng)起來(lái)。
這種機(jī)制寇蚊,正是我們?cè)诓渴?Kubernetes 集群的時(shí)候笔时,能夠先部署 Kubernetes 本身、再部署網(wǎng)絡(luò)插件的根本原因:因?yàn)楫?dāng)時(shí)我們所創(chuàng)建的 Weave 的 YAML幔荒,實(shí)際上就是一個(gè) DaemonSet。

四. ControllerRevision

DaemonSet 使用 ControllerRevision梳玫,來(lái)保存和管理自己對(duì)應(yīng)的“版本”爹梁。在 Kubernetes 項(xiàng)目里,ControllerRevision 其實(shí)是一個(gè)通用的版本管理對(duì)象提澎。這樣姚垃,Kubernetes 項(xiàng)目就巧妙地避免了每種控制器都要維護(hù)一套冗余的代碼和邏輯的問(wèn)題。

4.1 概念

Kubernetes v1.7 之后添加了一個(gè) API 對(duì)象盼忌,名叫 ControllerRevision积糯,專門用來(lái)記錄某種 Controller 對(duì)象的版本掂墓。
ControllerRevision 對(duì)象,實(shí)際上是在 Data 字段保存了該版本對(duì)應(yīng)的完整的 DaemonSet 的 API 對(duì)象看成。并且君编,在 Annotation 字段保存了創(chuàng)建這個(gè)對(duì)象所使用的 kubectl 命令。

4.2 回滾原理

現(xiàn)在 DaemonSet Controller 就可以使用這個(gè)歷史 API 對(duì)象川慌,對(duì)現(xiàn)有的 DaemonSet 做一次 PATCH 操作(等價(jià)于執(zhí)行一次 kubectl apply -f “舊的 DaemonSet 對(duì)象”)吃嘿,從而把這個(gè) DaemonSet“更新”到一個(gè)舊版本。
這也是為什么梦重,在執(zhí)行完這次回滾完成后兑燥,會(huì)發(fā)現(xiàn),DaemonSet 的 Revision 并不會(huì)從 Revision=2 退回到 1琴拧,而是會(huì)增加成 Revision=3降瞳。這是因?yàn)椋粋€(gè)新的 ControllerRevision 被創(chuàng)建了出來(lái)蚓胸。

五. 總結(jié)

DaemonSet其實(shí)就是依靠nodeAffinity和Toleration 實(shí)現(xiàn)的挣饥。這是一種不需要增加設(shè)計(jì)結(jié)構(gòu),而直接使用標(biāo)簽等方式完成的Daemon進(jìn)程赢织。這樣的結(jié)構(gòu)非常符合Kubernetes的控制器模式亮靴,一切皆對(duì)象。

個(gè)人博客: Wyatt's Blog

Reference

https://time.geekbang.org/column/article/41366?utm_campaign=guanwang&utm_source=baidu-ad&utm_medium=ppzq-pc&utm_content=title&utm_term=baidu-ad-ppzq-title
https://medium.com/kubernetes-tutorials/a-guide-to-kubernetes-daemonsets-6db7920ad140

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末于置,一起剝皮案震驚了整個(gè)濱河市茧吊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌八毯,老刑警劉巖搓侄,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異话速,居然都是意外死亡讶踪,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門泊交,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乳讥,“玉大人,你說(shuō)我怎么就攤上這事廓俭≡剖” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵研乒,是天一觀的道長(zhǎng)汹忠。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么宽菜? 我笑而不...
    開(kāi)封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任谣膳,我火速辦了婚禮,結(jié)果婚禮上铅乡,老公的妹妹穿的比我還像新娘继谚。我一直安慰自己,他們只是感情好隆判,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布犬庇。 她就那樣靜靜地躺著,像睡著了一般侨嘀。 火紅的嫁衣襯著肌膚如雪臭挽。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天咬腕,我揣著相機(jī)與錄音欢峰,去河邊找鬼。 笑死涨共,一個(gè)胖子當(dāng)著我的面吹牛纽帖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播举反,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼懊直,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了火鼻?” 一聲冷哼從身側(cè)響起室囊,我...
    開(kāi)封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤棉浸,失蹤者是張志新(化名)和其女友劉穎胡桨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體指煎,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粗蔚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年尝偎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹏控。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡致扯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出当辐,到底是詐尸還是另有隱情抖僵,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布瀑构,位于F島的核電站裆针,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏寺晌。R本人自食惡果不足惜世吨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呻征。 院中可真熱鬧耘婚,春花似錦、人聲如沸陆赋。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)攒岛。三九已至赖临,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灾锯,已是汗流浹背兢榨。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留顺饮,地道東北人吵聪。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像兼雄,于是被迫代替她去往敵國(guó)和親吟逝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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