# Kubernetes YAML file quicklystart
[toc]
# 1.集群级别资源
# 1.1.namespace资源清单文件
apiVersion: v1 # api版本
kind: Namespace # 资源类型
metadata: # 元数据
name: dev # namespace的名称
1
2
3
4
2
3
4
# 2.pod资源
# 2.1.pod资源清单文件-涵盖全部参数
apiVersion: v1 # 必选,版本号,例如v1
kind: Pod # 必选,资源类型,例如 Pod
metadata: # 必选,元数据
name : string # 必选,Pod名称
namespace: string # Pod所属的命名空间,默认为" default"labels:
labels: # 自定义标签列表
- namd: 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 # 对容器监控检查的定期探测时间设置,单位秒,黑认18秒一次
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# 2.2.pod资源基本配置清单文件
apiVersion: v1 # api版本
kind: Pod # 资源类型为pod
metadata: # 定义元数据
name: pod-resources # pod的名称
namespace: dev # pod所在的namespace
labels: # 定义标签
app: base
spec:
containers:
- name: nginx-port # 容器的名称
image: nginx:1.11 # 镜像版本
imagePullPolicy: IfNotPresent # 镜像拉取策略
command: ["/bin/sh"] # 容器启动后要执行的命令,命令有很多子命令,以逗号分隔
args: ["-c","touch/hello.txt;while true;do /bin/echo $(date +%T)>>/tmp/hellow.txt;sleep 3;done;"]
env: # 定义环境变量
- name: "username" # 定义变量名称
value: "jiangxl" # 定义变量值
- name: "job"
value: "it"
ports: # 定义端口,一个- name表示一个端口,可以写多个
- name: nginx-port # 定义端口名称
containerPort: 80 # 定义开放的端口
protocol: TCP # 指定端口属于什么协议
resources: # 定义资源配置
limits: # 最大资源限制
cpu: "2" # cpu限制在2核
memory: "10Gi" # 内存限制在10G
requests: # 最小资源限制
cpu: "1" # cpu限制在1核
memory: "10Mi" # 内存限制在10M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 2.3.pod资源健康检查资源清单文件
apiVersion: v1
kind: Pod
metadata:
name: pod-livereadiness
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.15
ports:
- name: nginx-port
containerPort: 80
livenessProbe: # 存活性探测
tcpSocket: # 使用TCPSocket探测方式
port: 80 # 探测的端口
initialDelaySeconds: 30 # 容器启动后30s以后开始探测
timeoutSeconds: 5 # 探测超时时间
readinessProbe: # 就绪性探测
httpGet: # 使用HTTPGet探测方式
scheme: HTTP # 协议使用http
port: 80 # 应用端口
path: / # url路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 2.2.pod资源一级可配置属性
[root@k8s-master ~]# kubectl explain pod
KIND: Pod
VERSION: v1 # 编写yaml文件时第一行的版本号可以从这里进行查找
FIELDS: # 可配置的一级属性,基本所有资源都是如下五个,如果当前级别配置参数后面<>中是string就表示没有下一级配置参数,直接填写一个字符串即可,如果<>为object说明他还有下一级配置参数,可以通过资源类型.属性的方式查找
apiVersion <string> # 当前资源支持的版本
kind <string> # 控制器类型
metadata <Object> # 元数据
spec <Object> # 设置属性
status <Object> # 记录pod的状态,包括ip地址、创建时间等等,是自动增加的,不是手动写入的
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 2.4.pod初始化容器配置参数
[root@k8s-master ~/k8s_1.19_yaml]# kubectl explain pod.spec.initContainers
KIND: Pod
VERSION: v1
RESOURCE: initContainers <[]Object>
DESCRIPTION:
FIELDS:
args <[]string> # 设置容器启动参数
command <[]string> # 设置容器启动命令
env <[]Object> # 设置容器的环境变量
image <string> # 容器的镜像
imagePullPolicy <string> # 容器镜像的拉取策略
name <string> -required- # 初始化容器的名称
ports <[]Object> # 端口号设置
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 2.5.pod资源钩子函数配置参数
KIND: Pod
VERSION: v1
RESOURCE: lifecycle <Object>
FIELDS:
postStart <Object> # 定义容器启动后执行的钩子函数
exec <Object> # exec命令方式,在容器里面执行相应的命令
command <[]string> # 指定运行的命令
httpGet <Object> # httpGet方式,探测容器应用的url
host <string> # 主机地址,一般就是pod地址
path <string> # 请求的url路径
port <string> # 应用端口号
scheme <string> # 协议
tcpSocket <Object> # tcpSocket方式,访问容器指定的socket
host <string> # pod地址
port <string> # 端口号
preStop <Object> # 定期容器关闭前执行的钩子函数
exec <Object> # exec命令方式,在容器里面执行相应的命令
·····
httpGet <Object> # httpGet方式,探测容器应用的url
·····
tcpSocket <Object> # tcpSocket方式,访问容器指定的socket
·····
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 2.6.Pod资源node调度策略配置参数
apiVersion: v1
kind: Pod
metadata:
name: pod-nodename
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.15
nodeName: k8s-node1 # 指定要调度的node节点名称
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 2.7.Pode亲和性调度配置参数
[root@k8s-master ~]# kubectl explain pod.spec.affinity.nodeAffinity
requiredDuringSchedulingIgnoredDuringExecution <Object> # node节点必须满足所有规则才可以,相当于硬限制,(这名字真是有够长的),不会驱逐已经存在并运行的pod
nodeSelectorTerms <[]Object> # 定义节点选择列表,也就是定义具体匹配规则
matchFields <Object> # 根据节点字段列出的节点选择器要求选择
key # 键
operator # 关系符,支持Exists(存在)、DoesNotExist(不存在)、In(是这个范围)、NotIN(不是这个范围)、Gt(大于)、Lt(小于)
values # 值
matchExpressions <Object> # 根据节点标签选择器进行匹配(推荐使用)
key # 键,标签名
operator # 关系符,支持Exists、DoesNotExist、In、NotIN、Gt、Lt
values # 值,标签值
preferredDuringSchedulingIgnoredDuringExecution <[]Object> # 优先调度到满足指定规则的Node,相当于软限制,(这名字真是有够长的),不会驱逐已经存在并运行的pod
preference <Object> # 节点选择器,与权重关联,可以定义多个,多个prefence如何选择就要看权重设置的大小
matchFields <Object> # 根据节点字段进行匹配
key
operator
values
matchExpressions <Object> # 根据节点标签选择器进行匹配(推荐使用)
key # 键,标签名
operator # 关系符,支持Exists、DoesNotExist、In、NotIN、Gt、Lt
values # 值,标签值
weight # 设置权重,范围在1-100
# node亲和示例配置清单文件
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
# pod亲和示例配置清单文件
spec:
affinity:
podAffinity:
# podAntiAffinity: # pod反亲和性
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
# matchLabels:
# app: fronted
matchExpressions:
- key: security
operator: In
values:
- S1
topologyKey: topology.kubernetes.io/zone # 不在同一区域
# topologyKey: kubernetes.io/hostname # 不在同一主机
containers:
- name: with-pod-affinity
image: k8s.gcr.io/pause:2.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 3.pod资源控制器资源
# 3.1.ReplicaSet控制器资源清单文件
apiVersion: apps/v1 # 版本号
kind : ReplicaSet # 类型
metadata: # 元数据
name : # rs名称
namespace : # 所属命名空间
labels: # 标签
controller : rs
spec: # 详情描述
replicas: 3 # 副本数量
selector: # 选择器,通过它指定该控制器管理哪些pod
matchLabels : # Labels匹配配规则
app: nginx-pod # 匹配标签app值为nginx-pod的pod
matchExpressions: # Expressions匹配规则
- {key : app, operator : In, values : [nginx-pod ] } # 指定一个就可以了
template: # 模板,也就是定义pod的信息,当副本数量不足时,会根据下面的模板创建pod副本
metadata : # 元数据
labels : # 定义标签与rs进行关联
app: nginx-pod
spec: # pod属性
containers: # 定义容器
- name : nginx # 容器名称
image: nginx :1.17.1 # 镜像
ports : # 端口号
- containerPort : 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 3.2.Deployment控制器资源清单文件
apiVersion: apps/v1 # 版本号
kind: Deployment # 控制器类型
metadata: # 定义元数据
name: # deployment资源名称
namespace: # 所属命名空间
labels: # 定义标签
controller: deploy
spec: # 定义资源属性
replicas: 3 # 副本数量
revisionHistoryLimit: 3 # 保留历史版本,默认是1日
paused: false # 暂停部署,默认是false,也就是deployment资源创建好之后,是否立刻运行pod,如果设置true,deployment资源创建好不会立即运行pod
progressDeadlineSeconds: 688 # 部署超时时间(s),默认是68日
tolerations: # 容忍度
- key: "key1"
operator: "Equal" # 操作符为Exists时,不能指定value值
value: "value1"
effect: "NoSchedule" # 此外还有NoExecute(驱逐影响目前运行着的pod)和PreferNoschedule(尽量阻止pod调度到该节点,除非没有其他节点可调用,说白了就是备胎xd.)
tolerationSeconds: 6000 # 用于当某个pod运行所在的节点变成unready或者unreachable状态时,k8s可以等待该pod被调度到其他节点的最长等待时间,一般与effect的NoExecute共同使用
strategy: # 策略
type: RollingUpdate # 滚动更新策略
rollingUpdate: # 滚动更新
maxSurge: 30% # 最大额外可以存在的副本数,可以为百分比,也可以为整数
maxUn available: 30% # 最大不可用状态的 Pod 的最大值,可以为百分比,也可以为整数
selector: # 选择器,通过它指定该控制器管理哪些pod
matchLabels: # Labels匹配规则
app: nginx-pod
matchExpressions: # Expressions匹配规则
- {key: app, operator: In, values: [nginx-pod] }
template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本
metadata:
labels:
app: nginx-podspec:
containers:
- name: nginx
image: nginx:1.17.1ports:
ports:
- containerPort: 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 3.3.HPA控制器资源清单文件
apiVersion: autoscaling/v1 # hpa支持的版本号
kind: HorizontalPodAutoscaler # 类型为hpa
metadata: # 元数据
name: hpa-nginx # hpa名称
namespace: dev # 所在的命名空间
spec: # 属性
minReplicas: 1 # 最少存活的pod数量
maxReplicas: 10 # 最多存活的pod数量
targetCPUUtilizationPercentage: 85 # 当CPU使用率达到多少指标时触发规则,这里的85表示85%,方便测试,实际生产中采用80-85%
scaleTargetRef: # 声明对那个资源进行控制
apiVersion: apps/v1 # 资源的api版本
kind: Deployment # 资源类型
name: deployment-nginx # 资源名称
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 3.4.DaemonSet控制器资源清单文件
apiversion: apps/v1 # 版本号
kind: DaemonSet # 类型
metadata: # 元数据
name: # 名称
namespace: # 所属命名空间
labels: # 标签
controller: daemonset
spec: # 属性
revisionHistoryLimit: 3 # 保留历史版本
updateStrategy : # 更新策略
type: RollingUpdate # 滚动更新
rollingUpdate: # 滚动更新策略
maxUnavailable: 1 # 最大不可用状态的 Pod的最大值,可以为百分比,也可以为整数
selector : # 选择器,通过它指定该控制器管理哪些pod
matchLabels: # Labels匹配规则
app: nginx-pod
matchExpressions: # Expressions匹配规则
- {key: app, operator: In, values: [nginx-pod ]}
template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.17.1
ports:
- containerPort: 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 3.5.Job控制器资源清单文件
apiVersion: batch/v1 # 版本号
kind: Job # 类型
metadata: # 元数据
name: # 名称
namespace: # 所属命名空间
labels : # 标签
controller: job
spec: # 详情描述
completions: 1 # 指定job成功运行需要Pods的次数,默认值:1
parallelism: 1 # 指定job在任一时刻应该并发运行Pods的数量,默认值:1
activeDeadlineSeconds: 30 # 指定job可运行的时间期限,超过时间还未结束,系统将会尝试进行终止。
backoffLimit: 6 # 指定job失败后进行重试的次数,默认是6
manualSelector: true # 是否可以使用selector选择器选择pod,默认是false
selector: # 选择器,通过它指定该控制器管理哪些pod
matchLabels: # Labels匹配规则
app: counter-pod
matchExpressions: # Expressions[匹配规则
- {key: app, operator: In, values: [ counter-pod]}
template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本
metadata:
labels:
app: counter-pod
spec:
restartPolicy: Never # 重启策略只能设置为Never或者OnFailure
containers:
- name: counter
image: busybox: 1.30
command: [ "bin/sh" , "-c" , "for i in 9 8 7 654 3 2 1; do echo $i;sleep 2;done" ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 3.6.CronJob资源清单文件
apiVersion: batch/v1beta1 # 版本号
kind: CronJob # 类型
metadata: # 元数据
name: # 名称
namespace: # 所属命名空间
labels: # 标签
controller: cronjob
spec: # 属性
schedule: # cron格式的作业调度运行时间点,用于控制任务在什么时间执行
concurrencyPolicy: # 并发执行策略,用于定义前一次作业运行尚未完成时是否运行下一次的作业
failedJobHistoryLimit: # 为失败的任务执行保留的历史记录数,默认为1
successfulJobHistoryLimit: # 为成功的任务执行保留的历史记录数,默认为3
startingDeadlineSeconds: # 启动作业错误的超时时长
jobTemplate: # job控制器模板,用于为cronjob控制器生成job对象,下面其实就是job的定义
metadata:
spec:
completions: 1
parallelism: 1
activeDeadlineSeconds: 30
backoffLimit: 6
manualSelector: true
selector:
matchLabels:
app: counter-pod
matchExpressions: # 规则
- { key: app, operator: In, values: [counter-pod ] }
template:
metadata:
labels:
app: counter-pod
spec:
restartPolicy: Never
containers:
- name: counter
image: busybox: 1.30
command: [ "bin/sh" , "-c" , " for i in 98 7 654 3 2 1; do echo $i;sleep 2 ;done" ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 3.7.StatefulSet资源清单文件
apiVersion: apps/v1 # api版本
kind: StatefulSet # 资源类型
metadata: # 定义元数据
name: remote-storage # 资源名称
namespace: kube-system # 所在的namespace
spec: # 定义属性
selector: # 定义标签选择器,关联pod的标签
matchLabels:
app: remote
serviceName: "remote-storage" # 定义serviceName,这个serviceName将会成为主机名
replicas: 1 # 副本数
template: # pod模板信息
metadata:
labels:
app: remote
spec:
containers:
- name: remote-storage
image: remote_storage_adapter:v2
ports:
- containerPort: 9201
name: remote
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 4.服务发现资源
# 4.1.service资源清单文件
kind: Service # 资源类型
apiVersion: v1 # 资源版本
metadata: # 元数据
name: service # 资源名称
namespace: dev # 所在的命名空间
spec: # 属性
selector: # 标签选择器,用于确定当前service代理哪些pod
app: nginx # pod的标签
type: # Service类型, 指定service的访问方式
clusterIP: # 虚拟服务的ip地址,即service地址
sessionAffinity: # session亲和性,支持ClientIP、 None两个选项
ports: # 端口信息
protocol: TCP
port: 3017 # service端口
targetPort: 5003 # pod端口
nodePort: 31122 # 映射的主机端口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 4.2.ingress资源清单文件
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-https
namespace: dev
spec:
ingressClassName: <string> # 定义使用哪种类型的ingress controllers
tls: # 定义域名绑定证书配置,只有通过https访问的方式才需要配置
- hosts: # 定义程序的域名列表
- nginx.jiangxl.com
- tomcat.jiangxl.com
secretName: tls-secret # 关联对应证书的secret资源
rules: # 定义ingress规则,用于关联对应的service资源
- host: nginx.jiangxl.com # 应用域名
http: # http方式
paths: # 定义要访问的路径
- path: / # 定义访问路径
backend: # 关联对应的service资源
serviceName: nginx-service # 对应的service名称
servicePort: 80 # 对应的service端口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 5.数据存储资源
# 5.1.EmptyDir资源清单文件
apiVersion: v1
kind: Pod
metadata:
name: volume-emptydir
namespace: dev
spec:
containers: # 定义容器列表
- name: nginx # 容器的名称
image: nginx:1.17.1 # 容器使用的镜像版本
ports: # 定义端口号
- containerPort: 80
volumeMounts: # 定义volume挂载信息,将logs-volume挂载到容器的/var/log/nginx路径
- name: logs-volume # volume的名称
mountPath: /var/log/nginx # 挂载到容器的指定路径
- name: busybox
image: busybox:1.30
command: ["/bin/sh","-c","tail -f /logs/access.log"] # busybox初始命令,动态读取volume挂载路径下的文件内容
volumeMounts: # 将logs-volume挂载到容器的/logs路径
- name: logs-volume
mountPath: /logs
volumes: # 定义volume信息
- name: logs-volume # volume名称
emptyDir: {} # 使用的volume类型为emptydir,{}不可省略
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 5.2.HostPath资源清单文件
[root@k8s-master ~/k8s_1.19_yaml]# vim volume-hostpath.yaml
apiVersion: v1
kind: Pod
metadata:
name: volume-hostpath
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.17.1
ports:
- containerPort: 80
volumeMounts:
- name: logs-volume
mountPath: /var/log/nginx
- name: busybox
image: busybox:1.30
command: ["/bin/sh","-c","tail -f /logs/access.log"]
volumeMounts: # 定义挂载那些volume卷
- name: logs-volume # volume名称
mountPath: /logs # 挂载到容器的哪个路径
volumes:
- name: logs-volume
hostPath: # 指定volume类型为hostPath
path: /root/logs # 指定node节点上的路径,为容器提供挂载点
type: DirectoryOrCreate # 针对路径做得类型,DirectoryOrCreate表示当路径不存在时则创建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 5.3.NFS类型的资源清单文件
apiVersion: v1
kind: Pod
metadata:
name: volume-nfs
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.17.1
ports:
- containerPort: 80
volumeMounts:
- name: logs-volume
mountPath: /var/log/nginx
- name: busybox
image: busybox:1.30
command: ["/bin/sh","-c","tail -f /logs/access.log"]
volumeMounts:
- name: logs-volume
mountPath: /logs
volumes: # 定义存储卷
- name: logs-volume # 指定存储卷的名称
nfs: # 类型为nfs
server: 192.168.81.210 # nfs服务器地址
path: /data/k8s_data # nfs提供的共享路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 5.4.PV资源清单文件
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
nfs: # 存储类型,不同的存储类型配置都不相同,nfs则填写nfs
capacity: # 存储能力,目前只支持存储空间的设置
storage: 2Gi # 具体的存储大小
accessModes: # 访问模式
storageClassName: # 存储类别
persistentVolumeReclaimPolicy: # 回收策略
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 5.5.PVC资源清单文件
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc
namespace: dev
spec:
accessModes: # 访问模式
selector: # 采用标签选择具体的pv
storageClassName: # 存储类别
resources: # 请求空间
requests:
storage: 5Gi # 具体的请求大小
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 6.配置资源
# 6.1.configmap资源清单文件
apiVersion: v1
kind: ConfigMap
metadata:
name: configmap
namespace: dev
data: # configmap配置文件里面,不再有spec,而是data
filename1: | # 文件和内容的关系相当于一个键值对,filename表示文件的名称 |必须要有,固定写法
neirong1 # 具体的内容,所有内容都要和filename保持至少2个空格的对齐
neirong2
filename2: | # configmap可以同时定义多个文件的内容,接着往下写即可,一般还是一个cm定义一个配置文件,因为pod挂载是以目录进行挂载的,除非两个文件都在一个路径
xxxxxxxx
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 6.2.secret资源清单文件
apiVersion: v1
kind: Secret # 资源类型为Secret
metadata:
name: admin-secret
namespace: dev
type: Opaque # 类型为Opaque,Opaque主要存储base64加密后的密码文件
data: # 定义数据
username: YWRtaW4= # username为文件名称,YWRtaW4=为文件内容
password: MTIzNDU2
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 7.RBAC访问授权资源
# 7.1.Role资源清单文件
# Role只能对命名空间内的资源进行授权,需要指定namespace
apiVersion: rbac.authorization.k8s.io/v1beta1 # 资源api地址
kind: Role # 控制器类型
metadata: # 元数据
name: authorization-role # 资源名称
namespace: dev # 资源所在命名空间
rules: # 定义角色
- apiGroups: [""] # 支持的api组列表,""空字符串表示核心API群,写什么api就对什么api进行操作
resources: ["pods"] # 支持的资源对象列表,对那些资源进行操作
verbs: ["get","watch","list"] # 允许对资源对象的操作权限
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 7.2.ClusterRole资源清单文件
# ClusterRole可以对集群内所有namespace下的资源进行授权,跨namespace、非资源对象都可以进行授权
apiVersion: rbac.authorization.k8s.io/v1beta1 # 资源api地址
kind: CLusterRole # 控制器类型
metadata: # 元数据
name: authorization-clusterrole # 资源名称
rules: # 定义角色
- apiGroups: [""] # 支持的api组列表,""空字符串表示核心API群,写什么api就对什么api进行操作
resources: ["pods"] # 支持的资源对象列表,对那些资源进行操作
verbs: ["get","watch","list"] # 允许对资源对象的操作权限
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 7.3.RoleBinding资源清单文件
# RoleBinding可以将subjects定义的用户绑定在同一namespace中的role角色上,仅仅只能是同一namespace种的role
apiVersion: rbac.authorization.k8s.io/v1beta1 # 资源api地址
kind: RoleBinding # 控制器类型
metadata: # 元数据
name: authorization-rolebinding # 控制器名称
namespace: dev # 所在的namespace
subjects: # 关联用户信息
- kind: User # 用户的类型,可以是user、group、serviceaccount
name: jiangxl # 对应的用户名称
apiGroup: rbac.authorization.k8s.io # api组,持有引用主题的api组,默认为rbac.authorization.k8s.io
namespace: dev # 用户能控制的namespace
roleRef: # 关联角色信息
kind: Role # 类型为角色
name: authorization-role # 对应的role名称
apiGroup: rbac.authorization.k8s.io # api组,持有引用主题的api组,默认为rbac.authorization.k8s.io
# 整个连起来的意思为用户jiangxl与authorization-role角色进行绑定,持有对dev命名空间下pod资源get、list、watch权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 7.4.CLusterRoleBinding资源清单文件
# ClusterRoleBinding可以在整个集群级别和所有namespace中,将特定的subject与ClusterRoleBinding进行绑定授予权限,这样一来这个角色就拥有就集群级别资源的操作权限
apiVersion: rbac.authorization.k8s.io/v1beta1 # 资源api地址
kind: RoleBinding # 控制器类型
metadata: # 元数据
name: authorization-rolebinding # 控制器名称
subjects: # 关联用户信息
- kind: User # 用户的类型,可以是user、group、serviceaccount
name: jiangxl # 对应的用户名称
apiGroup: rbac.authorization.k8s.io # api组,持有引用主题的api组,默认为rbac.authorization.k8s.io
roleRef: # 关联角色信息
kind: ClusterRole # 类型为集群角色
name: authorization-clusterrole # 对应的role名称
apiGroup: rbac.authorization.k8s.io # api组,持有引用主题的api组,默认为rbac.authorization.k8s.io
# 整个连起来的意思为用户jiangxl与authorization-role角色进行绑定,持有对集群级别以及所有命名空间下pod资源get、list、watch权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 8. LimitRange/ResourceQuota资源限制
名称空间级别资源,创建该资源时需要指定命名空间,如:kubectl apply -f </PATH/TO/YOUR_YAML_FILE> --namespace=<YOUR_NAMESPACE>
# 8.1 LimitRange资源清单文件
# LimitRange用于限制命令空间中单个pod的资源使用情况,对象是个体
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi # 默认为命名空间中pod所分配的limits.memory内存
cpu: 1 # 默认为命名空间中pod所分配的limits.cpu大小
defaultRequest:
memory: 256Mi # 默认为命名空间中pod所分配的requests.memory内存
cpu: 0.5 # 默认为命名空间中pod所分配的limits.cpu大小
max: # 最大资源限制
memory: 1Gi
cpu: "1000m"
min: # 最小资源限制
memory: 1000Mi
cpu: "500m"
type: Container
# 更新limitrange,不会影响之前的pod
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 8.2 ResourceQuota资源清单文件
# ResourceQuota用于限制整个工作空间的资源使用情况,对象是整个命名空间
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard: # 在指定命名空间下,限制每个容器必须有内存请求和限制,以及cpu请求和限制大小,并且所有cpu请求总和不能够超过2cpu,其他以此类推
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
# 以下是对api对象资源进行的配额,按需分配,以下仅做演示
persistentvolumeclaims: "1"
services.loadbalancers: "2"
services.nodeports: "0"
replicationcontrollers: "1"
resourcequotas: "1"
pods: "10"
secrets: "2"
configmaps: "2"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 9. 综合示例
sample1:
---
apiVersion: v1
kind: Service
metadata:
labels:
app: test-yaml
name: test-yaml
namespace: freeswitch
spec:
ports:
- name: container-1-web-1
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: test-yaml
sessionAffinity: None
type: ClusterIP
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
creationTimestamp: null
name: test-yaml
spec:
rules:
- host: test.com
http:
paths:
- backend:
serviceName: test-yaml
servicePort: 8080
path: /
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: test-yaml
name: test-yaml
namespace: freeswitch
spec:
replicas: 3
selector:
matchLabels:
app: test-yaml
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
annotations:
info: test for yaml
labels:
app: test-yaml
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- test-yaml
topologyKey: kubernetes.io/hostname
weight: 100
containers:
- env:
- name: TZ
value: Asia/Shanghai
- name: LANG
value: C.UTF-8
image: nginx
imagePullPolicy: Always
lifecycle: {}
livenessProbe:
failureThreshold: 2
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 8080
timeoutSeconds: 2
name: test-yaml
ports:
- containerPort: 8080
name: web
protocol: TCP
readinessProbe:
failureThreshold: 2
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 8080
timeoutSeconds: 2
resources:
limits:
cpu: 195m
memory: 375Mi
requests:
cpu: 10m
memory: 10Mi
securityContext:
allowPrivilegeEscalation: false
capabilities: {}
privileged: false
procMount: Default
readOnlyRootFilesystem: false
runAsNonRoot: false
volumeMounts:
- mountPath: /usr/share/zoneinfo/Asia/Shanghai
name: tz-config
- mountPath: /etc/localtime
name: tz-config
- mountPath: /etc/timezone
name: timezone
dnsPolicy: ClusterFirst
hostAliases:
- hostnames:
- www.baidu.com
ip: 114.114.114.114
imagePullSecrets:
- name: myregistrykey
- name: myregistrykey2
restartPolicy: Always
securityContext: {}
volumes:
- hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
type: ""
name: tz-config
- hostPath:
path: /etc/timezone
type: ""
name: timezone
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
此文章基于该博客进行修改和增删: https://blog.csdn.net/weixin_44953658/article/details/116161926