当前位置: 首页 > news >正文

yaml文件格式详解及实例

🍁博主简介

  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!

文章目录

  • yaml简介
  • yaml语法规则
  • Yaml语法实例
    • 数组(列表)实例; 短横线加空格(- )
    • Yaml 对象(字典)实例;用冒号加空格连接键和值(: )
    • Yaml 数组 对象结合(列表中的字典)实例;短横线加空格(- ),用冒号加空格连接键和值(: )
  • Yaml格式说明与实例
    • 格式说明
    • 实例

yaml简介

yaml 是专门用来写配置文件的语言

yaml文件也是一种配置文件类型,后缀名是.yaml或.yml都可以

运维适用于k8s、docker-compose,也是最近在学k8s要用到yaml文件格式

yaml语法规则

  • 大小写敏感
  • 使用缩进表示层级关系(不能用Tab,只能用空格)
  • 相同层级的元素左对齐
  • #号表示单行注释
  • 字符串可以不用引号标注
  • 数组(列表)是使用 - 开头的清单形式,- 后面必须加空格
  • 表示对象的 : 和表示数组(列表)的 - 后面都必须要有空格。可以使用 - 回车- 回车-回车 在一个文件里分隔多个 YAML 对象

Yaml语法实例

数组(列表)实例; 短横线加空格(- )

  - linux- name- windows

Yaml 对象(字典)实例;用冒号加空格连接键和值(: )

  Kubernetes: linux: vimname: 张三windows: steam

Yaml 数组 对象结合(列表中的字典)实例;短横线加空格(- ),用冒号加空格连接键和值(: )

containers: 
- image: mysql5.7.38name: mysqlrestart: alwaysports: - 6379:6379volumes: - /etc/localtime:/etc/localtime

Yaml格式说明与实例

格式说明

pod.yaml

# yaml格式的pod定义问件完整内容:
apiVersion: v1       #必选,版本号,例如v1
kind: Pod            #必选,Pod
metadata:            #必选,元数据name: string       #必选,Pod名称namespace: string  #必选,Pod所属的命名空间labels:            #自定义标签- name: string   #自定义标签名字annotations:       #自定义注释列表- name: string
spec:                #必选,Pod中容器的详细定义containers:        #必选,Pod中容器列表- name: string     #必选,容器名称image: string    #必选,容器的镜像名称imagePullPolicy: [Always | Never | IfNotPresent]    #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像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,默认TCPenv:                 #容器运行前需设置的环境变量列表- 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   #内存清楚,容器启动的初始可用数量livenessProbe:       #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种exec:              #对Pod容器内检查方式设置为exec方式command: [string]  #exec方式需要制定的命令或脚本httpGet:           #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、portpath: stringport: numberhost: stringscheme: stringHttpHeaders:- name: stringvalue: stringtcpSocket:         #对Pod内个容器健康检查方式设置为tcpSocket方式port: numberinitialDelaySeconds: 0   #容器启动完成后首次探测的时间,单位为秒timeoutSeconds: 0        #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒periodSeconds: 0         #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次successThreshold: 0failureThreshold: 0securityContext:privileged:falserestartPolicy: [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出nodeSelector: obeject  #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定将该Pod调度到包含这个label的node上,以key:value的格式指定imagePullSecrets:      #Pull镜像时使用的secret名称,以key:secretkey格式指定- name: stringhostNetwork:false      #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络volumes:               #在该pod上定义共享存储卷列表- name: string         #共享存储卷名称(volumes类型有很多种)emptyDir: {}         #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值hostPath: string     #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录path: string       #Pod所在宿主机的目录,将被用于同期中mount的目录secret:              #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部scretname: string  items:     - key: stringpath: stringconfigMap:           #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部name: stringitems:- key: string

deployment.yaml

apiVersion: extensions/v1beta1   #接口版本
kind: Deployment                 #接口类型
metadata:name: cango-demo               #Deployment名称namespace: cango-prd           #命名空间labels:app: cango-demo              #标签
spec:replicas: 3strategy:rollingUpdate:          #由于replicas为3,则整个升级,pod个数在2-4个之间maxSurge: 1           #滚动升级时会先启动1个podmaxUnavailable: 1     #滚动升级时允许的最大Unavailable的pod个数template:         metadata:labels:app: cango-demo     #模板名称必填sepc:                   #定义容器模板,该模板可以包含多个容器containers:                                                                   - name: cango-demo                                                              #镜像名称image: swr.cn-east-2.myhuaweicloud.com/cango-prd/cango-demo:0.0.1-SNAPSHOT    #镜像地址command: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ]             #启动命令args:                                                                         #启动参数- '-storage.local.retention=$(STORAGE_RETENTION)'- '-storage.local.memory-chunks=$(STORAGE_MEMORY_CHUNKS)'- '-config.file=/etc/prometheus/prometheus.yml'- '-alertmanager.url=http://alertmanager:9093/alertmanager'- '-web.external-url=$(EXTERNAL_URL)'
#如果command和args均没有写,那么用Docker默认的配置。
#如果command写了,但args没有写,那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command(不带任何参数的)。
#如果command没写,但args写了,那么Docker默认配置的ENTRYPOINT的命令行会被执行,但是调用的参数是.yaml中的args。
#如果如果command和args都写了,那么Docker默认的配置被忽略,使用.yaml的配置。imagePullPolicy: IfNotPresent  #如果不存在则拉取livenessProbe:       #表示container是否处于live状态。如果LivenessProbe失败,LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉httpGet:path: /health    #如果没有心跳检测接口就为/port: 8080scheme: HTTPinitialDelaySeconds: 60 #启动后延时多久开始运行检测timeoutSeconds: 5successThreshold: 1failureThreshold: 5readinessProbe:httpGet:path: /health     #如果没有心跳检测接口就为/port: 8080scheme: HTTPinitialDelaySeconds: 30 ##启动后延时多久开始运行检测timeoutSeconds: 5successThreshold: 1failureThreshold: 5resources:              ##CPU内存限制requests:cpu: 2memory: 2048Milimits:cpu: 2memory: 2048Mienv:                    ##通过环境变量的方式,直接传递pod=自定义Linux OS环境变量- name: LOCAL_KEY     #本地Keyvalue: value- name: CONFIG_MAP_KEY  #局策略可使用configMap的配置Key,valueFrom:configMapKeyRef:name: special-config   #configmap中找到name为special-configkey: special.type      #找到name为special-config里data下的keyports:- name: httpcontainerPort: 8080   #对service暴露端口volumeMounts:             #挂载volumes中定义的磁盘- name: log-cachemount: /tmp/log- name: sdb               #普通用法,该卷跟随容器销毁,挂载一个目录mountPath: /data/media    - name: nfs-client-root    #直接挂载硬方法,如挂载下面的nfs目录到/mnt/nfsmountPath: /mnt/nfs- name: example-volume-config  #高级用法第1种,将ConfigMap的log-script,backup-script分别挂载到/etc/config目录下的一个相对路径path/to/...下mountPath: /etc/config       - name: rbd-pvc                #高级用法第2种,挂载PVC(PresistentVolumeClaim)
#使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容volumes:  # 定义磁盘给上面volumeMounts挂载- name: log-cacheemptyDir: {}- name: sdb  #挂载宿主机上面的目录hostPath:path: /any/path/it/will/be/replaced- name: example-volume-config  # 供ConfigMap文件内容到指定路径使用configMap:name: example-volume-config  #ConfigMap中名称items:- key: log-script           #ConfigMap中的Keypath: path/to/log-script  #指定目录下的一个相对路径path/to/log-script- key: backup-script        #ConfigMap中的Keypath: path/to/backup-script  #指定目录下的一个相对路径path/to/backup-script- name: nfs-client-root         #供挂载NFS存储类型nfs:server: 10.42.0.55          #NFS服务器地址path: /opt/public           #showmount -e 看一下路径- name: rbd-pvc                 #挂载PVC磁盘persistentVolumeClaim:claimName: rbd-pvc1         #挂载已经申请的pvc磁盘

services.yaml

apiVersion: v1
kind: Service
matadata:                                #元数据name: string                           #service的名称namespace: string                      #命名空间labels:                                #自定义标签属性列表- name: stringannotations:                           #自定义注解属性列表- name: string
spec:                                    #详细描述selector: []                           #label selector配置,将选择具有label标签的Pod作为管理#范围type: string                           #service的类型,指定service的访问方式,默认为#clusterIpclusterIP: string                      #虚拟服务地址sessionAffinity: string                #是否支持sessionports:                                 #service需要暴露的端?列表- name: string                         #端口名称protocol: string                     #端口协议,支持TCP和UDP,默认TCPport: int                            #服务监听的端口号targetPort: int                      #需要转发到后端Pod的端口号nodePort: int                        #当type = NodePort时,指定映射到物理机的端口号status:                                #当spce.type=LoadBalancer时,设置外部负载均衡器的地址loadBalancer:                        #外部负载均衡器ingress:                           #外部负载均衡器ip: string                       #外部负载均衡器的Ip地址值hostname: string                 #外部负载均衡器的主机名

job.yaml

apiVersion: batch/v1
kind: Job
metadata:name: job-demo
spec:template:metadata:name: job-demospec:restartPolicy: Never  #Job的RestartPolicy仅支持Never和OnFailure两种,不支持Always,我们知道Job就相当于来执行一个批处理任务,执行完就结束了containers:- name: counterimage: busyboxcommand:- "bin/sh"- "-c"- "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done

Cronjob.yaml

CronJob其实就是在Job的基础上加上了时间调度,我们可以:在给定的时间点运行一个任务,也可以周期性地在给定时间点运行。这个实际上和我们Linux中的crontab就非常类似了。一个CronJob对象其实就对应中crontab文件中的任务,它根据配置的时间格式周期性地运行一个Job,格式和crontab也是一样的。

#crontab的格式如下:
#分时日月周要运行的命令第1列分钟0~59 第2列时0~23)第3列日1~31 第4列月1~12 第5列周0~7(0和7表示星期天)第6列要运行的命令
apiVersion: batch/v2alpha1
kind: CronJob
metadata:name: cronjob-demo
spec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:restartPolicy: OnFailurecontainers:- name: helloimage: busyboxargs:- "bin/sh"- "-c"- "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"

我们这里的Kind是CronJob了,要注意的是.spec.schedule字段是必须填写的,用来指定任务运行的周期,格式就和crontab一样,另外一个字段是.spec.jobTemplate, 用来指定需要运行的任务,格式当然和Job是一致的。还有一些值得我们关注的字段.spec.successfulJobsHistoryLimit和.spec.failedJobsHistoryLimit,表示历史限制,是可选的字段。它们指定了可以保留多少完成和失败的Job,默认没有限制,所有成功和失败的Job都会被保留。然后,当运行一个Cron Job时,Job可以很快就堆积很多,所以一般推荐设置这两个字段的值。如果设置限制的值为 0,那么相关类型的Job完成后将不会被保留。

实例

cs.yaml

apiVersion: v1  #API版本号,用于迭代我们的更新版本
kind: Pod       #资源对象的类型,有pod,Node,Job,Service
metadata:       #资源元数据,标记对象,方便管理name: hll-pod #给pod起名称labels:       #给pod打标签,方便找env: demo   #注入容器内的环境变量owner: feifei
spec:           #资源规格,pod内容器相关信息replicas: 1   #副本数量selector:     #标签选择器matchLabels:app: webtemplate:     #pod模板metadata:   #pod元数据labels:   #给pod打标签,方便找app: webspec:         #pod规格containers:   #容器配置- image: nll:v1    #运行容器镜像name: nll              #容器名称ports:                 #端口号- containerPort: 80    #容器端口号- 8090:8221            #容器内服务映射端口volumes:                 #容器持久化- /etc/localtime:/etc/localtime         #容器内服务映射路径restart: always          #重启容器直接重启服务

k8s yaml文件创建和删除

kubectl apply -f cs.yml
kubectl delete -f cs.yml

docker-compose文件创建

docker-compose -f cs.yaml up -d

注意:docker-compose和k8s用的yaml文件写法还是有一些区别的。

http://www.lryc.cn/news/24321.html

相关文章:

  • AOP在PowerJob中的使用,缓存锁保证并发安全,知识细节全总结
  • 对账平台设计
  • JavaEE进阶第五课:SpringBoot的创建和使用
  • 我带过的一名C++实习生——Z同学
  • 面试题13. 机器人的运动范围
  • LeetCode189_189. 轮转数组
  • java Files和Paths的使用详解 附有使用demo
  • 如何使用ApacheTomcatScanner扫描Apache Tomcat服务器漏洞
  • js中的定时器 setTimeout()和setInterval()
  • 【吃透Js】深入学习浅拷贝和深拷贝
  • AUTOSAR为啥要开发新的社区商业模式?
  • 数据结构和算法面试常见题必考以及前端面试题
  • 一文解决Python所有报错
  • LeetCode 1237. Find Positive Integer Solution for a Given Equation【双指针,二分,交互】
  • 【C语言】结构体进阶
  • 全志T3+FPGA国产核心板——Pango Design Suite的FPGA程序加载固化
  • 深度学习之 imgaug (图像增强)学习笔记
  • mysql字符串等值查询中条件字段值末尾有空格也能查到数据问题
  • 一个关于事件溯源Event Sourcing的小荔枝,Golang实现
  • Vue3 组合式函数,实现minxins
  • 什么是钉钉消息推送?
  • 利用 NVIDIATAO 和 WeightBias 加速AI开发
  • token - 令牌
  • 应用模型开发指南上新介绍
  • Dbeaver连接Hive数据库操作指导
  • 【RabbitMQ笔记09】消息队列RabbitMQ之常见方法的使用
  • Linux字符设备驱动模型之设备号
  • C++多态原理
  • PMP认证与NPDP认证哪个含金量高?
  • 改进YOLOv7-Tiny系列:首发改进结合BiFPN结构的特征融合网络,网络融合更多有效特征,高效涨点