前言
什么是Pod?
pod是Kubernetes里最小的API對(duì)象,也是原子調(diào)度單位如孝。
為什么需要Pod?
因?yàn)槿萜鞯谋举|(zhì)是進(jìn)程,而Kubernetes就是操作系統(tǒng),在真實(shí)的操作系統(tǒng)中寇蚊,進(jìn)程并不是單都運(yùn)行,而是以進(jìn)程組的方式“有原則地”組織在一起棍好。參考了進(jìn)程和進(jìn)程組的關(guān)系仗岸,并且在部署中發(fā)現(xiàn)應(yīng)用直接存在著密切的協(xié)作關(guān)系,使它們必須部署在同一臺(tái)機(jī)器上借笙,因此抽象出了Pod的概念扒怖。
抽象出Pod有什么好處?
Pod其實(shí)就是一組共享了某些資源的容器业稼。Pod里面的容器盗痒,共享了同一個(gè)Network Namespace,并且可以聲明共享同一個(gè)volume盼忌。
如果單純使用docker容器积糯,假設(shè)有A掂墓,B兩個(gè)容器,容器A要共享容器B的網(wǎng)絡(luò)和Volume看成,使用下面命令:
$ docker run --net=B --volumes-from=B --name=A image-A ...
這樣子A君编、B容器就不是對(duì)等關(guān)系,而是拓?fù)潢P(guān)系川慌,B容器要先于A容器啟動(dòng)吃嘿。
而且對(duì)于后面開發(fā)網(wǎng)絡(luò)插件,重點(diǎn)考慮的是如何配置這個(gè)Pod的Network Namespace梦重,而不是每一個(gè)用戶容器如何配置你的網(wǎng)絡(luò)兑燥。
基本概念
什么屬性屬于Pod對(duì)象,什么屬性屬于Container對(duì)象琴拧?
Pod對(duì)象扮演的是傳統(tǒng)環(huán)境里"虛擬機(jī)"的角色降瞳,使用戶從傳統(tǒng)環(huán)境向Kubernetes轉(zhuǎn)移更加平滑。所以凡是網(wǎng)絡(luò)蚓胸、調(diào)度挣饥、存儲(chǔ)以及安全的,都是Pod級(jí)別沛膳。
NodeSelector
NodeSelector是一個(gè)供用戶將Pod與Node進(jìn)行綁定的字段扔枫。
NodeName
調(diào)度到指定名字的節(jié)點(diǎn)運(yùn)行。
HostAlias
定義了Pod的hosts文件內(nèi)容(比如/etc/hosts)
Container的屬性
Container的屬性基本跟Docker Containerd的字段差不多锹安,但是有幾個(gè)需要注意短荐。
#######ImagePullPolicy
定義了鏡像拉取策略。默認(rèn)值是Always叹哭,每次創(chuàng)建Pod時(shí)都拉取一次鏡像忍宋。如果被定義為Never或者IfNotPresent,則意味著Pod不會(huì)主動(dòng)拉取鏡像或者只在宿主機(jī)上不存在鏡像時(shí)拉取话速。
#######Lifecycle
Container Lifecycle Hooks讶踪,容器狀態(tài)變化的鉤子。
apiVersion: v1
kind: Pod
metadata:
name: lifecycle-demo
spec:
containers:
- name: lifecycle-demo-container
image: nginx
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
preStop:
exec:
command: ["/usr/sbin/nginx","-s","quit"]
生命周期
- Pending這個(gè)狀態(tài)意味著泊交,Pod 的 YAML 文件已經(jīng)提交給了 Kubernetes乳讥,API 對(duì)象已經(jīng)被創(chuàng)建并保存在 Etcd,但是因?yàn)槟撤N原因不能被順利創(chuàng)建廓俭。
- Running Pod已經(jīng)被成功調(diào)度云石,并且已經(jīng)與一個(gè)node綁定。它所包含的容器已經(jīng)創(chuàng)建成功研乒,至少有一個(gè)容器正在運(yùn)行汹忠。
- Success Pod里面所有的容器已經(jīng)成功運(yùn)行并且已經(jīng)退出。
- Failed Pod里至少有一個(gè)容器以不正常的狀態(tài)退出。
- Unknown 異常狀態(tài)宽菜,意味著Pod的狀態(tài)不能持續(xù)被kubelet匯報(bào)給kube-apiserver谣膳,這有可能是主從節(jié)點(diǎn)(Master和kubelet)通信異常。