📜  .yml 文件 (1)

📅  最后修改于: 2023-12-03 15:13:04.518000             🧑  作者: Mango

YAML 文件介绍

简介

YAML(发音类似于“骏马”)是一种可读性高、表达能力强的数据格式,适用于配置文件、数据传输、日志记录等场景。它的语法结构简单,基于缩进实现层次结构,支持数组、对象、字符串、数字等基本数据类型。

不同于 XML 或 JSON,YAML 文件更易读、更易写,因此很受开发人员的欢迎。在一些语言中,YAML 己成为常用的配置文件格式。

语法
基本规则
  • 编码方式:UTF-8,无 BOM。
  • 文件扩展名:.yml.yaml
  • 注释:以 # 开头。
  • 层级关系:通过缩进实现。
  • 键值对:用冒号 : 来分隔键和值,中间不能有空格。
  • 字符串:用单引号 ' ' 或双引号 " 括起来,可以换行。
  • 数组:用中括号 [ ] (或 - 符号) 包含,元素之间用逗号 , 分隔。
  • 对象:用大括号 { } 包含,键值对之间用逗号 , 分隔。
样例
# 注释
key1: value1
key2:
  subkey1: subvalue1
  subkey2: subvalue2
key3: [value3, value4]
key4:
  - {name: Andy, age: 20}
  - {name: Bob, age: 25}
key5: |
  多行字符串
  带换行
key6: >
  多行字符串
  不带换行
应用
配置文件

YAML 文件常用作应用程序的配置文件,例如 Spring Boot 的 application.yml

server:
  port: 8080
  context-path: /app
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: root
数据传输

YAML 文件也可以用于数据传输,例如 Kubernetes 的 Deployment 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
日志记录

YAML 文件也常用于日志记录,例如 Kubernetes 的 Kubelet 模块:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: kubelet
spec:
  selector:
    matchLabels:
      name: kubelet
  template:
    metadata:
      labels:
        name: kubelet
    spec:
      hostNetwork: true
      hostPID: true
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdocker
        hostPath:
          path: /var/lib/docker
      containers:
      - name: kubelet
        image: kubernetes/pause:latest
        command:
        - /bin/sh
        - -c
        - "while true; do echo hello; sleep 10; done"
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdocker
          mountPath: /var/lib/docker
      tolerations:
      - operator: Exists
      nodeSelector:
        kubernetes.io/os: linux