同事提出個(gè)我從未想過的問題皮服,為什么Kubernetes要"多此一舉"推出靜態(tài)Pod概念楞艾?
我們知道k8s中Pod可以說是一個(gè)合格的容器小管家参咙,Pod 被設(shè)計(jì)成支持多個(gè)容器可以一起進(jìn)行調(diào)度,容器之間可以共享資源和依賴硫眯、彼此通信蕴侧、協(xié)調(diào)何時(shí)以及何種方式運(yùn)行或終止自身。
不知道小伙伴有沒有注意到我們小管家的孿生兄弟靜態(tài)Pod?
為什么k8s會(huì)推出靜態(tài)Pod概念两入?
囧么肥事胡說八道開課啦
靜態(tài) Pod 有什么特殊的地方呢净宵?
正常情況下Pod是在Master上統(tǒng)一管理,指定裹纳,分配择葡。所謂靜態(tài)Pod就是不接受Master的管理,在指定的node上當(dāng) kubelet
啟動(dòng)時(shí)剃氧,會(huì)自動(dòng)啟動(dòng)所有定義的靜態(tài)Pod敏储。
靜態(tài) Pod 直接由特定節(jié)點(diǎn)上的 kubelet 進(jìn)程來管理,不通過 master 節(jié)點(diǎn)上的 apiserver
朋鞍。?法與我們常?的控制器 Deployment
或者 DaemonSet
進(jìn)?關(guān)聯(lián)已添,kubelet
直接監(jiān)控每個(gè)Pod,并在故障失效時(shí)進(jìn)行重啟自愈滥酥。
靜態(tài) Pod 始終綁定在某?個(gè) kubelet
更舞,并且始終運(yùn)?在同?個(gè)節(jié)點(diǎn)上。
既然發(fā)現(xiàn)API不能管理坎吻,為什么能“看見”運(yùn)行的靜態(tài)Pod缆蝉?
kubelet會(huì)為每個(gè)它管理的靜態(tài)Pod,調(diào)用api-server
在 Kubernetes
的 apiserver
上創(chuàng)建?個(gè)鏡像 Pod(Mirror Pod
)禾怠。因此我們可以在 apiserver
中查詢到該 Pod,也能通過kubectl等方式進(jìn)行訪問贝搁,但是不能通過 apiserver 進(jìn)?控制(例如不能刪除)吗氏。
普通Pod失敗自愈和靜態(tài)Pod有什么區(qū)別?
常規(guī)Pod用工作負(fù)載資源來創(chuàng)建和管理多個(gè) Pod雷逆。 資源的控制器能夠處理副本的管理弦讽、上線,并在 Pod 失效時(shí)提供自愈能力膀哲。
本身節(jié)點(diǎn)可以嘗試重啟或者完全替換操作往产,kubernetes
默認(rèn)的自愈機(jī)制是當(dāng)Pod退出時(shí)對(duì)Pod進(jìn)行重啟。
如果重啟失敗某宪,可以重新拉取Pod仿村,實(shí)現(xiàn)替身替換:
例如,如果一個(gè)節(jié)點(diǎn)失敗兴喂,控制器注意到該節(jié)點(diǎn)上的 Pod 已經(jīng)停止工作蔼囊, 就可以創(chuàng)建替換性的 替身Pod焚志。調(diào)度器會(huì)將替身 Pod 調(diào)度到一個(gè)健康的節(jié)點(diǎn)執(zhí)行。
下面是一些管理一個(gè)或者多個(gè) Pod 的工作負(fù)載資源的示例:
Deployment
StatefulSet
DaemonSet
靜態(tài)Pod是指定在特定的節(jié)點(diǎn)上運(yùn)行的Pod畏鼓,完全交給kubelet進(jìn)行監(jiān)督自愈酱酬,重啟也會(huì)在同一個(gè)指定的節(jié)點(diǎn)上進(jìn)行重啟。靜態(tài) Pod 始終綁定在某?個(gè) kubelet
云矫,并且始終運(yùn)?在同?個(gè)節(jié)點(diǎn)上膳沽。
如果kubectl停止或者刪除靜態(tài)Pod會(huì)怎樣?
如果嘗試刪除或者停止让禀,靜態(tài)Pod會(huì)進(jìn)入Pending
狀態(tài)挑社,并且很快會(huì)被kubelet
重啟。
那如果我非要?jiǎng)h除它呢堆缘?
kubelet
啟動(dòng)時(shí)滔灶,由 –Pod-manifest-path= or –manifest-url=
參數(shù)指定的?錄下定義的所有 Pod 都會(huì)自動(dòng)創(chuàng)建。
刪除只需要在配置目錄下刪除對(duì)應(yīng)的 yaml
配置文件吼肥。
運(yùn)行中的 kubelet 會(huì)定期掃描配置的目錄录平,并且根據(jù)文件中出現(xiàn)或者消失的 Pod配置文件來創(chuàng)建或者刪除 Pod。
靜態(tài)Pod有什么作用缀皱?有哪些內(nèi)置靜態(tài)Pod斗这?
靜態(tài) Pod 通常綁定到某個(gè)節(jié)點(diǎn)上的 kubelet
。 其主要用途是運(yùn)行自托管的控制面啤斗。
因?yàn)槭褂渺o態(tài)Pod可以有效預(yù)防通過kubectl
表箭、或管理工具操作的誤刪除,可以利用它來部署一些核心組件應(yīng)用钮莲,保障應(yīng)用服務(wù)總是運(yùn)行穩(wěn)定數(shù)量和提供穩(wěn)定服務(wù)免钻。
在自托管場(chǎng)景中,使用 kubelet
來管理各個(gè)獨(dú)立的控制面組件崔拥。例如:
- 調(diào)度組件
kube-scheduler
- 秘書組件
kube-apiserver
- 核心大腦組件
kube-controller-manager
- 數(shù)據(jù)倉(cāng)組件
etcd
《Kubernetes-企業(yè)級(jí)容器應(yīng)用托管》-持續(xù)胡說八道
第一段:推薦閱讀:【云原生新時(shí)代弄潮兒k8s憑什么在容器化方面獨(dú)樹一幟极舔?】
第二段:推薦閱讀:【趁著同事玩游戲偷偷認(rèn)識(shí)k8s一家子補(bǔ)補(bǔ)課】
第三段:推薦閱讀:【Kubernetes家族容器小管家Pod在線答疑?】
第四段:推薦閱讀:【同事提出個(gè)我從未想過的問題,為什么Kubernetes要"多此一舉"推出靜態(tài)Pod概念链瓦?】
第五段:推薦閱讀:【探針配置失誤拆魏,線上容器應(yīng)用異常死鎖后,kubernetes集群未及時(shí)響應(yīng)自愈重啟容器慈俯?】
第六段:推薦閱讀:【kubernetes集群之Pod說能不能讓我體面的消亡呀渤刃?】
第七段:推薦閱讀:【k8s家族Pod輔助小能手Init容器認(rèn)知答疑?】
第八段:待更新贴膘?推薦休閑閱讀:【囧么肥事】