Kubernetes高级存储

这篇具有很好参考价值的文章主要介绍了Kubernetes高级存储。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Kubernetes高级存储

PV PVC

k8s支持的存储系统很多,全部掌握不现实。为了屏蔽底层存储实现的细节,方便用户使用,k8s引入PV和PVC两种资源对象。

PV(Persistent Volume)持久化卷,对底层共享存储的抽象,一般由k8s管理员进行创建配置,通过插件完成共享存储的对接。

PVC(Persistent Volume Claim)持久化声明,是用户对于存储需求的一种声明。PVC就是用户向k8s系统发出的一种资源需求申请。
Kubernetes高级存储

PV

官方文档:

Kubernetes 文档
概念
存储
持久卷

资源清单:

apiVersion: v1  
kind: PersistentVolume
metadata:
  name: pv2
spec:
  nfs: # 存储类型,与底层真正存储对应
  capacity:  # 存储能力,目前只支持存储空间的设置
    storage: 2Gi
  accessModes:  # 访问模式
  storageClassName: # 存储类别
  persistentVolumeReclaimPolicy: # 回收策略

参数说明:

  • 存储类型

    底层实际存储的类型,kubernetes支持多种存储类型,每种存储类型的配置都有所差异

  • 存储能力

    目前只支持存储空间的设置( storage=1Gi )

  • 访问模式

    ReadWriteOnce(RWO):读写权限,但是只能被单个节点挂载ReadOnlyMany(ROX): 只读权限,可以被多个节点挂载ReadWriteMany(RWX):读写权限,可以被多个节点挂载

  • 回收策略

    Retain (保留) 保留数据,需要管理员手工清理数据Recycle(回收) 清除 PV 中的数据,效果相当于执行 rm -rf /thevolume/* Delete (删除) 与 PV 相连的后端存储完成 volume 的删除操作

实验:

使用NFS作为存储,创建3个PV,对应三个暴露路径

  1. 准备环境

    #创建目录
    [root@master ~]# mkdir /root/data/{pv1,pv2,pv3} -pv
    mkdir: created directory ‘/root/data/pv1’
    mkdir: created directory ‘/root/data/pv2’
    mkdir: created directory ‘/root/data/pv3’
    # 暴露服务 IP网段是你集群节点所在的网段
    [root@master ~]# vim /etc/exports
    [root@master ~]# more /etc/exports
    /root/data/pv1     192.168.126.0/24(rw,no_root_squash)
    /root/data/pv2     192.168.126.0/24(rw,no_root_squash)
    /root/data/pv3     192.168.126.0/24(rw,no_root_squash)
    #重启服务
    [root@master ~]# systemctl restart nfs
    
    
  2. 创建pv.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name:  pv1
    spec:
      capacity: 
        storage: 1Gi
      accessModes:
      - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      nfs:
        path: /root/data/pv1
        server: 192.168.126.132
    
    ---
    
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name:  pv2
    spec:
      capacity: 
        storage: 2Gi
      accessModes:
      - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      nfs:
        path: /root/data/pv2
        server: 192.168.126.132
        
    ---
    
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name:  pv3
    spec:
      capacity: 
        storage: 3Gi
      accessModes:
      - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      nfs:
        path: /root/data/pv3
        server: 192.168.126.132
    
  3. 操作

    [root@master ~]# vim pv.yaml
    #创建pv
    [root@master ~]# kubectl create -f pv.yaml
    persistentvolume/pv1 created
    persistentvolume/pv2 created
    persistentvolume/pv3 created
    #查看pv
    [root@master ~]# kubectl get pv -o wide
    NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE   VOLUMEMODE
    pv1    1Gi        RWX            Retain           Available                                   44s   Filesystem
    pv2    2Gi        RWX            Retain           Available                                   44s   Filesystem
    pv3    3Gi        RWX            Retain           Available                                   44s   Filesystem
    
    

PVC

PVC是资源申请,用来声明对存储空间,访问模式,存储类别需求信息

资源清单:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc
  namespace: dev
spec:
  accessModes: # 访问模式
  selector: # 采用标签对PV选择
  storageClassName: # 存储类别
  resources: # 请求空间
    requests:
      storage: 5Gi

参数说明:

  • 访问模式:描述用户应用对存储资源的访问权限
  • 选择条件:通过Label Selector使PVC对于系统中已存在的PV进行筛选
  • 存储类别:PVC定义时可设定需要的后端存储类别
  • 资源请求:描述对存储资源的请求

实验:

  1. 创建pvc.yaml,申请pv

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc1
      namespace: dev
    spec:
      accessModes: 
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
          
    ---
    
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc2
      namespace: dev
    spec:
      accessModes: 
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
         
    ---
    
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc3
      namespace: dev
    spec:
      accessModes: 
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
    
    #创建pvc
    [root@master ~]# kubectl create -f pvc.yaml
    persistentvolumeclaim/pvc1 created
    persistentvolumeclaim/pvc2 created
    persistentvolumeclaim/pvc3 created
    #查看pvc
    [root@master ~]# kubectl get pvc  -n dev -o wide
    NAME   STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE   VOLUMEMODE
    pvc1   Bound    pv1      1Gi        RWX                           14s   Filesystem
    pvc2   Bound    pv2      2Gi        RWX                           14s   Filesystem
    pvc3   Bound    pv3      3Gi        RWX                           14s   Filesystem
    #查看pv
    [root@master ~]# kubectl get pv -o wide
    NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM      STORAGECLASS   REASON   AGE   VOLUMEMODE
    pv1    1Gi        RWX            Retain           Bound    dev/pvc1                           22m   Filesystem
    pv2    2Gi        RWX            Retain           Bound    dev/pvc2                           22m   Filesystem
    pv3    3Gi        RWX            Retain           Bound    dev/pvc3                           22m   Filesystem
    
    
  2. 创建pods.yaml,实验pv

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod1
      namespace: dev
    spec:
      containers:
      - name: busybox
        image: busybox:1.30
        command: ["/bin/sh","-c","while true;do echo pod1 >> /root/out.txt; sleep 10; done;"]
        volumeMounts:
        - name: volume
          mountPath: /root/
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: pvc1
            readOnly: false
    ---
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod2
      namespace: dev
    spec:
      containers:
      - name: busybox
        image: busybox:1.30
        command: ["/bin/sh","-c","while true;do echo pod2 >> /root/out.txt; sleep 10; done;"]
        volumeMounts:
        - name: volume
          mountPath: /root/
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: pvc2
            readOnly: false        
    
    #创建Pod
    [root@master ~]# kubectl create -f pods.yaml
    pod/pod1 created
    pod/pod2 created
    #查看Pod
    [root@master ~]# kubectl get pods -n dev -o wide
    NAME   READY   STATUS    RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES
    pod1   1/1     Running   0          103s   10.244.1.5    node1   <none>           <none>
    pod2   1/1     Running   0          103s   10.244.2.11   node2   <none>           <none>
    #查看PVC
    [root@master ~]#  kubectl get pvc -n dev -o wide
    NAME   STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE   VOLUMEMODE
    pvc1   Bound    pv1      1Gi        RWX                           10m   Filesystem
    pvc2   Bound    pv2      2Gi        RWX                           10m   Filesystem
    pvc3   Bound    pv3      3Gi        RWX                           10m   Filesystem
    #查看数据卷输出信息
    [root@master ~]#  more /root/data/pv1/out.txt
    pod1
    pod1
    pod1
    pod1
    pod1
    [root@master ~]#  more /root/data/pv2/out.txt
    pod2
    pod2
    pod2
    pod2
    pod2
    
    #数据已经同步
    

生命周期

PV和PVC一一对应,类似于键值对,遵循以下生命周期:

  • 资源供应:手动创建底层存储和PV
  • 资源绑定:PV创建后,k8s负责根据PVC声明去寻找PV,并绑定(如果找不到,PVC会一直处于Pending状态,直到管理员创建了符合要求的PV),PV一旦绑定PVC,就会被这个PVC独占,不能再与其他PVC进行绑定
  • 资源使用:可在Pod里像Volume使用数据卷
  • 资源释放:用户删除PVC来释放PV

Kubernetes高级存储文章来源地址https://www.toymoban.com/news/detail-474644.html

到了这里,关于Kubernetes高级存储的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes Pod配置:从基础到高级实战技巧

    本文深入探讨了Kubernetes Pod配置的实战技巧和常见易错点。 关注【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专

    2024年04月12日
    浏览(29)
  • (【云原生 | Kubernetes 系列】— Kubernetes 1.28 存储方案)

    EmptyDir 用途: 1: 缓存空间,例如基于磁盘的归并排序。 2: 为耗时较长的计算任务提供检查点,以便任务能方便地从崩溃前状态恢复执行。 3: 在 Web 服务器容器服务数据时,保存内容管理器容器获取的文件。 HostPath 例如,hostPath 的一些用法有: 运行一个需要访问 Docker 内部机

    2024年02月02日
    浏览(42)
  • kubernetes存储-configmap

    目录 一、字面值创建 二、通过文件创建 三、通过目录创建 四、通过yaml文件创建 五、使用configmap设置环境变量 六、使用conigmap设置命令行参数 七、通过数据卷使用configmap 八、configmap热更新       在Kubernetes中,ConfigMap是一种存储配置数据的对象。它允许将配置数据分离出来

    2024年02月06日
    浏览(42)
  • kubernetes存储-secrets

    目录 一、从文件创建 二、编写yaml文件 三、将Secret挂载到Volume中 四、向指定路径映射 secret 密钥 五、将Secret设置为环境变量 六、存储docker registry的认证信息        Kubernetes中的Secrets是用于存储敏感信息的一种对象类型,例如密码、令牌、证书等。Secrets可以以编码、加密

    2024年02月06日
    浏览(29)
  • kubernetes的存储卷使用

    目录 一、为什么使用存储卷 二、emptyDir存储卷 1.概念 2.创建Pod emptyDir 3. 验证emptyDir存储卷  三、hostPath存储卷 1.概念 2.创建Pod hostPath  3.验证hostPath存储卷 三、nfs共享存储卷 1.概念 2.安装nfs,配置nfs服务  3.创建Pod 4.验证nfs存储卷 容器磁盘上的文件的生命周期是短暂的,这就

    2024年02月13日
    浏览(32)
  • 二十. Kubernetes 存储挂载

    先提出问题,或者存储挂载出现的原因: 通过k8s部署应用时,可能会生成或者读写一些配置文件,在应用部署完成后运行过程中也可能需要生成或者读写一些文件或数据,进而引出问题 这些文件或数据如何存储的 这些文件或数据如何读取的 如何做到持久化,即使k8s把当前pod杀掉重新

    2024年02月07日
    浏览(37)
  • 【Kubernetes存储篇】持久化存储PV、PVC详解

    官方中文参考文档: 1、PV、PVC是什么? PersistentVolume(PV) 是群集中的一块存储,可以是NFS、iSCSI、本地存储等,由管理员配置或使用存储类动态配置 。 PV定义了存储的容量、访问模式、持久化存储的类型等属性。PV的生命周期是独立于Pod的,即使Pod被删除,PV仍然存在,可以

    2024年02月09日
    浏览(53)
  • 【Kubernetes存储篇】StorageClass存储类动态生成PV详解

    StorageClass的作用主要有以下几个方面: 动态存储卷分配:StorageClass可以根据定义的属性动态地创建存储卷,无需手动创建和管理存储卷。 存储卷的属性管理:StorageClass可以定义存储卷的属性,如存储类型、存储容量、访问模式等,从而更好地满足应用程序的存储需求。 存储

    2024年02月13日
    浏览(44)
  • MySQL高级-存储引擎+存储过程+索引(详解01)

    目录 1.mysql体系结构  2.存储引擎 2.1.存储引擎概述 2.2.1.InnoDB 2.2.2.MyISAM 2.2.3.存储引擎选择 3.存储过程 3.1.存储过程和函数概述  3.2.创建存储过程 3.3.调用存储过程 3.4.查看存储过程 3.5.删除存储过程 3.6.语法 3.6.1.变量 3.6.2.if条件判断 3.6.3.传递参数 3.6.4.case结构 3.6.5.while循环 3.

    2024年02月13日
    浏览(44)
  • kubernetes持久化存储卷

    pod有生命周期,生命周期结束后 pod 里的数据会消失(如配置文件,业务数据等)。 解决: 我们需要将数据与pod分离,将数据放在专门的存储卷上 pod在k8s集群的节点中是可以调度的, 如果pod挂了被调度到另一个节点,那么数据和pod的联系会中断。 解决: 所以我们需要与集群节点分

    2024年02月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包