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 的标准方式。