Pod詳解
Pod結構
在上述中可以看到pod內部可以包含一個或者多個容器,容器類型分為兩部分
- 用戶容器:用戶以容器形式運行的程序,數量可以多可以少
- Pause:Pod根容器,每個pod都會擁有
- 以根容器為依據評估整個pod健康狀態
- 可以在根容器上設置IP地址,其它容器都共享此IP(Pod的IP),以實現Pod內部的網絡通信
'''
例如根容器IP地址為10.224.1.1
用戶容器一運行nginx服務暴露80端口
用戶容器二運行mysql服務暴露3306端口
此時如果訪問nginx就可以使用10.224.1.1:80進行訪問
此時如果訪問mysql就可以使用10.224.1.1:3306進行訪問
'''
pod定義
pod資源清單
apiVersion: v1 #必選,版本號,例如v1
kind: Pod #必選,資源類型,例如 Pod
metadata: #必選,元數據
name: string #必選,Pod名稱
namespace: string #Pod所屬的命名空間,默認為"default"
labels: #自定義標簽列表
- name: string
spec: #必選,Pod中容器的詳細定義
containers: #必選,Pod中容器列表
- name: string #必選,容器名稱
image: string #必選,容器的鏡像名稱
imagePullPolicy: [ Always|Never|IfNotPresent ] #獲取鏡像的策略
command: [string] #容器的啟動命令列表,如不指定,使用打包時使用的啟動命令
args: [string] #容器的啟動命令參數列表
workingDir: string #容器的工作目錄
volumeMounts: #掛載到容器內部的存儲卷配置
- name: string #引用pod定義的共享存儲卷的名稱,需用volumes[]部分定義的的卷名
mountPath: string #存儲卷在容器內mount的絕對路徑,應少於512字符
readOnly: boolean #是否為只讀模式
ports: #需要暴露的端口庫號列表
- name: string #端口的名稱
containerPort: int #容器需要監聽的端口號
hostPort: int #容器所在主機需要監聽的端口號,默認與Container相同
protocol: string #端口協議,支持TCP和UDP,默認TCP
env: #容器運行前需設置的環境變量列表
- name: string #環境變量名稱
value: string #環境變量的值
resources: #資源限制和請求的設置
limits: #資源限制的設置
cpu: string #Cpu的限制,單位為core數,將用於docker run --cpu-shares參數
memory: string #內存限制,單位可以為Mib/Gib,將用於docker run --memory參數
requests: #資源請求的設置
cpu: string #Cpu請求,容器啟動的初始可用數量
memory: string #內存請求,容器啟動的初始可用數量
lifecycle: #生命周期鈎子
postStart: #容器啟動后立即執行此鈎子,如果執行失敗,會根據重啟策略進行重啟
preStop: #容器終止前執行此鈎子,無論結果如何,容器都會終止
livenessProbe: #對Pod內各容器健康檢查的設置,當探測無響應幾次后將自動重啟該容器
exec: #對Pod容器內檢查方式設置為exec方式
command: [string] #exec方式需要制定的命令或腳本
httpGet: #對Pod內個容器健康檢查方法設置為HttpGet,需要制定Path、port
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
tcpSocket: #對Pod內個容器健康檢查方式設置為tcpSocket方式
port: number
initialDelaySeconds: 0 #容器啟動完成后首次探測的時間,單位為秒
timeoutSeconds: 0 #對容器健康檢查探測等待響應的超時時間,單位秒,默認1秒
periodSeconds: 0 #對容器監控檢查的定期探測時間設置,單位秒,默認10秒一次
successThreshold: 0
failureThreshold: 0
securityContext:
privileged: false
restartPolicy: [Always | Never | OnFailure] #Pod的重啟策略
nodeName: <string> #設置NodeName表示將該Pod調度到指定到名稱的node節點上
nodeSelector: obeject #設置NodeSelector表示將該Pod調度到包含這個label的node上
imagePullSecrets: #Pull鏡像時使用的secret名稱,以key:secretkey格式指定
- name: string
hostNetwork: false #是否使用主機網絡模式,默認為false,如果設置為true,表示使用宿主機網絡
volumes: #在該pod上定義共享存儲卷列表
- name: string #共享存儲卷名稱 (volumes類型有很多種)
emptyDir: {} #類型為emtyDir的存儲卷,與Pod同生命周期的一個臨時目錄。為空值
hostPath: string #類型為hostPath的存儲卷,表示掛載Pod所在宿主機的目錄
path: string #Pod所在宿主機的目錄,將被用於同期中mount的目錄
secret: #類型為secret的存儲卷,掛載集群與定義的secret對象到容器內部
scretname: string
items:
- key: string
path: string
configMap: #類型為configMap的存儲卷,掛載預定義的configMap對象到容器內部
name: string
items:
- key: string
path: string
pod資源可配置項
# 查看某種資源可以配置的一級配置 kubectl explain 資源類型
[root@master ~]# kubectl explain pod
# 查看子屬性 kubectl explain 資源類型.屬性
[root@master ~]# kubectl explain pod.metadata
在kubernetes中基本所有資源的一級屬性都是一樣的,主要包含5個部分:
-
apiVersion
:版本,有kubernetes內部定義,版本號必須用kubectl api-versions查詢。 -
kind
:類型,有kubernetes內部定義,類型必須用kubectl api-resources查詢。 -
metadata
-
spec
-
status
在上面的屬性中,spec是接下來研究的重點,繼續看下它的常見子屬性:
-
containers <[]Object>:容器列表,用於定義容器的詳細信息。
-
nodeName
:根據nodeName的值將Pod調度到指定的Node節點上。 -
nodeSelector <map[]> :根據NodeSelector中定義的信息選擇該Pod調度到包含這些Label的Node上。
-
hostNetwork
:是否使用主機網絡模式,默認為false,如果設置為true,表示使用宿主機網絡。 -
volumes <[]Object> :存儲卷,用於定義Pod上面掛載的存儲信息。
-
restartPolicy
:重啟策略,表示Pod在遇到故障的時候的處理策略。