自学k8s系列~03之YAML
YAML是什么
基本语法
大小写敏感。
使用缩进来表示层级关系。
使用空格而不是 tab。
缩进的空格数要对齐,相同层级要对齐。
# 表示注释。对比 JSON 无法写注释这一点,强太多。
数据类型
- 对象
- 数组
- 纯量
对象
- 键值对的集合,即 Map
对象的一组键值对表示。
1 | key: value |
数组
1 | key: |
每个 value 和横杠(-) 之间有一个空格。
纯量
- 单个,不可以再分的值
纯量包含以下值:
- 字符串
- 布尔值
- 数值
- Null
- 时间
- 日期
字符串表示
- 简单字符串示例
1 | name: sjl #最简单的字符串示例 |
- 特殊符号字符串
1 | name: 'sjl sjl' #包含空格等特殊字符,需要放在引号中 |
- 单引号和双引号
1 | name: 'sjl \n sjl' |
单引号会对特殊字符 进行转义。上面示例中的 \n
会转义为 \\n
在展示的时候,还是字符串。双引号不会对特殊字符转义,上面示例中的 \n
不会转义,字符串的表示还是为 \n
,这样在某些编程语言中会视作换行符。
- 单引号转义
1 | name: 'sjl''s' |
上面示例中的 '
单引号是字符串的一部分,需要再添加一个单引号将其转义。与 Java
中的 \
转义符含义类似。
布尔值
布尔值用 true
和 false
来表示
1 | enable: true |
数值
1 | number: 111 |
null
null
使用 ~
来表示。
1 | person: ~ |
日期
日期采用 ISO 8601 表示法,一般为 yyyy-MM-dd
的格式
1 | date: 2021-08-26 |
时间
日期和时间之间,使用 T
进行分隔
1 | datetime: 2021-08-26T22:03:44 |
完整示例
1 | apiVersion: apps/v1 |
k8s配置内容
k8s 配置 yaml
文件主要包含以下五块内容:
- apiVersion: 当前配置格式的版本
- kind: 要创建资源的类型,
Deployment
、Pod
、Service
、Namespace
、ReplicaSet
、DeanmonSet
、Job
、CronJob
等 - metadata: 元数据,
name
是必选项。 - spec: 是对应
kind
类型的说明。 - status: 是资源当前的状态,kubernetes 会尽最大努力使 spec 和 status 相匹配。
YAML 如何加载
1 | kubectl apply -f yaml_file_path |
部署 nginx
的 YAML
1 | apiVersion: apps/v1 |
执行 kubectl apply -f deployment.yaml
创建 Deployment
。
部署 YAML
- 准备 YAML 文件
1 | apiVersion: apps/v1 |
- 部署到
k8s
中
1 | kubectl apply -f ./deployment.yaml |
- 用 curl 发起 http 请求
主要步骤:1. 查看部署的 pod
的 IP 地址
1 | 查看部署的 pod 的 IP 地址 |
可以看到 IP 是 172.17.0.5,进入 minikube
的 ssh 中,然后使用 curl 发起 http 请求
1 | 进行 minikube 的 ssh 中 |
在查看 pod
的 log 是否有记录
1 | kubectl logs nginx-deployment-59f854fb7c-vlkhj -n sjl |
可以在最后一行看到,发起了 http 请求。