首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >学 K8s 后我才发现:YAML 才是真正的核心

学 K8s 后我才发现:YAML 才是真正的核心

作者头像
一根头发丝的宽度
发布2026-05-29 12:07:10
发布2026-05-29 12:07:10
140
举报

本文约1700字,阅读约需要8分钟。

刚接触 Kubernetes 的时候,我一直傻傻地以为:

K8s 学的是命令

比如:

代码语言:javascript
复制
kubectl get pod
kubectl describe
kubectl logs

敲得飞起,觉得自己快成专家了。

直到后来真正开始部署:

  • Deployment
  • Service
  • Prometheus
  • Grafana

甚至折腾高可用、监控、Ingress 之后……

我才慢慢意识到一个真相:

Kubernetes 真正的核心,其实是 YAML。

因为不管你想让集群做什么,最终都会写成这样一份文件:

代码语言:javascript
复制
apiVersion:
kind:
metadata:
spec:

今天这篇文章,我就结合自己接触 K8s 实验时踩过的一些坑,聊聊:

为什么整个 Kubernetes 世界,都离不开 YAML。


一、YAML 是什么?简单到像在写笔记

YAML 的全名很长(YAML Ain’t Markup Language),但你不用记。

你只需要知道:

它是一种用来描述数据的语言,专门为人类阅读和书写设计。

最大的特点:

✅ 可读性极强 ✅ 非常适合写配置文件 ✅ 比 JSON 温柔多了

举个例子:

代码语言:javascript
复制
app:
  name: nginx
  port: 80

是不是跟自然语言差不多?

一看就懂,不用解释。


二、为什么 Kubernetes 离不开 YAML?

因为 Kubernetes 的核心思想是:

声明式(Declarative)

什么意思?

你不是在告诉 K8s “怎么启动一个容器” 而是告诉它:

我希望系统最终变成什么样子

比如你在 YAML 里写:

代码语言:javascript
复制
replicas: 2

它的意思不是 “启动 2 个 Pod” 而是:

系统应该始终维持 2 个 Pod

如果某个 Pod 挂了,Kubernetes 会自动再拉起一个。

这就是声明式的魅力:你说目标,它来执行


三、第一次看 Deployment YAML,整个人是懵的

我第一次看到这种内容时:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 2

说实话:完全不知道在看什么😵

每个词都认识,连在一起就天书。

后来才慢慢搞懂——其实每一行都是在回答一个简单的问题。


四、拆开来看,Deployment YAML 其实很好懂

1️⃣ apiVersion

代码语言:javascript
复制
apiVersion: apps/v1

👉 告诉 K8s:这个资源属于哪个 API 版本。 相当于你填表格时,先写“表格版本号”。


2️⃣ kind

代码语言:javascript
复制
kind: Deployment

👉 资源类型。 就是你要创建的东西是什么:Pod、Deployment、Service……

常用类型一览:

类型

作用

Pod

最小运行单元

Deployment

管理 Pod

Service

提供网络访问

ConfigMap

存放配置文件

Secret

存放敏感信息


3️⃣ metadata

代码语言:javascript
复制
metadata:
  name: nginx

👉 给资源起个名字。

之后你敲:

代码语言:javascript
复制
kubectl get deployment

看到的名字就是它。


4️⃣ spec(最重要)

代码语言:javascript
复制
spec:

这里才是真正描述 “系统应该长什么样”的地方。

比如:

代码语言:javascript
复制
replicas: 2

意思就是:集群里必须始终有 2 个 Pod


五、YAML 最核心的能力:层级结构

Kubernetes 的 YAML 看起来复杂, 其实核心就一个规则:缩进

比如:

代码语言:javascript
复制
resources:
  limits:
    cpu: "500m"
    memory: "512Mi"

这里 limits是从属于 resources的。

缩进多少空格不重要,重要的是同一层级的缩进必须一致

❌ 千万不能用 “Tab” ,只能使用 “空格”


六、YAML 里最常见的两种数据形式

1️⃣ Key-Value(键值对)

最常见,也最简单:

代码语言:javascript
复制
image: nginx

2️⃣ List(列表)

-表示列表项,在 K8s 里非常常见:

代码语言:javascript
复制
containers:
  - name: nginx
  - name: redis

这里 -表示一个列表项,相当于数组里的一个元素。


七、配 Prometheus 时,才真正理解了 YAML 的用处

前面学 Deployment,我觉得 YAML 也就是个“配置文件”。

直到我开始搭 Prometheus + Grafana,才真正意识到:

YAML 已经是在描述整个系统的架构了。

比如 Prometheus 的 ConfigMap 里会有这样一段:

代码语言:javascript
复制
data:
  prometheus.yml: |

那个 |符号很关键。

它表示:后面的多行内容,保留换行和格式

示例:

代码语言:javascript
复制
script: |
  echo hello
  echo world

实际效果就是:

代码语言:javascript
复制
echo hello
echo world

换行不会丢失,缩进也不会乱。 这对于写 Prometheus 的抓取规则来说,太重要了。


八、YAML 最容易踩的 3 个坑(新手必看)

坑 1:缩进错误 ❌

代码语言:javascript
复制
spec:
replicas: 2   # 这里缩进不够,错了

replicas必须比 spec多缩进。

坑 2:用了 Tab ❌

YAML 不允许 Tab,只能用空格。 很多编辑器会自动把 Tab 转成空格,但最好把“显示空白字符”打开,避免踩坑。

坑 3:YAML 语法没错,但 K8s 不认 ❌

例如:

代码语言:javascript
复制
replicas: hello

YAML 本身没毛病,但 Kubernetes 会报错,因为 replicas必须是数字。


九、生产环境一定要学会 dry-run(空跑)

这是我踩过不少坑之后养成的习惯: 在真正执行apply之前,先校验。

本地校验

代码语言:javascript
复制
kubectl apply -f deploy.yaml --dry-run=client

只检查 YAML 格式正不正确。

服务端校验(强烈推荐)

代码语言:javascript
复制
kubectl apply -f deploy.yaml --dry-run=server

这个会让 API Server 真正检查:

  • 字段是否合法
  • 类型是否正确
  • schema 是否匹配

比你肉眼检查靠谱一万倍。


十、我对 YAML 最大的认知变化

刚开始:YAML 好烦,为什么不能全用命令?

后来才明白:

真正复杂的,从来不是 YAML 本身。 复杂的是 你是否真正理解 Kubernetes 系统

YAML 本质上只是:

系统结构的一张“设计图”

当你真正理解了:

  • Deployment
  • Service
  • Ingress
  • Prometheus
  • Grafana

你会发现:

YAML 其实是在用文本描述一个分布式系统的全部样子


写在最后

如果现在让我用一句话总结 YAML:

Kubernetes 的世界,就是“YAML 驱动的自动化系统”。

你写下:

代码语言:javascript
复制
replicas: 2

背后可能触发:

  • 调度
  • Service 更新
  • 网络规则
  • 健康检查
  • 自动恢复
  • 负载均衡

这也是为什么,真正进入云原生之后:

YAML 会慢慢变成每个 DevOps 工程师的“第二语言”。


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一根头发丝的宽度 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、YAML 是什么?简单到像在写笔记
  • 二、为什么 Kubernetes 离不开 YAML?
  • 三、第一次看 Deployment YAML,整个人是懵的
  • 四、拆开来看,Deployment YAML 其实很好懂
    • 1️⃣ apiVersion
    • 2️⃣ kind
    • 3️⃣ metadata
    • 4️⃣ spec(最重要)
  • 五、YAML 最核心的能力:层级结构
  • 六、YAML 里最常见的两种数据形式
    • 1️⃣ Key-Value(键值对)
    • 2️⃣ List(列表)
  • 七、配 Prometheus 时,才真正理解了 YAML 的用处
  • 八、YAML 最容易踩的 3 个坑(新手必看)
    • 坑 1:缩进错误 ❌
    • 坑 2:用了 Tab ❌
    • 坑 3:YAML 语法没错,但 K8s 不认 ❌
  • 九、生产环境一定要学会 dry-run(空跑)
    • 本地校验
    • 服务端校验(强烈推荐)
  • 十、我对 YAML 最大的认知变化
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档