当前位置: 首页 > news >正文

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 文件学习方法总结

  1. 多看别人(官方)写的,能够读懂现有配置文件

  2. 能照着现有文件改着用,基于现有模板进行修改

  3. 善用 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导出已有资源配置

编写心法

  1. 先模仿后创新:从官方示例和现有配置开始

  2. 逐步精简优化:删除自动生成的非必要字段

  3. 理解端口关系:清晰区分port、nodePort、targetPort、containerPort

YAML文件编写不是记忆比赛,而是理解游戏。掌握了基本规则和实用技巧后,你就能在这份"容器蓝图"中游刃有余,让Kubernetes精准地按照你的意图运行应用。

记住:最好的学习方式就是动手实践——从读懂一个现有YAML文件开始,到修改它,最终创造出属于你自己的配置。

http://www.dtcms.com/a/473926.html

相关文章:

  • 社区版Idea怎么创建Spring Boot项目?Selected Java version 17 is not supported. 问题解决
  • 益阳市 网站建设电子商务网站建设的主要风险
  • SpringBootRemotePowershellAdmin:开箱即用的 Windows远程运维开源工具
  • 插槽vue/react
  • 对vue生命周期的理解
  • 2017民非单位年检那个网站做黄山旅游攻略景点必去
  • [笔记 自用]CAN总线通信配置
  • HTML 教程
  • 用自己服务器做网站用备案怎样在亚马逊网上开店
  • PHP操作elasticsearch7.8
  • 学校网站建设需求分析哪个小说网站可以做封面
  • 网站制作类软件推荐莆田网站格在哪里做
  • TypeScript 面试题及详细答案 100题 (21-30)-- 接口(Interface)
  • 承德网站新手怎么做网络推广
  • 6. 从0到上线:.NET 8 + ML.NET LTR 智能类目匹配实战--渐进式学习闭环:从反馈到再训练
  • 2.c++面向对象(五)
  • python中的一些运算符
  • 【嵌入式面试题】boss收集的11道,持续更新中
  • 保证样式稿高度还原
  • 网站建设 源码怎么注册公司名
  • [xboard] 34 buildroot 的overlay机制
  • 某公司站点的挖掘实战分享
  • 第三方和审核场景回调还是主动查询
  • Git基本命令的使用(超详细)
  • NC40 链表相加(二)
  • 网安面试题收集(3)
  • JetLinks设备接入的认识与理解
  • 从HashMap到ConcurrentHashMap深入剖析Java并发容器的演进与实战
  • 做一组静态页面网站多少钱网站源码上传到哪个文件夹
  • 威海市城乡建设局网站网络整合营销服务商