k8s学习-数据管理

在Docker中我们知道,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中,常用的手段就是Volume数据卷。在K8S中,也提供了存储模型Volume,支持我们将应用中的数据持久化存储到容器中。

(1)学习Volume,以及Kubernetes如何通过Volume为集群中的容器提供存储;
(2)实践几种常用的Volume类型并理解它们各自的应用场景;
(3)学习Kubernetes如何通过 PersistentVolume和PersistentVolumeClaim分离集群管理员与集群用户的职责,并实践Volume的静态供给和动态供给。

1.1 使用K8S Volume

(1)emptyDir
作为K8S最基础的Volume类型,emptyDir提供了最基础的持久化方案,但是这个方案不怎么好。因为,emptyDir对于Pod来说并非持久的(它对于容器来说是持久化的),因为当Pod从节点删除时,Volume的内容也会被删除。但如果只是容器被销毁而Pod还在,则Volume不会受影响。
换句话说:emptyDirVolume的生命周期与Pod一致。鉴于此特性,不建议在实际中使用此类型Volume。

vi volume-demo.yaml

apiVersion: v1
kind: Pod
metadata:
  name: producer-consumer
spec:
  containers:
    - image: busybox
      name: producer
      volumeMounts:
        - mountPath: /producer_dir
          name: shared-volume
      args:
        - "/bin/sh"
        - "-c"
        - "echo 'hello world' > /producer_dir/hello; sleep 30000"
    - image: busybox
      name: consumer
      volumeMounts:
        - mountPath: /consumer_dir
          name: shared-volume
      args:
        - "/bin/sh"
        - "-c"
        - "cat /consumer_dir/hello; sleep 30000"
  volumes:
    - name: shared-volume
      emptyDir: {
   }


这里我们模拟了⼀个producer-consumer场景。Pod有两个容器producer和consumer,它们共享⼀个Volume。producer负责往Volume中写数据,consumer则是从Volume读取数据。
①文件最底部volumes定义了⼀个emptyDir类型的Volume shared-volume。
②producer容器将shared-volumemount到/producer_dir目录。
③producer通过echo将数据写到文件hello里。
④consumer容器将shared-volumemount到/consumer_dir目录。
⑤consumer通过cat从文件hello读数据。

[root@k8s-master ~]# vi volume-demo.yaml
[root@k8s-master ~]#  kubectl apply -f volume-demo.yaml
pod/producer-consumer created
[root@k8s-master ~]# kubectl get pod
NAME                                READY   STATUS              RESTARTS   AGE
producer-consumer                   0/2     ContainerCreating   0          5s
[root@k8s-master ~]# kubectl logs producer-consumer consumer
hello world

kubectl logs显示容器consumer成功读到了producer写入的数据,验证了两个容器共享emptyDir Volume。
emptyDir是Host上创建的临时目录,其优点是能够方便地为Pod中的容器提供共享存储,不需要额外的配置。

1.2 hostPath

相对于emptyDir,hotPath则克服了其生命周期的弱点,如果Pod被销毁,hostPath对应的目录还是会被保留。不过,如果一旦Host崩溃,hostPath也就无法访问了。因为,hostPath是将DockerHost文件系统中已经存在的目录mount给Pod的容器,所以会依赖于Host。

大部分应用都不会使用hostPath Volume,因为这实际上增加了Pod与节点的耦合,限制了Pod的使用。不过那些需要访问Kubernetes或Docker内部数据(配置文件和⼆进制库)的应用则需要使用hostPath。

1.3 外部Storage Provider

如果Kubernetes部署在诸如AWS、GCE、Azure等公有云上,可以直接使用云硬盘作为Volume。下面给出⼀个AWSElasticBlockStore的例子。
vi volume-demo1.yaml

apiVersion: v1
kind: Pod
metadata:
  name: using-ebs
spec:
  containers:
    - image: busybox
      name: using-ebs
      volumeMounts:
        - mountPath: /test-ebs
          name: ebs-volume
  volumes:
    - name: ebs-volume
      awsElasticBlockStore:
        volumeID: <volume-id>  # Replace <volume-id> with the actual volume ID
        fsType: ext4


Kubernetes Volume也可以使用主流的分布式存储,比如Ceph、GlusterFS等。

1.4 PersistentVolume &PersistentVolumeClaim

PV是外部存储系统中的一块存储空间,由管理员创建和维护。与Volume一样,PV具有持久性,生命周期独立于Pod。

PVC则是对PV的申请(Claim),PVC通常由普通用户创建和维护。当需要为Pod分配存储资源的时候,用户就可以创建一个PVC,指明存储资源的容量大小和访问方式(比如ReadOnly)等信息,K8S会查找并提供满足条件的PV。

与K8S Volume一样,K8S PersistentVolume也支持多种类型的存储,比如NFS、AWS EBS、Ceph等等。

1.5 NFS PV的使用

相关推荐

  1. k8s学习-数据管理

    2024-02-01 08:04:02       30 阅读
  2. k8s学习

    2024-02-01 08:04:02       33 阅读
  3. <span style='color:red;'>学习</span><span style='color:red;'>k</span><span style='color:red;'>8</span><span style='color:red;'>s</span>

    学习k8s

    2024-02-01 08:04:02      31 阅读
  4. K8S学习

    2024-02-01 08:04:02       31 阅读
  5. k8s学习

    2024-02-01 08:04:02       33 阅读
  6. <span style='color:red;'>k</span><span style='color:red;'>8</span><span style='color:red;'>s</span><span style='color:red;'>学习</span>

    k8s学习

    2024-02-01 08:04:02      23 阅读
  7. <span style='color:red;'>k</span><span style='color:red;'>8</span><span style='color:red;'>s</span><span style='color:red;'>学习</span>

    k8s学习

    2024-02-01 08:04:02      20 阅读
  8. <span style='color:red;'>K</span><span style='color:red;'>8</span><span style='color:red;'>S</span><span style='color:red;'>学习</span>

    K8S学习

    2024-02-01 08:04:02      12 阅读
  9. K8S学习指南(34)-k8s权限管理模型ABAC

    2024-02-01 08:04:02       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-01 08:04:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-01 08:04:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-01 08:04:02       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-01 08:04:02       20 阅读

热门阅读

  1. brpc之单例

    2024-02-01 08:04:02       33 阅读
  2. Qt之connect函数使用

    2024-02-01 08:04:02       31 阅读
  3. 原型和继承

    2024-02-01 08:04:02       34 阅读
  4. electron从入门到打包exe

    2024-02-01 08:04:02       44 阅读
  5. 本地部署whisper模型(语音转文字)

    2024-02-01 08:04:02       36 阅读
  6. SummaryWriter函数用法

    2024-02-01 08:04:02       31 阅读
  7. Spring中用到的设计模式

    2024-02-01 08:04:02       31 阅读
  8. 实用Python定时点击Chrome网页按钮

    2024-02-01 08:04:02       37 阅读
  9. Vue之前端Broadcast Channel API的简单使用

    2024-02-01 08:04:02       41 阅读
  10. Day05-Linux bash核心介绍及目录命令讲解

    2024-02-01 08:04:02       37 阅读