前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【每日一个云原生小技巧 #17】Volume 和 Persistent Volume

【每日一个云原生小技巧 #17】Volume 和 Persistent Volume

作者头像
郭旭东
发布2023-11-07 13:51:57
1770
发布2023-11-07 13:51:57
举报
文章被收录于专栏:云原生工具箱云原生工具箱

在 Kubernetes 中,Volume 和 Persistent Volume 是与数据存储和管理相关的两个重要概念。

Volume

Volume 是一个属于 Pod 的存储单元,它可以被 Pod 中的容器所共享。Kubernetes Volume 的生命周期与 Pod 相同,当 Pod 被删除时,Volume 通常也会一同被清除。Volumes 支持多种数据源,包括本地存储、公共云存储服务等。

使用场景:

  • 共享数据,例如在一个多容器的 Pod 中
  • 保存临时数据,以便在重启容器时可以使用
  • 当你不需要持久化数据存储时

Persistent Volume (PV) 和 Persistent Volume Claim (PVC)

PV 是集群中的一块存储,其生命周期独立于任何单独的 Pod。这允许数据持久化,即使使用它的 Pod 不再存在。PVC 是对存储资源的请求,用户不需要了解后端存储的复杂性。它们让用户能以一种抽象的方式使用持久存储。

使用场景:

  • 持久化存储,保证关键数据在 Pod 重启后依然存在
  • 当应用程序需要稳定的存储时,比如数据库

使用技巧

  1. 理解不同类型的 Volumes:
    • 根据需要持久化数据或者是仅在 Pod 生命周期内使用数据,选择合适的 Volume 类型。
  2. 合理分配资源:
    • 在创建 PV 时,你需要指定存储大小。合理预估和请求所需的存储量。
  3. 配置访问模式:
    • PV 支持不同的访问模式,如 ReadWriteOnce、ReadOnlyMany 和 ReadWriteMany。选择适合你应用的访问模式。
  4. 数据备份:
    • 即使是持久化数据,也需要考虑备份策略,防止意外情况导致数据丢失。
  5. 使用 StorageClass:
    • 利用 StorageClass 动态创建 PV。可以预定义不同的存储类型(如 SSD、HDD)和配置,根据需要动态创建 PV。
  6. 安全性:
    • 对敏感数据加密,并确保只有授权的 Pod 可以访问相关的 PVC。

使用案例

假设我们有一个需要运行 MySQL 数据库的应用程序,数据库需要持久化存储来保存数据。

PersistentVolume (PV) 示例:

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

在这个配置中,我们创建了一个名为 mysql-pv 的持久卷,存储类型被设置为 manual,表示这是一个手动预先配置的存储类别,大小为 5Gi,并且指定访问模式为 ReadWriteOnce,表示该卷只能被一个节点以读写方式挂载。

PersistentVolumeClaim (PVC) 示例:

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

此 PVC mysql-pvc 请求与 PV 匹配的存储类别和大小,也设置为 ReadWriteOnce 访问模式。

Pod 使用 PVC 示例:

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod
spec:
  containers:
  - name: mysql
    image: mysql:5.7
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: "yourpassword"
    - name: MYSQL_DATABASE
      value:

 "mydatabase"
    volumes:
    - name: mysql-storage
      persistentVolumeClaim:
        claimName: mysql-pvc
  volumeMounts:
  - mountPath: /var/lib/mysql
    name: mysql-storage

在这个 Pod 配置中,我们将 mysql-pvc 挂载到了 MySQL 容器的 /var/lib/mysql 目录。这样,MySQL 中的数据就会被存储在 PV 上,并且即使 Pod 被删除,数据也会得到保留。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Volume
  • Persistent Volume (PV) 和 Persistent Volume Claim (PVC)
  • 使用技巧
  • 使用案例
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档