1. 简单说明
是一个可读性高,用来表大数据列的格式。Yaml的意思其实是:仍是一种标记语言,但是为了强调这种语言以数据为中心。而不是以标记语言为重点。
2. 基本语法
- 缩进时不允许使用Tab键,只允许使用空格
- 缩进时空格数目不重要,只要相同层级的元素左侧对齐即可
- #标识注释,从这个字节一直到行尾,都会被解释器忽略
- 使用—表示新的yaml文件开始
3. YAML支持的数据结构
- 对象:键值对的集合,又称为映射(mapping)、哈希(hashes)/字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence)/ 列表 (list)
- 纯量(scalars):单个的,不可再分的值
4. K8S YAML字段
4.1必须存在的属性
参数名称 | 字段类型 | 说明 |
version | String | 这里是指的K8S API版本。目前基本上是v1,可以使用kubectl api-versions 命令查询 |
kind | String | 这里指的时yaml文件定义的资源类型和角色,比如:Pod |
metadata | Object | 元数据对象,固定值就写metadata |
metadata.name | String | 元数据对象的名字,这里由我们编写,比我命名Pod的名字 |
metadata.namespace | String | 元数据对象的命名空间,有我们自身定义 |
Spec | Object | 详细定义对象,固定值就写spec |
spec.containers[] | list | 这里时spec对象的容器列表定义,是个列表 |
Spec.containers[].name | String | 这里定义容器的名字 |
spec.containers[].image | String | 这里定义要用到的镜像名称 |
4.2 主要对象
参数名称 | 字段类型 | 说明 |
spec.containers[].name | String | 定义容器的名字 |
spec.containers[].image | 定义要用到的镜像名称 | |
spec.containers[].imagePullPolicy | 定义镜像拉取策略,有Always(每次都尝试重新拉取镜像)、Nerver(表示仅适用本地镜像)、IfNotPresent(如果本地有镜像就是用本地镜像,如果没有就拉取在线镜像)三个值可选。默认值是Always | |
spec.containers[].command[] | List | 只定容器启动命令,因为是数组可以指定多个,不指定则使用镜像打包时使用的启动命令。 |
spec.containers[].args[] | List | 指定容器启动命令参数,因为是数组可以指定多个。 |
spec.containers[].workingDir | String | 指定容器的工作目录 |
spec.containers[].volumeMounts[] | List | 指定容器内部的存储卷配置 |
spec.containers[].volumeMounts[].name | String | 指定可以呗容器挂在的存储卷的名称。 |
spec.containers[].volumeMounts[].mountPath | String | 指定可以被容器挂在的存储卷的路径 |
spec.containers[].volumeMounts[].readOnly | String | 设置存储卷路径的读写模式,true或者false,默认未读写模式 |
spec.containers[].ports[]. | List | 指定容器需要用到的端口列表 |
spec.containers[].ports[].name | String | 指定端口名称 |
spec.containers[].ports[].containerPort | String | 指定容器需要监听的端口号 |
spec.containers[].ports[]/hostPort | String | 指定容器锁在主机需要坚挺的端口号,默认跟上面containerPort相同,注意设置hostPort同一台主机无法启动该容器的相同副本,(因为主机的端口号不能相同,这样会冲突) |
spec.containers[].ports[].protocol | String | 指定端口协议,支持TCP和UDP,默认值为TCP。 |
spec.containers[].env[] | List | 指定容器运行前需设置的环境变量列表 |
spec.containers[].env[].name | String | 指定环境变量名称 |
spec.containers[].env[].value | String | 指定环境变量值 |
spec.containers[].resources | Object | 指定资源限制和资源请求的值,(这里开始就是设置容器的资源上限) |
spec.containers[].resources.limits | Object | 指定设置容器运行时资源的运行上限 |
spec.containers[].resources.limits.cpu | String | 指定CPU的闲置,单位为core数,将用于docker run --cpu-shares参数(这里前面文件Pod。) |
spec.containers[].resources.limits.memory | String | 指定MEM内存的闲置,单位为MIB,GIB |
spec.containers[].resources.requests | Object | 指定容器启动和调度时闲置设置 |
spec.containers[].resources.requests.cpu | String | CPU请求,单位core数,容器启动时初始化可用数量 |
spec.containers[].resources.requests.memory | String | 内存请求,单位为MiB,GiB,容器启动时初始可用数量 |
spec.restartPolicy | String | 定义Pod的重启策略,可选值为Always,OnFailure,默认值为Always。 1.Always:Pod一旦终止运行,则无论容器时如何终止的,kubelet服务都讲重启它。2.OnFailure:只有Pod以非零退出码终止时,kubelet才会重启该容器,如果容器正常结束(退出码为0),泽kubelet将不会重启它。3.Never:Pod终止后,kubelet将退出码报告给Master,不会重启该Pod。 |
spec.nodeSelector | Object | 定义Node的Label过滤标签。以key:value |
spec.imagePullSecrets | Object | 定义Pull镜像时使用secret名称,以name:secretkey格式指定 |
spec.hostNetwork | Boolean | 定义是否使用网络模式,默认值为false。设置true表示使用宿主机网络,不实用docker网桥,同事设置了true将无法在同一台宿主机上启动第二个副本。 |
5.如何快速编写yaml文件
5.1 使用kubectl create命令生成yaml文件
kubectl create deployment web --image=nginx -o yaml --dry-run > my1.yaml
dry-run #不启动改Pod
-o #输入yaml文件5.2 使用kubectl get 命令导出Pod的yaml文件
kubectl get deploy nginx -o yaml > my.yaml各种实例资源YAML文件手册
1.glusterfsPV.yaml
1.1 endpoint. yaml
apiVersionv1
kindEndpoints
metadata------------------------------------#元数据
nameglusterfs ----------------------------#ep名称
namespacedefault -------------------------#命名空间
subsets-------------------------------------#配置glusterfs连接信息
addresses---------------------------------#添加glusterfs分布式地址
ip10.0.0.14
ip10.0.0.15
ip10.0.0.16
ports-------------------------------------#设定glusterfs服务端口
port49152
protocolTCP1.2 glusterfs server. yaml
apiVersionv1
kindService
metadata
nameglusterfs
namespacedefault
spec
ports
port49152
protocolTCP
targetPort49152
sessionAffinityNone ----------------------#是否支持session
typeClusterIP2.PV.yaml
apiVersionv1
kindPersistentVolume
metadata-------------------------------------#元数据
nametomcat-mysql --------------------------#pv名称
labels-------------------------------------#标签信息
xxxxxx
spec-----------------------------------------#定义pv模板
capacity-----------------------------------#定义pv容量
storage10Gi
accessModes--------------------------------#访问模型;对象列表
#ReadWriteOnce一人读写
#ReadOnlyMany 多人只读
#ReadWriteMany多人读写
ReadWriteMany
persistentVolumeReclaimPolicyRecycle ------#pvc解除绑定后,数据操作
#默认是Retain保留生成的数据、
#recycle回收
#delete,删除
=========================================================================================
#nfs: 类型
nfs---------------------------------------#nfs挂载类型
path"/data/tomcat" ----------------------#nfs服务目录
server172.16.20.101 ---------------------#nfs服务地址
readOnlyfalse ---------------------------#关闭只读
=========================================================================================
#glusterfs:分布式类型 注意:使用glusterfs 需要提交部署endpoint服务
glusterfs-------------------------------#glusterfs挂载类型
endpoints"glusterfs" --------------------#端点类型 请保持与glusterfs ep服务名称一致。
path"qiangge" ---------------------------#挂载目录 glusterfs文件名称
readOnlyfalse ---------------------------#关闭只读3.PVC.yaml
apiVersionv1
kindPersistentVolumeClaim
metadata-------------------------------------#元数据
namehtml ----------------------------------#pvc名称
namespacexxxx -----------------------------#命名空间
spec-----------------------------------------#pvc模板
selector-----------------------------------#标签选择器
matchLabels-----------------------------#必须与pv标签信息一致才可关联 如果不指定则随机匹配pv
xxxxxx
accessModes--------------------------------#访问模型;对象列表
#ReadWriteOnce一人读写
#ReadOnlyMany 多人只读
#ReadWriteMany多人读写
ReadWriteMany
resources----------------------------------#资源信息
requests---------------------------------#请求容量
storage99Gi
storageClassNamexxxx -----------------#存储类名称 注意1.5.2版本不可用
volumeModeFilesystem ----------------------#卷模式为文件系统 注意1.5.2版本不可用
volumeNamepvc-ff926bb2-3029-4a08-b123-31a2ad1b6a19 --#卷名称4.Deployment.yaml
apiVersionextensions/v1beta1
kindDeployment
metadata----------------------------------------#元数据
annotations-------------------------------------#注释信息
deployment.kubernetes.io/revision'1'
k8s.kuboard.cn/ingress'false'
k8s.kuboard.cn/serviceNodePort
k8s.kuboard.cn/workloadnextcloud
labels:-------------------------------------------#标签信息
k8s.kuboard.cn/layer''
k8s.kuboard.cn/namenextcloud
namenextcloud-----------------------------------#名称
namespacenextcloud------------------------------#命名空间
spec:-----------------------------------------------#定义容器模板,该模板可以包含多个容器
replicas3---------------------------------------#副本数量
selector:-----------------------------------------#标签选择器
matchLabels
k8s.kuboard.cn/layer''
k8s.kuboard.cn/namenextcloud
strategy:-----------------------------------------#滚动升级策略
typeRollingUpdate-----------------------------#类型
rollingUpdate:----------------------------------#由于replicas为3,则整个升级,pod个数在2-4个之间
maxSurge25%---------------------------------#滚动升级时会先启动25%pod
maxUnavailable25%---------------------------#滚动升级时允许的最大Unavailable的pod个数
template#镜像模板
metadata------------------------------------#元数据
labels:---------------------------------------#标签
k8s.kuboard.cn/layer''
k8s.kuboard.cn/namenextcloud
spec------------------------------------------#定义容器模板,该模板可以包含多个容器
containers----------------------------------#容器信息
namenextcloud --------------------------#容器名称
image'172.16.20.100/library/nextcloud:yan' #镜像名称
imagePullPolicyAlways ------------------#镜像下载策略
ports
namehttp
containerPort80
protocolTCP
env
resources-------------------------------#CPU内存限制
limits--------------------------------#限制cpu内存
cpu200m
memory200m
requests------------------------------#请求cpu内存
cpu100m
memory100m
securityContext-------------------------#安全设定
privilegedtrue -----------------------#开启享有特权
volumeMounts----------------------------#挂载volumes中定义的磁盘
namehtml ---------------------------#挂载容器1
mountPath/var/www/html
namesession ------------------------#挂载容器1
mountPath/var/lib/php/session
volumes------------------------------------#在该pod上定义共享存储卷列表
namehtml -------------------------------#共享存储卷名称 (volumes类型有很多种)
persistentVolumeClaim-------------------#volumes类型为pvc
claimNamehtml -----------------------#关联pvc名称
namesession
persistentVolumeClaim
claimNamesession
restartPolicyAlways ------------------------#Pod的重启策略
#Always表示一旦不管以何种方式终止运行,
#kubelet都将重启,
#OnFailure表示只有Pod以非0退出码退出才重启,
#Nerver表示不再重启该Pod
schedulerNamedefault-scheduler -------------#指定pod调度到节点5.Pod.yaml
apiVersionv1 #指定api版本,此值必须在kubectl apiversion中
kindPod #指定创建资源的角色/类型
metadata#资源的元数据/属性
namedjango-pod #资源的名字,在同一个namespace中必须唯一
labels#设定资源的标签,使这个标签在service网络中备案,以便被获知
k8s-appdjango
versionv1
kubernetes.io/cluster-service"true"
annotations#设置自定义注解列表
nameString #设置自定义注解名字
spec#设置该资源的内容
restartPolicyAlways #表示自动重启,一直都会有这个容器运行
nodeSelector#选择node节点14 zone: node1
containers
namedjango-pod #容器的名字
imagedjangov1.1 #容器使用的镜像地址
imagePullPolicyNever #三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略,
# Always,每次都检查
# Never,每次都不检查(不管本地是否有)
# IfNotPresent,如果本地有就不检查,如果没有就拉取
command'sh' #启动容器的运行命令,将覆盖容器中的Entrypoint,对应Dockefile中的ENTRYPOINT
args"$(str)" #启动容器的命令参数,对应Dockerfile中CMD参数
env#指定容器中的环境变量
namestr #变量的名字
value"/etc/run.sh" #变量的值
resources#资源管理
requests#容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
cpu0.1 #CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)
memory32Mi #内存使用量
limits#资源限制
cpu0.5
memory32Mi
ports
containerPort8080 #容器开发对外的端口
nameuwsgi #名称
protocolTCP
livenessProbe#pod内容器健康检查的设置
httpGet#通过httpget检查健康,返回200-399之间,则认为容器正常
path/ #URI地址
port8080
#host: 127.0.0.1 #主机地址
schemeHTTP
initialDelaySeconds180 #表明第一次检测在容器启动后多长时间后开始
timeoutSeconds5 #检测的超时时间
periodSeconds15 #检查间隔时间
#也可以用这种方法
#exec: 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常
# command:
# - cat
# - /tmp/health
#也可以用这种方法
#tcpSocket: //通过tcpSocket检查健康
# port: number
lifecycle#生命周期管理(钩子)
postStart#容器运行之前运行的任务
exec
command
'sh'
'yum upgrade -y'
preStop#容器关闭之前运行的任务
exec
command'service httpd stop'
volumeMounts#挂载设置
namevolume #挂载设备的名字,与volumes[*].name 需要对应
mountPath/data #挂载到容器的某个路径下
readOnlyTrue
volumes#定义一组挂载设备
namevolume #定义一个挂载设备的名字
#meptyDir: {}
hostPath
path/opt #挂载设备类型为hostPath,路径为宿主机下的/opt6.Service.yaml
apiVersionv1
kindService
metadata---------------------------------#元数据
annotations-----------------------------#注释信息
k8s.kuboard.cn/workloadnextcloud
labels----------------------------------#标签信息
k8s.kuboard.cn/layer''
k8s.kuboard.cn/namenextcloud
namenextcloud --------------------------#名称
namespacenextcloud ---------------------#命名空间
spec--------------------------------------#定义Service模板
clusterIP10.0.181.206 ------------------#指定svcip地址 不指定则随机
=================================================================================================
#NodePort类型:集群外网络
typeNodePort ---------------------------#类型为NodePort
ports
namemnwwwp
nodePort30001 ----------------------#当type = NodePort时,指定映射到物理机的端口号
port80 -----------------------------#服务监听的端口号
protocolTCP ------------------------#端口协议,支持TCP和UDP,默认TCP
targetPort80 -----------------------#需要转发到后端Pod的端口号
==================================================================================================
#ClusterIP类型: 集群内网络
typeClusterIP --------------------------#
ports
namemnwwwp
port80
protocolTCP
targetPort80
namej5smwx
port22
protocolTCP
targetPort22
selector-------------------------------#label selector配置,将选择具有label标签的Pod作为管理
k8s.kuboard.cn/layer''
k8s.kuboard.cn/namenextcloud
sessionAffinityNone --------------------#是否支持session








