Skip to content

📦 配置管理

🔧 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