Skip to main content

K8s YAML 配置详解

Kubernetes 中的所有资源都通过 YAML 文件定义,部署时通过 kubectl apply -f 命令执行。掌握 YAML 配置结构是理解 K8s 运作机制的基础。


📑 YAML 基本结构说明

每一个 K8s YAML 文件通常包含如下字段:

apiVersion: apps/v1     # API 版本
kind: Deployment # 资源类型
metadata: # 元数据
name: my-deployment
spec: # 具体配置(核心)
...
字段描述
apiVersion使用的 API 版本
kind资源类型(如 Deployment)
metadata元信息,如名称、标签等
spec配置细节(最关键部分)

🔧 完整部署示例及解析

我们以下面的部署为例进行逐字段讲解:

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
env:
- name: ENV
value: production
volumeMounts:
- name: app-volume
mountPath: /usr/share/nginx/html
volumes:
- name: app-volume
emptyDir: {}
点击展开字段说明
  • apiVersion: 使用 apps/v1 表示使用稳定的 Deployment API。
  • kind: 定义资源类型为 Deployment
  • metadata: 设置资源名称和标签,标签用于 Pod 选择器与服务发现。
  • spec.replicas: 指定副本数量,K8s 会保持该数量的 Pod 运行。
  • spec.selector: 匹配标签选择器,确保 Deployment 管理正确的 Pod。
  • template.metadata.labels: Pod 模板标签,需与 selector 一致。
  • template.spec.containers: 容器定义部分,包含镜像、端口、环境变量等。
  • volumeMountsvolumes: 容器挂载和卷声明。

📦 配置 ConfigMap 与 Secret

apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
APP_MODE: production
LOG_LEVEL: info

📡 Service 配置详解

apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- port: 80
targetPort: 80
type: ClusterIP
字段说明
selector通过标签选择对应的 Pod
ports映射的服务端口和容器端口
type网络类型:ClusterIP、NodePort、LoadBalancer

✨ PVC(持久化存储)配置

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

绑定到 Pod 中:

volumes:
- name: data
persistentVolumeClaim:
claimName: my-pvc

✍️ 示例:组合多个 YAML 配置文件部署一个应用

点击展开:完整目录结构和部署流程
k8s/
├── deployment.yaml
├── service.yaml
├── configmap.yaml
├── secret.yaml
├── pvc.yaml

部署顺序推荐:

kubectl apply -f configmap.yaml
kubectl apply -f secret.yaml
kubectl apply -f pvc.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

🧠 小技巧与建议

使用分隔符部署多个资源

你可以在一个 YAML 文件中使用 --- 分隔多个资源定义:

# deployment.yaml
<Deployment定义>
---
<ConfigMap定义>
---
<Service定义>

✅ 总结

  • 每个 K8s 资源对象都以 YAML 格式声明,核心结构包括 apiVersion、kind、metadata、spec;
  • Deployment 是管理 Pod 的最佳方式;
  • 使用 ConfigMap 和 Secret 管理配置数据;
  • 使用 PVC 实现持久化存储;
  • kubectl apply 是部署 YAML 的标准方式。

📚 推荐链接