📦 配置管理
🔧 ConfigMap
ConfigMap 用于存储非敏感的配置信息,比如配置文件、命令行参数、环境变量等。
作用:
- 解耦配置和容器镜像。
- 在不重建镜像的情况下更新应用配置。
使用方式:
- 以环境变量的形式注入容器。
- 挂载为 Volume 文件。
- 通过 CLI 或 YAML 创建并引用。
示例:
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
APP_ENV: "production"
LOG_LEVEL: "debug"
yaml
envFrom:
- configMapRef:
name: app-config
🔐 Secret
Secret 用于存储敏感数据,例如密码、API Token、证书等。
特点:
- 数据以 Base64 编码。
- 可作为环境变量或 Volume 使用。
- 支持 RBAC 权限控制。
创建方式:
- CLI 方式:
bash
kubectl create secret generic my-secret --from-literal=password=123456
- YAML 文件方式(需 base64 编码):
yaml
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
password: MTIzNDU2
📁 SubPath
SubPath 用于将某个卷中的子路径挂载到容器指定路径。
用途:
- 多个容器共享一个卷但只访问不同子目录。
- 让配置文件独占某个挂载路径。
示例:
yaml
volumeMounts:
- name: config
mountPath: /etc/config/app.conf
subPath: app.conf
🗄️ 存储管理
🖥️ HostPath
HostPath 将宿主机的某个目录挂载到 Pod 内。
适用场景:
- 日志采集。
- 本地测试。
- 注意:不推荐在生产环境中使用(存在安全风险)。
示例:
yaml
volumes:
- name: host-volume
hostPath:
path: /data/logs
type: Directory
📂 EmptyDir
EmptyDir 是在 Pod 创建时被初始化的临时存储。
特点:
- 容器重启数据不丢失。
- Pod 删除后数据即清空。
- 可用于容器间数据共享、缓存临时文件等。
示例:
yaml
volumes:
- name: cache
emptyDir: {}
🌐 NFS
NFS(Network File System) 是一种共享文件存储方式,多个 Pod 可以同时读写。
特点:
- 跨节点共享。
- 需事先部署 NFS 服务。
- 读写权限需配置合理。
示例:
yaml
volumes:
- name: nfs-volume
nfs:
server: 10.0.0.1
path: /exports/data
📄 PV / PVC(持久卷)
✅ PersistentVolume(PV)
- 集群管理员提前配置的存储资源。
- 抽象底层存储设备(如 NFS、云盘等)。
✅ PersistentVolumeClaim(PVC)
用户申请存储的声明。
系统会自动匹配满足需求的 PV。
示例:
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
📦 存储类(StorageClass)
StorageClass 定义了存储卷的类型、配置策略、动态供应方式等。
用途:
- 实现 PVC 自动绑定与卷创建。
- 支持不同级别性能(如 SSD、普通磁盘等)。
示例:aws
yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
- 示例:local-path
bash
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.29/deploy/local-path-storage.yaml
kubectl -n local-path-storage logs -f -l app=local-path-provisioner
PVC 示例:
yaml
spec:
storageClassName: fast