一、YAML 是什么?


YAML 是一种简洁、易读的配置文件格式,常用于 Kubernetes 中定义资源(如 Pod、Deployment、Service 等)。

✅ YAML 的基本规则:


大小写敏感(name 和 Name 不一样)
用缩进表示层级关系(类似 Python)
只能用空格缩进,不能用 Tab 键
同一层级的元素必须左对齐
在冒号 :、短横线 -、逗号 , 后面要加一个空格
文件开头可以用 --- 表示新文档开始(可选)
用 # 写注释


💡 小贴士:YAML 比 JSON 更适合人类编写和阅读!

二、Kubernetes 资源版本怎么看?


运行以下命令查看当前集群支持的 API 版本:

kubectl api-versions

常见版本说明:

apps/v1:推荐用于生产环境(如 Deployment、StatefulSet)
v1:核心资源(如 Pod、Service)
带 beta 的版本(如 v1beta1)是测试版,不建议用于生产

三、一个完整的 YAML 示例:部署 Nginx


步骤 1:创建 Deployment(管理 Pod 副本)

# nginx-deployment.yaml
apiVersion: apps/v1          # 使用 apps/v1 API 版本
kind: Deployment             # 资源类型:Deployment
metadata:
  name: nginx-deployment     # 资源名称(必须唯一)
  labels:
    app: nginx               # 标签,用于识别
spec:
  replicas: 3                # 启动 3 个副本
  selector:
    matchLabels:
      app: nginx             # 选择带有 app=nginx 标签的 Pod
  template:                  # Pod 模板
    metadata:
      labels:
        app: nginx           # Pod 的标签,必须和上面一致
    spec:
      containers:
      - name: nginx
        image: nginx:1.15.4  # 使用的镜像
        ports:
        - containerPort: 80  # 容器内部监听的端口

创建并查看:

kubectl create -f nginx-deployment.yaml
kubectl get pods -o wide

步骤 2:创建 Service(对外暴露服务)

# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    app: nginx
spec:
  type: NodePort            # 类型:NodePort(外部可访问)
  ports:
  - port: 80              # Service 在集群内的端口
    targetPort: 80        # 流量转发到 Pod 的哪个端口
    nodePort: 35680       # 可选,不写会自动分配(范围 30000-32767)
  selector:
    app: nginx            # 匹配带有 app=nginx 标签的 Pod

创建并访问:

kubectl create -f nginx-service.yaml
kubectl get svc

输出示例:

✅ 现在你可以通过浏览器访问任意节点的 IP + 端口,例如:

👉 http://192.168.10.160:31767

四、搞懂 Kubernetes 中的“端口”区别

名称  作用  示例
containerPort  容器内部监听的端口  80(Nginx 默认)
targetPort Service 转发到 Pod 的端口   通常 = containerPort
port   Service 在集群内部的端口 clusterIP:80
nodePort 外部通过节点 IP 访问的端口 192.168.x.x:35680

🔁 流量路径:

外部 → nodeIP:nodePort → Service:port → Pod:targetPort → 容器:containerPort

五、如何快速生成 YAML 文件?(不用手写!)


方法 1:用 --dry-run 生成模板

# 生成 Deployment 模板
kubectl create deployment nginx --image=nginx --replicas=3 --port=80 --dry-run=client -o yaml > nginx-deploy.yaml

# 生成单个 Pod 模板
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-pod.yaml

--dry-run=client 表示只打印 YAML,不真正创建资源。

方法 2:从现有资源导出 YAML

# 导出已有的 Service 配置
kubectl get svc nginx-service -o yaml > my-svc.yaml

# 或直接编辑(复制内容再保存为文件)
kubectl edit svc nginx-service

六、遇到不懂的字段怎么办?


用 kubectl explain 查看官方解释!

# 查看 Pod 中 containers 的字段说明
kubectl explain pods.spec.containers

# 查看 Deployment 的 template 字段
kubectl explain deployments.spec.template

💡 建议:一层层深入查看,比如先 explain deployments,再 explain deployments.spec……

七、给初学者的学习建议

多看官方或他人写的 YAML,先学会“读懂”
不要从零手写,用 --dry-run 生成后修改
善用 kubectl explain 解决字段疑问
理解标签(labels)和选择器(selector)的关系 —— 这是连接 Service 和 Pod 的关键!
先在测试环境练习,再上生产

✅ 总结

目标 命令/方法
查看 API 版本 kubectl api-versions
创建资源 kubectl create -f xxx.yaml
查看 Pod  kubectl get pods
查看 Service  kubectl get svc
生成 YAML   kubectl run ... --dry-run=client -o yaml
查帮助  kubectl explain 资源字段

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐