k8s存储 卷(一)

一、可用的卷类型
    1、emptyDir   用于存储临时数据的简单空目录
    2、hostPath   用于将目录从工作节点的文件系统挂在到pod中
    3、gitRepo    通过检出Git仓库的内容来初始化的卷
    4、nfs           挂载到pod中的NFS共享卷
    5、gcePersistentDisk (google高效能型存储磁盘卷)、awsElaseticBlockStore(aws WEB服务弹性块存储卷)、azureDisk(微软云磁盘卷)   用于挂载云服务商提供的特定存储类型
    6、cinder、cephfs、iscsi、flocker、glusterfs、quobyte、rbd、flexVolume、vshphere-Volume、photonPersistentDisk、scaleIO      用于挂载其他类型的网络存储
    7、configMap、secret、downwardAPI 用于将kubernetes部分资源和集群信息公开给POD的特殊类型卷
    8、persistentVolumeClaim  一种用于预置或者动态配置的持久存储类型。
二、卷在容器之间共享数据
    1、使用emptyDir卷
          运行在pod内的应用程序可以写入任何需要的文件,卷的生存周期与pod生存周期想关联、删除pod时卷的内容就会丢失。也可以将emptyDir卷指定为内存

          .....
          volumeMounts:
            - name: html
              mountPath: /var/htdocs   #将名为html的卷挂载到容器 /var/htdocs 中。
              readOnly: true  #设置为只读
          指定emptyDir的介质:
          volumeMounts:
             - name: html
               emptyDir: 
                 medium: Memory   


    2、 gitRepo 卷基本上也是一个emptyDir卷,通过可克隆git仓库并在pod启动时检出特定版本来填充数据。
        创建gitRepo卷后,Git仓库推送更新时,卷中的文件不会自动更新。如果pod是由RC或RS 管理,删除这个pod将触发新建一个pod,这个新创建的pod则是最新的内容。
        示例:
          从一个克隆的git仓库中运行web服务器的pod的服务文件
          

apiVersion: v1
          kind: pod
          metadata:
            name: gitrepo-volume-pod
          spec:
            containers:
            - image: nginx:alpine
              name: web-server
              volumeMounts:
              - name: html
                mountPath: /usr/share/nginx/html
                readOnly: true
              ports:
              - containerPort: 80
                protocol: TCP
            volumes:
            - name: html
              gitRepo:     #创建一个gitrepo卷,
                repository: https://github.com/luksa/kubia-websit.git  #这个卷克隆至一个git仓库
                revision: master  #检出主分支
                directory: .     #将repo克隆到卷的根目录。


    3、访问工作节点文件系统上的文件 (hostPath卷)
        大多数pod应该忽略他们的主机节点,因此不应该访问节点上的文件系统,但某些系统级别的pod,确实要访问节点文件系统例如通常由DaemonSet管理的系统。
        hostPath卷是指向节点文件系统上的特定文件目录,hostPath是一种持久性存储,删除pod后hostPath卷上的数据不会丢失。
        hostPath卷不适合于在多节点情况下数据共享。
    4、持久化存储(网络存储NAS)
        volumes:
        - name: nas-data
          nfs:   #这个卷受NFS支持
            server: 1.2.3.4  #NFS服务器IP
            path: /data/html  #服务器提供的路径
        网络存储的方案比较多,这里不一一介绍。
    5、持久卷(PersisteneVolume) PV 和持久卷申明(PersisteneVolumeClaim) PVC
        开发人员无需向POD中添加特定技术的卷,有集群管理员设置底层存储,然后通过k8s api服务器创建持久卷注册,管理员可以指定其大小及访问模式。
        当集群用户需要在其pod中使用持久化存储时,他们首先创建持久化申明,然后用户将持久卷申明清单提交给K8S api,k8s找到可以匹配的持久卷并将其绑定到持久声明。

        PVC可以当作pod中的一个卷使用,其他用户不能使用相同的PV,除非通过删除PVC绑定来释放。

        流程:
        (1、管理员创建某类型的网络存储    
        (2、管理员通过向K8S API传递PV申明来创建持久卷 
        (3、用户创建一个持久卷申明(PVC)
        (4、K8S找到一个具有足够容量的PV将其置于访问模式并将PVC绑定到PV
        (5、用户创建一个POD并通过卷配置引用PVC
    6、创建持久卷

        apiVersion: v1
        kind: PersistentVolme
        metadata:
          name: mongodb-pv
        spec:
          capacity:
            storage: 1Gi    #定义PV大小
          accessModes:
          - ReadWriteOnce # 可以被单个客户端或多个客户端挂在为只读、读写模式
          - ReadOnluMany   #
          persistentVolumeReclaimPolicy: Retain #申明被释放后PV会被保留(不清理和删除)
          gecPersistentDisk:  #PV指定GCE持久磁盘
            pdName: mongodb
            faType: ext4  

 
        kubectl get pv  #查看PV状态
        status列 应该显示为Available状态

    7、通过持久卷申明来获取持久卷

apiVersion: v1
        kind: PersistentVolumeClaim
        metadata:
          name: mongodb-pvc  #声明的名称,声明将当作pod的卷使用时会用到。
        spec:
          resources:
            requests:
              storage: 1Gi #申请1G存储空间
          accessModes:
          - ReadWriteOnce    #允许单个客户端访问(同时支持读写操作)
          storageClassName: ""  #关于动态配置。


          kubectl get pvc #查看PVC状态  status列显示 Bound显示绑定成功
          ACCESSMODES列状态:
          RWO   仅允许单个节点挂在读写
          ROX   允许多个节点挂载只读
          RWX   允许多个节点挂载读写这个卷
      这个时候 kubectl  get pv 显示的STATUS 列也应该Bound状态。
    8、在pod中使用PVC

 apiVersion: v1
        kind: pod
        metadata:
          name: mongodb
        spec:
          containers:
          - image: mongo
            name: mongodb
            volumeMounts:
            - name: mongodb-data
              mountPath: /data/db
            ports:
            - containerPort: 27017
              protocol: TCP
          volumes:
          - name: mongodb-data
            persistentVolumeClaim:
              claimName: mongodb-pvc   #pod卷中通过名称引用持久卷申明

        至此从创建PV到pod 根据PVC引用存储已完成。         

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值