本章節(jié)將詳細(xì)介紹Pod資源的各種配置(yaml)和原理。
5.1 Pod介紹
5.1.1 Pod結(jié)構(gòu)
每個Pod中都可以包含一個或者多個容器岩臣,這些容器可以分為兩類:
-用戶程序所在的容器料睛,數(shù)量可多可少义图。
-Pause容器疾层,這是每個Pod都會有的一個根容器裁蚁,它的作用有兩個:
可以以它為依據(jù)苟径,評估整個Pod的健康狀態(tài)
可以在根容器上設(shè)置IP地址案站,其它容器都此IP(Pod IP),以實現(xiàn)Pod內(nèi)部的網(wǎng)路通信
這里是Pod內(nèi)部的通訊棘街,Pod的之間的通訊采用虛擬二層網(wǎng)絡(luò)技術(shù)來實現(xiàn)蟆盐,我們當(dāng)前環(huán)境用的是Flannel
5.1.2 Pod定義
下面是Pod的資源清單:
apiVersion: v1 #必選承边,版本號,例如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]? #容器的啟動命令列表,如不指定动壤,使用打包時使用的啟動命令
? ? 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)聽的端口號琼懊,默認(rèn)與Container相同
? ? ? protocol: string? ? #端口協(xié)議阁簸,支持TCP和UDP,默認(rèn)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ù)量
? ? lifecycle: #生命周期鉤子
postStart: #容器啟動后立即執(zhí)行此鉤子,如果執(zhí)行失敗,會根據(jù)重啟策略進(jìn)行重啟
preStop: #容器終止前執(zhí)行此鉤子,無論結(jié)果如何,容器都會終止
? ? livenessProbe:? #對Pod內(nèi)各容器健康檢查的設(shè)置,當(dāng)探測無響應(yīng)幾次后將自動重啟該容器
? ? ? 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)的超時時間吨拍,單位秒褪猛,默認(rèn)1秒
? ? ? periodSeconds: 0? ? ? ? #對容器監(jiān)控檢查的定期探測時間設(shè)置,單位秒羹饰,默認(rèn)10秒一次
? ? ? successThreshold: 0
? ? ? failureThreshold: 0
? ? ? securityContext:
? ? ? ? privileged: false
? restartPolicy: [Always | Never | OnFailure]? #Pod的重啟策略
? nodeName: <string> #設(shè)置NodeName表示將該Pod調(diào)度到指定到名稱的node節(jié)點上
? nodeSelector: obeject #設(shè)置NodeSelector表示將該Pod調(diào)度到包含這個label的node上
? imagePullSecrets: #Pull鏡像時使用的secret名稱伊滋,以key:secretkey格式指定
? - name: string
? hostNetwork: false? #是否使用主機網(wǎng)絡(luò)模式,默認(rèn)為false队秩,如果設(shè)置為true笑旺,表示使用宿主機網(wǎng)絡(luò)
? volumes:? #在該pod上定義共享存儲卷列表
? - name: string? ? #共享存儲卷名稱 (volumes類型有很多種)
? ? emptyDir: {}? ? ? #類型為emtyDir的存儲卷,與Pod同生命周期的一個臨時目錄馍资。為空值
? ? hostPath: string? #類型為hostPath的存儲卷筒主,表示掛載Pod所在宿主機的目錄
? ? ? path: string? ? ? ? ? ? ? #Pod所在宿主機的目錄,將被用于同期中mount的目錄
? ? secret:? ? ? #類型為secret的存儲卷,掛載集群與定義的secret對象到容器內(nèi)部
? ? ? scretname: string?
? ? ? items:? ?
? ? ? - key: string
? ? ? ? path: string
? ? configMap:? ? ? ? #類型為configMap的存儲卷乌妙,掛載預(yù)定義的configMap對象到容器內(nèi)部
? ? ? name: string
? ? ? items:
? ? ? - key: string
? ? ? ? path: string
#小提示:
# 在這里使兔,可通過一個命令來查看每種資源的可配置項
#? kubectl explain 資源類型? ? ? ? 查看某種資源可以配置的一級屬性
# kubectl explain 資源類型.屬性? ? 查看屬性的子屬性
[root@master ~]# kubectl explain pod
[root@master ~]# kubectl explain pod.metadata
在kubernetes中基本所有資源的一級屬性都是一樣的,主要包含5部分:
apiVersion? <string>? ? 版本藤韵,由kubernetes內(nèi)部定義虐沥,版本號必須可以用 kubectl api-versions 查詢到
kind <string>? ? ? ? ? ? ? ? 類型,由kubernetes內(nèi)部定義泽艘,版本號必須可以用 kubectl api-resources 查詢到
metadata? <Object>? ? 元數(shù)據(jù)置蜀,主要是資源標(biāo)識和說明,常用的有name悉盆、namespace盯荤、labels等
spec <Object>? ? ? ? ? ? ? 描述,這是配置中最重要的一部分焕盟,里面是對各種資源配置的詳細(xì)描述? ? ? ? ? ? ? ?
status? <Object>? ? ? ? ? ? 狀態(tài)信息秋秤,里面的內(nèi)容不需要定義,由kubernetes自動生成
kubectl apiversions
kubectl api-resources
kubectl get pods nginx-64777cd554-4k4pf -n dev -o yaml
在上面的屬性中脚翘,spec是接下來研究的重點灼卢,繼續(xù)看下它的常見子屬性:
containers? <[]Object>? ? ? 容器列表,用于定義容器的詳細(xì)信息
nodeName <String>? ? ? ? ? 根據(jù)nodeName的值將pod調(diào)度到指定的Node節(jié)點上
nodeSelector? <map[]>? ? ? 根據(jù)NodeSelector中定義的信息選擇將該Pod調(diào)度到包含這些label的Node 上
hostNetwork? <boolean>? ? 是否使用主機網(wǎng)絡(luò)模式来农,默認(rèn)為false鞋真,如果設(shè)置為true,表示使用宿主機網(wǎng)絡(luò)
volumes? ? ? <[]Object>? ? ? 存儲卷沃于,用于定義Pod上面掛在的存儲信息
restartPolicy <string>? ? ? 重啟策略涩咖,表示Pod在遇到故障的時候的處理策略
kubectl explain pods.spec