k8s四 | 深入理解Pod資源對(duì)象

這篇文章我們來(lái)深入了解Pod的基本概念及相關(guān)使用

一. Pod的設(shè)計(jì)思路

首先Pod是 Kubernetes 項(xiàng)目中最小的 API 對(duì)象案糙,而Pod也是由容器組組成的帝美。Pod 里的所有容器瘪匿,共享的是同一個(gè) Network Namespace,并且可以聲明共享同一個(gè) Volume吆寨。凡是調(diào)度窃款、網(wǎng)絡(luò)、存儲(chǔ)框沟,以及安全相關(guān)的屬性藏古,基本上是 Pod 級(jí)別的,而容器就成為Pod屬性中一個(gè)普通的字段定義忍燥。

我們可以這樣理解:容器是相當(dāng)于未來(lái)云計(jì)算的進(jìn)程拧晕,鏡像是安裝包,Pod則是傳統(tǒng)環(huán)境的機(jī)器梅垄,k8s是操作系統(tǒng)厂捞。pod是一個(gè)小家庭,它把密不可分的家庭成員(container)聚在一起队丝,Infra container則是家長(zhǎng)靡馁,掌管家中共通資源,家庭成員通過(guò)sidecar方式互幫互助机久,其樂(lè)融融~臭墨。

二. Pod的網(wǎng)絡(luò)通信Infra容器

在 Kubernetes 項(xiàng)目里,Pod 的實(shí)現(xiàn)需要使用一個(gè)中間容器膘盖,這個(gè)容器叫作 Infra 容器胧弛。在這個(gè) Pod 中,Infra 容器永遠(yuǎn)都是第一個(gè)被創(chuàng)建的容器侠畔,而其他用戶定義的容器结缚,則通過(guò) Join Network Namespace 的方式,與 Infra 容器關(guān)聯(lián)在一起软棺。這樣的組織關(guān)系红竭,可以用下面這樣一個(gè)示意圖來(lái)表達(dá):


image.png

如上圖所示,這個(gè) Pod 里有兩個(gè)用戶容器 A 和 B喘落,還有一個(gè) Infra 容器德崭。很容易理解,在 Kubernetes 項(xiàng)目里揖盘,Infra 容器一定要占用極少的資源,所以它使用的是一個(gè)非常特殊的鏡像锌奴,叫作:k8s.gcr.io/pause兽狭。這個(gè)鏡像是一個(gè)用匯編語(yǔ)言編寫的、永遠(yuǎn)處于“暫停”狀態(tài)的容器箕慧,解壓后的大小也只有 100~200 KB 左右服球。而在 Infra 容器“Hold 住”Network Namespace 后,用戶容器就可以加入到 Infra 容器的 Network Namespace 當(dāng)中了

  • 這也就意味著颠焦,對(duì)于 Pod 里的容器 A 和容器 B 來(lái)說(shuō):
  • 它們可以直接使用 localhost 進(jìn)行通信斩熊;
  • 它們看到的網(wǎng)絡(luò)設(shè)備跟 Infra 容器看到的完全一樣;
  • 一個(gè) Pod 只有一個(gè) IP 地址伐庭,也就是這個(gè) Pod 的 Network Namespace 對(duì)應(yīng)的 IP 地址粉渠;
  • 當(dāng)然,其他的所有網(wǎng)絡(luò)資源圾另,都是一個(gè) Pod 一份霸株,并且被該 Pod 中的所有容器共享;
  • Pod 的生命周期只跟 Infra 容器一致集乔,而與容器 A 和 B 無(wú)關(guān)去件。

而對(duì)于同一個(gè) Pod 里面的所有用戶容器來(lái)說(shuō),它們的進(jìn)出流量扰路,也可以認(rèn)為都是通過(guò) Infra 容器完成的尤溜。這一點(diǎn)很重要,因?yàn)閷?lái)如果你要為 Kubernetes 開發(fā)一個(gè)網(wǎng)絡(luò)插件時(shí)汗唱,應(yīng)該重點(diǎn)考慮的是如何配置這個(gè) Pod 的 Network Namespace宫莱,而不是每一個(gè)用戶容器如何使用你的網(wǎng)絡(luò)配置,這是沒(méi)有意義的渡嚣。

這就意味著梢睛,如果你的網(wǎng)絡(luò)插件需要在容器里安裝某些包或者配置才能完成的話,是不可取的:Infra 容器鏡像的 rootfs 里幾乎什么都沒(méi)有识椰,沒(méi)有你隨意發(fā)揮的空間绝葡。當(dāng)然,這同時(shí)也意味著你的網(wǎng)絡(luò)插件完全不必關(guān)心用戶容器的啟動(dòng)與否腹鹉,而只需要關(guān)注如何配置 Pod藏畅,也就是 Infra 容器的 Network Namespace 即可。

三. 伴生容器與容器初始化

  • sidecar: 伴生容器功咒,指的就是我們可以在一個(gè) Pod 中愉阎,啟動(dòng)一個(gè)輔助容器,來(lái)完成一些獨(dú)立于主進(jìn)程(主容器)之外的工作力奋。
  • Init Container:初始化容器 就是用來(lái)做初始化工作的容器榜旦,可以是一個(gè)或者多個(gè),如果有多個(gè)的話景殷,這些容器會(huì)按定義的順序依次執(zhí)行溅呢,只有所有的Init Container執(zhí)行完后澡屡,主容器才會(huì)被啟動(dòng)。我們知道一個(gè)Pod里面的所有容器是共享數(shù)據(jù)卷和網(wǎng)絡(luò)命名空間的咐旧,所以Init Container里面產(chǎn)生的數(shù)據(jù)可以被主容器使用到的驶鹉。

例如:我們現(xiàn)在有一個(gè) Java Web 應(yīng)用的 WAR 包,它需要被放在 Tomcat 的 webapps 目錄下運(yùn)行起來(lái)铣墨。假如室埋,你現(xiàn)在只能用 Docker 來(lái)做這件事情,那該如何處理這個(gè)組合關(guān)系呢伊约?

  • 一種方法是姚淆,把 WAR 包直接放在 Tomcat 鏡像的 webapps 目錄下,做成一個(gè)新的鏡像運(yùn)行起來(lái)碱妆∪忭铮可是,這時(shí)候疹尾,如果你要更新 WAR 包的內(nèi)容上忍,或者要升級(jí) Tomcat 鏡像,就要重新制作一個(gè)新的發(fā)布鏡像纳本,非常麻煩窍蓝。
  • 另一種方法是,你壓根兒不管 WAR 包繁成,永遠(yuǎn)只發(fā)布一個(gè) Tomcat 容器吓笙。不過(guò),這個(gè)容器的 webapps 目錄巾腕,就必須聲明一個(gè) hostPath 類型的 Volume面睛,從而把宿主機(jī)上的 WAR 包掛載進(jìn) Tomcat 容器當(dāng)中運(yùn)行起來(lái)。不過(guò)尊搬,這樣你就必須要解決一個(gè)問(wèn)題叁鉴,即:如何讓每一臺(tái)宿主機(jī),都預(yù)先準(zhǔn)備好這個(gè)存儲(chǔ)有 WAR 包的目錄呢佛寿?這樣來(lái)看幌墓,你只能獨(dú)立維護(hù)一套分布式存儲(chǔ)系統(tǒng)了。

實(shí)際上冀泻,有了 Pod 之后常侣,這樣的問(wèn)題就很容易解決了。我們可以把 WAR 包和 Tomcat 分別做成鏡像弹渔,然后把它們作為一個(gè) Pod 里的兩個(gè)容器“組合”在一起胳施。這個(gè) Pod 的配置文件如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: javaweb-2
spec:
  initContainers:
  - image: geektime/sample:v2
    name: war
    command: ["cp", "/sample.war", "/app"]
    volumeMounts:
    - mountPath: /app
      name: app-volume
  containers:
  - image: geektime/tomcat:7.0
    name: tomcat
    command: ["sh","-c","/root/apache-tomcat-7.0.42-v2/bin/start.sh"]
    volumeMounts:
    - mountPath: /root/apache-tomcat-7.0.42-v2/webapps
      name: app-volume
    ports:
    - containerPort: 8080
      hostPort: 8001 
  volumes:
  - name: app-volume
    emptyDir: {}

在這個(gè) Pod 中,我們定義了兩個(gè)容器肢专,第一個(gè)容器使用的鏡像是geektime/sample:v2巾乳,這個(gè)鏡像里只有一個(gè) WAR 包(sample.war)放在根目錄下您没。而第二個(gè)容器則使用的是一個(gè)標(biāo)準(zhǔn)的 Tomcat 鏡像。

不過(guò)胆绊,你可能已經(jīng)注意到,WAR 包容器的類型不再是一個(gè)普通容器欧募,而是一個(gè) Init Container 類型的容器压状。在 Pod 中,所有 Init Container 定義的容器跟继,都會(huì)比 spec.containers 定義的用戶容器先啟動(dòng)种冬。并且,Init Container 容器會(huì)按順序逐一啟動(dòng)舔糖,而直到它們都啟動(dòng)并且退出了娱两,用戶容器才會(huì)啟動(dòng)。

所以金吗,這個(gè) Init Container 類型的 WAR 包容器啟動(dòng)后十兢,我執(zhí)行了一句"cp /sample.war /app",把應(yīng)用的 WAR 包拷貝到 /app 目錄下摊唇,然后退出缭保。而后這個(gè) /app 目錄羊壹,就掛載了一個(gè)名叫 app-volume 的 Volume。接下來(lái)就很關(guān)鍵了宵呛。Tomcat 容器,同樣聲明了掛載 app-volume 到自己的 webapps 目錄下夕凝。所以宝穗,等 Tomcat 容器啟動(dòng)時(shí),它的 webapps 目錄下就一定會(huì)存在 sample.war 文件:這個(gè)文件正是 WAR 包容器啟動(dòng)時(shí)拷貝到這個(gè) Volume 里面的码秉,而這個(gè) Volume 是被這兩個(gè)容器共享的逮矛。

像這樣,我們就用一種“組合”方式泡徙,解決了 WAR 包與 Tomcat 容器之間耦合關(guān)系的問(wèn)題橱鹏。實(shí)際上,這個(gè)所謂的“組合”操作堪藐,正是容器設(shè)計(jì)模式里最常用的一種模式莉兰,它的名字叫:sidecar。

在我們的這個(gè)應(yīng)用 Pod 中礁竞,Tomcat 容器是我們要使用的主容器糖荒,而 WAR 包容器的存在,只是為了給它提供一個(gè) WAR 包而已模捂。所以捶朵,我們用 Init Container初始化容器的方式優(yōu)先運(yùn)行 WAR 包容器蜘矢,扮演了一個(gè) sidecar 的角色。

四. Pod的生命周期狀態(tài)

  • Pending综看。這個(gè)狀態(tài)意味著品腹,Pod 的 YAML 文件已經(jīng)提交給了 Kubernetes,API 對(duì)象已經(jīng)被創(chuàng)建并保存在 Etcd 當(dāng)中红碑。但是舞吭,這個(gè) Pod 里有些容器因?yàn)槟撤N原因而不能被順利創(chuàng)建。比如析珊,調(diào)度不成功羡鸥。
  • Running。這個(gè)狀態(tài)下忠寻,Pod已經(jīng)調(diào)度成功惧浴,跟一個(gè)具體的節(jié)點(diǎn)綁定。它包含的容器都已經(jīng)創(chuàng)建成功奕剃,并且至少有一個(gè)正在運(yùn)行中衷旅。
  • Succeeded。這個(gè)狀態(tài)意味著祭饭,Pod 里的所有容器都正常運(yùn)行完畢芜茵,并且已經(jīng)退出了。這種情況在運(yùn)行一次性任務(wù)時(shí)最為常見倡蝙。
  • Failed九串。這個(gè)狀態(tài)下,Pod 里至少有一個(gè)容器以不正常的狀態(tài)(非 0 的返回碼)退出寺鸥。這個(gè)狀態(tài)的出現(xiàn)猪钮,意味著你得想辦法 Debug 這個(gè)容器的應(yīng)用,比如查看 Pod 的 Events 和日志胆建。
  • Unknown烤低。這是一個(gè)異常狀態(tài),意味著 Pod 的狀態(tài)不能持續(xù)地被 kubelet 匯報(bào)給 kube-apiserver笆载,這很有可能是主從節(jié)點(diǎn)(Master 和 Kubelet)間的通信出現(xiàn)了問(wèn)題扑馁。

五. Pod的鉤子Hook

Kubernetes 為我們的容器提供了生命周期鉤子的,就是我們說(shuō)的Pod Hook凉驻,Pod Hook 是由 kubelet 發(fā)起的腻要,當(dāng)容器中的進(jìn)程啟動(dòng)前或者容器中的進(jìn)程終止之前運(yùn)行,這是包含在容器的生命周期之中涝登。我們可以同時(shí)為 Pod 中的所有容器都配置 hook雄家。

Kubernetes 為我們提供了兩種鉤子函數(shù):

  • PostStart:這個(gè)鉤子在容器創(chuàng)建后立即執(zhí)行。但是胀滚,并不能保證鉤子將在容器ENTRYPOINT之前運(yùn)行趟济,因?yàn)闆](méi)有參數(shù)傳遞給處理程序乱投。主要用于資源部署、環(huán)境準(zhǔn)備等顷编。不過(guò)需要注意的是如果鉤子花費(fèi)太長(zhǎng)時(shí)間以至于不能運(yùn)行或者掛起戚炫, 容器將不能達(dá)到running狀態(tài)。
  • PreStop:這個(gè)鉤子在容器終止之前立即被調(diào)用媳纬。它是阻塞的嘹悼,意味著它是同步的, 所以它必須在刪除容器的調(diào)用發(fā)出之前完成层宫。主要用于優(yōu)雅關(guān)閉應(yīng)用程序、通知其他系統(tǒng)等其监。如果鉤子在執(zhí)行期間掛起萌腿, Pod階段將停留在running狀態(tài)并且永不會(huì)達(dá)到failed狀態(tài)。
    如果PostStart或者PreStop鉤子失敗抖苦, 它會(huì)殺死容器毁菱。所以我們應(yīng)該讓鉤子函數(shù)盡可能的輕量。當(dāng)然有些情況下锌历,長(zhǎng)時(shí)間運(yùn)行命令是合理的贮庞, 比如在停止容器之前預(yù)先保存狀態(tài)。

另外我們有兩種方式來(lái)實(shí)現(xiàn)上面的鉤子函數(shù):

  • Exec - 用于執(zhí)行一段特定的命令究西,不過(guò)要注意的是該命令消耗的資源會(huì)被計(jì)入容器窗慎。
  • HTTP - 對(duì)容器上的特定的端點(diǎn)執(zhí)行HTTP請(qǐng)求
    示例
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"]

在這個(gè)例子中,我們?cè)谌萜鞒晒?dòng)之后定義了Lifecycle字段卤材,即在 /usr/share/message 里寫入了一句“歡迎信息”(即 postStart 定義的操作)遮斥。而在這個(gè)容器被刪除之前,我們則先調(diào)用了 nginx 的退出指令(即 preStop 定義的操作)扇丛,從而實(shí)現(xiàn)了容器的“優(yōu)雅退出”

六. Pod的健康檢查

在 Kubernetes 中术吗,你可以為 Pod 里的容器定義一個(gè)健康檢查“探針”(Probe)。這樣帆精,kubelet 就會(huì)根據(jù)這個(gè) Probe 的返回值決定這個(gè)容器的狀態(tài)较屿,而不是直接以容器進(jìn)行是否運(yùn)行(來(lái)自 Docker 返回的信息)作為依據(jù)。這種機(jī)制卓练,是生產(chǎn)環(huán)境中保證應(yīng)用健康存活的重要手段隘蝎。

  • liveness probe(存活探針):確定你的應(yīng)用程序是否正在運(yùn)行,通俗點(diǎn)將就是是否還活著昆庇。一般來(lái)說(shuō)末贾,如果你的程序一旦崩潰了, Kubernetes 就會(huì)立刻知道這個(gè)程序已經(jīng)終止了整吆,然后就會(huì)重啟這個(gè)程序拱撵。而我們的 liveness probe 的目的就是來(lái)捕獲到當(dāng)前應(yīng)用程序還沒(méi)有終止辉川,還沒(méi)有崩潰,如果出現(xiàn)了這些情況拴测,那么就重啟處于該狀態(tài)下的容器乓旗,使應(yīng)用程序在存在 bug 的情況下依然能夠繼續(xù)運(yùn)行下去。
  • readiness probe(可讀性探針):確定容器是否已經(jīng)就緒可以接收流量過(guò)來(lái)了集索。這個(gè)探針通俗點(diǎn)講就是說(shuō)是否準(zhǔn)備好了屿愚,現(xiàn)在可以開始工作了。只有當(dāng) Pod 中的容器都處于就緒狀態(tài)的時(shí)候 kubelet 才會(huì)認(rèn)定該 Pod 處于就緒狀態(tài)务荆,因?yàn)橐粋€(gè) Pod 下面可能會(huì)有多個(gè)容器妆距。當(dāng)然 Pod 如果處于非就緒狀態(tài),那么我們就會(huì)將他從我們的工作隊(duì)列(實(shí)際上就是我們后面需要重點(diǎn)學(xué)習(xí)的 Service)中移除出來(lái)函匕,這樣我們的流量就不會(huì)被路由到這個(gè) Pod 里面來(lái)了娱据,決定的這個(gè) Pod 是不是能被通過(guò) Service 的方式訪問(wèn)到,而并不影響 Pod 的生命周期盅惜。中剩。

探針支持的配置方式:

  • exec:執(zhí)行一段命令
  • http:檢測(cè)某個(gè) http 請(qǐng)求
  • tcpSocket:檢查端口, kubelet 將嘗試在指定端口上打開容器的套接字抒寂。如果可以建立連接结啼,容器被認(rèn)為是健康的,如果不能就認(rèn)為是失敗的屈芜。

示例

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: test-liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5

在這個(gè) Pod 中郊愧,我們定義了一個(gè)容器。它在啟動(dòng)之后做的第一件事沸伏,就是在 /tmp 目錄下創(chuàng)建了一個(gè) healthy 文件糕珊,以此作為自己已經(jīng)正常運(yùn)行的標(biāo)志。而 30 s 過(guò)后毅糟,它會(huì)把這個(gè)文件刪除掉红选。與此同時(shí),我們定義了一個(gè)這樣的 livenessProbe(健康檢查)姆另。它的類型是 exec喇肋,這意味著,它會(huì)在容器啟動(dòng)后迹辐,在容器里面執(zhí)行一句我們指定的命令蝶防,比如:“cat /tmp/healthy”。這時(shí)明吩,如果這個(gè)文件存在间学,這條命令的返回值就是 0,Pod 就會(huì)認(rèn)為這個(gè)容器不僅已經(jīng)啟動(dòng),而且是健康的低葫,如果返回值為非0详羡,那么kubelet將會(huì)重啟這個(gè)容器。initialDelaySeconds:5嘿悬,在容器啟動(dòng) 5 s 后開始執(zhí)行健康檢查实柠,periodSeconds: 5每 5 s 執(zhí)行一次。

創(chuàng)建這個(gè)Pod查看過(guò)程

$ kubectl  get pods 
test-liveness-exec                                                1/1     Running            0          64s

30s后我們查看Pod的Event

$ kubectl  describe pod test-liveness-exec
Events:
  Type     Reason     Age                 From                 Message
  ----     ------     ----                ----                 -------
  Normal   Scheduled  2m5s                default-scheduler    Successfully assigned default/test-liveness-exec to k8s-node01
  Warning  Unhealthy  66s (x3 over 76s)   kubelet, k8s-node01  Liveness probe failed: cat: can't open '/tmp/healthy': No such file or directory

通過(guò)Event發(fā)現(xiàn)健康檢查探查到 /tmp/healthy 已經(jīng)不存在了善涨,所以它報(bào)告容器是不健康的窒盐,我們?cè)诳匆幌翽od的當(dāng)前狀態(tài)是否正常?

$ kubectl   get pods 
NAME                                                              READY   STATUS             RESTARTS   AGE
test-liveness-exec                                                1/1     Running            1          1m1s

我們可以看到Pod的狀態(tài)仍然是Running正常的钢拧,但是RESTARTS字段已經(jīng)由0已經(jīng)變成1了蟹漓,這是因?yàn)镻od已經(jīng)被kubelet重啟了。

livenessProbe 也可以定義為發(fā)起 HTTP 或者 TCP 請(qǐng)求的方式源内,定義格式如下:

livenessProbe:
     httpGet:
       path: /healthz
       port: 8080
       httpHeaders:
       - name: X-Custom-Header
         value: Awesome
       initialDelaySeconds: 3
       periodSeconds: 3
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20

Pod 其實(shí)可以暴露一個(gè)健康檢查 URL(比如 /healthz)牧牢,或者直接讓健康檢查去檢測(cè)應(yīng)用的監(jiān)聽端口。這兩種配置方法姿锭,在 Web 服務(wù)類的應(yīng)用中非常常用。

七. Pod的故障恢復(fù)機(jī)制

上面例子中健康檢查如果沒(méi)有通過(guò)伯铣,kubelet則會(huì)重啟這個(gè)容器呻此,這是因?yàn)槟J(rèn)Pod的恢復(fù)機(jī)制為Always,其實(shí)它是 Pod 的 Spec 部分的一個(gè)標(biāo)準(zhǔn)字段(pod.spec.restartPolicy)腔寡,我們可以根據(jù)自己的需求來(lái)定通過(guò)設(shè)置 restartPolicy改變 Pod 的恢復(fù)策略:

  • Always:在任何情況下焚鲜,只要容器不在運(yùn)行狀態(tài),就自動(dòng)重啟容器放前;
  • OnFailure: 只在容器 異常時(shí)才自動(dòng)重啟容器忿磅;
  • Never: 從來(lái)不重啟容器。

基本的設(shè)計(jì)原理:

  1. 只要 Pod 的 restartPolicy 指定的策略允許重啟異常的容器(比如:Always)凭语,那么這個(gè) Pod 就會(huì)保持 Running 狀態(tài)葱她,并進(jìn)行容器重啟。否則似扔,Pod 就會(huì)進(jìn)入 Failed 狀態(tài) 吨些。

  2. 對(duì)于包含多個(gè)容器的 Pod,只有它里面所有的容器都進(jìn)入異常狀態(tài)后炒辉,Pod 才會(huì)進(jìn)入 Failed 狀態(tài)豪墅。在此之前,Pod 都是 Running 狀態(tài)黔寇。此時(shí)偶器,Pod 的 READY 字段會(huì)顯示正常容器的個(gè)數(shù)

八. Pod的常用屬性定義

除了上文定義的一些屬性字段,我們常用的屬性還有以下字段定義:

  • NodeSelector:是一個(gè)供用戶將 Pod 與 Node 進(jìn)行綁定的字段
  • ImagePullPolicy:[Always | Never | IfNotPresent] # 【String】 每次都嘗試重新拉取鏡像 | 僅使用本地鏡像 | 如果本地有鏡像則使用,沒(méi)有則拉取
  • Volume:volume是Pod中多個(gè)容器訪問(wèn)的共享目錄屏轰。volume被定義在pod上颊郎,被這個(gè)pod的多個(gè)容器掛載到相同或不同的路徑下。一般volume被用于持久化pod產(chǎn)生的數(shù)據(jù)亭枷。Kubernetes提供了眾多的volume類型袭艺,包括emptyDir、hostPath叨粘、nfs猾编、glusterfs、cephfs升敲、ceph rbd等答倡。
  • NodeName:一旦 Pod 的這個(gè)字段被賦值,Kubernetes 項(xiàng)目就會(huì)被認(rèn)為這個(gè) Pod 已經(jīng)經(jīng)過(guò)了調(diào)度驴党,調(diào)度的結(jié)果就是賦值的節(jié)點(diǎn)名字瘪撇。所以,這個(gè)字段一般由調(diào)度器負(fù)責(zé)設(shè)置港庄,但用戶也可以設(shè)置它來(lái)“騙過(guò)”調(diào)度器倔既,當(dāng)然這個(gè)做法一般是在測(cè)試或者調(diào)試的時(shí)候才會(huì)用到。
  • HostAliases:定義了 Pod 的 hosts 文件(比如 /etc/hosts)里的內(nèi)容鹏氧。

網(wǎng)上資料:


image.png

image.png

image.png

image.png

image.png

image.png

總結(jié):在這篇文章中我們深度了解了Pod的設(shè)計(jì)模式和字段屬性定義渤涌,其實(shí)Pod 這個(gè)看似復(fù)雜的 API 對(duì)象,實(shí)際上就是對(duì)容器的進(jìn)一步抽象和封裝而已把还,Pod 對(duì)象就是容器的升級(jí)版实蓬。它對(duì)容器進(jìn)行了組合,添加了更多的屬性和字段吊履。


上篇文章:k8s三 | 使用YAML文件定義資源對(duì)象
系列文章:深入理解Kuerneters
參考資料:深入剖析Kubernetes-張磊安皱、從Docker到Kubernetes進(jìn)階-陽(yáng)明

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市艇炎,隨后出現(xiàn)的幾起案子酌伊,更是在濱河造成了極大的恐慌,老刑警劉巖缀踪,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腺晾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辜贵,警方通過(guò)查閱死者的電腦和手機(jī)悯蝉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)托慨,“玉大人鼻由,你說(shuō)我怎么就攤上這事。” “怎么了蕉世?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵蔼紧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我狠轻,道長(zhǎng)奸例,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任向楼,我火速辦了婚禮查吊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘湖蜕。我一直安慰自己逻卖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布昭抒。 她就那樣靜靜地躺著评也,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灭返。 梳的紋絲不亂的頭發(fā)上盗迟,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音熙含,去河邊找鬼诈乒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛婆芦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喂饥,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼消约,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了员帮?” 一聲冷哼從身側(cè)響起或粮,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捞高,沒(méi)想到半個(gè)月后氯材,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡硝岗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年氢哮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片型檀。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冗尤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情裂七,我是刑警寧澤皆看,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站背零,受9級(jí)特大地震影響腰吟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜徙瓶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一毛雇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧倍啥,春花似錦禾乘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至氮趋,卻和暖如春伍派,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剩胁。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工诉植, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昵观。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓晾腔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親啊犬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灼擂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • Pod 為什么需要Pod Pod,是Kubernetes項(xiàng)目中的原子調(diào)度單位觉至。容器就是未來(lái)云計(jì)算系統(tǒng)中的進(jìn)程剔应;容器...
    12點(diǎn)前睡覺(jué)hhh閱讀 1,273評(píng)論 0 0
  • 現(xiàn)在,你已經(jīng)非常清楚:Kubernetes 項(xiàng)目中的最小編排單位是 Pod语御,而不是容器峻贮。將這個(gè)設(shè)計(jì)落實(shí)到 API ...
    YY_1閱讀 793評(píng)論 0 1
  • 現(xiàn)在,你已經(jīng)非常清楚:Kubernetes 項(xiàng)目中的最小編排單位是 Pod应闯,而不是容器纤控。將這個(gè)設(shè)計(jì)落實(shí)到 API ...
  • 填坑,整理下Java的常用異常碉纺。正確使用異常在實(shí)際編碼中非常重要嚼黔,但面試中的意義相對(duì)較小细层,因?yàn)閷?duì)異常的理解和應(yīng)用很...
    猴子007閱讀 1,159評(píng)論 7 24
  • 姓名:林雄杰 公司:寧波輝旺機(jī)械有限公司 2018年12月20日 【日精進(jìn)打卡第59天】 【知~學(xué)習(xí)】誦持佛教經(jīng)卷...
    木木似水閱讀 65評(píng)論 0 0