k8s学习之路 | Day15 k8s 中的 yaml 语法

文章目录

  • yaml 基础
    • 什么是 yaml?
    • yaml 特性
    • 适用场景
    • 基本语法规则
    • 数据类型
    • yaml 对象
    • yaml 数组
    • yaml 纯量
    • yaml 引用
  • k8s 中的 yaml 语法
    • \
    • \
    • \
    • \<[]Object>
    • \
    • 示例 yaml 说明
    • 我在学习过程中,经常会使用kubectl explain去解释一些配置文件写法,帮助文档经常会呈现一些<[]Object>````之类的,一时间还不知道这个具体怎么写,所以才有了这个有关yaml语法学习的经过

      yaml 基础

      什么是 yaml?

      来自百度百科的定义:

      YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式

      YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

      yaml 特性

      • 表达简单
      • 数据形态多样

      适用场景

      • 各种配置文件
      • 打印调试内容
      • 文件大纲
      • 表达和编辑数据结构

      基本语法规则

      • 大小写敏感
      • 缩进表示层级关系
      • 缩进只允许TAB,不能空格
      • 缩进空格数不重要,只要相同层级的元素左对齐即可
      • #表示注释

      数据类型

      YAML 支持以下几种数据类型:

      • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
      • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
      • 纯量(scalars):单个的、不可再分的值

      yaml 对象

      1. 对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。

      2. 可以使用 key:{key1: value1, key2: value2, …}

      3. 可以使用缩进表示层级关系

      ##这是对象
      key: 
          child-key: value
          child-key2: value2
         
      #复杂的对象,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value
      ?  
          - complexkey1
          - complexkey2
      :
          - complexvalue1
          - complexvalue2
         
      

      yaml 数组

      以 - 开头的行表示构成一个数组

      - A
      - B
      - C
      

      yaml 纯量

      纯量是最基本的,不可再分的值,包括:

      • 字符串
      • 布尔值
      • 整数
      • 浮点数
      • Null
      • 时间
      • 日期
      boolean: 
          - TRUE  #true,True都可以
          - FALSE  #false,False都可以
      float:
          - 3.14
          - 6.8523015e+5  #可以使用科学计数法
      int:
          - 123
          - 0b1010_0111_0100_1010_1110    #二进制表示
      null:
          nodeName: 'node'
          parent: ~  #使用~表示null
      string:
          - 哈哈
          - 'Hello world'  #可以使用双引号或者单引号包裹特殊字符
          - newline
            newline2    #字符串可以拆成多行,每一行会被转化成一个空格
      date:
          - 2018-02-17    #日期必须使用ISO 8601格式,即yyyy-MM-dd
      datetime: 
          -  2018-02-17T15:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
      

      yaml 引用

      • & 锚点和 * 别名,可以用来引用:
      defaults: &defaults
        adapter:  postgres
        host:     localhost
      
      development:
        database: myapp_development
        <<: *defaults
      
      test:
        database: myapp_test
        <<: *defaults
        
      #相当于
      defaults:
        adapter:  postgres
        host:     localhost
      
      development:
        database: myapp_development
        adapter:  postgres
        host:     localhost
      
      test:
        database: myapp_test
        adapter:  postgres
        host:     localhost
      
      • & 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点
      - &showell Steve 
      - Clark 
      - Brian 
      - Oren 
      - *showell 
      

      k8s 中的 yaml 语法

      我们通过kubectl explain Pod类似的命令可以查看到各种资源的yaml写法,每个资源的后面都有着格式要求,主要包括以下几点

      kubectl explain Pod.apiVersion

      k8s学习之路 | Day15 k8s 中的 yaml 语法_第1张图片

      ###直接一个字符串
      apiVersion: v1
      

      kubectl explain Pod.metadata

      k8s学习之路 | Day15 k8s 中的 yaml 语法_第2张图片

      ##普通的对象,下面有很多字段
      metadata:
        name: "MYAPP"
        namespace: default
        labels:
          app: "MYAPP"
      

      kubectl explain Pod.metadata.labels

      k8s学习之路 | Day15 k8s 中的 yaml 语法_第3张图片

      ### map类型表示对应的值是key-value键值对,表示 key和value都是String类型的
      apiVersion: v1
      kind: Pod
      metadata:
        name: label-demo
        labels:
          environment: production
          app: nginx
      spec:
        containers:
        - name: nginx
          image: nginx:1.14.2
          ports:
          - containerPort: 80
      

      <[]Object>

      kubectl explain Pod.spec.containers

      k8s学习之路 | Day15 k8s 中的 yaml 语法_第4张图片

      ## containers 是对象列表,对象列表表示下面有很多对象,对象列表下面的内容用 - 连接
      containers:
        - name: nginx1
          image: "debian-slim:latest"
        - name: nginx2
          image: "debian-slim:latest"
      

      布尔值,true或者false

      k8s学习之路 | Day15 k8s 中的 yaml 语法_第5张图片

      ###
      apiVersion: v1
      kind: Pod
      metadata:
        name: "MYAPP"
        namespace: default
        labels:
          app: "MYAPP"
      spec:
        containers:
        - name: MYAPP
          image: "debian-slim:latest"
          stdin: true
          resources:
            limits:
              cpu: 200m
              memory: 500Mi
            requests:
              cpu: 100m
              memory: 200Mi
      

      示例 yaml 说明

      示例 yaml 文件说明

      apiVersion: v1							## apiVersion   
      kind: Pod								## kind 
      metadata:								## metadata 
        name: "MYAPP"							## name 
        namespace: default					## namespace 
        labels:								## labels 
          app: "MYAPP"
      spec:									## spec 
        containers:							## containers   <[]Object>
        - name: MYAPP							## name 
          image: "debian-slim:latest"			## image        
          resources:							## resources    
            limits:							## limits       
              cpu: 200m
              memory: 500Mi
            requests:							## requests     
              cpu: 100m
              memory: 200Mi
          env:								## env <[]Object>
          - name: DB_HOST
            valueFrom:
              configMapKeyRef:
                name: MYAPP
                key: DB_HOST
          ports:
          - containerPort:  80
            name:  http
          volumeMounts:
          - name: localtime
            mountPath: /etc/localtime
        volumes:
          - name: localtime
            hostPath:
              path: /usr/share/zoneinfo/Asia/Shanghai
        restartPolicy: Always
       
        
      
                                  
                              
                          
                          
                          

      你可能感兴趣的:(Kubernetes,kubernetes,学习,云原生,容器,运维)