蛮子哥 蛮子哥
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • ArgoCD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

蛮子哥

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • ArgoCD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • ansible系列文章

  • Kubernetes笔记

    • 安装篇-kubeadm
    • k8s入门
    • k8s安装篇二进制
    • k8s面试题
    • kubernetes(k8s)yaml文件详解
    • k8s报错小结
    • Kubernetes 安装配置ingress controller
    • cka考试真题
    • ingress配置证书
    • cka考试作业
    • k8s部署java项目
    • jenkins脚本式流水线部署k8s项目实例一
    • helm v3安装并创建例子
    • 使用helm将本地部署文件上传到harbor chart上
    • helm公共仓库创建
    • helm适应minio作为私有仓库
    • helm release使用说明
    • kubernetes核心概念
    • kubectl使用技巧
    • kubernetes卷的几种类型
      • 1. emptyDir — 容器间数据共享
      • 2. configMap + secret — 配置与凭据注入
      • 3. PersistentVolumeClaim — 数据库持久化
      • 4. hostPath — 节点级资源访问
      • 5. nfs — 多 Pod 共享读写(RWX)
      • 访问模式速查
    • kubernetes安全框架
    • 云原生-什么是HPA和PDB、VPA
    • k8s部署php项目示例
    • 配置kubeconfig 文件访问 Kubernetes 集群
    • configmap配置的几种方式
    • k8s配置go服务
    • k8s部署java项目
    • kubernetes部署prometheus监控
    • kubernetes部署elk日志系统
    • kubernetes环境devops流水线
    • kubernetes高阶技能必备的工具
    • deployment中使用configmap、secret的方式
    • 业务pod 飘移pending排查分析
    • debian 12安装kubernetes
    • istio入门
    • kubernetes证书续签到100年
    • kubernetes网络模式
    • etcd的备份和还原
    • Kubernetes 安装和配置 NFS 存储卷
  • elk

  • jenkins

  • GitLabCI_CD

  • AI编程

  • 提示词

  • ArgoCD

  • 专题
  • Kubernetes笔记
蛮子哥
2023-06-22
目录

kubernetes卷的几种类型

以下是一些常见的Kubernetes卷类型:

  1. EmptyDir卷:EmptyDir卷在Pod之间共享数据,并且在Pod重新启动时会被清空。它适用于需要临时存储的数据,例如在多个容器之间共享的临时文件或缓存数据。

  2. ConfigMap卷:ConfigMap卷用于将配置文件以键值对的形式注入到Pod中。它可以用来传递配置信息给应用程序,例如环境变量、配置文件等。

  3. Secret卷:Secret卷用于将敏感信息(如密码、证书等)以安全的方式注入到Pod中。它可以用来存储和传递敏感数据给应用程序,而无需将这些数据明文存储在镜像或配置文件中。

  4. PersistentVolumeClaim (PVC):PersistentVolumeClaim是一种用于请求持久化存储资源的声明。它允许Pod请求并使用集群中的持久化存储卷。PVC与后端存储技术(如NFS、iSCSI等)相结合,提供了可靠的数据持久化解决方案。

  5. NFS卷:NFS卷通过网络文件系统(NFS)将远程文件系统挂载到Pod中。它允许Pod与NFS服务器之间进行文件的读写操作,从而实现跨节点或跨集群的文件共享。

  6. HostPath卷:它允许Pod访问宿主机上的文件或目录。当你在Kubernetes中创建一个使用HostPath卷的Pod时,它将能够读取和写入宿主机上指定路径下的文件。

这只是一些常见的Kubernetes卷类型,实际上还有其他类型的卷可供选择,例如PersistentVolume、GlusterFS、RBD等,每种卷类型都有其独特的功能和适用场景。选择适当的卷类型取决于你的应用程序的需求和环境配置。

以下是 Kubernetes 主要卷类型及其实际使用场景的概览:下面逐一给出每种卷类型的具体 YAML 示例。


# 1. emptyDir — 容器间数据共享

典型场景:Nginx 主容器写入日志,Sidecar 容器读取并上报。

apiVersion: v1
kind: Pod
metadata:
  name: nginx-with-log-sidecar
spec:
  volumes:
    - name: shared-logs
      emptyDir: {}           # Pod 删除后数据消失

  containers:
    - name: nginx
      image: nginx:1.25
      volumeMounts:
        - name: shared-logs
          mountPath: /var/log/nginx

    - name: log-shipper
      image: fluent/fluent-bit:2.2
      volumeMounts:
        - name: shared-logs
          mountPath: /logs    # 读取 nginx 写入的日志
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 2. configMap + secret — 配置与凭据注入

不把配置硬编码进镜像,支持热更新。

# 先创建 ConfigMap 和 Secret
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_ENV: production
  config.yaml: |
    server:
      port: 8080
      timeout: 30s
---
apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
stringData:
  DB_PASSWORD: "s3cr3t"
---
apiVersion: v1
kind: Pod
metadata:
  name: backend-app
spec:
  volumes:
    - name: config-volume
      configMap:
        name: app-config
    - name: secret-volume
      secret:
        secretName: db-secret

  containers:
    - name: app
      image: myapp:v2
      volumeMounts:
        - name: config-volume
          mountPath: /etc/config    # config.yaml 挂载为文件
        - name: secret-volume
          mountPath: /etc/secrets
          readOnly: true
      env:
        - name: APP_ENV             # 也可以注入为环境变量
          valueFrom:
            configMapKeyRef:
              name: app-config
              key: APP_ENV
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

# 3. PersistentVolumeClaim — 数据库持久化

MySQL 重启后数据不丢失,配合 StorageClass 动态申请云盘。

# StorageClass(AWS EBS 示例)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-ssd
provisioner: ebs.csi.aws.com
parameters:
  type: gp3
  fsType: ext4
reclaimPolicy: Retain          # 删除 PVC 后保留数据
allowVolumeExpansion: true
---
# PVC:声明需要多少存储
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-data
spec:
  storageClassName: fast-ssd
  accessModes:
    - ReadWriteOnce            # 同一时间只有一个节点可写
  resources:
    requests:
      storage: 50Gi
---
# StatefulSet 使用 PVC
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:8.0
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: db-secret
                  key: DB_PASSWORD
          volumeMounts:
            - name: data
              mountPath: /var/lib/mysql
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: mysql-data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

# 4. hostPath — 节点级资源访问

适用于 DaemonSet 收集宿主机日志,或访问节点 /dev 设备。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-log-collector
spec:
  selector:
    matchLabels:
      app: log-collector
  template:
    metadata:
      labels:
        app: log-collector
    spec:
      volumes:
        - name: host-logs
          hostPath:
            path: /var/log/pods   # 挂载宿主机目录
            type: Directory
        - name: docker-sock
          hostPath:
            path: /var/run/docker.sock
            type: Socket          # 访问 Docker daemon

      containers:
        - name: filebeat
          image: elastic/filebeat:8.11
          securityContext:
            runAsUser: 0          # 需要 root 读取系统日志
          volumeMounts:
            - name: host-logs
              mountPath: /host/logs
              readOnly: true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

⚠️ hostPath 存在安全风险,生产环境应配合 PodSecurityPolicy / OPA 限制使用路径。


# 5. nfs — 多 Pod 共享读写(RWX)

适合多副本服务共享上传目录、静态资源等场景。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 200Gi
  accessModes:
    - ReadWriteMany              # 多节点多 Pod 同时读写
  nfs:
    server: 10.0.0.100           # NFS 服务器地址
    path: /exports/uploads
  persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: uploads-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 200Gi
---
# Deployment 多副本共享同一目录
apiVersion: apps/v1
kind: Deployment
metadata:
  name: file-service
spec:
  replicas: 4                    # 4 个副本共享同一 NFS 目录
  template:
    spec:
      containers:
        - name: app
          image: file-service:v1
          volumeMounts:
            - name: uploads
              mountPath: /app/uploads
      volumes:
        - name: uploads
          persistentVolumeClaim:
            claimName: uploads-pvc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

# 访问模式速查

模式 缩写 适用场景
ReadWriteOnce RWO 单节点读写,数据库
ReadWriteMany RWX 多节点共享,文件服务
ReadOnlyMany ROX 多节点只读,静态资源
ReadWriteOncePod RWOP 单 Pod 独占(K8s 1.22+)

核心原则是:无状态服务用 emptyDir/configMap/secret;有状态服务(数据库、队列)用 PVC + StorageClass;多副本共享文件用 NFS 或支持 RWX 的 CSI 驱动(如 AWS EFS、Azure Files)。

微信 支付宝
上次更新: 2026/05/20, 10:08:38

← kubectl使用技巧 kubernetes安全框架→

最近更新
01
kubernetes证书续签到100年
05-04
02
istio入门
04-29
03
ES故障排查命令
04-29
更多文章>
Theme by Vdoing | Copyright © 2019-2026 | 点击查看十年之约 | 鄂ICP备2024072800号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式