1、通過yaml文件創(chuàng)建pod
apiVersion: v1
kind: Pod
metadata:
name: base-pod
spec:
containers:
- name: nginx
image: nginx:1.14
apiVersion:api的版本,可以通過kubectl api-versions查看
kind:資源的類型
metadata:元數(shù)據(jù)描述,描述kind定義的資源類型的元數(shù)據(jù)
spec:用戶期望的狀態(tài)
status:容器創(chuàng)建后系統(tǒng)的狀態(tài)
2、metadata字段
2.1namespace
apiVersion: v1
kind: Pod
metadata:
name: base-pod
namespace: default
命名空間,不同類型的pod運(yùn)行在創(chuàng)建出來的不同的命名空間當(dāng)中
2.2labels
apiVersion: v1
kind: Pod
metadata:
name: base-pod
namespace: default
labels:
app: nginx
test: busybox
標(biāo)簽,pod的調(diào)度和其它資源選擇pod時通過標(biāo)簽進(jìn)行選擇
通過key/value鍵值對的形式進(jìn)行定義
2.3annotations
apiVersion: v1
kind: Pod
metadata:
name: base-pod
namespace: default
labels:
app: nginx
test: busybox
annotations:
release: beta
author: jan29
注解 與Label類似,也使用key/value鍵值對的形式進(jìn)行定義。
用Annotation來記錄的信息包括但不限于
1、build信息、release信息、Docker鏡像信息等,例如時間戳、release id號、PR號、鏡像hash值、docker registry地址等;
2、日志庫、監(jiān)控庫、分析庫等資源庫的地址信息;
3、程序調(diào)試工具信息,例如工具名稱、版本號等;
4、團(tuán)隊的聯(lián)系信息,例如電話號碼、負(fù)責(zé)人名稱、網(wǎng)址等。
3、spec字段
3.1containers
用于定義容器,可以定義多個
3.1.1ports
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- name: nginx
containerPort: 80
hostPort: 80
用于定義port
containerPort:用于定義容器開放的端口
hostIP:用于定義主機(jī)IP地址
hostPort:用于映射主機(jī)的端口
name:同于定義容器名字
protocol:用于定義端口協(xié)議
3.1.2imagePullPolicy
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- name: nginx
containerPort: 80
hostPort: 80
env:
- name: LANG
value: en_us.UTF-8
- name: USER
value: root
imagePullPolicy: IfNotPresent
鏡像拉取有三種策略
Always:總是從鏡像倉庫拉取
Never:重來不從鏡像倉庫拉取,只使用本地鏡像
IfNotPresent:如果本地有就使用本地鏡像,如果沒有就從鏡像倉庫拉取
3.1.3livenessProbe存活性探測
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- name: nginx
containerPort: 80
hostPort: 80
env:
- name: LANG
value: en_us.UTF-8
- name: USER
value: root
imagePullPolicy: IfNotPresent
livenessProbe:
tcpSocket:
port: 80
用于探測容器是否存活
探測的策略有三種
exec:通過命令探測
httpGet:向指定地址發(fā)送get請求探測
tcpSocket:向指定端口發(fā)送請求探測
3.1.4readinessProbe就緒性探測
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- name: nginx
containerPort: 80
hostPort: 80
env:
- name: LANG
value: en_us.UTF-8
- name: USER
value: root
imagePullPolicy: IfNotPresent
livenessProbe:
tcpSocket:
port: 80
readinessProbe:
initialDelaySeconds: 5
failureThreshold: 3
successThreshold: 3
periodSeconds: 1
timeoutSeconds: 3
httpGet:
path: /
port: 80
用于探測容器是否就緒
failureThreshold:連續(xù)探測失敗幾次認(rèn)為該容器沒有存活或就緒
successThreshold:連續(xù)探測成功幾次認(rèn)為該容器存活或就緒
initialDelaySeconds:容器啟動幾秒后開始探測
periodSeconds:探測周期,幾秒鐘探測一次
timeoutSeconds:探測超過多長時間沒有相應(yīng)認(rèn)為超時
3.1.5lifecycle生命周期鉤子
容器啟動后或者容器推出前都可以進(jìn)行相應(yīng)的操作被稱為鉤子
3.1.5.1postStart啟動后配置鉤子
spec:
containers:
- name: busybox
image: busybox
command:
- "/bin/sh"
args:
- "-c"
- "sleep 3600"
lifecycle:
postStart:
exec:
command:
- "/bin/sh"
- "-c"
- "ping -c 4 baidu.com"
創(chuàng)建鉤子也有三種方式
exec,httpGet和tcpSocket
3.1.5.2prestop停止前配置鉤子
spec:
containers:
- name: busybox
image: busybox
command:
- "/bin/sh"
args:
- "-c"
- "sleep 3600"
lifecycle:
postStart:
exec:
command:
- "/bin/sh"
- "-c"
- "ping -c 4 baidu.com"
preStop:
exec:
command:
- "/bin/sh"
- "-c"
- "wget -O - -q https://baidu.com"
和prostStart相同配置
3.2restartPolicy
spec:
containers:
- name: nginx
image: nginx:1.14
restartPolicy: OnFailure
Pod重啟策略也有三種
Always:只要退出就會重啟
OnFailure:退出狀態(tài)碼不為1重啟,也就是非正常退出重啟
Never:從來不會重啟
3.3nodeSelector
spec:
containers:
- name: nginx
image: nginx:1.14
restartPolicy: OnFailure
nodeSelector:
kubernetes.io/hostname: node2
選擇一個標(biāo)簽匹配的節(jié)點(diǎn)進(jìn)行調(diào)度
也可以通過nodeName進(jìn)行指定標(biāo)簽查看與創(chuàng)建分別可以使用以下命令
- kubectl get <資源類型> --show-labels
- kubectl label <資源類型> <資源名字> <key>=<value>