Kubernetes 0-1 了解Pod

kubernetes

Pod介紹

Pod空镜,是K8S對(duì)象模型中的最小單元浩淘,Pod里面包含著一組容器(單個(gè)容器或多個(gè)緊密耦合的容器),這時(shí)候Pod可以理解為一個(gè)機(jī)器吴攒,而Pod里面的容器則理解為該機(jī)器里面的進(jìn)程张抄。

Pod的容器運(yùn)行時(shí)由容器引擎提供,默認(rèn)的容器引擎是Docker洼怔;并且K8S管理的是Pod署惯,而不是容器。

一個(gè)Pod內(nèi)部的容器共享:

  • 存儲(chǔ):一個(gè)Pod可以指定一組共享存儲(chǔ)卷镣隶。
  • 網(wǎng)絡(luò):每個(gè)Pod分配一個(gè)唯一IP(集群內(nèi)IP)极谊,共享網(wǎng)絡(luò)命名空間诡右,包括 IP 地址和網(wǎng)絡(luò)端口。Pod內(nèi)的容器可以使用localhost互相通信轻猖,集群內(nèi)Pod與Pod通信可以使用Pod分配的IP帆吻,但是由于Pod的IP是隨機(jī)分配的,這種互通信的方式不太適合使用蜕依。

盡管一個(gè)Pod內(nèi)可以包含多個(gè)Pod桅锄,但我們?cè)诓渴饝?yīng)用容器時(shí)的最佳實(shí)踐是一個(gè)Pod里面只包含一個(gè)應(yīng)用容器作為主容器,其他容器為主容器服務(wù)样眠,稱之為輔助容器。例如主容器崩潰了翠肘,會(huì)有一個(gè)輔助容器去重啟主容器檐束。輔助容器可以有也可以沒有,因?yàn)镻od里面容器的生命周期可以被Pod的生命周期取代束倍,而Pod的生命周期可以通過Pod管理器來管理維護(hù)被丧。

將我們應(yīng)用服務(wù)隔離單獨(dú)部署在Pod的好處可以羅列以下:

  • Pod可以分別的調(diào)度到各個(gè)K8S節(jié)點(diǎn),充分利用了節(jié)點(diǎn)的計(jì)算資源绪妹;
  • 方便我們單獨(dú)為某個(gè)應(yīng)用服務(wù)做擴(kuò)縮操作甥桂。

Pod創(chuàng)建

在K8S集群中一般不會(huì)直接單獨(dú)創(chuàng)建Pod,而是通過Pod管理器邮旷。如果單獨(dú)創(chuàng)建Pod黄选,Pod的進(jìn)程被結(jié)束的話,Pod就永遠(yuǎn)被刪除婶肩;使用Pod管理器創(chuàng)建出來的Pod办陷,Pod管理器會(huì)負(fù)責(zé)保證Pod按期調(diào)度,即使Pod被刪除律歼,也會(huì)重新被調(diào)度起來民镜。簡而言之,Pod的生存由Pod管理器全權(quán)負(fù)責(zé)险毁。

Pod管理器包含很多種制圈,由很早的ReplicationController過渡到ReplicaSet再過渡到當(dāng)前普遍使用的Deployment,其實(shí)這三者能做的事情是類似的畔况,都是調(diào)度和監(jiān)視Pod列表鲸鹦,保證Pod列表與聲明的數(shù)量和其他期望相符。

除此之外還有其他的管理器:

  • StatefuleSet:帶狀態(tài)的Pod管理器问窃,需要持久存儲(chǔ)數(shù)據(jù)亥鬓,一般用于創(chuàng)建數(shù)據(jù)庫類型的應(yīng)用實(shí)例,如mysql域庇,redis嵌戈;
  • DaemonSet:每個(gè)符合條件的Node都分配一個(gè)Pod覆积,一般用于創(chuàng)建agent服務(wù),如日志收集組件熟呛,指標(biāo)數(shù)據(jù)收集組件等宽档。

一般通過以下方式創(chuàng)建Pod

  • 單行命令創(chuàng)建Pod
kubectl run nginx --image=nginx:latest --replicas=2

以上命令實(shí)際上是創(chuàng)建了一個(gè)Deployment資源和由其管理的2個(gè)Pod。

  • 定義資源清單庵朝,創(chuàng)建Pod

以yaml或者json格式定義Pod資源吗冤,大都選擇yaml。如果你使用VSCode的話九府,那么Kubernetes Support插件會(huì)成為你的利器。

我們先定義個(gè)一個(gè)Pod的資源文件pod-sample.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  containers:
    - name: nginx
      image: nginx
      imagePullPolicy: Always
      restartPolicy: Never
      resources:
        requests:
          memory: "128Mi"
          cpu: "256m"
        limits:
          memory: "256Mi"
          cpu: "512m"
      ports:
        - containerPort: 80

以上是一個(gè)簡單的Pod定義文件侄旬,我們可以從這個(gè)文件得到這些信息:

  • 運(yùn)行nginx鏡像肺蔚,作為Pod的主容器儡羔,向外暴露80端口;
  • 每次啟動(dòng)這個(gè)Pod都會(huì)從網(wǎng)絡(luò)拉取鏡像汰蜘;
  • 如果主容器不小心掛了仇冯,則不會(huì)被重啟;
  • 容器啟動(dòng)需要的最小資源和運(yùn)行最大資源苛坚。

然后通過kubectl命令創(chuàng)建(下面這行命令也適用于更新Pod):

kubectl apply -f pod-sample.yaml

查看Pod:

kubectl get pod -o wide

通過查看Pod的描述、Pod里面容器的運(yùn)行日志坪创,或直接進(jìn)入Pod容器分析定位問題:

# 描述Pod詳情
kubectl describe pod <POD_NAME>
# 查看Pod容器控制臺(tái)運(yùn)行日志
kubectl logs <POD_NAME>
# 進(jìn)入Pod
kubectl exec -it <POD_NAME> -c <CONTAINER_NAME> -- <COMMAND>

刪除Pod:

kubectl delete -f pod-sample.yaml
kubectl delete pod <POD_NAME>

Pod字段

通過以下命令查看定義Pod資源的字段即作用:

kubectl explain pod
kubectl explain pod.spec

對(duì)一些字段簡單介紹一下:

imagePullPolicy

鏡像拉取策略,有三種莱预,Always柠掂、IfNotPresent、Never

  • Always:每次都拉取最新鏡像依沮,默認(rèn)策略涯贞;
  • IfNotPresent:如果Pod被調(diào)度的Node上已經(jīng)存在鏡像了則直接使用鏡像,不存在在拉任:怼宋渔;
  • Never:只使用Node上的鏡像,即使不存在也不拉取辜限。

restartPolicy

Pod重啟策略皇拣,有三種:Always、OnFaliure、Never

  • Always:Pod只要終止運(yùn)行氧急,kubelet就會(huì)重啟它颗胡;
  • OnFaliure:Pod非正常終止,退出碼不為零吩坝,kubelet就會(huì)重啟它毒姨,正常退出不會(huì)重啟;
  • Never:退出了就不重啟钉寝。

nodeSelector

定義Lable對(duì)弧呐,選擇調(diào)度到擁有該Label對(duì)的Node節(jié)點(diǎn)。

livenessProbe

存活指針嵌纲,可以理解為Pod內(nèi)容器運(yùn)行的健康檢查俘枫,如果健康檢查沒通過,則重啟Pod內(nèi)容器疹瘦,這里面的內(nèi)容有點(diǎn)多崩哩,有機(jī)會(huì)詳細(xì)講。

readinessProbe

就緒指針言沐,也是通過健康檢查機(jī)制,對(duì)外呈現(xiàn)Pod的就緒狀態(tài)酣栈,如果健康檢查通過险胰,Pod狀態(tài)為就緒,可以接受外部流量請(qǐng)求矿筝。流量無法轉(zhuǎn)發(fā)到非就緒狀態(tài)的Pod起便。

command

容器啟動(dòng)時(shí)的命令列表,和Dockerfile中定義的CMD作用一樣窖维。

args

容器啟動(dòng)命令的參數(shù)榆综。

env

容器內(nèi)的環(huán)境變量列表,和Dockerfile中定義的ENV作用一樣铸史。

resource

可以定義容器啟動(dòng)的最小字段和運(yùn)行最大分配資源鼻疮,對(duì)Pod的資源使用的控制。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末琳轿,一起剝皮案震驚了整個(gè)濱河市判沟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌崭篡,老刑警劉巖挪哄,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異琉闪,居然都是意外死亡迹炼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門颠毙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斯入,“玉大人砂碉,你說我怎么就攤上這事≡劭郏” “怎么了绽淘?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沪铭。 經(jīng)常有香客問我,道長杀怠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任赔退,我火速辦了婚禮证舟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘女责。我一直安慰自己漆枚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布抵知。 她就那樣靜靜地躺著墙基,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刷喜。 梳的紋絲不亂的頭發(fā)上残制,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天初茶,我揣著相機(jī)與錄音氮墨,去河邊找鬼。 笑死规揪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猛铅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼揖庄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蹄梢,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤富俄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后霍比,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡们豌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年浅妆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凌外。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖趴乡,靈堂內(nèi)的尸體忽然破棺而出蝗拿,到底是詐尸還是另有隱情,我是刑警寧澤哀托,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布仓手,位于F島的核電站,受9級(jí)特大地震影響嗽冒,放射性物質(zhì)發(fā)生泄漏呀伙。R本人自食惡果不足惜添坊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雨女。 院中可真熱鬧,春花似錦氛堕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乱灵。三九已至,卻和暖如春痛倚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蝉稳。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工耘戚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人收津。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像撞秋,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吻贿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348