[K8S学习笔记]YAML相关
文章目录
- 0 Key component:
- 1 基本结构
- 2 常见对象类型
- 3 metadata 元数据
- 4 spec 期望状态
- 5 多文档 YAML
- 6 最佳实践
- 7 Label & Selector
- a. label 是什么
- b. selector 是什么
- 8 YAML 校验方法
- 9 格式
- a. 缩进必须使用空格
- b. 冒号后面要加空格
- c. 列表使用破折号 - 并缩进
- d. 字符串和数字
[[ TOC]]
0 Key component:
- Metadata
- Specification
- Status
1 基本结构
Kubernetes YAML 文件通常包含四个核心字段:
apiVersion: v1 # API 版本
kind: Pod # 对象类型(Pod、Deployment、Service 等)
metadata: # 元数据
name: mypod labels: app: nginx
spec: # 期望状态
containers: - name: nginx image: nginx:1.21
2 常见对象类型
- Pod:最小的运行单元
- Deployment:管理 ReplicaSet,支持滚动更新和回滚
- Service:提供稳定访问入口,做负载均衡
- ConfigMap / Secret:存放配置和敏感数据
- Namespace:资源逻辑隔离
- Ingress:基于域名和路径的 HTTP/HTTPS 路由
3 metadata 元数据
- name:资源的名字,必须唯一
- labels:标签,用于分组和选择资源(Service 找 Pod,Deployment 找 Pod)
- annotations:额外信息,通常被工具或系统使用
4 spec 期望状态
- containers(在 Pod/Deployment 中)
- image:容器镜像
- ports:容器端口
- resources:CPU/内存请求与限制
- env:环境变量
- replicas(在 Deployment 中定义副本数)
- selector:选择器(Deployment 关联 Pod,Service 关联 Pod)
5 多文档 YAML
一个文件中可以定义多个对象,用 — 分隔:
apiVersion: v1
kind: Service
metadata: name: nginx-svc
spec: selector: app: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata: name: nginx-deploy
spec: replicas: 3
6 最佳实践
- 合理使用 labels,例如 app: nginx, tier: frontend
- 避免写死 Pod IP,统一通过 Service 访问
- 在资源中定义 requests 和 limits,避免资源抢占
- 配置文件建议纳入版本控制,方便回滚和团队协作
7 Label & Selector
a. label 是什么
label(标签)是附加在 Kubernetes 对象上的 键值对,用来描述对象的属性。
例子:
metadata:
name: nginx-pod
labels:
app: nginx
tier: frontend
上面这个 Pod 有两个 label:
* app: nginx
* tier: frontend
label 本身没有实际功能,但它们是 分组和筛选资源的依据。
b. selector 是什么
selector(选择器)是用来匹配 label 的规则。
例子:
spec: selector: matchLabels: app: nginx
这里的 selector 表示:找出所有 app=nginx 的 Pod。
8 YAML 校验方法
- 在 PowerShell 用 kubectl apply --dry-run=client -f pod.yaml 检查
- 或者用在线 YAML 校验工具,例如 https://yamlchecker.com
9 格式
a. 缩进必须使用空格
- 不能用 Tab 键
- 通常每一级缩进使用 2 个空格
✅ 正确
containers: - name: nginx image: nginx:latest
❌ 错误(使用 Tab)
containers: - name: nginx image: nginx:latest
b. 冒号后面要加空格
✅ 正确
name: tiny-pod
❌ 错误
name:tiny-pod
c. 列表使用破折号 - 并缩进
ports: - containerPort: 80
- “-” 前面和父级键同级缩进
- 列表项内部继续缩进
d. 字符串和数字
- 字符串一般不用引号
- 数字单位(如 CPU/内存)需要加引号:
resources: requests: cpu: "100m" memory: "128Mi"