本章節(jié)將詳細(xì)介紹Pod資源的各種配置(yaml)和原理。
5.1 Pod介紹
5.1.1 Pod結(jié)構(gòu)
每個(gè)Pod中都可以包含一個(gè)或者多個(gè)容器缰泡,這些容器可以分為兩類:
- 用戶程序所在的容器,數(shù)量可多可少验靡。
- Pause容器演痒,這是每個(gè)Pod都會(huì)有的一個(gè)根容器,它的作用有兩個(gè):
可以以它為依據(jù)杠步,評(píng)估整個(gè)Pod的健康狀態(tài)
可以在根容器上設(shè)置IP地址,其它容器都此IP(Pod IP)榜轿,以實(shí)現(xiàn)Pod內(nèi)部的網(wǎng)路通信
這里是Pod內(nèi)部的通訊幽歼,Pod的之間的通訊采用虛擬二層網(wǎng)絡(luò)技術(shù)來實(shí)現(xiàn),我們當(dāng)前環(huán)境用的是Flannel
5.1.2 Pod定義
下面是Pod的資源清單:
apiVersion: v1 #必選谬盐,版本號(hào)甸私,例如v1
kind: Pod #必選,資源類型飞傀,例如 Pod
metadata: #必選皇型,元數(shù)據(jù)
name: string #必選,Pod名稱
namespace: string #Pod所屬的命名空間,默認(rèn)為"default"
labels: #自定義標(biāo)簽列表
- name: string
spec: #必選砸烦,Pod中容器的詳細(xì)定義
containers: #必選弃鸦,Pod中容器列表
- name: string #必選,容器名稱
image: string #必選幢痘,容器的鏡像名稱
imagePullPolicy: [ Always|Never|IfNotPresent ] #獲取鏡像的策略
command: [string] #容器的啟動(dòng)命令列表唬格,如不指定,使用打包時(shí)使用的啟動(dòng)命令
args: [string] #容器的啟動(dòng)命令參數(shù)列表
workingDir: string #容器的工作目錄
volumeMounts: #掛載到容器內(nèi)部的存儲(chǔ)卷配置
- name: string #引用pod定義的共享存儲(chǔ)卷的名稱颜说,需用volumes[]部分定義的的卷名
mountPath: string #存儲(chǔ)卷在容器內(nèi)mount的絕對(duì)路徑购岗,應(yīng)少于512字符
readOnly: boolean #是否為只讀模式
ports: #需要暴露的端口庫號(hào)列表
- name: string #端口的名稱
containerPort: int #容器需要監(jiān)聽的端口號(hào)
hostPort: int #容器所在主機(jī)需要監(jiān)聽的端口號(hào),默認(rèn)與Container相同
protocol: string #端口協(xié)議脑沿,支持TCP和UDP藕畔,默認(rèn)TCP
env: #容器運(yùn)行前需設(shè)置的環(huán)境變量列表
- name: string #環(huán)境變量名稱
value: string #環(huán)境變量的值
resources: #資源限制和請(qǐng)求的設(shè)置
limits: #資源限制的設(shè)置
cpu: string #Cpu的限制马僻,單位為core數(shù)庄拇,將用于docker run --cpu-shares參數(shù)
memory: string #內(nèi)存限制,單位可以為Mib/Gib韭邓,將用于docker run --memory參數(shù)
requests: #資源請(qǐng)求的設(shè)置
cpu: string #Cpu請(qǐng)求措近,容器啟動(dòng)的初始可用數(shù)量
memory: string #內(nèi)存請(qǐng)求,容器啟動(dòng)的初始可用數(shù)量
lifecycle: #生命周期鉤子
postStart: #容器啟動(dòng)后立即執(zhí)行此鉤子,如果執(zhí)行失敗,會(huì)根據(jù)重啟策略進(jìn)行重啟
preStop: #容器終止前執(zhí)行此鉤子,無論結(jié)果如何,容器都會(huì)終止
livenessProbe: #對(duì)Pod內(nèi)各容器健康檢查的設(shè)置,當(dāng)探測(cè)無響應(yīng)幾次后將自動(dòng)重啟該容器
exec: #對(duì)Pod容器內(nèi)檢查方式設(shè)置為exec方式
command: [string] #exec方式需要制定的命令或腳本
httpGet: #對(duì)Pod內(nèi)個(gè)容器健康檢查方法設(shè)置為HttpGet女淑,需要制定Path瞭郑、port
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
tcpSocket: #對(duì)Pod內(nèi)個(gè)容器健康檢查方式設(shè)置為tcpSocket方式
port: number
initialDelaySeconds: 0 #容器啟動(dòng)完成后首次探測(cè)的時(shí)間,單位為秒
timeoutSeconds: 0 #對(duì)容器健康檢查探測(cè)等待響應(yīng)的超時(shí)時(shí)間鸭你,單位秒屈张,默認(rèn)1秒
periodSeconds: 0 #對(duì)容器監(jiān)控檢查的定期探測(cè)時(shí)間設(shè)置擒权,單位秒,默認(rèn)10秒一次
successThreshold: 0
failureThreshold: 0
securityContext:
privileged: false
restartPolicy: [Always | Never | OnFailure] #Pod的重啟策略
nodeName: <string> #設(shè)置NodeName表示將該P(yáng)od調(diào)度到指定到名稱的node節(jié)點(diǎn)上
nodeSelector: obeject #設(shè)置NodeSelector表示將該P(yáng)od調(diào)度到包含這個(gè)label的node上
imagePullSecrets: #Pull鏡像時(shí)使用的secret名稱阁谆,以key:secretkey格式指定
- name: string
hostNetwork: false #是否使用主機(jī)網(wǎng)絡(luò)模式碳抄,默認(rèn)為false,如果設(shè)置為true场绿,表示使用宿主機(jī)網(wǎng)絡(luò)
volumes: #在該pod上定義共享存儲(chǔ)卷列表
- name: string #共享存儲(chǔ)卷名稱 (volumes類型有很多種)
emptyDir: {} #類型為emtyDir的存儲(chǔ)卷剖效,與Pod同生命周期的一個(gè)臨時(shí)目錄。為空值
hostPath: string #類型為hostPath的存儲(chǔ)卷焰盗,表示掛載Pod所在宿主機(jī)的目錄
path: string #Pod所在宿主機(jī)的目錄璧尸,將被用于同期中mount的目錄
secret: #類型為secret的存儲(chǔ)卷,掛載集群與定義的secret對(duì)象到容器內(nèi)部
scretname: string
items:
- key: string
path: string
configMap: #類型為configMap的存儲(chǔ)卷熬拒,掛載預(yù)定義的configMap對(duì)象到容器內(nèi)部
name: string
items:
- key: string
path: string
小提示:
# 在這里爷光,可通過一個(gè)命令來查看每種資源的可配置項(xiàng)
# kubectl **explain** 資源類型 查看某種資源可以配置的一級(jí)屬性
# kubectl explain 資源類型.屬性 查看屬性的子屬性
[root@master ~]# kubectl explain pod
[root@master ~]# kubectl explain pod.metadata
在kubernetes中基本所有資源的一級(jí)屬性都是一樣的,主要包含5部分:
apiVersion <string> 版本澎粟,由kubernetes內(nèi)部定義瞎颗,版本號(hào)必須可以用 kubectl api-versions 查詢到
kind <string> 類型,由kubernetes內(nèi)部定義捌议,版本號(hào)必須可以用 kubectl api-resources 查詢到
metadata <Object> 元數(shù)據(jù)哼拔,主要是資源標(biāo)識(shí)和說明,常用的有name瓣颅、namespace倦逐、labels等
>
> spec <Object> 描述,這是配置中最重要的一部分宫补,里面是對(duì)各種資源配置的詳細(xì)描述
>
> status <Object> 狀態(tài)信息檬姥,里面的內(nèi)容不需要定義,由kubernetes自動(dòng)生成
kubectl apiversions
kubectl api-resources
kubectl get pods nginx-64777cd554-4k4pf -n dev -o yaml
在上面的屬性中粉怕,spec是接下來研究的重點(diǎn)健民,繼續(xù)看下它的常見子屬性:
containers <[]Object> 容器列表,用于定義容器的詳細(xì)信息
nodeName <String> 根據(jù)nodeName的值將pod調(diào)度到指定的Node節(jié)點(diǎn)上
nodeSelector <map[]> 根據(jù)NodeSelector中定義的信息選擇將該P(yáng)od調(diào)度到包含這些label的Node 上
hostNetwork <boolean> 是否使用主機(jī)網(wǎng)絡(luò)模式贫贝,默認(rèn)為false秉犹,如果設(shè)置為true,表示使用宿主機(jī)網(wǎng)絡(luò)
volumes <[]Object> 存儲(chǔ)卷稚晚,用于定義Pod上面掛在的存儲(chǔ)信息
restartPolicy <string> 重啟策略崇堵,表示Pod在遇到故障的時(shí)候的處理策略
kubectl explain pods.spec