控制器管理的 Pod:
生產環境中可以用控制器創建和管理多個 pod。控制器在 pod 失敗的情況下可以處理副本、更新以
及自動修復。控制器可以指定創建的 pod 副本數,使其管理的 pod 始終維持在指定副本數量,例如,如
果某個節點發生故障,則控制器會注意到該節點上的 Pod 已停止工作,并創建一個新的 pod 替換有故障
的 Pod。調度程序將替換的 Pod 放置到健康的節點上。可以使用 Deployment、Statefulset、Daemonset、Job 等控制器管理 pod。如何通過控制器管理 Pod?
控制器是通過創建 pod 模板來創建和管理 pod 的,PodTemplate 是用于創建 pod 的規范,并且
包含在 Deployment 等控制器中。每個控制器使用自己內部的 Pod 模板來創建實際的 Pod。下面的示
例是一個簡單的 Job 的清單,包含一個 podtemplate,這個是用來生成 pod 的模板。該 Pod 中的容器
會打印一條消息,然后暫停。
pod資源清單基礎配置
在創建 pod 的時候,可以通過寫資源清單文件去實現,Pod 資源清單文件中有幾個重要的部分:
apiVersion、kind、metadata、spec 以及 status,其中 apiVersion 和 kind 是比較固定的,status是運行時的狀態,所以最重要的就是 metadata 和 spec 兩個部分。
#查看 pod 中包含哪些字段,可以使用 kubectl explain 命令:[root@god63 ~]# kubectl explain pods
apiVersion: v1
#屬性名:屬性值;
v1 表示我們定義的 pod 屬于 k8s 哪個 api 的版本,一般 apiversion 后面的值的格式是
group/version,如果 group 省略,表示的是核心組,那么 v1 就是核心組上的資源。
#查看 k8s 中有哪些 api 版本[root@xuegod63 ~]# kubectl api-versions
上面可以顯示 api 的群組和版本,v1 是核心群組,同一個組有很多版本,為什么分組進行管理:如
果不分組,那么更新一個,所有的都更新,分組以后,某一個組改變了,只需要改變一個,其他不需要改
變;分組之后同一個群組的不通版本號也能并存;因為 pod 是最核心的資源,因此屬于核心群組 v1。控
制器 deployment,replicatset 都屬于應用程序廣義的核心資源,屬于 apps/v1 這個群組
注:apps 有下面三個版本,v1 是表示測試通過的穩定版本,beta1 是公測版本,不穩定,有可能
被改變,alpha 內測版本,不能使用
apps/v1
apps/v1beta1
apps/v1beta2
kind: Pod
資源類別,告訴我們要創建的資源是什么?如創建一個 pod 還是 service 還是 deployment,
這些不能隨意定義,一般都是內建的或者用戶自定義的,需要按照固定語法格式自定義。
metadata
元數據,元數據下面可以定義資源的名字和所屬的名稱空間,以及資源的標簽,通過 kubectl
explain 可以查看元數據下的所有子字段:
[root@god63 ~]# kubectl explain pods.metadata
KIND: Pod
VERSION: v1
RESOURCE: metadata?
DESCRIPTION:
Standard object's metadata. More info:https://git.k8s.io/community/contributors/devel/sig-architecture/api-
conventions.md#metadata
ObjectMeta is metadata that all persisted resources must have, whichincludes all objects users must create.
FIELDS: #這里我只是列舉了一些常用的字段annotations <map[string]string> #資源的注解
Annotations is an unstructured key value map stored with a resource that
may be set by external tools to store and retrieve arbitrary metadata. They
are not queryable and should be preserved when modifying objects. More
info: http://kubernetes.io/docs/user-guide/annotations
labels <map[string]string> #標簽,給定義的資源打個標簽
Map of string keys and values that can be used to organize and categorize
(scope and select) objects. May match selectors of replication controllers
and services. More info: http://kubernetes.io/docs/user-guide/labels
name <string> #名字,給定義的資源起個名字
Name must be unique within a namespace. Is required when creating
resources, although some resources may allow a client to request the
generation of an appropriate name automatically. Name is primarily intended
for creation idempotence and configuration definition. Cannot be updated.
More info: http://kubernetes.io/docs/user-guide/identifiers#names
namespace <string> #創建資源的時候分配的名稱空間
Namespace defines the space within which each name must be unique. An
spec(非常重要的字段)
spec 中需要嵌套很多二級字段和三級字段,不同的資源類型 spec 需要嵌套的字段各不相同
如果某個字段的標題屬性是 require(必選字段),剩下的都是可選字段,我們系統會給它賦予
默認值,不同的資源類型 spec 值是各不相同的,它是用戶定義的期望狀態。[root@god63 ~]# kubectl explain pods.spec
資源清單編寫
#查看pod資源包含哪些字段
[root@god63 ~]#kubectl explain pods
KIND:???? Pod
VERSION:? v1
DESCRIPTION:
???? Pod is a collection of containers that canrun on a host. This resource is
???? created by clients and scheduled ontohosts.
FIELDS:
?? apiVersion?????
?? kind
?? metadata ?#object表示對象,那么說明里面會嵌套很多字段
? spec?
?? status???? ? #狀態,不需要我們定義
#查看pod資源中metadata字段如何定義
[root@god63 ~]#kubectl explain pods.metadata
KIND:???? Pod
VERSION:? v1
RESOURCE: metadata
DESCRIPTION:
???? Standard object's metadata. More info:
???? https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
???? ObjectMeta is metadata that all persistedresources must have, which
???? includes all objects users must create.
FIELDS:
?? annotations?? #map表示由眾多的key/value組成一個json數組
?? clusterName?
?? creationTimestamp?????
?? deletionGracePeriodSeconds?????
?? deletionTimestamp?????
?? finalizers <[]string>
?? generateName?????
?? generation????
?? labels?????
?? managedFields????? <[]Object>#對象列表,每個對象可以有多個字段,這個對象也可以有多個
?? name?????
?? namespace????
?? ownerReferences?? <[]Object>
?? resourceVersion???
?? selfLink??
?? uid??
? 從0開始創建一個pod資源
kubectl? explain pods
#創建一個demo-pod.yaml文件,寫入如下內容
[root@god63 ~]# cat demo-pod.yaml
apiVersion: v1? #pod屬于k8s核心組v1
kind: Pod? #創建的是一個Pod資源
metadata:? #元數據
? name: demo-pod? #pod名字
? namespace: default? #pod所屬的名稱空間
? labels:
? ? app: myapp? #pod具有的標簽
? ? env: dev? ? ? #pod具有的標簽
spec:
? containers:? ? ? #定義一個容器,容器是對象列表,下面可以有多個name
? - name:? tomcat-pod-java? #容器的名字
? ? ports:
? ? - containerPort: 8080
? ? image: tomcat:8.5-jre8-alpine? #容器使用的鏡像
? ? imagePullPolicy: IfNotPresent
? - name: busybox
? ? image: busybox:latest
? ? command:? #command是一個列表,定義的時候下面的參數加橫線
? ? - "/bin/sh"
? ? - "-c"
? ? - "sleep 3600"
#更新yaml文件
[root@god63 ~]# kubectl apply -f demo-pod.yaml
pod/demo-pod created
#查看剛才創建的pod
[root@god63 ~]# kubectl get pods
NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE
demo-pod? ? ? ? ? ? ? ? ? ? ? ? ? ? 2/2? ? Running? 0? ? ? ? ? 22s
#查看pod的詳細信息
[root@god63 ~]# kubectl describe pods demo-pod
Name:? ? ? ? demo-pod
Namespace:? ? default
…
Containers:
? tomcat-pod-java:
? ? Image:? ? ? ? ? tomcat:8.5-jre8-alpine
? ? Port:? ? ? ? ? 8080/TCP
? ? Host Port:? ? ? 0/TCP
? busybox:
? ? Image:? ? ? ? busybox:latest
? ? Port:? ? ? ? ? <none>
? ? Host Port:? ? <none>
? ? Command:
? ? ? /bin/sh
? ? ? -c
? ? ? sleep 3600
…
Normal? Scheduled? 78s? default-scheduler? Successfully assigned default/demo-pod to node1
? Normal? Pulled? ? 78s? kubelet? ? ? ? ? ? Container image "tomcat:8.5-jre8-alpine" already present on machine
? Normal? Created? ? 78s? kubelet? ? ? ? ? ? Created container tomcat-pod-java
? Normal? Started? ? 77s? kubelet? ? ? ? ? ? Started container tomcat-pod-java
? Normal? Pulling? ? 77s? kubelet? ? ? ? ? ? Pulling image "busybox:latest"
? Normal? Pulled? ? 74s? kubelet? ? ? ? ? ? Successfully pulled image "busybox:latest" in 3.717087525s
? Normal? Created? ? 74s? kubelet? ? ? ? ? ? Created container busybox
? Normal? Started? ? 74s? kubelet? ? ? ? ? ? Started container busybox
#查看pod中busybox容器的日志
[root@god63 ~]# kubectl logs demo-pod -c busybox
#以交互式形式進入到pod中的busybox容器
[root@god63 ~]# kubectl exec -it demo-pod -c busybox -- /bin/sh
/ # exit
#刪除demo-pod.yaml中定義的資源
方法一:
[root@god63 ~]# kubectl delete -f demo-pod.yaml
pod "demo-pod" deleted
方法二:
[root@god63 ~]# kubectl delete pods demo-pod
8.4? pod.spec字段詳解
[root@god63 ~]# kubectl explain pods.spec
FIELDS:
? containers <[]Object> -required-
? ? List of containers belonging to the pod. Containers cannot currently be
? ? added or removed. There must be at least one container in a Pod. Cannot be
? ? updated.
#containers是一個對象列表,下面的值是由多個key:value鍵值對組成的
[root@god63 ~]# kubectl explain pods.spec.containers
KIND:? ? Pod
VERSION:? v1
RESOURCE: containers <[]Object>
DESCRIPTION:
? ? List of containers belonging to the pod. Containers cannot currently be
? ? added or removed. There must be at least one container in a Pod. Cannot be
? ? updated.
? ? A single application container that you want to run within a pod.
FIELDS:
? args <[]string>
? command <[]string>
? image <string>
? imagePullPolicy <string>
? ? Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always
? ? if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated.
? ? More info:
? ? https://kubernetes.io/docs/concepts/containers/images#updating-images
? name <string> -required-
#imagePullPolicy: <string>? #鏡像拉取策略,有下面幾種方式:
Always,Never,IfNotPresent
Always:無論本地有沒有鏡像,都是是到docker hub倉庫下載
Never:本地有鏡像就用本地的,本地沒有鏡像就等著,不從倉庫下載
IfNotPresent:本地有鏡像,就使用本地的,本地沒有鏡像就從倉庫下載
[root@god63 ~]# kubectl explain pods.spec.containers.ports
KIND:? ? Pod
VERSION:? v1
RESOURCE: ports <[]Object>
DESCRIPTION:
FIELDS:
? containerPort <integer> -required-
? hostIP <string>
? hostPort <integer>
? name <string>
? protocol <string>
#ports是一個對象列表,定義容器內需要暴露的端口時,可以是多個,而且每一個端口還應該有多個屬性來定義,比如說端口的名稱(給端口起個名字,接下來可以根據端口名稱去引用它)。端口號,協議,暴露端口號只是給系統添加一個額外信息的,并不一定是真的暴露;如果我們定義這個字段,客戶可以知道我們的應用程序對外提供的端口是哪些,就算是這沒指定暴露的端口,pod中的應用程序的端口也是暴露出去的。
在ports字段下可以配置上面幾個端口,一般我們只需要指定containerPort(容器端口)即可;有必要的話也可以指定name(由字母,數字或者下劃線組成);protocol(默認協議是tcp);hostIP(綁定節點ip,這個一般不需要指定,因為pod調度到哪個節點我們不確定的,就沒法指定節點ip,如果要指定,只需要指定0.0.0.0這個ip即可)
舉例子說明:
ports:
- name: http
containerPort:80
- name:htpps
containerPort:443
#ports是一個列表對象,下面可以有多個值,下面的值不需要縮進,前面加上-即可
[root@god63 ~]# kubectl explain pods.spec.containers.command
KIND:? ? Pod
VERSION:? v1
FIELD:? ? command <[]string>
[root@god63 ~]# kubectl explain pods.spec.containers.args
KIND:? ? Pod
VERSION:? v1
FIELD:? ? args <[]string>
command :表示要運行的程序,但是不提供/bin/sh命令行,需要我們自己指定,如果只定義了command,而沒有定義args,那么只運行command后面的指令,而不運行entrypoint,cmd等指令;如果沒有提供command,而我們docker鏡像在制作時有entrypoint指定,那么它就會運行鏡像里的entrypoint的命令;
command:
- "/bin/sh" #這個就是自己指定的/bin/sh
- "-c"
- "sleep 3600"
args:表示傳遞參數的,如果沒有給args,而我們鏡像中又有entrypoint指令,又有cmd指令,那么鏡像自己cmd指令給定的參數將作為參數傳遞給entrypoint后面的代碼;如果給定了args,那么我們鏡像中cmd字段后面所指定的參數將不再作為參數傳遞,而傳遞的參數是args中所定義的內容。
https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container
這個鏈接里列舉了command和args的關系,相關的關系圖如下:
1:如果只定義了鏡像里的entrypoint,鏡像里的cmd,那么我們運行pod容器時使用的命令和參數就是鏡像里的命令和參數
2:如果我們定義了容器的command,那么我們pod使用的命令就是command后面的命令
3:如果我們只定義了args參數,那么我們pod使用的命令就是鏡像的entrypoint+args參數
4:如果我們定義了command的命令和args的參數,那么我們運行pod時使用的就是command命令+args參數
8.5? label標簽使用技巧
8.5.1? pod資源標簽使用技巧
在k8s之上,每一種資源都可以有一個標簽,現實中用到的pod數量可能越來越多,我們期望能夠分類進行管理,最簡單和直接的效果就是把pod分成很多不同的小組,無論對于開發還是運維來講都能顯著提高管理效率,更何況我們控制器,我們service資源也需要使用標簽來識別它們所管控或關聯到的資源,當我們給pod或者任何資源設定標簽時,都可以使用標簽查看,刪除等對其執行相應的管理操作;簡單來說所謂的標簽就是附加在我們所對應的對象之上的鍵值對,一個資源之上可以存在多個標簽,每個標簽都是鍵值對,而且每個標簽都可以被標簽選擇器進行匹配度檢查從而完成資源挑選,通常情況下一個資源對象可使用多個標簽,反之,一個標簽也可以被添加到多個資源對像上;標簽既可以在資源對象創建的時候指定,也可以在資源對象創建之后使用命令來進行管理,這個管理既包括添加,也包括刪除,還包括修改;實踐中我們通常給資源附加不同維度的標簽,來進行不同維度的管理,比方說labels下面的標簽app: myapp 用來指明當前的應用程序(可能是nginx,tomcat,http,mysql,redis等)是什么,我們也可以分層打標簽,如前端frontend,后端backend,開發環境dev等;也可以對版本打標簽。
labels:
app: myapp
tier: frontend
標簽:
key: value (key和value最多63個字符,key只能使用字母,數字,下劃線組成,只能以字母或數字開頭,不能為空值;value可以為空,也是只能以字母或數字開頭和結尾,中間可使用字母,數字,下劃線)
我們在查看pod或任何類型資源時,也可以直接指定標簽選擇器來選擇能顯示哪些標簽的
查看所有pod資源對象的標簽
[root@god63 ~]# kubectl get pods --show-labels
NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE? ? LABELS
my-nginx-5b56ccd65f-thnqt? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 119m? pod-template-hash=5b56ccd65f,run=my-nginx
my-nginx-5b56ccd65f-wd6wv? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 117m? pod-template-hash=5b56ccd65f,run=my-nginx
查看所有資源對象下擁有run這個標簽的標簽值
[root@god63 ~]# kubectl get pods -L run
NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE? ? RUN
my-nginx-5b56ccd65f-thnqt? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 121m? my-nginx
my-nginx-5b56ccd65f-wd6wv? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 119m? my-nginx
nfs-provisioner-7d57c9896d-zdst9? 1/1? ? Running? 1? ? ? ? ? 22h? ?
storage-0? ? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 22h? ?
storage-1? ? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 22h
查看擁有run這個標簽的pod資源對象
[root@god63 ~]# kubectl get pods -l run
NAME? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE
my-nginx-5b56ccd65f-thnqt? 1/1? ? Running? 0? ? ? ? ? 123m
my-nginx-5b56ccd65f-wd6wv? 1/1? ? Running? 0? ? ? ? ? 121m
查看擁有run這個標簽的資源對象,并且把標簽顯示出來
[root@god63 ~]# kubectl get pods -l run --show-labels
NAME? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE? ? LABELS
my-nginx-5b56ccd65f-thnqt? 1/1? ? Running? 0? ? ? ? ? 128m? pod-template-hash=5b56ccd65f,run=my-nginx
my-nginx-5b56ccd65f-wd6wv? 1/1? ? Running? 0? ? ? ? ? 126m? pod-template-hash=5b56ccd65f,run=my-nginx
想修改資源的標簽,比方說想給my-nginx-5b56ccd65f-thnqt加上個release標簽
給資源對象打標簽要使用label命令,指定給某個類型下的某個資源打標簽,key/value可以是多個,因此在my-nginx-5b56ccd65f-thnqt這個資源下再打個標簽release,用如下命令
[root@god63 ~]# kubectl label pods my-nginx-5b56ccd65f-thnqt? release=canary
pod/my-nginx-5b56ccd65f-thnqt labeled
查看標簽是否打成功:
[root@god63 ~]# kubectl get pods -l release --show-labels
NAME? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE? ? LABELS
my-nginx-5b56ccd65f-thnqt? 1/1? ? Running? 0? ? ? ? ? 131m? pod-template-hash=5b56ccd65f,release=canary,run=my-nginx
修改標簽,把release=canary改成release=stable
kubectl label pods my-nginx-5b56ccd65f-thnqt? release=stable --overwrite
查看標簽,顯示如下:
[root@god63 ~]# kubectl get pods -l release --show-labels
NAME? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE? ? LABELS
my-nginx-5b56ccd65f-thnqt? 1/1? ? Running? 0? ? ? ? ? 132m? pod-template-hash=5b56ccd65f,release=stable,run=my-nginx
查看既有release標簽,又有run標簽的pod資源有哪些
kubectl get pods -l release,run
? [root@god63 ~]# kubectl get pods -l release,run
NAME? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE
my-nginx-5b56ccd65f-thnqt? 1/1? ? Running? 0? ? ? ? ? 133m
8.5.2? 給node節點打標簽
能使用標簽的不只是pod,node節點也可以打標簽:
查看nodes節點的標簽
[root@god63 ~]# kubectl get nodes --show-labels
NAME? ? ? STATUS? ROLES? ? AGE? VERSION? LABELS
master1? Ready? ? master? 69d? v1.19.6? beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master1,kubernetes.io/os=linux,node-role.kubernetes.io/master=
node1? ? Ready? ? <none>? 69d? v1.19.6? a=b,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux
給node節點打標簽
[root@god63 ~]# kubectl label nodes node1 xuegod=IT
node/node1 labeled
查看node節點標簽
[root@god63 ~]# kubectl get nodes --show-labels
NAME? ? ? STATUS? ROLES? ? AGE? VERSION? LABELS
master1? Ready? ? master? 69d? v1.19.6? beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master1,kubernetes.io/os=linux,node-role.kubernetes.io/master=
node1? ? Ready? ? <none>? 69d? v1.19.6? a=b,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux,xuegod=IT
8.6? pod資源清單詳細解讀
apiVersion: v1? ? ? #版本號,例如v1
kind: Pod? ? ? #資源類型,如Pod
metadata:? ? ? #元數據
? 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表示優先使用本地鏡像,否則下載鏡像,Nerver表示僅使用本地鏡像
? ? 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數
? ? ? ? memory: string? ? #內存限制,單位可以為Mib/Gib
? ? ? requests:? ? ? #資源請求的設置
? ? ? ? cpu: string? ? #cpu請求,容器啟動的初始可用數量
? ? ? ? memory: string? ? #內存請求,容器啟動的初始可用內存
? ? livenessProbe:? ? #對Pod內個容器健康檢查的設置,當探測無響應幾次后將自動重啟該容器,檢查方法有exec、httpGet和tcpSocket,對一個容器只需設置其中一種方法即可
? ? ? 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的重啟策略,Always表示一旦不管以何種方式終止運行,kubelet都將重啟,OnFailure表示只有Pod以非0退出碼退出才重啟,Nerver表示不再重啟該Pod
? ? nodeSelector: obeject? #設置NodeSelector表示將該Pod調度到包含這個label的node上,以key:value的格式指定
? ? 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的存儲卷,掛載集群與定義的secre對象到容器內部
? ? ? ? scretname: string?
? ? ? ? items:? ?
? ? ? ? - key: string
? ? ? ? ? path: string
? ? ? configMap:? ? #類型為configMap的存儲卷,掛載預定義的configMap對象到容器內部
? ? ? ? name: string
? ? ? ? items:
? ? ? ? - key: string
? ? ? ? ? path: string