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

本文共 2359 字,大约阅读时间需要 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: PersistentVolumeClaim
    apiVersion: v1
    metadata:
    name: myclaim
    spec:
    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: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
    name: local-storage
    provisioner: kubernetes.io/no-provisioner
    volumeBindingMode: WaitForFirstConsumer

    总结

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

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

    你可能感兴趣的文章
    Node.js官网无法正常访问时安装NodeJS的方法
    查看>>
    node.js模块、包
    查看>>
    node.js的express框架用法(一)
    查看>>
    Node.js的交互式解释器(REPL)
    查看>>
    Node.js的循环与异步问题
    查看>>
    Node.js高级编程:用Javascript构建可伸缩应用(1)1.1 介绍和安装-安装Node
    查看>>
    nodejs + socket.io 同时使用http 和 https
    查看>>
    NodeJS @kubernetes/client-node连接到kubernetes集群的方法
    查看>>
    NodeJS API简介
    查看>>
    Nodejs express 获取url参数,post参数的三种方式
    查看>>
    nodejs http小爬虫
    查看>>
    nodejs libararies
    查看>>
    nodejs npm常用命令
    查看>>
    nodejs npm常用命令
    查看>>
    Nodejs process.nextTick() 使用详解
    查看>>
    NodeJS yarn 或 npm如何切换淘宝或国外镜像源
    查看>>
    nodejs 中间件理解
    查看>>
    nodejs 创建HTTP服务器详解
    查看>>
    nodejs 发起 GET 请求示例和 POST 请求示例
    查看>>
    NodeJS 导入导出模块的方法( 代码演示 )
    查看>>