文章目錄
目錄
一、YAML基礎(chǔ)
二、說明
三、使用YAML創(chuàng)建Pod
附上一個(gè)具體的yaml解釋文件:
一、YAML基礎(chǔ)
YAML是專門用來寫配置文件的語(yǔ)言,非常簡(jiǎn)潔和強(qiáng)大,使用比json更方便。它實(shí)質(zhì)上是一種通用的數(shù)據(jù)串行化格式。
YAML語(yǔ)法規(guī)則:
大小寫敏感
使用縮進(jìn)表示層級(jí)關(guān)系
縮進(jìn)時(shí)不允許使用Tal鍵,只允許使用空格
縮進(jìn)的空格數(shù)目不重要,只要相同層級(jí)的元素左側(cè)對(duì)齊即可
”#” 表示注釋,從這個(gè)字符一直到行尾,都會(huì)被解析器忽略
在Kubernetes中,只需要知道兩種結(jié)構(gòu)類型即可:
Lists
Maps
1.1 YAML Maps
Map顧名思義指的是字典,即一個(gè)Key:Value 的鍵值對(duì)信息。例如:
apiVersion: v1
kind: Pod
注:---為可選的分隔符 ,當(dāng)需要在一個(gè)文件中定義多個(gè)結(jié)構(gòu)的時(shí)候需要使用。上述內(nèi)容表示有兩個(gè)鍵apiVersion和kind,分別對(duì)應(yīng)的值為v1和Pod。
Maps的value既能夠?qū)?yīng)字符串也能夠?qū)?yīng)一個(gè)Maps。例如:
apiVersion: v1
kind: Pod
metadata:
? name: kube100-site
? labels:
? ? app: web
注:上述的YAML文件中,metadata這個(gè)KEY對(duì)應(yīng)的值為一個(gè)Maps,而嵌套的labels這個(gè)KEY的值又是一個(gè)Map。實(shí)際使用中可視情況進(jìn)行多層嵌套。
YAML處理器根據(jù)行縮進(jìn)來知道內(nèi)容之間的關(guān)聯(lián)。上述例子中,使用兩個(gè)空格作為縮進(jìn),但空格的數(shù)據(jù)量并不重要,只是至少要求一個(gè)空格并且所有縮進(jìn)保持一致的空格數(shù) 。例如,name和labels是相同縮進(jìn)級(jí)別,因此YAML處理器知道他們屬于同一map;它知道app是lables的值因?yàn)閍pp的縮進(jìn)更大。
注意:在YAML文件中絕對(duì)不要使用tab鍵
1.2 YAML Lists
List即列表,說白了就是數(shù)組,例如:
args:
?-beijing
?-shanghai
?-shenzhen
?-guangzhou
可以指定任何數(shù)量的項(xiàng)在列表中,每個(gè)項(xiàng)的定義以破折號(hào)(-)開頭,并且與父元素之間存在縮進(jìn)。在JSON格式中,表示如下:
{
? "args": ["beijing", "shanghai", "shenzhen", "guangzhou"]
}
當(dāng)然Lists的子項(xiàng)也可以是Maps,Maps的子項(xiàng)也可以是List,例如:
apiVersion: v1
kind: Pod
metadata:
? name: kube100-site
? labels:
? ? app: web
spec:
? containers:
? ? - name: front-end
? ? ? image: nginx
? ? ? ports:
? ? ? ? - containerPort: 80
? ? - name: flaskapp-demo
? ? ? image: jcdemo/flaskapp
? ? ? ports: 8080
如上述文件所示,定義一個(gè)containers的List對(duì)象,每個(gè)子項(xiàng)都由name、image、ports組成,每個(gè)ports都有一個(gè)KEY為containerPort的Map組成,轉(zhuǎn)成JSON格式文件:
{
? "apiVersion": "v1",
? "kind": "Pod",
? "metadata": {
? ? ? ? "name": "kube100-site",
? ? ? ? "labels": {
? ? ? ? ? ? "app": "web"
? ? ? ? },
?
? },
? "spec": {
? ? ? ? "containers": [{
? ? ? ? ? ? "name": "front-end",
? ? ? ? ? ? "image": "nginx",
? ? ? ? ? ? "ports": [{
? ? ? ? ? ? ? ? "containerPort": "80"
? ? ? ? ? ? }]
? ? ? ? }, {
? ? ? ? ? ? "name": "flaskapp-demo",
? ? ? ? ? ? "image": "jcdemo/flaskapp",
? ? ? ? ? ? "ports": [{
? ? ? ? ? ? ? ? "containerPort": "5000"
? ? ? ? ? ? }]
? ? ? ? }]
? }
}
二、說明
定義配置時(shí),指定最新穩(wěn)定版API
配置文件應(yīng)該存儲(chǔ)在集群之外的版本控制倉(cāng)庫(kù)中。如果需要,可以快速回滾配置、重新創(chuàng)建和恢復(fù)
應(yīng)該使用YAML格式編寫配置文件,而不是json。YAML對(duì)用戶更加友好
可以將相關(guān)對(duì)象組合成單個(gè)文件,通常會(huì)更容易管理
不要沒必要指定默認(rèn)值,簡(jiǎn)單和最小配置減小錯(cuò)誤
在注釋中說明一個(gè)對(duì)象描述更好維護(hù)
三、使用YAML創(chuàng)建Pod
apiVersion:此處值是v1,這個(gè)版本號(hào)需要根據(jù)安裝的Kubernetes版本和資源類型進(jìn)行變化,記住不是寫死的。
kind:此處創(chuàng)建的是Pod,根據(jù)實(shí)際情況,此處資源類型可以是Deployment、Job、Ingress、Service等。
metadata:包含Pod的一些meta信息,比如名稱、namespace、標(biāo)簽等信息。
spec:包括一些container,storage,volume以及其他Kubernetes需要的參數(shù),以及諸如是否在容器失敗時(shí)重新啟動(dòng)容器的屬性。可在特定Kubernetes API找到完整的Kubernetes Pod的屬性。
?。?)查看apiVersion
# kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
(2)下面是一個(gè)典型的容器定義:
spec:
? containers:
? ? - name: front-end
? ? ? image: nginx
? ? ? ports:
? ? ? ? - containerPort: 80
上述例子只是一個(gè)簡(jiǎn)單的最小定義:一個(gè)名字(front-end)、基于nginx的鏡像,以及容器將會(huì)監(jiān)聽的指定端口號(hào)(80)。
除了上述的基本屬性外,還能夠指定復(fù)雜的屬性,包括容器啟動(dòng)運(yùn)行的命令、使用的參數(shù)、工作目錄以及每次實(shí)例化是否拉取新的副本。 還可以指定更深入的信息,例如容器的退出日志的位置。容器可選的設(shè)置屬性包括:
name、image、command、args、workingDir、ports、env、resource、volumeMounts、livenessProbe、readinessProbe、livecycle、terminationMessagePath、imagePullPolicy、securityContext、stdin、stdinOnce、tty
(3)kubectl創(chuàng)建Pod
# kubectl create -f test_pod.yaml
pod "kube100-site" created
#test-pod?
apiVersion: v1 #指定api版本,此值必須在kubectl apiversion中 ??
kind: Pod #指定創(chuàng)建資源的角色/類型 ??
metadata: #資源的元數(shù)據(jù)/屬性 ??
? name: test-pod #資源的名字,在同一個(gè)namespace中必須唯一 ??
? labels: #設(shè)定資源的標(biāo)簽?
? ? k8s-app: apache ??
? ? version: v1 ??
? ? kubernetes.io/cluster-service: "true" ??
? annotations: ? ? ? ? ? ?#自定義注解列表 ??
? ? - name: String ? ? ? ?#自定義注解名字 ??
spec: #specification of the resource content 指定該資源的內(nèi)容 ??
? restartPolicy: Always #表明該容器一直運(yùn)行,默認(rèn)k8s的策略,在此容器退出后,會(huì)立即創(chuàng)建一個(gè)相同的容器 ??
? nodeSelector: ? ? #節(jié)點(diǎn)選擇,先給主機(jī)打標(biāo)簽kubectl label nodes kube-node1 zone=node1 ??
? ? zone: node1 ??
? containers: ??
? - name: test-pod #容器的名字 ??
? ? image: 10.192.21.18:5000/test/chat:latest #容器使用的鏡像地址 ??
? ? imagePullPolicy: Never #三個(gè)選擇Always、Never、IfNotPresent,每次啟動(dòng)時(shí)檢查和更新(從registery)images的策略,?
? ? ? ? ? ? ? ? ? ? ? ? ? ?# Always,每次都檢查?
? ? ? ? ? ? ? ? ? ? ? ? ? ?# Never,每次都不檢查(不管本地是否有)?
? ? ? ? ? ? ? ? ? ? ? ? ? ?# IfNotPresent,如果本地有就不檢查,如果沒有就拉取?
? ? command: ['sh'] #啟動(dòng)容器的運(yùn)行命令,將覆蓋容器中的Entrypoint,對(duì)應(yīng)Dockefile中的ENTRYPOINT ??
? ? args: ["$(str)"] #啟動(dòng)容器的命令參數(shù),對(duì)應(yīng)Dockerfile中CMD參數(shù) ??
? ? env: #指定容器中的環(huán)境變量 ??
? ? - name: str #變量的名字 ??
? ? ? value: "/etc/run.sh" #變量的值 ??
? ? resources: #資源管理?
? ? ? requests: #容器運(yùn)行時(shí),最低資源需求,也就是說最少需要多少資源容器才能正常運(yùn)行 ??
? ? ? ? cpu: 0.1 #CPU資源(核數(shù)),兩種方式,浮點(diǎn)數(shù)或者是整數(shù)+m,0.1=100m,最少值為0.001核(1m)?
? ? ? ? memory: 32Mi #內(nèi)存使用量 ??
? ? ? limits: #資源限制 ??
? ? ? ? cpu: 0.5 ??
? ? ? ? memory: 1000Mi ??
? ? ports: ??
? ? - containerPort: 80 #容器開發(fā)對(duì)外的端口?
? ? ? name: httpd ?#名稱?
? ? ? protocol: TCP ??
? ? livenessProbe: #pod內(nèi)容器健康檢查的設(shè)置?
? ? ? httpGet: #通過httpget檢查健康,返回200-399之間,則認(rèn)為容器正常 ??
? ? ? ? path: / #URI地址 ??
? ? ? ? port: 80 ??
? ? ? ? #host: 127.0.0.1 #主機(jī)地址 ??
? ? ? ? scheme: HTTP ??
? ? ? initialDelaySeconds: 180 #表明第一次檢測(cè)在容器啟動(dòng)后多長(zhǎng)時(shí)間后開始 ??
? ? ? timeoutSeconds: 5 #檢測(cè)的超時(shí)時(shí)間 ??
? ? ? periodSeconds: 15 ?#檢查間隔時(shí)間 ??
? ? ? #也可以用這種方法 ??
? ? ? #exec: 執(zhí)行命令的方法進(jìn)行監(jiān)測(cè),如果其退出碼不為0,則認(rèn)為容器正常 ??
? ? ? # ?command: ??
? ? ? # ? ?- cat ??
? ? ? # ? ?- /tmp/health ??
? ? ? #也可以用這種方法 ??
? ? ? #tcpSocket: //通過tcpSocket檢查健康 ? ?
? ? ? # ?port: number ? ?
? ? lifecycle: #生命周期管理 ??
? ? ? postStart: #容器運(yùn)行之前運(yùn)行的任務(wù) ??
? ? ? ? exec: ??
? ? ? ? ? command: ??
? ? ? ? ? ? - 'sh' ??
? ? ? ? ? ? - 'yum upgrade -y' ??
? ? ? preStop:#容器關(guān)閉之前運(yùn)行的任務(wù) ??
? ? ? ? exec: ??
? ? ? ? ? command: ['service httpd stop'] ??
? ? volumeMounts: ?#掛載持久存儲(chǔ)卷?
? ? - name: volume #掛載設(shè)備的名字,與volumes[*].name 需要對(duì)應(yīng) ? ??
? ? ? mountPath: /data #掛載到容器的某個(gè)路徑下 ??
? ? ? readOnly: True ??
? volumes: #定義一組掛載設(shè)備 ??
? - name: volume #定義一個(gè)掛載設(shè)備的名字 ??
? ? #meptyDir: {} ??
? ? hostPath: ??
? ? ? path: /opt #掛載設(shè)備類型為hostPath,路徑為宿主機(jī)下的/opt,這里設(shè)備類型支持很多種?
? ? #nfs
1)創(chuàng)建一個(gè)yaml文件
apiVersion: apps/v1beta2
kind: Deployment
metadata:
? name: nginx-deployment
spec:
? replicas: 3
? selector:
? ? matchLabels:
? ? ? app: nginx
? template:
? ? metadata:
? ? ? labels:
? ? ? ? app: nginx
? ? spec:
? ? ? containers:
? ? ? - name: nginx
? ? ? ? image: nginx:1.10
? ? ? ? ports:
? ? ? ? - containerPort: 80
(2)創(chuàng)建deployment
[root@master-01 YAML_k8s]# kubectl create -f nginx-deployment.yaml
deployment.apps "nginx-deployment" created
[root@master-01 YAML_k8s]# kubectl get pod -o ?wide
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?READY ? ? STATUS ? ?RESTARTS ? AGE ? ? ? IP ? ? ? ? ? ? ?NODE
nginx-deployment-6b7b4d57b4-26wzj ? 1/1 ? ? ? Running ? 0 ? ? ? ? ?2m ? ? ? ?10.20.184.83 ? ?master-01
nginx-deployment-6b7b4d57b4-9w7tm ? 1/1 ? ? ? Running ? 0 ? ? ? ? ?2m ? ? ? ?10.20.190.60 ? ?node-01
nginx-deployment-6b7b4d57b4-mhh8t ? 1/1 ? ? ? Running ? 0 ? ? ? ? ?2m ? ? ? ?10.20.254.108 ? node-03
[root@master-01 YAML_k8s]# kubectl get deployment
NAME ? ? ? ? ? ? ? DESIRED ? CURRENT ? UP-TO-DATE ? AVAILABLE ? AGE
nginx-deployment ? 3 ? ? ? ? 3 ? ? ? ? 3 ? ? ? ? ? ?3 ? ? ? ? ? 2m
(3)查看標(biāo)簽
[root@master-01 YAML_k8s]# kubectl get pod --show-labels
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?READY ? ? STATUS ? ?RESTARTS ? AGE ? ? ? LABELS
nginx-deployment-6b7b4d57b4-26wzj ? 1/1 ? ? ? Running ? 0 ? ? ? ? ?3m ? ? ? ?app=nginx,pod-template-hash=2636081360
nginx-deployment-6b7b4d57b4-9w7tm ? 1/1 ? ? ? Running ? 0 ? ? ? ? ?3m ? ? ? ?app=nginx,pod-template-hash=2636081360
nginx-deployment-6b7b4d57b4-mhh8t ? 1/1 ? ? ? Running ? 0 ? ? ? ? ?3m ? ? ? ?app=nginx,pod-template-hash=2636081360
(4)通過標(biāo)簽查找Pod
[root@master-01 YAML_k8s]# kubectl get pod -l app=nginx
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?READY ? ? STATUS ? ?RESTARTS ? AGE
nginx-deployment-6b7b4d57b4-26wzj ? 1/1 ? ? ? Running ? 0 ? ? ? ? ?6m
nginx-deployment-6b7b4d57b4-9w7tm ? 1/1 ? ? ? Running ? 0 ? ? ? ? ?6m
nginx-deployment-6b7b4d57b4-mhh8t ? 1/1 ? ? ? Running ? 0 ? ? ? ? ?6m
(5)deployment創(chuàng)建過程
Deployment 管理的是replicaset-controller,RC會(huì)創(chuàng)建Pod。Pod自身會(huì)下載鏡像并啟動(dòng)鏡像
[root@master-01 YAML_k8s]# kubectl describe rs nginx-deployment
...
...
...
Events:
? Type ? ?Reason ? ? ? ? ? ?Age ? From ? ? ? ? ? ? ? ? ? Message
? ---- ? ?------ ? ? ? ? ? ?---- ?---- ? ? ? ? ? ? ? ? ? -------
? Normal ?SuccessfulCreate ?33m ? replicaset-controller ?Created pod: nginx-deployment-6b7b4d57b4-9w7tm
? Normal ?SuccessfulCreate ?33m ? replicaset-controller ?Created pod: nginx-deployment-6b7b4d57b4-26wzj
? Normal ?SuccessfulCreate ?33m ? replicaset-controller ?Created pod: nginx-deployment-6b7b4d57b4-mhh8t
[root@master-01 YAML_k8s]# kubectl describe pod nginx-deployment-6b7b4d57b4-26wzj
...
...
...
Events:
?Type ? ?Reason ? ? ? ? ? ? ? ? Age ? From ? ? ? ? ? ? ? ?Message
?---- ? ?------ ? ? ? ? ? ? ? ? ---- ?---- ? ? ? ? ? ? ? ?-------
?Normal ?Scheduled ? ? ? ? ? ? ?36m ? default-scheduler ? Successfully assigned nginx-deployment-6b7b4d57b4-26wzj to master-01
?Normal ?SuccessfulMountVolume ?36m ? kubelet, master-01 ?MountVolume.SetUp succeeded for volume "default-token-v5vw9"
?Normal ?Pulled ? ? ? ? ? ? ? ? 36m ? kubelet, master-01 ?Container image "nginx:1.10" already present on machine
?Normal ?Created ? ? ? ? ? ? ? ?36m ? kubelet, master-01 ?Created container
?Normal ?Started ? ? ? ? ? ? ? ?36m ? kubelet, master-01 ?Started container
(6)升級(jí)鏡像(nginx1.10–>nginx1.11)
[root@master-01 YAML_k8s]# kubectl set image deploy/nginx-deployment nginx=nginx:1.11
deployment.apps "nginx-deployment" image updated
?
[root@master-01 YAML_k8s]# kubectl exec -it nginx-deployment-b96c97dc-2pxjf bash
root@nginx-deployment-b96c97dc-2pxjf:/# nginx -V
nginx version: nginx/1.11.13
升級(jí)鏡像的過程是逐步進(jìn)行的,pod不會(huì)一下子全部關(guān)閉,而是一個(gè)一個(gè)升級(jí)
(7)查看發(fā)布狀態(tài)
[root@master-01 ~]# kubectl rollout status deploy/nginx-deployment
deployment "nginx-deployment" successfully rolled out
(8)查看deployment歷史修訂版本
[root@master-01 ~]# kubectl rollout history deploy/nginx-deployment
deployments "nginx-deployment"
REVISION ?CHANGE-CAUSE
1 ? ? ? ? <none>
2 ? ? ? ? <none>
# 顯示歷史有兩個(gè)版本
?
[root@master-01 ~]# kubectl rollout history deploy/nginx-deployment --revision=1
deployments "nginx-deployment" with revision #1
Pod Template:
? Labels: ? app=nginx
? ? pod-template-hash=2636081360
? Containers:
? ?nginx:
? ? Image: ?nginx:1.10
? ? Port: ? 80/TCP
? ? Host Port: ?0/TCP
? ? Environment: ? ?<none>
? ? Mounts: <none>
? Volumes: ?<none>
[root@master-01 ~]# kubectl rollout history deploy/nginx-deployment --revision=2
deployments "nginx-deployment" with revision #2
Pod Template:
? Labels: ? app=nginx
? ? pod-template-hash=65275387
? Containers:
? ?nginx:
? ? Image: ?nginx:1.11
? ? Port: ? 80/TCP
? ? Host Port: ?0/TCP
? ? Environment: ? ?<none>
? ? Mounts: <none>
? Volumes: ?<none>
(8)編輯deployment
[root@master-01 ~]# kubectl edit deploy/nginx-deployment
?
?
# 將nginx版本改為1.12
...
...
...
? ?spec:
? ? ? containers:
? ? ? - image: nginx:1.12
? ? ? ? imagePullPolicy: IfNotPresent
? ? ? ? name: nginx
? ? ? ? ports:
? ? ? ? - containerPort: 80
升級(jí)過程:
[root@master-01 ~]# kubectl rollout status deploy/nginx-deployment
Waiting for rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for rollout to finish: 1 old replicas are pending termination...
Waiting for rollout to finish: 1 old replicas are pending termination...
deployment "nginx-deployment" successfully rolled out
(10)擴(kuò)容/縮容(指定–replicas的數(shù)量)
[root@master-01 ~]# kubectl get pod
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?READY ? ? STATUS ? ?RESTARTS ? AGE
nginx-deployment-6b47cf4878-8mjkr ? 1/1 ? ? ? Running ? 0 ? ? ? ? ?1m
nginx-deployment-6b47cf4878-kr978 ? 1/1 ? ? ? Running ? 0 ? ? ? ? ?1m
nginx-deployment-6b47cf4878-tvhvl ? 1/1 ? ? ? Running ? 0 ? ? ? ? ?1m
[root@master-01 ~]# kubectl scale deploy/nginx-deployment --replicas=5
deployment.extensions "nginx-deployment" scaled
[root@master-01 ~]# kubectl get pod
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?READY ? ? STATUS ? ? ? ? ? ? ?RESTARTS ? AGE
nginx-deployment-6b47cf4878-6r5dz ? 0/1 ? ? ? ContainerCreating ? 0 ? ? ? ? ?4s
nginx-deployment-6b47cf4878-7sjtt ? 0/1 ? ? ? ContainerCreating ? 0 ? ? ? ? ?4s
nginx-deployment-6b47cf4878-8mjkr ? 1/1 ? ? ? Running ? ? ? ? ? ? 0 ? ? ? ? ?2m
nginx-deployment-6b47cf4878-kr978 ? 1/1 ? ? ? Running ? ? ? ? ? ? 0 ? ? ? ? ?2m
nginx-deployment-6b47cf4878-tvhvl ? 1/1 ? ? ? Running ? ? ? ? ? ? 0 ? ? ? ? ?2m
(11)創(chuàng)建Service提供對(duì)外訪問的接口
apiVersion: v1
kind: Service
metadata:
? name: nginx-service
? labels:
? ? app: nginx
spec:
? ports:
? - port: 88
? ? targetPort: 80
? selector:
? ? app: nginx
?
####
apiVersion: 指定版本
?
kind: 類型
?
name: 指定服務(wù)名稱
?
labels: 標(biāo)簽
?
port: Service 服務(wù)暴露的端口
?
targetPort: 容器暴露的端口
?
seletor: 關(guān)聯(lián)的Pod的標(biāo)簽
創(chuàng)建service
# kubectl create -f nginx-service.yaml
查看service(訪問Pod是有負(fù)載均衡的)
[root@master-01 YAML_k8s]# kubectl get svc/nginx-service
NAME ? ? ? ? ? ?TYPE ? ? ? ?CLUSTER-IP ? ? ? EXTERNAL-IP ? PORT(S) ? AGE
nginx-service ? ClusterIP ? 10.254.131.176 ? <none> ? ? ? ?88/TCP ? ?1m
對(duì)service的描述
# kubectl describe svc/nginx-service
Name: ? ? ? ? ? ? ?nginx-service
Namespace: ? ? ? ? default
Labels: ? ? ? ? ? ?app=nginx
Annotations: ? ? ? <none>
Selector: ? ? ? ? ?app=nginx
Type: ? ? ? ? ? ? ?ClusterIP
IP: ? ? ? ? ? ? ? ?10.254.131.176
Port: ? ? ? ? ? ? ?<unset> ?88/TCP
TargetPort: ? ? ? ?80/TCP
Endpoints: ? ? ? ? 10.20.184.19:80,10.20.184.84:80,10.20.190.62:80 + 2 more...
Session Affinity: ?None
Events: ? ? ? ? ? ?<none>
(12)回滾到以前的版本
# kubectl rollout history deploy/nginx-deployment
deployments "nginx-deployment"
REVISION ?CHANGE-CAUSE
1 ? ? ? ? <none>
2 ? ? ? ? <none>
3 ? ? ? ? <none>
# kubectl rollout history deploy/nginx-deployment --revision=3
deployments "nginx-deployment" with revision #3
Pod Template:
?Labels: ? app=nginx
? ?pod-template-hash=2603790434
?Containers:
? nginx:
? ?Image: ?nginx:1.12
? ?Port: ? 80/TCP
? ?Host Port: ?0/TCP
? ?Environment: ? ?<none>
? ?Mounts: <none>
?Volumes: ?<none>
# 回滾到上一個(gè)版本
# kubectl rollout undo deploy/nginx-deployment
deployment.apps "nginx-deployment"
# 查看版本
# kubectl describe deploy/nginx-deployment
...
...
Labels: ?app=nginx
?Containers:
? nginx:
? ?Image: ? ? ? ?nginx:1.11
(13)回滾到指定版本
# kubectl rollout history deploy/nginx-deployment
deployments "nginx-deployment"
REVISION ?CHANGE-CAUSE
1 ? ? ? ? <none>
3 ? ? ? ? <none>
4 ? ? ? ? <none>
# 指定版本文章來源:http://www.zghlxwxcb.cn/news/detail-558362.html
# kubectl rollout undo deploy/nginx-deployment --to-revision=1
deployment.apps "nginx-deployment"
附上一個(gè)具體的yaml解釋文件:
# yaml格式的pod定義文件完整內(nèi)容:
apiVersion: v1 ? ? ? #必選,版本號(hào),例如v1
kind: Pod ? ? ? #必選,Pod
metadata: ? ? ? #必選,元數(shù)據(jù)
? name: string ? ? ? #必選,Pod名稱
? namespace: string ? ?#必選,Pod所屬的命名空間
? labels: ? ? ?#自定義標(biāo)簽
? ? - name: string ? ? #自定義標(biāo)簽名字
? annotations: ? ? ? #自定義注釋列表
? ? - name: string
spec: ? ? ? ? #必選,Pod中容器的詳細(xì)定義
? containers: ? ? ?#必選,Pod中容器列表
? - name: string ? ? #必選,容器名稱
? ? image: string ? ?#必選,容器的鏡像名稱
? ? imagePullPolicy: [Always | Never | IfNotPresent] #獲取鏡像的策略 Alawys表示下載鏡像 IfnotPresent表示優(yōu)先使用本地鏡像,否則下載鏡像,Nerver表示僅使用本地鏡像
? ? 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: ? ? ? #需要暴露的端口庫(kù)號(hào)列表
? ? - name: string ? ? #端口號(hào)名稱
? ? ? 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)存清楚,容器啟動(dòng)的初始可用數(shù)量
? ? livenessProbe: ? ? #對(duì)Pod內(nèi)個(gè)容器健康檢查的設(shè)置,當(dāng)探測(cè)無響應(yīng)幾次后將自動(dòng)重啟該容器,檢查方法有exec、httpGet和tcpSocket,對(duì)一個(gè)容器只需設(shè)置其中一種方法即可
? ? ? 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的重啟策略,Always表示一旦不管以何種方式終止運(yùn)行,kubelet都將重啟,OnFailure表示只有Pod以非0退出碼退出才重啟,Nerver表示不再重啟該P(yáng)od
? ? nodeSelector: obeject ?#設(shè)置NodeSelector表示將該P(yáng)od調(diào)度到包含這個(gè)label的node上,以key:value的格式指定
? ? 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ǔ)卷,掛載集群與定義的secre對(duì)象到容器內(nèi)部
? ? ? ? scretname: string ?
? ? ? ? items: ? ??
? ? ? ? - key: string
? ? ? ? ? path: string
? ? ? configMap: ? ? #類型為configMap的存儲(chǔ)卷,掛載預(yù)定義的configMap對(duì)象到容器內(nèi)部
? ? ? ? name: string
? ? ? ? items:
? ? ? ? - key: string
?文章來源地址http://www.zghlxwxcb.cn/news/detail-558362.html
到了這里,關(guān)于K8s中yaml文件詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!