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.yamldry-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

apiVersion: v1
kind: Endpoints
metadata: ------------------------------------#元数据name: glusterfs ----------------------------#ep名称namespace: default -------------------------#命名空间
subsets: -------------------------------------#配置glusterfs连接信息
- addresses: ---------------------------------#添加glusterfs分布式地址- ip: 10.0.0.14 - ip: 10.0.0.15- ip: 10.0.0.16ports: -------------------------------------#设定glusterfs服务端口- port: 49152protocol: TCP

1.2 glusterfs server. yaml

apiVersion: v1
kind: Service
metadata: name: glusterfsnamespace: default
spec:ports:- port: 49152protocol: TCPtargetPort: 49152sessionAffinity: None ----------------------#是否支持sessiontype: ClusterIP

2.PV.yaml

apiVersion: v1
kind: PersistentVolume
metadata: -------------------------------------#元数据name: tomcat-mysql --------------------------#pv名称labels: -------------------------------------#标签信息xxx: xxx
spec: -----------------------------------------#定义pv模板capacity: -----------------------------------#定义pv容量storage: 10Gi accessModes: --------------------------------#访问模型;对象列表 #ReadWriteOnce一人读写#ReadOnlyMany 多人只读#ReadWriteMany多人读写- ReadWriteMany persistentVolumeReclaimPolicy: Recycle ------#pvc解除绑定后,数据操作#默认是Retain保留生成的数据、#recycle回收#delete,删除
=========================================================================================  #nfs: 类型nfs:  ---------------------------------------#nfs挂载类型path: "/data/tomcat" ----------------------#nfs服务目录server: 172.16.20.101 ---------------------#nfs服务地址readOnly: false ---------------------------#关闭只读
=========================================================================================#glusterfs:分布式类型 注意:使用glusterfs 需要提交部署endpoint服务glusterfs:  -------------------------------#glusterfs挂载类型endpoints: "glusterfs" --------------------#端点类型 请保持与glusterfs ep服务名称一致。path: "qiangge" ---------------------------#挂载目录 glusterfs文件名称readOnly: false ---------------------------#关闭只读

3.PVC.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata: -------------------------------------#元数据name: html ----------------------------------#pvc名称namespace: xxxx -----------------------------#命名空间
spec: -----------------------------------------#pvc模板selector: -----------------------------------#标签选择器matchLabels:  -----------------------------#必须与pv标签信息一致才可关联 如果不指定则随机匹配pvxxx: xxxaccessModes: --------------------------------#访问模型;对象列表 #ReadWriteOnce一人读写#ReadOnlyMany 多人只读#ReadWriteMany多人读写- ReadWriteManyresources: ----------------------------------#资源信息requests: ---------------------------------#请求容量storage: 99GistorageClassName: xxxx -----------------#存储类名称 注意1.5.2版本不可用volumeMode: Filesystem ----------------------#卷模式为文件系统 注意1.5.2版本不可用volumeName: pvc-ff926bb2-3029-4a08-b123-31a2ad1b6a19 --#卷名称

4.Deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:   ----------------------------------------#元数据annotations: -------------------------------------#注释信息deployment.kubernetes.io/revision: '1'k8s.kuboard.cn/ingress: 'false'k8s.kuboard.cn/service: NodePortk8s.kuboard.cn/workload: nextcloudlabels:-------------------------------------------#标签信息k8s.kuboard.cn/layer: ''                     k8s.kuboard.cn/name: nextcloudname: nextcloud-----------------------------------#名称namespace: nextcloud------------------------------#命名空间
spec:-----------------------------------------------#定义容器模板,该模板可以包含多个容器  replicas: 3---------------------------------------#副本数量selector:-----------------------------------------#标签选择器matchLabels:k8s.kuboard.cn/layer: ''k8s.kuboard.cn/name: nextcloudstrategy:-----------------------------------------#滚动升级策略type: RollingUpdate-----------------------------#类型rollingUpdate:----------------------------------#由于replicas为3,则整个升级,pod个数在2-4个之间     maxSurge: 25%---------------------------------#滚动升级时会先启动25%pod  maxUnavailable: 25%---------------------------#滚动升级时允许的最大Unavailable的pod个数template:                                         #镜像模板                                       metadata:   ------------------------------------#元数据labels:---------------------------------------#标签k8s.kuboard.cn/layer: ''k8s.kuboard.cn/name: nextcloudspec: ------------------------------------------#定义容器模板,该模板可以包含多个容器containers: ----------------------------------#容器信息- name: nextcloud --------------------------#容器名称image: '172.16.20.100/library/nextcloud:yan' #镜像名称imagePullPolicy: Always ------------------#镜像下载策略    ports:- name: httpcontainerPort: 80protocol: TCPenvresources: -------------------------------#CPU内存限制limits:    --------------------------------#限制cpu内存                                            cpu: 200mmemory: 200mrequests: ------------------------------#请求cpu内存cpu: 100mmemory: 100msecurityContext: -------------------------#安全设定privileged: true -----------------------#开启享有特权volumeMounts:   ----------------------------#挂载volumes中定义的磁盘- name: html ---------------------------#挂载容器1mountPath: /var/www/html - name: session ------------------------#挂载容器1mountPath: /var/lib/php/session              volumes:  ------------------------------------#在该pod上定义共享存储卷列表- name: html -------------------------------#共享存储卷名称 (volumes类型有很多种)persistentVolumeClaim: -------------------#volumes类型为pvcclaimName: html  -----------------------#关联pvc名称- name: sessionpersistentVolumeClaim:claimName: session             restartPolicy: Always ------------------------#Pod的重启策略 #Always表示一旦不管以何种方式终止运行,#kubelet都将重启,#OnFailure表示只有Pod以非0退出码退出才重启,#Nerver表示不再重启该PodschedulerName: default-scheduler -------------#指定pod调度到节点

5.Pod.yaml

  apiVersion: v1             #指定api版本,此值必须在kubectl apiversion中  kind: Pod                  #指定创建资源的角色/类型  metadata:                  #资源的元数据/属性  name: django-pod         #资源的名字,在同一个namespace中必须唯一  labels:                  #设定资源的标签,使这个标签在service网络中备案,以便被获知k8s-app: djangoversion: v1  kubernetes.io/cluster-service: "true"  annotations:             #设置自定义注解列表  - name: String         #设置自定义注解名字  spec:                      #设置该资源的内容  restartPolicy: Always    #表示自动重启,一直都会有这个容器运行nodeSelector:            #选择node节点14     zone: node1  containers:  - name: django-pod        #容器的名字  image: django:v1.1      #容器使用的镜像地址  imagePullPolicy: Never #三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略,# Always,每次都检查# Never,每次都不检查(不管本地是否有)# IfNotPresent,如果本地有就不检查,如果没有就拉取command: ['sh']        #启动容器的运行命令,将覆盖容器中的Entrypoint,对应Dockefile中的ENTRYPOINT  args: ["$(str)"]       #启动容器的命令参数,对应Dockerfile中CMD参数  env:                   #指定容器中的环境变量  - name: str            #变量的名字  value: "/etc/run.sh" #变量的值  resources:             #资源管理requests:            #容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行  cpu: 0.1           #CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)memory: 32Mi       #内存使用量  limits:              #资源限制  cpu: 0.5  memory: 32Mi  ports:  - containerPort: 8080    #容器开发对外的端口name: uwsgi          #名称protocol: TCP  livenessProbe:         #pod内容器健康检查的设置httpGet:             #通过httpget检查健康,返回200-399之间,则认为容器正常  path: /            #URI地址  port: 8080  #host: 127.0.0.1   #主机地址  scheme: HTTP  initialDelaySeconds: 180 #表明第一次检测在容器启动后多长时间后开始  timeoutSeconds: 5    #检测的超时时间  periodSeconds: 15    #检查间隔时间  #也可以用这种方法  #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:          #挂载设置- name: volume         #挂载设备的名字,与volumes[*].name 需要对应    mountPath: /data     #挂载到容器的某个路径下  readOnly: True  volumes:                 #定义一组挂载设备  - name: volume           #定义一个挂载设备的名字  #meptyDir: {}  hostPath:  path: /opt           #挂载设备类型为hostPath,路径为宿主机下的/opt

6.Service.yaml

apiVersion: v1
kind: Service
metadata:  ---------------------------------#元数据annotations: -----------------------------#注释信息k8s.kuboard.cn/workload: nextcloudlabels: ----------------------------------#标签信息k8s.kuboard.cn/layer: ''k8s.kuboard.cn/name: nextcloudname: nextcloud --------------------------#名称namespace: nextcloud ---------------------#命名空间
spec: --------------------------------------#定义Service模板clusterIP: 10.0.181.206 ------------------#指定svcip地址 不指定则随机 =================================================================================================#NodePort类型:集群外网络type: NodePort ---------------------------#类型为NodePort  ports:- name: mnwwwpnodePort: 30001 ----------------------#当type = NodePort时,指定映射到物理机的端口号port: 80 -----------------------------#服务监听的端口号protocol: TCP ------------------------#端口协议,支持TCP和UDP,默认TCPtargetPort: 80 -----------------------#需要转发到后端Pod的端口号==================================================================================================#ClusterIP类型: 集群内网络type: ClusterIP --------------------------#ports:- name: mnwwwpport: 80protocol: TCPtargetPort: 80- name: j5smwxport: 22protocol: TCPtargetPort: 22selector:  -------------------------------#label selector配置,将选择具有label标签的Pod作为管理 k8s.kuboard.cn/layer: ''k8s.kuboard.cn/name: nextcloudsessionAffinity: None --------------------#是否支持session

三、kubernetes 集群 YAML 文件详解相关推荐

  1. 5、kubernetes 集群 YAML 文件详解

    文章目录 一.概述 二.YAML文件介绍 2.1 YAML概述 2.2 YAML 基本语法 2.3 YAML 支持的数据结构 2.3.1 对象 2.3.2 数组 2.3.3 纯量(scalars) 三 ...

  2. 【删】【Kubernetes视频学习笔记】Kubernetes集群YAML文件详解

    文章目录 概述 YAML文件介绍 YAML概述 YAML 基本语法 YAML 支持的数据结构 对象 数组 YAML文件组成部分 控制器的定义 被控制的对象 属性说明 如何快速编写YAML文件 使用ku ...

  3. Kubernetes 集群安全机制详解

    本文主要介绍 Kubernetes 的安全机制,如何使用一系列概念.技术点.机制确保集群的访问是安全的,涉及到的关键词有:api-server,认证,授权,准入控制,RBAC,Service Acco ...

  4. 运维工程师必备之负载 均衡集群及LVS详解

    原文地址:运维工程师必备之负载 均衡集群及LVS详解作者:蚁巡运维平台 来源: chrinux 的BLOG 时间: 2013-07-01 14:00 此博文主要介绍集群和负载均衡的基本理论和类别,内容 ...

  5. 04_Flink-HA高可用、Standalone集群模式、Flink-Standalone集群重要参数详解、集群节点重启及扩容、启动组件、Flink on Yarn、启动命令等

    1.4.Flink集群安装部署standalone+yarn 1.4.1.Standalone集群模式 1.4.2.Flink-Standalone集群重要参数详解 1.4.3.集群节点重启及扩容 1 ...

  6. Kafka单机、集群模式安装详解(二)

    本文环境如下: 操作系统:CentOS 6 32位 JDK版本:1.8.0_77 32位 Kafka版本:0.9.0.1(Scala 2.11) 接上篇 Kafka单机.集群模式安装详解(一) 6. ...

  7. Linux 高可用(HA)集群之Pacemaker详解

    大纲 说明:本来我不想写这篇博文的,因为前几篇博文都有介绍pacemaker,但是我觉得还是得写一下,试想应该会有博友需要,特别是pacemaker 1.1.8(CentOS 6.4)以后,pacem ...

  8. redis cluster 集群 安装 配置 详解

    redis cluster 集群 安装 配置 详解 张映 发表于 2015-05-01 分类目录: nosql 标签:cluster, redis, 安装, 配置, 集群 Redis 集群是一个提供在 ...

  9. nc 模拟服务器_NC集群服务器使用详解

    NC 集群服务器使用详解 NC220 发版时,对中间件做了一项重大改进,对集群服务器应用提供了全面解决方案 的支持, 使产品更加能够适应集团企业的大规模应用. 本文力争以通俗的语言, 描述集群服 务器 ...

最新文章

  1. 里氏替换原则(Liskov Substitution Principle,LSP)
  2. Boost:connect pair连接对测试程序
  3. 【转】C++/CLI入门系列 第二篇:封装C++ dll库,提供接口给C#调用
  4. ssl问题解决的过程
  5. Shiro系列-Shiro简介
  6. datagridview 设置选中行_Sublime Text 3最好的功能、插件和设置
  7. android:layout_margintop=3dip,南昌航空大学android期末复习资料之 编程题.pdf
  8. group by 深入总结
  9. hi3798 run linux,EC6108V9(HI3798MV100)刷(linux)ubuntu16.04
  10. CentOS Stream 9 下如何安装使用花生壳并做内网穿透建站
  11. 学习打印机,了解打印命令
  12. 操作系统重点_重点:运动系统
  13. 【文字识别】OCR截图文字识别提取(无需安装)拖拽图片,打开图片,图片PDF转文字的好帮手
  14. android 高德地图动画,使用MotionLayout实现高德地图bottomSheets效果
  15. buildroot 交叉编译 剥离arm架构的二进制文件
  16. 第六章——总线系统(2)
  17. T400 Windows7下面迅盘的启用
  18. 优化问题-GP(几何规划,Geometric Program)
  19. 【verbs】ibv_get_cq_event|ibv_ack_cq_events()
  20. 使用vite从开始搭建vue项目

热门文章

  1. 内网穿透(natapp、续断、花生壳)
  2. 杰里之检测灵敏度级别确定【篇】
  3. Windows 7 旗舰版 With SP1 OEM 33in1 贺岁版
  4. 关于android产品与平台的mk配置
  5. 事物日志恢复 mysql_一种基于事务日志的Mysql数据恢复方法与流程
  6. kafka mysql 迁移_一种Kafka与Elasticsearch数据库数据的互相迁移方法与流程
  7. 深度学习:AlexNet实现服装分类(Pytorch)
  8. bugreport实战
  9. 为什么说固定资产管理系统是企业降本增效的利器?
  10. java 百度鹰眼sdk,百度鹰眼之工具类