K8s YAML 文件详解:从语法到实战编写指南
前言
1. YAML 与 JSON:Kubernetes 的两种资源管理格式
2. YAML 语法格式详解
3. 查看 Kubernetes API 资源版本
4. YAML 文件实战:创建 Deployment
4.1 创建 Deployment YAML 文件
4.2 创建资源对象
4.3 查看创建的 Pod 资源
5. 创建 Service 对外提供访问
5.1 创建 Service YAML 文件
5.2 创建 Service 资源
5.3 查看创建的 Service
6. 详解 Kubernetes 中的 Port
7. 快速编写 YAML 文件的技巧
7.1 使用 dry-run 命令生成模板
7.2 将现有资源导出为模板
7.3 查看字段帮助信息
8. YAML 文件学习方法总结
9. 清理不必要的参数
总结
核心要点
实用技巧
编写心法
前言
在Kubernetes的世界里,YAML文件如同乐高图纸,指引着容器如何组装、如何运行、如何互联。每一个缩进、每一个字段,都承载着应用部署的精确意图。
对于初学者而言,面对密密麻麻的YAML配置往往感到无从下手。但掌握它并不难——就像学习任何新语言一样,需要理解基本语法,熟悉常用模式,再加上正确的工具和方法。
本文将带你系统掌握Kubernetes YAML文件的核心要点,从基础语法到实战技巧,让你从“看得懂”到“会编写”,轻松驾驭这份容器世界的通用语言。
1. YAML 与 JSON:Kubernetes 的两种资源管理格式
Kubernetes 支持 YAML 和 JSON 两种格式管理资源对象:
-
JSON 格式:主要用于 API 接口之间的消息传递
-
YAML 格式:用于配置和管理,具有人性化的内容格式,易于阅读和编写
2. YAML 语法格式详解
YAML 语言有以下重要语法规则:
-
大小写敏感
-
使用缩进表示层级关系
-
不支持 Tab 键制表符缩进,只使用空格缩进
-
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
-
符号字符后缩进一个空格,如冒号、逗号、短横杆(-)等
-
---
表示 YAML 格式文件的开始,用于分隔文件 -
#
表示注释
3. 查看 Kubernetes API 资源版本
bash
kubectl api-versions
常见的 API 版本包括:
-
apps/v1
:业务场景首选版本 -
带有
beta
字样的代表测试版本,不建议在生产环境中使用
4. YAML 文件实战:创建 Deployment
4.1 创建 Deployment YAML 文件
yaml
apiVersion: apps/v1 # 指定 API 版本标签 kind: Deployment # 定义资源类型 metadata: # 定义资源元数据name: nginx-deployment # 资源名称,在 namespace 中必须唯一labels: # 定义资源标签app: nginx spec: # 定义资源参数属性replicas: 3 # 定义副本数量selector: # 定义标签选择器matchLabels: # 定义匹配标签app: nginx # 需与 .spec.template.metadata.labels 保持一致template: # 定义业务模板metadata:labels: # 定义 Pod 副本使用的标签app: nginx # 需与 .spec.selector.matchLabels 保持一致spec:containers: # 定义容器属性- name: nginx # 容器名称image: nginx:1.15.4 # 容器使用的镜像及版本ports:- containerPort: 80 # 容器对外的端口
4.2 创建资源对象
bash
kubectl create -f nginx-deployment.yaml
4.3 查看创建的 Pod 资源
bash
kubectl get pods -o wide
5. 创建 Service 对外提供访问
5.1 创建 Service YAML 文件
yaml
apiVersion: v1 kind: Service metadata:name: nginx-servicelabels:app: nginx spec:type: NodePortports:- port: 80targetPort: 80selector:app: nginx
5.2 创建 Service 资源
bash
kubectl create -f nginx-service.yaml
5.3 查看创建的 Service
bash
kubectl get svc
访问地址:http://nodeIP:nodePort
6. 详解 Kubernetes 中的 Port
-
port:k8s 集群内部访问 Service 的端口,通过
clusterIP:port
可以从 Pod 所在的 Node 访问到 Service -
nodePort:外部访问 k8s 集群中 Service 的端口,通过
nodeIP:nodePort
可以从外部访问到 Service -
targetPort:Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向代理负载均衡转发到后端 Pod 的 targetPort
-
containerPort:Pod 内部容器的端口,targetPort 映射到 containerPort
7. 快速编写 YAML 文件的技巧
7.1 使用 dry-run 命令生成模板
bash
# 打印 API 对象而不执行创建 kubectl run nginx-test --image=nginx --port=80 --dry-run=client # 生成 YAML 格式 kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml # 生成 JSON 格式 kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json # 导出到文件 kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml
7.2 将现有资源导出为模板
bash
# 获取资源的 YAML 配置 kubectl get svc nginx-service -o yaml # 保存到文件 kubectl get svc nginx-service -o yaml > my-svc.yaml
7.3 查看字段帮助信息
bash
kubectl explain deployments.spec.template.spec.containers kubectl explain pods.spec.containers
8. YAML 文件学习方法总结
-
多看别人(官方)写的,能够读懂现有配置文件
-
能照着现有文件改着用,基于现有模板进行修改
-
善用
kubectl explain
命令,遇到不懂的字段随时查询
9. 清理不必要的参数
从 dry-run 生成的 YAML 文件中,通常可以删除以下不必要的参数:
yaml
apiVersion: v1 kind: Pod metadata:# creationTimestamp: null # 可删除labels:run: nginx-testname: nginx-test spec:containers:- image: nginxname: nginx-testports:- containerPort: 80# resources: {} # 可删除dnsPolicy: ClusterFirstrestartPolicy: Always # status: {} # 可删除
总结
Kubernetes YAML文件是容器编排世界的通用语言,掌握它的核心要点可以概括为:
核心要点
-
语法是基础:严格遵循缩进规则,使用空格而非Tab
-
版本要明确:优先选择稳定版本(如apps/v1),避免使用beta版本
-
结构要清晰:理解metadata、spec、selector等关键区块的作用
实用技巧
-
善用生成工具:
kubectl --dry-run=client -o yaml
快速生成模板 -
活用查询命令:
kubectl explain
随时查看字段含义 -
借鉴现有配置:通过
kubectl get -o yaml
导出已有资源配置
编写心法
-
先模仿后创新:从官方示例和现有配置开始
-
逐步精简优化:删除自动生成的非必要字段
-
理解端口关系:清晰区分port、nodePort、targetPort、containerPort
YAML文件编写不是记忆比赛,而是理解游戏。掌握了基本规则和实用技巧后,你就能在这份"容器蓝图"中游刃有余,让Kubernetes精准地按照你的意图运行应用。
记住:最好的学习方式就是动手实践——从读懂一个现有YAML文件开始,到修改它,最终创造出属于你自己的配置。