zoukankan      html  css  js  c++  java
  • 第九章 数据管理

    9.1 Volume

      Pod是短暂的,Pod在销毁时,保存在容器内部的文件系统各种的数据会被清除。

      为了持久化保存容器中的的数据,可以使用K8s Volume。

      9.1.1 emptyDir

      emptyDir: 最基础的Volumne类型,是Host上的一个目录。

      emptyDIr Volume: 对于容器来说是持久的,对于Pod不是。当Pod从节点删除时,Volume的内容也会被删除。但是如果只是容器被销毁而Pod存在,则volume不受影响。也就是说:emptyDir Volume的生命周期与Pod一致。

      Pod中的所有容器都可以共享Volume,它们可以指定各自的mount路径。

      如下Pod有两个容器: producer 和 consumer,它们共享一个Volume. Producer 写, consumer 读。

    apiVersion: v1
    kind: Pod
    metadata:
      name: producer-consumer
    spec:
      containers:
      - image: busybox
        name: producer
        volumeMounts:                                    # 将shared-volume mount 到 producer_dir目录
        - mountPath: /producer_dir
          name: shared-volume
        args:                                            # 将数据写入到文件hello中
        - /bin/sh
        - -c
        - echo "hello world" > /producer_dir/hello ; sleep 30000
        
      - image: busybox
        name: consumer
        volumeMounts:                                    # 将shared-volume mount 到 /consumer_dir
        - mountPath: /consumer_dir
          name: shared-volume
        args:
        - /bin/sh
        - -c
        - cat /consumer_dir/hello ; sleep 30000           # 通过cat从文件hello读数据
        
      volumes:                                            # 定义了一个emptyDir类型的Volume,名字是shared-volume.
      - name: shared-volume
        emptyDir: {}   

     如下命令: consumer 容器成功的读到了hello world.

    kubeusr@GalaxyKubernetesMaster:~$ kubectl logs producer-consumer consumer      # 指定Pod 和 容器   
    hello world

      emptyDir是host上创建的临时目录,其优点是能够方便地为Pod中的容器提供共享存储,不需要额外的配置。它不具备持久性,如果Pod没有了,emptyDir也就没有了。所以emptyDir的使用场景是: 适合Pod中的容器需要临时共享存储空间的场景。

            9.1.2 hostPath

      hostPath volume的作用是将Docker Host文件系统中已经存在的目录mount给Pod的容器。大部分应用不会使用HostPath,因为它增加了Pod与节点的耦合。

      应用场景: 需要访问K8s或docker内部数据(配置文件和二进制库)的应用需要使用hostPath.

       用处不大,例子略。

       9.1.2 外部Storage Provider

              如果K8s部署在公有云上(比如AWS, Azure等),可以直接使用云硬盘作为Volume.

               Ceph: 相对于emptyDir和hostPath,这些volume类型的最大特点就是不依赖K8s。Volume的底层基础设施由独立的存储系统管理,与K8S集群分离。

    9.2 PersistentVolume & PersistentVolumeClaim

      Volume在可管理上有不足: 要使用Volume,Pod必须事先知道如下信息:

      (1)当前Volume来自AWS,CEPH

      (2)AWS/CEPT  Volume 已经提前创建, 并且知道确切的Volume-id

      Pod是开发人员维护,Volume是存储系统管理员维护。二者之间耦合,不利于大规模系统的开发,沟通效率低下。

      K8s给出的解决方案是:PersistentVolume(PV)  和  PersistentVolumeClaim(PVC)

      PV: 外部存储系统中的一块存储空间,由管理员维护和创建。PV具有持久性,声明周期独立于Pod。

           PVC: 是对PV的申请。PVC通常由普通用户创建和维护。需要为Pod分配资源时,用户可以创建一个PVC,指定存储资源容量的大小和访问模式,K8s会查找并提供满足条件的PV。

      有了PVC,用户只需要告诉K8s需要什么资源,而不必关心真正的空间从哪里来、如何访问。

      K8s支持多种类型的PV,比如AWS EBS、Ceph、NFS等。  

      

      

      

      

  • 相关阅读:
    雷霆战机
    各种 Python 库/模块/工具
    redis
    25
    为什么Python中“2==2>1”结果为True
    thinkphp3.2路由美化,url简化
    thinkphp调整框架核心目录think的位置
    thinkphp3.2中开启静态缓存后对404页面的处理方法
    thinphp中volist嵌套循环时变量$i 被污染问题,key="k"
    thinkphp中如何是实现多表查询
  • 原文地址:https://www.cnblogs.com/liufei1983/p/10204850.html
Copyright © 2011-2022 走看看