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: 容器定义部分,包含镜 像、端口、环境变量等。
 - volumeMounts 与 volumes: 容器挂载和卷声明。
 
📦 配置 ConfigMap 与 Secret
- ConfigMap
 - Secret
 
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  APP_MODE: production
  LOG_LEVEL: info
apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  PASSWORD: cGFzc3dvcmQ=  # base64 编码的密码
📡 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 的标准方式。