YAML文件语法

文章目录

  • Yaml基础
  • YAML语法规则:
  • YAML Maps
  • YAML Lists
  • 数据结构嵌套
    • map嵌套map
    • list嵌套list
    • list嵌套map

Yaml基础

因为工作需要学习K8s,故得学习一下yaml语法

yaml是一种简洁的非标记语言,YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。

YAML语法规则:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • ”#” 表示注释,从这个字符一直到行尾,都会被解析器忽略
  • 字符串可以不用引号标注
  • 列表项,通过减号“-”加一个空格,多个项使用同样缩进级别做为同一列表部分
  • map结构里面的键值对(key/value)用冒号“:”来分割
  • 数组用“[]”包括起来,hash用“{}”来包括

以上就是yaml的语法

在Kubernetes中,只需要知道两种结构类型即可:

Lists
Maps
scalar  在k8s中不使用此类型

使用YAML用于K8s的定义带来的好处包括:

  • 便捷性:不必添加大量的参数到命令行中执行命令
  • 可维护性:YAML文件可以通过源头控制,跟踪每次操作
  • 灵活性:YAML可以创建比命令行更加复杂的结构

YAML Maps

map,散列表 ,使用冒号(:)表示键值对,同一缩进的所有键值对属于一个map,例如:

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
  name: kubernetes-dashboard
  namespace: kube-system

转换:

{
apiVersion: v1, 
kind: ServiceAccount, 
metadata: 
	{
	labels: 
		{
			k8s-app: kubernetes-dashboard,
			addonmanager.kubernetes.io/mode: Reconcile,
		}
	name: kubernetes-dashboard,
	}
	....}

如果要把多个kind写于一个文件需要用到

— 为可选的分隔符 ,当在一个文件中定义多个结构时需要

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
  name: kubernetes-dashboard
  namespace: kube-system
  #以上labels,name,namespace为同一级,因为都缩进了相同的空格
---                             #分隔符,因为此yaml文件定义了二个不同的kind类型
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile

YAML Lists

List 数组,使用连字符(-)表示,例如:

 volumeMounts:
    - name: kubernetes-dashboard-certs
      mountPath: /certs
    - name: tmp-volume
      mountPath: /tmp

转换:

{
	volumeMounts:
		[
			{
				name: kubernetes-dashboard-certs,
				mountPath: /certs
			},
			{
				name: tmp-volume,
				mountPath: /tmp
			}
		]
}

数据结构嵌套

map嵌套map

apiVersion: v1
kind: ConfigMap
metadata:    #map嵌套map
  labels:       #map嵌套map
    k8s-app: kubernetes-dashboard    #map嵌套map
    # Allows editing resource and makes sure it is created first.
    addonmanager.kubernetes.io/mode: EnsureExists
  name: kubernetes-dashboard-settings
  namespace: kube-system

list嵌套list

在k8s的yaml中比较少见

list嵌套map

volumes:    #map
      - name: kubernetes-dashboard-certs   #list   map嵌套list
        secret:       #map   list嵌套map
          secretName: kubernetes-dashboard-certs
      - name: tmp-volume
        emptyDir: {}

你可能感兴趣的:(笔记)