k8s deployment文件属性简介

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
apiVersion: apps/v1 #指定api版本,此值必须在k8s api-versions中
kind: Deployment # 指定创建资源的角色/类型
metadata: # 资源的元数据/属性
name: # 资源的名字,在同一个namespace中必须唯一
namespace: # 部署在哪个namespace中
spec: # 资源规范字段
strategy: # 策略
type: RollingUpdate # 滚动更新策略
selector: # 选择器
matchLabels: # 匹配标签
app:
replicas: 1 # 声明副本数目
template: # 模版
metadata: # 资源的元数据/属性
labels: # 设定资源的标签
app: jxcc-trade-merchants-server
spec: # 资源规范字段
containers:
- name: # 容器的名字
image: # 容器使用的镜像地址
imagePullPolicy: Always # 每次Pod启动拉取镜像策略,三个选择 Always、Never、IfNotPresent
# Always,每次都检查;Never,每次都不检查(不管本地是否有);IfNotPresent,如果本地有就不检查,如果没有就拉取
args: ["test"] #指定dockerFile运行时,指定使用哪个bootstrap-xxx.ymal文件
ports: #容器端口
- containerPort:
- containerPort:
resources: # 资源管理
limits: # 最大使用
cpu: 1000m # CPU,1核心 = 1000m
memory: 2000Mi # 内存,1G = 1024Mi
requests: # 容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
cpu: 1000m
memory: 2000Mi
readinessProbe: # Pod 准备服务健康检查设置
httpGet:
path: /actuator/health
port:
scheme: HTTP
# 表明第一次检测在容器启动后多长时间后开始
initialDelaySeconds: 30
# 检查间隔时间
periodSeconds: 5
# 失败门槛,失败1次,pod杀掉,重启一个新的pod
failureThreshold: 1
# 成功门槛
successThreshold: 1
# 检测的超时时间
timeoutSeconds: 5
#pod生命周期
lifecycle:
preStop:
# exec方式会判断shell指令返回的状态码是否是0(成功状态)
exec:
command:
- bash
- -c
- 'curl -X "POST" "http:"'
# pod DNS的策略 ClusterFirst:默认的配置,所有请求会优先在集群所在域查询,如果没有才会转发到上游DNS
dnsPolicy: ClusterFirst
#重启策略 Always : 容器失效时,kubelet 自动重启该容器;
# 可选策略
# OnFailure : 容器终止运行且退出码不为0时重启;
# Never : 不论状态为何, kubelet 都不重启该容器。
restartPolicy: Always
#定义优雅关闭的宽限期,即在收到停止请求后,有多少时间来进行资源释放或者做其它操作,
#如果到了最大时间还没有停止,会被强制结束。默认30s
terminationGracePeriodSeconds: 30

关于metadata和template.metadata

metadata和template.metadata是两个不同的属性:

  • metadata: 描述该资源自身的元数据,如名称、namespace、标签等信息。这些信息描述和标识该资源对象本身。
  • template.metadata: 在模板化资源(如Deployment、Job等)中,template表示该资源所管理的子资源模板(如Pod模板),template.metadata则是模板子资源自己的元数据信息,如Pod的名称、标签等。

含义区分

区别概括:

  • metadata: 描述资源自身的元数据
  • template.metadata: 描述资源将要创建的子资源的元数据

举个例子,在Deployment资源中:

  • metadata表示该Deployment的名称、标签等标识信息
  • template.metadata表示该Deployment将要创建的Pod的名称、标签等信息

属性定义

  • metadata中必须定义name

  • 如果没有显式定义template.metadata.name,k8s会默认将Pod的名称设置为<deployment-name>-<random-string>

  • 但要注意其他对象如Job就必须显式定义template.metadata.name才会创建成功

  • template.metadata下必须定义label,spec.selector.matchLabels会在创建的时候去找template.metadata下指定的label