博客
关于我
Kubernetes 存储系统 Storage 介绍
阅读量:420 次
发布时间:2019-03-06

本文共 2333 字,大约阅读时间需要 7 分钟。

Kubernetes存储系统概述

存储背景

在Kubernetes环境下,容器中的存储通常是临时的,这意味着Pod重启时内部数据会丢失。因此,实际应用中需要根据需求选择合适的存储方案:

  • 无状态服务:适用于无需持久化数据的应用,容器重启后可以重新启动。
  • 有状态服务:需要持久化存储,确保状态数据不丢失。
  • 有状态集群服务:需要共享数据,通常采用容器外存储方式。
  • Kubernetes存储系统提供了四个核心概念:Volume、PersistentVolume(PV)、PersistentVolumeClaim(PVC)和StorageClass。理解这些概念是掌握Kubernetes存储系统的关键。


    Volumes

    Volume是Kubernetes存储系统的基础抽象,支持多种存储类型,如本地存储、NFS、FC以及云存储(如AWS EFS、GCE Persistent Disk等)。Volume可以直接由Pod使用,也可以由PersistentVolume使用。

    Volumes类型

    • configMap:用于存储配置信息,通常用于读取配置文件。
    • emptyDir:在Pod运行期间创建一个空文件夹,Pod移除时文件夹也会删除。
    • hostPath:将Node节点的文件系统挂载到Pod中。
    • local:代表一个本地存储设备,如磁盘或分区。
    • nfs:代表网络文件系统(NFS)。
    • persistentVolumeClaim:表示对PersistentVolume的请求。

    emptyDir详解

    emptyDir是Pod运行时创建的临时文件夹,具有以下特点:

    • 生命周期:Pod运行时创建,Pod移除时删除。
    • 容器退出:不会导致emptyDir删除。
    • 默认存储位置:根据Node支持的介质(如磁盘、SSD或网络存储)存储。
    • 特殊配置:可以将存储方式设置为内存,这样数据存储在内存中,Pod移除后数据丢失。

    hostPath详解

    hostPath用于将Node节点的文件系统挂载到Pod中,例如:

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

    local类型详解

    local类型的Volume作为静态资源供PersistentVolume使用,不支持动态分配。其特点包括:

    • 静态供给:无需动态分配。
    • 节点亲和策略:可以通过节点亲和策略进行调度。
    • 潜在问题:如果Node状态异常,可能导致Pod无法访问存储,影响可用性。

    Persistent Volumes

    Persistent Volumes(PV)是Kubernetes中独立于Pod的存储资源,具有以下特点:

  • 动态供给:通过StorageClass实现动态容量分配。
  • 资源生命周期:由管理员管理,用户通过PVC请求使用。
  • 资源绑定:PV可以绑定到特定的PVC上。
  • 扩容:支持云存储扩容,如GCE Persistent Disk和Azure Disk。

  • Persistent Volumes的属性

    • 容量:固定的存储容量。
    • Volume Mode:支持文件系统模式(默认)和裸设备模式(1.9版本及以上)。
    • 访问模式:支持读写、只读等模式。
    • StorageClass:通过StorageClass描述存储类型,同类PV只能绑定到同类PVC。
    • 重用策略:支持保留、删除和重用策略。

    Persistent Volumes的状态

    PV的状态包括:

    • Available:未被使用。
    • Bound:已绑定到PVC上。
    • Released:PVC已删除,PV未被使用。
    • Failed:动态分配失败,需手动回收。

    Persistent Volume Claims(PVC)

    PVC是用户对PV资源的请求,通过以下属性定义:

    kind: PersistentVolumeClaimapiVersion: v1metadata:  name: myclaimspec:  accessModes: ["ReadWriteOnce"]  volumeMode: Filesystem  resources:    requests:      storage: 8Gi  storageClassName: slow  selector:    matchLabels:      release: "stable"    matchExpressions:      - key: environment        operator: In        values: [dev]

    PVC的重要属性

    • 访问模式:如ReadWriteOnce、ReadOnlyMany等。
    • Volume模式:如Filesystem或Raw。
    • 资源请求:指定存储容量。
    • 选择器:通过标签选择PV资源。
    • StorageClass:指定使用的存储类型。

    StorageClass

    StorageClass为管理员提供了描述存储类型的方法,支持动态容量分配。例如:

    kind: StorageClassapiVersion: storage.k8s.io/v1metadata:  name: local-storageprovisioner: kubernetes.io/no-provisionervolumeBindingMode: WaitForFirstConsumer

    总结

    通过以上内容,可以了解Kubernetes存储系统的核心概念和使用方法。理解Volume、PV、PVC和StorageClass的关系,是掌握Kubernetes存储系统的关键。

    转载地址:http://aqrkz.baihongyu.com/

    你可能感兴趣的文章
    Python:将列表列表初始化为一定大小,
    查看>>
    Python:带有生成器的给定集合的幂集
    查看>>
    Python:按字符的位置拆分字符串
    查看>>
    Python:替换嵌套字典中的值
    查看>>
    Python:爬取数据出现response.status_code为403解决方法
    查看>>
    Python:爬取数据出现response.status_code为418解决方法
    查看>>
    Python:生成“元组集“;来自“元组列表“;不考虑顺序
    查看>>
    Python:生成具有趋势的随机时间序列数据(例如周期性、指数衰减等)
    查看>>
    Python:用渐进式数字重命名列表中的重复项而不对列表进行排序
    查看>>
    Python:矩形参数无效
    查看>>
    Python:语法进阶
    查看>>
    Python:调用复制函数时调用 Python 对象时超出了最大递归深度
    查看>>
    Python:这两个 import 语句有什么区别?
    查看>>
    Python:通过串口从 Velleman k8090 读取数据
    查看>>
    python:遍历具有列表值的字典
    查看>>
    Python:降低精度 pandas 时间戳数据帧
    查看>>
    python:非阻塞子进程,检查标准输出
    查看>>
    PythonABC多重继承
    查看>>
    Pythonargparse中的多个参数
    查看>>
    Python关于 *args 和 **kwargs 参数的详解(全)
    查看>>