新聞中心
這篇文章主要介紹kubernetes中Pod是什么,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)建站專注于宜春網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供宜春營銷型網(wǎng)站建設(shè),宜春網(wǎng)站制作、宜春網(wǎng)頁設(shè)計、宜春網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造宜春網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供宜春網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
一:Pod 是什么
Pod是Kubernetes的最重要最基本的概念。它是能夠被創(chuàng)建,調(diào)度和管理的最小部署單元。一個Pod代表集群中一個運行的進程。
二:Pod的組成
一個Pod由一個特殊的根容器Pause容器和若干個緊密相關(guān)的用戶業(yè)務(wù)容器組成。
Pause容器作為Pod的根容器,它的狀態(tài)代表整個容器組的狀態(tài)。
Pod里的多個容器共享Pause容器的IP,共享Pause容器掛載的Volume.
Kubernetes為每個Pod都分配了唯一的IP地址,稱之為Pod IP,一個Pod里的多個容器共享Pod IP地址。Kubernetes要求底層網(wǎng)絡(luò)支持集群內(nèi)任意兩個Pod之間的TCP/IP直接通信,這通常采用虛擬二層網(wǎng)絡(luò)技術(shù)來實現(xiàn)。一個Pod里的容器與另外主機上的Pod容器能夠直接通信。
Pod里面的容器除了共享網(wǎng)絡(luò)和存儲外,還共享:
PID namespace:一個Pod內(nèi)的容器能夠看到對方容器的進程
IPC namespace:一個Pod內(nèi)的容器能夠使用POSIX消息隊列進行通信
UTS namespace : 一個Pod內(nèi)的容器共享主機名。
Pod一旦被創(chuàng)建,就會被放入的etcd中存儲,隨后會被Master調(diào)度到某個具體的Node上進行綁定,隨后該Pod被對應(yīng)的Node上的kubelet進程實例化一組相關(guān)的Docker容器并啟動起來。在默認情況下,當Pod里的某個容器停止時,Kubernetes會重啟整個Pod;如果Pod所在的Node宕機,則會將這個Node上的所有Pod重新調(diào)度到其他節(jié)點上。
Event是一個事件的記錄,記錄事件的最早產(chǎn)生時間,最后重現(xiàn)時間,重復(fù)次數(shù),發(fā)起者,類型以及導(dǎo)致此事件的原因等眾多信息。 Pod同樣有Event記錄,可以用來定位問題查找原因。
三:Pod的生命周期
Pod的重啟策略(RestartPolicy)應(yīng)用于Pod內(nèi)所有的容器,并且僅在Pod所處的Node上由kubelet進行判斷和重啟操作。
Pod的重啟策略包括Always、OnFailure及Nerver,默認值為Always。
四:Pod的健康檢查
對Pod的健康檢查可以通過兩類探針來檢查:LivenessProbe和ReadinessProbe:
LivenessProbe探針:用于判斷容器是否存活(running狀態(tài)),如果LivenessProbe探針探測到容器不健康,則kubelet殺掉該容器,并根據(jù)容器的重啟策略做響應(yīng)處理.
ReadinessProbe探針:用于判斷容器是否啟動完成(ready狀態(tài)),可以接受請求。如果ReadinessProbe探針探測失敗,則Pod的狀態(tài)被修改。Endpoint Controller將從service的Endpoint中刪除包含該容器所在的Pod的Endpoint。
kubelet定制執(zhí)行LivenessProbe探針來診斷容器的健康狀況,有三種方式:
1.ExecAction:在容器內(nèi)部執(zhí)行一個命令,如果該命令的返回值為0,則表示容器健康。
2.TCPSocketAction:通過容器ip地址和端口號執(zhí)行TCP檢查,如果能夠建立tcp連接表明容器健康。
3.HTTPGetAction:通過容器Ip地址、端口號及路徑調(diào)用http get方法,如果響應(yīng)的狀態(tài)嗎大于200且小于400,則認為容器健康。
五:Pod的調(diào)度
在Kubernetes系統(tǒng)中,Pod在大部分場景下都只是容器的載體而已,通常需要通過RC、Deployment、DaemonSet、Job等對象來完成Pod的調(diào)度和自動控制功能。
全自動調(diào)度:
NodeSelector:定向調(diào)度
Kubernetes Master上的scheduler服務(wù)(kube-Scheduler進程)負責(zé)實現(xiàn)Pod的調(diào)度,整個過程通過一系列復(fù)雜的算法,最終為每個Pod計算出一個最佳的目標節(jié)點,通常我們無法知道Pod最終會被調(diào)度到哪個節(jié)點上。實際情況中,我們需要將Pod調(diào)度到我們指定的節(jié)點上,可以通過Node的標簽和pod的nodeSelector屬性相匹配來達到目的。
NodeAffinity:親和性調(diào)度
該調(diào)度策略是將來替換NodeSelector的新一代調(diào)度策略。由于NodeSelector通過Node的Label進行精確匹配,所有NodeAffinity增加了In、NotIn、Exists、DoesNotexist、Gt、Lt等操作符來選擇Node。調(diào)度側(cè)露更加靈活
DaemonSet特定場景調(diào)度:
如
在每個Node上運行一個日志采集程序,例如fluentd或者logstach。
批處理調(diào)度:
六:Pod的文件配置
Kubernetes里的所有資源對象都采用yaml或者JSON格式的文件來定義或描述,下面是Pod資源定義文件的模板:
# yaml格式的pod定義文件完整內(nèi)容:
apiVersion: v1 #必選,版本號,例如v1
kind: Pod #必選,Pod
metadata: #必選,元數(shù)據(jù)
name: string #必選,Pod名稱
namespace: string #必選,Pod所屬的命名空間
labels: #自定義標簽
- name: string #自定義標簽名字
annotations: #自定義注釋列表
- name: string
spec: #必選,Pod中容器的詳細定義
containers: #必選,Pod中容器列表
- name: string #必選,容器名稱
image: string #必選,容器的鏡像名稱
imagePullPolicy: [Always | Never | IfNotPresent] #獲取鏡像的策略 Alawys表示下載鏡像 IfnotPresent表示優(yōu)先使用本地鏡像,否則下載鏡像,Nerver表示僅使用本地鏡像
command: [string] #容器的啟動命令列表,如不指定,使用打包時使用的啟動命令
args: [string] #容器的啟動命令參數(shù)列表
workingDir: string #容器的工作目錄
volumeMounts: #掛載到容器內(nèi)部的存儲卷配置
- name: string #引用pod定義的共享存儲卷的名稱,需用volumes[]部分定義的的卷名
mountPath: string #存儲卷在容器內(nèi)mount的絕對路徑,應(yīng)少于512字符
readOnly: boolean #是否為只讀模式
ports: #需要暴露的端口庫號列表
- name: string #端口號名稱
containerPort: int #容器需要監(jiān)聽的端口號
hostPort: int #容器所在主機需要監(jiān)聽的端口號,默認與Container相同
protocol: string #端口協(xié)議,支持TCP和UDP,默認TCP
env: #容器運行前需設(shè)置的環(huán)境變量列表
- name: string #環(huán)境變量名稱
value: string #環(huán)境變量的值
resources: #資源限制和請求的設(shè)置
limits: #資源限制的設(shè)置
cpu: string #Cpu的限制,單位為core數(shù),將用于docker run --cpu-shares參數(shù)
memory: string #內(nèi)存限制,單位可以為Mib/Gib,將用于docker run --memory參數(shù)
requests: #資源請求的設(shè)置
cpu: string #Cpu請求,容器啟動的初始可用數(shù)量
memory: string #內(nèi)存清楚,容器啟動的初始可用數(shù)量
livenessProbe: #對Pod內(nèi)個容器健康檢查的設(shè)置,當探測無響應(yīng)幾次后將自動重啟該容器,檢查方法有exec、httpGet和tcpSocket,對一個容器只需設(shè)置其中一種方法即可
exec: #對Pod容器內(nèi)檢查方式設(shè)置為exec方式
command: [string] #exec方式需要制定的命令或腳本
httpGet: #對Pod內(nèi)個容器健康檢查方法設(shè)置為HttpGet,需要制定Path、port
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
tcpSocket: #對Pod內(nèi)個容器健康檢查方式設(shè)置為tcpSocket方式
port: number
initialDelaySeconds: 0 #容器啟動完成后首次探測的時間,單位為秒
timeoutSeconds: 0 #對容器健康檢查探測等待響應(yīng)的超時時間,單位秒,默認1秒
periodSeconds: 0 #對容器監(jiān)控檢查的定期探測時間設(shè)置,單位秒,默認10秒一次
successThreshold: 0
failureThreshold: 0
securityContext:
privileged: false
restartPolicy: [Always | Never | OnFailure] #Pod的重啟策略,Always表示一旦不管以何種方式終止運行,kubelet都將重啟,OnFailure表示只有Pod以非0退出碼退出才重啟,Nerver表示不再重啟該Pod
nodeSelector: obeject #設(shè)置NodeSelector表示將該Pod調(diào)度到包含這個label的node上,以key:value的格式指定
imagePullSecrets: #Pull鏡像時使用的secret名稱,以key:secretkey格式指定
- name: string
hostNetwork: false #是否使用主機網(wǎng)絡(luò)模式,默認為false,如果設(shè)置為true,表示使用宿主機網(wǎng)絡(luò)
volumes: #在該pod上定義共享存儲卷列表
- name: string #共享存儲卷名稱 (volumes類型有很多種)
emptyDir: {} #類型為emtyDir的存儲卷,與Pod同生命周期的一個臨時目錄。為空值
hostPath: string #類型為hostPath的存儲卷,表示掛載Pod所在宿主機的目錄
path: string #Pod所在宿主機的目錄,將被用于同期中mount的目錄
secret: #類型為secret的存儲卷,掛載集群與定義的secre對象到容器內(nèi)部
scretname: string
items:
- key: string
path: string
configMap: #類型為configMap的存儲卷,掛載預(yù)定義的configMap對象到容器內(nèi)部
name: string
items:
- key: string
path: string
以上是“kubernetes中Pod是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當前標題:kubernetes中Pod是什么
路徑分享:http://www.dlmjj.cn/article/pgcgci.html