日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kubernetes中Pod的生命周期

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kubernetes中Pod的生命周期 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Pod生命周期之Init容器

Init容器

Pod能夠具有多個容器,應用運行在容器里面,但是它可能有一個或多個先于應用容器啟動的Init容器

Init容器于普通的容器非常像,除了如下兩點:

  • Init容器總是運行到成功完成為止
  • 每個Init容器都必須在下一個Init容器啟動之前成功完成

如果Pod 的Init容器失敗,Kubernetes會不斷地重啟該Pod,直到Init容器成功為止,然而,如果Pod對應的restartPolicy為Nerver,它不會重新啟動

因為Init容器具有與應用程序容器分離的單獨鏡像,所以它們的啟動相關代碼具有如下優勢:

  • 它們可以包含并運行實用工具,但是出于安全考慮,是不建議在應用程序容器中包含這些實用工具的
  • 它們可以包含實用工具和定制化來安裝,但是不能出現在應用程序鏡像中,例如,創建鏡像沒必要FROM另一個鏡像,只需要在安裝過程中使用類似sed、awk、python或dig這樣的工具
  • 應用程序鏡像可以分離出創建和部署的角色,而沒有必要聯合它們構建一個單獨的鏡像
  • Init容器使用Linux Namespace,所以相對應用程序容器來說具有不同的文件系統視圖,因此,它們能夠具有訪問Secret的權限,而應用程序容器則不能
  • 它們必須在應用程序容器啟動之前運行完成,而應用程序容器是并行運行的,所以Init容器能夠提供一中簡單的阻塞或延遲應用程序容器的啟動方法,直到滿足了一組先決條件

Init模板

apiVersion: v1 kind: Pod metadata:name: myapp-podlabels:app: myapp spec:containers:- name: myapp-containerimage: busyboxcommand: ['sh','-c', 'echo The app is runing! && sleep 3600']initContainers:- name: init-myserviceimage: busyboxcommand: ['sh','-c','until nslookup myservice; do echo waiting for myservice; sleep 2; done;']- name: init-mydbimage: busyboxcommand: ['sh','-c','until nslookup mydb; do echo waiting for mydb; sleep 2; done;'] kind: Service apiVersion: v1 metadata:name: myservice spec:ports:- protocol: TCPport: 80targetPort: 9376 --- kind: Service apiVersion: v1 metadata:name: mydb spec:ports:- protocol: TCPport: 80targetPort: 9377

特殊說明

  • 在Pod啟動過程中,Init容器會按順序在網絡和數據卷初始化(pause)之后啟動,每個容器必須在下一個容器啟動之前成功退出
  • 如果由于運行時或失敗退出,將導致容器啟動事變,它會根據Pod的restartPolicy指定的策略進行重啟,然而,如果Pod的restartPolicy設置為Always,Init容器失敗時會使用RestartPolicy策略
  • 在所有的Init容器沒有成功之前,Pod將不會變成Ready狀態,Init容器的端口將不會在Service中進行聚集。正在初始化的Pode出于Pending狀態,但應該會將Initalizing狀態設置為true
  • 如果Pod重啟,所有Init容器必須重新執行
  • 對Init容器spec的修改被限制在容器image字段,修改其他字段都不會生效,更改Init容器的image字段,等價于重啟該Pod
  • Init容器具有應用容器的所有字段,除了readinessProbe,因為Init容器無法定義不同于完成(completion)的就緒(readiness)之外的其他狀態,這會在驗證過程中強制執行
  • 在Pod中的每個app和Init容器的名稱必須唯一,與任何其他容器共享一個名稱,會在驗證時拋出錯誤

Pod生命周期之容器探針

探針時有kubelet對容器執行的定期診斷,要執行診斷,kubelet調用由容器實現的Handler。有三種類型的處理程序:

  • ExecAction:在容器內執行指定命令,如果命令退出時返回碼為0,則認為診斷成功
  • TCPSocketAction:對指定端口上的容器的IP地址進行TCP檢測,如果端口打開,則診斷被認為時成功的
  • HTTPGetAction:對指定的端口和路徑上的容器的IP地址執行Get請求,如果響應的狀態碼大于等于200且小于400,則診斷被認為時成功的

每次探測都將獲得以下三種結果之一:

  • 成功:容器通過了診斷
  • 失敗:容器未通過診斷
  • 未知:診斷失敗,因此不會采取任何行動

livenessProbe探針

指示容器是否正在運行,如果存活探測失敗,則kubelet會殺死容器,并且容器將受到重啟策略的影響,如果容器不提供存活探針,則默認狀態為Success

存活檢測

livenessProbe-exec

apiVersion: v1 kind: Pod metadata:name: liveness-exec-podnamespace: dafault spec:containers:- name: liveness-exec-containerimage: busyboximagePullPolicy: IfNotPresentcommand: ['/bin/sh','-c',"touch /tmp/live; sleep 60; rm -rf /tmp/live; sleep 3600"]livenessProbe:exec:command: ["test","-c","/tmp/live"]initialDeyaySeconds: 1periodSeconds: 3

livenessProbe-httpget

apiVersion: v1 kind: Pod metadata:name: liveness-httpget-podnamespace: default spec:containers:- name: liveness-httpget-containerimage: myapp:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80livenessProbe:httpGet:port: httppath: /index.htmlinitialDelaySeconds: 1periodSenconds: 3timeoutSeconds: 10

lienessProbe-tcp

apiVersion: v1 kind: Pod metadata:name: probe-tcp spec:containers:- name: nginximage: myapp:v1livenessProbe:initialDelaySeconds: 5timeoutSeconds: 1tcpSocket:port: 8080periodSeconds: 3

readinessProbe

指示容器是否準備好服務請求,如果就緒探針失敗,端點控制器將從與Pod匹配的所有Service的端點中刪除該Pod的IP地址,初始延遲之前的就緒狀態默認為Failure,如果容器不提供就緒探針,則默認狀態為Success

就緒檢測

readinessProbe-httpget

apiVersion: v1 kind: Pod metadata:name: readiness-httpget-podnamespace: default spec:containers:- name: readiness-httpget-containerimage: myapp:v1imagePullPolicy: IfNotPresentreadinessProbe:httpGet:port: httppath: /index1.htmlinitialDelaySeconds: 1periodSeconds: 3

Pod生命周期之啟動退出

apiVersion: v1 kind: Pod metadata:name: lifecycle-demo spec:containers:- name: lifecycle-demo-containerimage: myapp:v1lifecycle:postStart:exec:command: ["/bin/bash", "-c","echo Hello from the postStart handler > /usr/share/message"]preStop:exec:command: ["/usr/sbin/nginx","-s","quit"]

Pod生命周期之Pod的狀態

  • 掛起(Pending):Pod已被Kubernetes系統接受,但有一個或者多個容器鏡像尚未創建,等待時間包括調度Pod的時間和通過網絡下載鏡像的時間
  • 運行中(Runing):該Pod已經綁定到一個節點上,Pod中所有的容器都已被創建,至少有一個容器正在運行,或者正處于啟動或重啟狀態
  • 成功(Successed):Pod中的所有容器都被成功終止,并且不會重啟
  • 失敗(Failed):Pod中的所有容器都已經終止了,并且至少有一個容器是因為失敗終止,也就是說容器已非0狀態退出或者被系統終止
  • 未知(Unknown):因為某些原因無法取得Pod的狀態,通常因為與Pod所在主機通信失敗

總結

以上是生活随笔為你收集整理的Kubernetes中Pod的生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。