当前位置: 首页 > article >正文

k8s存储介绍(三)valume概述与emptydir

目录

一、Kubernetes 中的 Volume 详解

基本概念

Volume 的主要类型(这里简单介绍,后续章节会详细介绍)

1. 本地存储类型

2. 网络存储类型

3. 云提供商存储

4. 特殊用途类型

PersistentVolume (PV) 和 PersistentVolumeClaim (PVC)

StorageClass

Volume 使用示例

Volume 的生命周期

二、Kubernetes 中的 emptyDir 卷详解

基本概念

关键特性

创建 emptyDir 卷

配置选项

使用内存作为存储介质的示例

典型使用场景

工作原理

内存介质 (tmpfs) 的特殊说明

大小限制 (sizeLimit)

示例:多容器共享 emptyDir

优缺点分析

优点

缺点

最佳实践


一、Kubernetes 中的 Volume 详解

Volume(卷)是 Kubernetes 中用于持久化存储的核心概念,它解决了容器文件系统临时性的问题。下面我将详细介绍 Kubernetes 中的 Volume。

基本概念

Volume 是 Pod 中能够被多个容器访问的共享目录,它与 Pod 的生命周期相同,但比其中的任何容器都持久。当容器重启时,Volume 中的数据会保留。

Volume 的主要类型(这里简单介绍,后续章节会详细介绍)

1. 本地存储类型

  • emptyDir: 临时目录,随 Pod 创建而创建,删除而删除

    • 用途:容器间共享文件、临时缓存等

    • 示例:

      volumes:
      - name: shared-data
        emptyDir: {}
  • hostPath: 将主机节点上的文件或目录挂载到 Pod 中

    • 用途:访问主机系统文件、开发测试环境等

    • 示例:

      volumes:
      - name: host-path-volume
        hostPath:
          path: /data
          type: Directory

2. 网络存储类型

  • NFS: 网络文件系统

    • 示例:

      volumes:
      - name: nfs-volume
        nfs:
          server: nfs-server.example.com
          path: /share
  • iSCSI: iSCSI 存储设备

  • GlusterFS: 分布式文件系统

  • CephFS: Ceph 文件系统

  • FC (Fibre Channel): 光纤通道存储

3. 云提供商存储

  • awsElasticBlockStore: AWS EBS 卷

  • azureDisk: Azure 磁盘

  • azureFile: Azure 文件存储

  • gcePersistentDisk: GCE 持久化磁盘

4. 特殊用途类型

  • secret: 用于将敏感信息(如密码)挂载到 Pod

    • 示例:

      volumes:
      - name: secret-volume
        secret:
          secretName: my-secret
  • configMap: 将配置数据挂载到 Pod

  • downwardAPI: 使 Pod 和容器的元数据可用作文件

  • persistentVolumeClaim: 使用持久卷声明(PVC)来动态提供存储

PersistentVolume (PV) 和 PersistentVolumeClaim (PVC)

这是 Kubernetes 中更高级的持久化存储方案:

  • PersistentVolume (PV): 集群中的存储资源,由管理员配置

  • PersistentVolumeClaim (PVC): 用户对存储的请求,类似于 Pod 消耗节点资源的方式

示例 PV:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-volume
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: slow
  nfs:
    server: nfs-server.example.com
    path: /exports

示例 PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-claim
spec:
  storageClassName: slow
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

StorageClass

StorageClass 允许管理员描述他们提供的存储"类",可以动态配置 PV:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
  fsType: ext4

Volume 使用示例

在 Pod 中使用 Volume 的完整示例:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mycontainer
    image: nginx
    volumeMounts:
    - name: myvol
      mountPath: /usr/share/nginx/html
  volumes:
  - name: myvol
    persistentVolumeClaim:
      claimName: pvc-claim

Volume 的生命周期

  1. 配置 - 管理员创建 PV 或 StorageClass

  2. 绑定 - 用户创建 PVC,系统将其绑定到合适的 PV

  3. 使用 - Pod 通过 PVC 使用 PV

  4. 释放 - 用户删除 PVC

  5. 回收 - 根据 PV 的回收策略(Retain/Delete/Recycle)处理

二、Kubernetes 中的 emptyDir 卷详解

emptyDir 是 Kubernetes 中最简单的 Volume 类型之一,它为 Pod 中的容器提供了一个临时的工作目录。下面我将全面介绍 emptyDir 的特性、用途和工作原理。

基本概念

emptyDir 是一个临时目录,它在 Pod 被分配到节点时创建,并随着 Pod 从节点上删除而被清除。它的生命周期与 Pod 的生命周期完全一致。

关键特性

  1. 临时性存储:数据不会持久化,Pod 删除后数据丢失

  2. 节点绑定:存储在 Pod 运行的节点本地

  3. 容器共享:可被 Pod 内的所有容器访问

  4. 初始为空:创建时目录为空,因此得名 emptyDir

创建 emptyDir 卷

在 Pod 定义中创建 emptyDir 的基本语法:

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: nginx
    name: nginx-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir: {}

配置选项

emptyDir 支持两个可选参数:

  1. medium:存储介质类型

    • 默认:"" (节点默认存储介质,通常是磁盘)

    • Memory:使用 RAM 作为存储介质 (tmpfs)

  2. sizeLimit:卷的大小限制

    • 默认:nil (无限制)

    • 示例:sizeLimit: 500Mi

使用内存作为存储介质的示例

volumes:
- name: ram-volume
  emptyDir:
    medium: Memory
    sizeLimit: 256Mi

典型使用场景

  1. 临时工作空间:作为应用程序的临时工作目录

  2. 容器间共享数据:同一 Pod 中多个容器共享文件

  3. 缓存数据:存储不需要持久化的缓存数据

  4. 检查点数据:保存应用程序的检查点数据以便从崩溃中恢复

  5. 日志收集:存储日志文件直到日志收集器处理它们

工作原理

  1. 创建时机:当 Pod 被分配到节点上时,kubelet 会在节点上创建一个空目录

  2. 挂载过程:该目录被挂载到 Pod 中指定的容器路径

  3. 生命周期

    • Pod 删除 → 目录被删除

    • 容器崩溃/重启 → 目录和数据保留

    • Pod 被调度到新节点 → 在新节点上创建新空目录

  4. 存储位置:通常位于节点的 /var/lib/kubelet/pods/<pod-uid>/volumes/kubernetes.io~empty-dir/ 目录下

内存介质 (tmpfs) 的特殊说明

当设置 medium: Memory 时:

  • 数据存储在 RAM 中而不是磁盘上

  • 读写速度极快

  • 节点重启会导致数据丢失

  • 受限于节点内存资源

  • 计入容器的内存使用量

大小限制 (sizeLimit)

  • 当设置 sizeLimit 时,kubelet 会监控目录的空间使用

  • 如果超过限制,Pod 可能会被驱逐 (Evicted)

  • 对于内存介质,限制的是内存使用量

  • 对于磁盘介质,限制的是磁盘使用量

示例:多容器共享 emptyDir

apiVersion: v1
kind: Pod
metadata:
  name: shared-volumes
spec:
  containers:
  - name: writer
    image: alpine
    command: ["/bin/sh", "-c"]
    args:
    - while true; do
        echo "$(date)" >> /data/log;
        sleep 1;
      done
    volumeMounts:
    - name: shared-data
      mountPath: /data

  - name: reader
    image: alpine
    command: ["/bin/sh", "-c"]
    args:
    - tail -f /data/log
    volumeMounts:
    - name: shared-data
      mountPath: /data

  volumes:
  - name: shared-data
    emptyDir: {}

优缺点分析

优点

  • 简单易用,无需额外配置

  • 访问速度快,特别是使用内存介质时

  • 适合临时数据存储需求

  • 同一 Pod 中容器间共享数据的便捷方式

缺点

  • 数据不持久,Pod 删除后数据丢失

  • 不适合存储重要数据

  • 节点故障会导致数据丢失

  • 内存介质受限于节点可用内存

最佳实践

  1. 仅用于临时数据:不要用它存储需要持久化的数据

  2. 合理设置大小限制:特别是使用内存介质时

  3. 考虑性能需求:对IO要求高的临时数据可使用内存介质

  4. 监控使用情况:避免占用过多节点资源

  5. 清理敏感数据:应用应负责清理敏感临时数据

emptyDir 是 Kubernetes 中轻量级的临时存储解决方案,理解它的特性和限制有助于在合适的场景中有效使用它。


http://www.kler.cn/a/601090.html

相关文章:

  • Unity知识点快速回顾系列
  • 热门面试题第14天|Leetcode 513找树左下角的值 112 113 路径总和 105 106 从中序与后序遍历序列构造二叉树 (及其扩展形式)以一敌二
  • 【MySQL | 六、索引特性(进一步理解)】
  • 【零基础JavaScript入门 | Day7】三大交互案例深度解析|从DOM操作到组件化开发
  • 仅靠prompt,Agent难以自救
  • 【Pandas】pandas Series to_pickle
  • Axure设计之中继器表格——拖动行排序教程(中继器)
  • 1.基于TCP的简单套接字服务器实现
  • 【SOC 芯片设计 DFT 学习专栏 -- IDDQ 测试 与 Burn-In 测试】
  • 【数据结构初阶八大排序】---冒泡、选择、插入、希尔、堆排、快排、归并、计数
  • 数据库索引相关的面试题以及答案
  • 医院挂号预约小程序|基于微信小程序的医院挂号预约系统设计与实现(源码+数据库+文档)
  • 双指针技巧在C++中的应用:从基础到进阶
  • 在 Ubuntu 中配置开机自启动脚本并激活 Anaconda 环境
  • Vue学习笔记集--create-vue
  • 宝塔ssl 证书申请流程
  • PDR的matlab实现
  • Android音视频多媒体开源库基础大全
  • C++进阶——哈希表的实现
  • STM32蜂鸣器播放音乐