2025,每天10分钟,跟我学K8S(二十九)- 对象属性 - Volume

        前面讲解了那么多的案例,其实会发现一个问题,就是应用的数据存储,由于pod是无状态的,当pod销毁后,pod中产生的数据也随之销毁,那如果pod中运行的是持久化数据,例如数据库,在销毁或者重建pod的时候,该如何保留之前的数据。Kubernetes提供了一个思路----Volume(卷)。

        在Kubernetes(K8S)中,​Volume(卷)​ 是用于为Pod中的容器提供持久化存储或共享数据的核心机制。由于容器本身是临时性的,Volume的存在解决了数据持久化、容器间数据共享及配置管理等问题。


一、Volume的核心作用

  1. 数据持久化:容器重启或Pod被删除时保留数据。
  2. 数据共享:同一Pod内的多个容器共享同一存储。
  3. 配置注入:将配置文件、密钥等注入容器。
  4. 外部存储集成:对接云存储、网络存储等外部存储系统。

二、Volume的类型及使用场景

Kubernetes支持多种Volume类型,常见的有:

1. 临时存储
  • ​**emptyDir**:
    • 特点:生命周期与Pod一致,Pod删除时数据清除。
    • 用途:临时存储、缓存或容器间共享中间数据。
    • 示例
volumes:
  - name: cache-volume
    emptyDir: {}
2. 节点本地存储
  • ​**hostPath**:
    • 特点:将节点(Node)上的目录或文件挂载到Pod中。
    • 用途:访问节点日志、调试工具或依赖节点特定文件的应用。
    • 风险:依赖节点路径,Pod调度到其他节点时可能失效。
    • 示例
volumes:
  - name: node-log
    hostPath:
      path: /var/log
    3. 持久化存储抽象(PV/PVC)​
    • ​**persistentVolumeClaim(PVC)​**:
      • 特点:用户通过PVC请求存储资源,由管理员配置的PersistentVolume(PV)提供存储。
      • 用途:解耦存储细节,支持动态供给(Dynamic Provisioning)。
      • 流程
        1. 管理员创建StorageClass定义存储类型。
        2. 用户创建PersistentVolumeClaim请求存储。
        3. 系统自动创建PersistentVolume并绑定到PVC。
      • 示例
    # StorageClass定义(AWS EBS)
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: fast
    provisioner: kubernetes.io/aws-ebs
    parameters:
      type: gp3
    
    # PVC请求存储
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      storageClassName: fast
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 100Gi
    4. 配置与密钥

    这两种情况后面会有具体章节另外讲解

    • ​**configMap**:

      • 特点:将配置数据以键值对形式挂载到容器。
      • 用途:注入配置文件或环境变量。
      • 示例
    volumes:
      - name: app-config
        configMap:
          name: my-configmap
    • ​**secret**:

      • 特点:存储敏感数据(如密码、证书),以Base64编码。
      • 用途:安全地传递密钥信息。
      • 示例
    volumes:
      - name: db-secret
        secret:
          secretName: mysql-credentials

    三、高级特性

    1. 动态存储供给(Dynamic Provisioning)​

    通过StorageClass自动创建PV,无需手动预配置:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: standard
    provisioner: kubernetes.io/gce-pd
    parameters:
      type: pd-standard
    2. Volume访问模式(Access Modes)​
    • ​**ReadWriteOnce(RWO)​**:单节点读写。
    • ​**ReadOnlyMany(ROX)​**:多节点只读。
    • ​**ReadWriteMany(RWX)​**:多节点读写。
    3. 存储卷扩容

    某些存储类型(如云存储)支持在线扩容PVC:

    spec:
      resources:
        requests:
          storage: 200Gi  # 从100Gi扩容到200Gi

    下一章节我们将针对上面的几种情况分别走出例子讲解

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值