Pod詳解與進階
一、Pod詳解
1.pod定義
Pod 是 K8S 最小的創(chuàng)建和運行管理單元文章來源地址http://www.zghlxwxcb.cn/news/detail-641198.html
一個 Pod 能包含幾個容器?
1個 pause容器(基礎容器/父容器/根容器)
1個或多個應用容器(業(yè)務容器)
通常一個Pod最好只包含一個應用容器,一個應用容器最好只運行一個業(yè)務進程
同一個Pod里的容器,都是運行在同一個Node節(jié)點上的,并且共享 NET MNT UTS IPC PID 命名空間
2.pause容器作用
是作為共享 NET MNT UTS IPC PID 命名空間的基礎
給Pod里的其它容器提供網(wǎng)絡、存儲資源的共享
作為PID=1的進程(init進程)管理整個Pod容器組的生命周期
3.Pod 的 3 種類型
控制器管理的Pod:由scheduler進行調(diào)度的;被控制器管理的;有自愈能力,一旦Pod掛掉了,會被重新拉起;有副本管理、滾動更新等功能
自主式Pod:由scheduler進行調(diào)度的;不被控制器管理;沒有自愈能力,一旦Pod掛掉了,不會被重新拉起;沒有副本管理、滾動更新等功能
靜態(tài)Pod:不由scheduler調(diào)度的,而是由kubelet自行管理的;始終與kubelet運行在同一個Node節(jié)點上,不能被直接刪除
靜態(tài)Pod資源配置文件默認放置在/etc/kubernetes/manifests目錄中,當此目錄中有Pod資源配置文件存在或者消失時kubelet會自動創(chuàng)建或刪除靜態(tài)Pod
4.Pod 的 3 種容器
pause容器(基礎容器/父容器/根容器):給Pod的容器組作環(huán)境初始化,具體見上
init容器(初始化容器/init container):可以為應用容器事先提供運行環(huán)境或輔助工具;還可以阻塞或延遲應用容器的啟動
如果Pod有多個init容器時,是串行啟動的,要在上一個init容器成功的完成啟動、運行和退出后才會啟動下一個init容器
應用容器(業(yè)務容器/main container):提供應用程序業(yè)務
如果Pod有多個應用容器時,是并行啟動的,應用容器要在所有init容器都成功的完成啟動、運行和退出后才會啟動
5.Pod 的 3 種鏡像拉取策略
yaml中字段設置:spec.containers.imagePullPolicy
IfNotPresent:優(yōu)先使用本地已存在的鏡像,如果本地沒有則從倉庫拉取鏡像。是標簽為非latest的鏡像的默認鏡像拉取策略
Always:總是從倉庫拉取鏡像,無論本地是否已存在鏡像。是標簽為latest或無標簽的鏡像的默認鏡像拉取策略
Never:僅使用本地鏡像,總是不從倉庫拉取鏡像
6.Pod 的 3 種容器重啟策略
yaml中字段設置:spec.restartPolicy
Always:當Pod中的容器退出時,總是重啟容器,無論容器退出狀態(tài)碼如何。是默認的容器重啟策略
OnFailure:當Pod中的容器異常退出時(容器退出狀態(tài)碼為非0),才會重啟容器;正常退出的容器(容器退出狀態(tài)碼為0)不會重啟
Never:當Pod中的容器退出時,總是不重啟容器,無論容器退出狀態(tài)碼如何。
二、Pod進階
1.資源限制
spec.containers.resources.requests.cpu|memory 設置Pod容器創(chuàng)建時需要預留的資源量 容器應用最低配置 <= requests <= limits
spec.containers.resources.limits.cpu|memory 設置Pod容器能夠使用的資源量上限,如果容器進程內(nèi)存使用量超過limits.memory會引發(fā)OOM
CPU資源量單位: cpu個數(shù) 1 2 0.1 0.5 0.25 毫核 100m 250m 1000m 1500m
內(nèi)存資源量單位:整數(shù)(默認單位為字節(jié)) 2的底數(shù)單位(Ki Mi Gi Ti) 10的底數(shù)單位(K M G T)
kubectl describe -n 命名空間 pod <pod名稱> 查看Pod中每個容器的資源量限制
kubectl describe node <node名稱> 查看Node節(jié)點中的每個Pod或總的資源限制使用情況
2.Pod 容器的 3 種探針(健康檢查)
存活探針(livenessProbe):探測是否正常運行。如果探測失敗則kubelet殺掉容器(Pod容器會根據(jù)重啟策略決定是否重啟)
就緒探針(readinessProbe):探測Pod是否進入就緒狀態(tài)(ready狀態(tài)欄1/1),并做好接收service請求的準備。如果探測失敗則Pod會變成未就緒狀態(tài)(ready狀態(tài)欄0/1),service資源會刪除所關聯(lián)的端點(endpoints),并不再轉發(fā)請求給就緒探測失敗的Pod
啟動探針(startupProbe):探測容器內(nèi)的應用是否啟動成功。在啟動探針探測成功之前,存活探針和就緒探針都會暫時處于禁用狀態(tài),直到啟動探針探測成功
3.探針的 3 種探測方式
exec:在command字段中指定在容器內(nèi)執(zhí)行的Linux命令來進行探測,如果命令返回碼為0則認為探測成功,如果返回碼為非0則認為探測失敗
tcpSocket:向指定的Pod容器端口發(fā)送tcp連接請求,如果端口正確且tcp連接成功則認為探測成功,如果tcp連接失敗則認為探測失敗
httpGet:向指定的Pod容器端口和URL路徑發(fā)送http get請求,如果http響應狀態(tài)碼為2XX 3XX則認為探測成功,如果響應狀態(tài)碼為4XX 5XX則認為探測失敗
探針參數(shù)
initialDelaySeconds:指定容器啟動后延遲幾秒開始探測
periodSeconds:每天探測的間隔時間(秒數(shù))
failureThreshold:探測連續(xù)失敗幾次后判斷探測失敗
timeoutSeconds:指定探測超時等待時間(秒數(shù))
4.Pod 應用容器生命周期的啟動動作和退出動作
spec.containers.lifecycle.postStart 配置子字段 exec.command 設置 Pod 容器啟動時額外的命令操作
spec.containers.lifecycle.preStop 配置子字段 exec.command 設置 Pod 容器運行中被kubelet殺掉退出時所執(zhí)行的命令操作(不包含容器自行退出的情況)
文章來源:http://www.zghlxwxcb.cn/news/detail-641198.html
到了這里,關于K8S之Pod詳解與進階的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!