基于NFS的PV动态供给(StorageClass)

一、简介

PersistentVolume(PV)是指由集群管理员配置提供的某存储系统上的段存储空间,它是对底层共享存储的抽象,将共享存储作为种可由用户申请使的资源,实现了“存储消费”机制。通过存储插件机制,PV支持使用多种网络存储系统或云端存储等多种后端存储系统,例如,NFS、RBD和Cinder等。PV是集群级别的资源,不属于任何名称空间,用户对PV资源的使需要通过PersistentVolumeClaim(PVC)提出的使申请(或称为声明)来完成绑定,是PV资源的消费者,它向PV申请特定大小的空间及访问模式(如rw或ro),从创建出PVC存储卷,后再由Pod资源通过PersistentVolumeClaim存储卷关联使,如下图:

尽管PVC使得用户可以以抽象的方式访问存储资源,但很多时候还是会涉及PV的不少属性,例如,由于不同场景时设置的性能参数等。为此,集群管理员不得不通过多种方式提供多种不同的PV以满不同用户不同的使用需求,两者衔接上的偏差必然会导致用户的需求无法全部及时有效地得到满足。Kubernetes从1.4版起引入了一个新的资源对象StorageClass,可用于将存储资源定义为具有显著特性的类(Class)而不是具体的PV,例如“fast”“slow”或“glod”“silver”“bronze”等。用户通过PVC直接向意向的类别发出申请,匹配由管理员事先创建的PV,或者由其按需为用户动态创建PV,这样做甚至免去了需要先创建PV的过程。
PV对存储系统的支持可通过其插件来实现,目前,Kubernetes支持如下类型的插件。
官方地址:https://kubernetes.io/docs/concepts/storage/storage-classes/

由上图我们可以看到官方插件是不支持NFS动态供给的,但是我们可以用第三方的插件来实现,下面就是本文要讲的。

二、安装NFS插件

GitHub地址:https://github.com/kubernetes-incubator/external-storage/tree/master/nfs/deploy/kubernetes

2.1创建RBAC授权

[[email protected] storage-class]# cat rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner

---

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["list", "watch", "create", "update", "patch"]

---

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io

2.2 创建Storageclass类

[[email protected] storage-class]# cat storageclass-nfs.yaml
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
  name: managed-nfs-storage
provisioner: fuseim.pri/ifs

2.3 创建nfs的deployment,修改相应的nfs服务器ip及挂载路径即可。

[[email protected] storage-class]# cat deployment-nfs.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      imagePullSecrets:
        - name: registry-pull-secret
      serviceAccount: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: lizhenliang/nfs-client-provisioner:v2.0.0
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: 172.31.182.145
            - name: NFS_PATH
              value: /u01/nps/volumes
      volumes:
        - name: nfs-client-root
          nfs:
            server: 172.31.182.145
            path: /u01/nps/volumes

三、创建一个PV动态供给应用实例

下面是一个StatefulSet应用动态申请PV的示意图:

例如:创建一个nginx动态获取PV

[[email protected] storage-class]# cat nginx-demo.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "managed-nfs-storage"
      resources:
        requests:
          storage: 1Gi

启动后我们可以看到以下信息:

这时我们在nfs服务器上也会看到自动生成3个挂载目录,当pod删除了数据还会存在。

StatefulSet应用有以下特点:

1.唯一的主机名

2.域名访问(<statefulsetName-index>.<service-name>.svc.cluster.local) 如:web-0.nginx.default.svc.cluster.local

3.独立的挂载卷

原文地址:https://www.cnblogs.com/Dev0ps/p/10851802.html

时间: 2024-10-10 13:28:33

基于NFS的PV动态供给(StorageClass)的相关文章

Kubernetes系列之基于NFS的PV动态供给(StorageClass)

一.简介 PersistentVolume(PV)是指由集群管理员配置提供的某存储系统上的段存储空间,它是对底层共享存储的抽象,将共享存储作为种可由用户申请使的资源,实现了"存储消费"机制.通过存储插件机制,PV支持使用多种网络存储系统或云端存储等多种后端存储系统,例如,NFS.RBD和Cinder等.PV是集群级别的资源,不属于任何名称空间,用户对PV资源的使需要通过PersistentVolumeClaim(PVC)提出的使申请(或称为声明)来完成绑定,是PV资源的消费者,它向PV

k8s 基于NFS部署storageclass pv自动供给

在k8s中部署有状态应用时,通常需要做数据持久化存储. 后端存储的方式有以下几种: 1.基于宿主机本地的存储方式: (重启pod时,若pod被调度到其他节点上,尽管原来节点上的数据不会丢失,但是其他节点上没有该应用存储过的数据,所以并不持久化) 2.基于本地过云存储服务的方式,如:(NFS.glusterfs.cephfs.awsElasticBlockStore.azureDisk.gcePersistentDisk等) (在资源清单中指明URL地址和共享挂载卷目录即可实现数据持久化存储) 3

k8s中部署基于nfs的StorageClass

k8s中部署基于nfs的StorageClass ? storageclass相当于是一个动态的存储,即每个pod需要多少容量,直接在配置资源清单中声明即可;但是nfs默认是不支持storageclass动态存储的. ? 总结一下就是: ? 1. 平时使用过程中,如果是静态的存储,那么过程是先准备好存储,然后基于存储创建PV;然后在创建PVC,根据容量他们会找对应的PV ? 2. 使用动态存储,那么就是先准备好存储,然后直接创建PVC,storageclass会根据要求的大小自动创建PV 首先安

k8s存储数据持久化,emptyDir,hostPath,基于Nfs服务的PV,PVC

在docker和K8S中都存在容器是有生命周期的,因此数据卷可以实现数据持久化. 数据卷解决的主要问题: 1.数据持久性:当我们写入数据时,文件都是暂时性的存在,当容器崩溃后,host就会将这个容器杀死,然后重新从镜像创建容器,数据就会丢失. 2.数据共享:在同一个Pod中运行容器,会存在共享文件的需求. 数据卷的类型: 1.emptyDiremptyDir数据卷类似于docker数据持久化的docker manager volume,该数据卷初分配时,是一个空目录,同一个Pod中的容器可以对该

kvm 静态迁移、基于nfs的动态迁移

参考<kvm 虚拟化技术,实战与原理解析> 迁移:迁移包含系统整体的迁移和某个工作负载的迁移,按照迁移的特性可以分为以下几类: 静态迁移(冷迁移):指迁移过程中明显有一段时间,客户机的服务不可用,它还可以分为两种,一种是完全关闭客户机后,将硬盘镜像复制到另外的宿主机再启动起来,这种不会保存客户机的工作负载状态: 还有一种并不完全关闭客户机而是暂停客户机,而后用快照之类的方式,把当前的状态做成快照,复制快照到新的宿主机上启动. 动态迁移(热迁移):是指保证客户机上应用服务正常运行的同时,完成迁移

基于NFS共享存储实现KVM虚拟机动态迁移

基于NFS共享存储实现KVM虚拟机动态迁移 一:配置环境 二:安装相关的依赖包 三:实现NFS共享存储 四:KVM机配置相同的步骤 五:安装KVM01安装虚拟机 六:实现迁移  实验初始配置:所有主机关闭防火墙与selinux [[email protected] ~]# iptables -F [[email protected] ~]# systemctl stop firewalld [[email protected] ~]# systemctl disable firewalld [[

LAMP平台扩展:基于NFS服务实现博客站点负载均衡

nfs简介: nfs:Network File System,网络文件系统:是一种分布式文件系统协议,最初由Sun公司开发.其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件. NFS和其他许多协议一样,是基于RPC协议实现的. rpc:Remote Procedure Call,远程过程调用:是一个计算机通信协议.该协议允许运行于一台计算机的程序调用另一台计算机的子程序.调用远程主机上的函数,一部分功能由本地程序,另一部分功能由远程主机上的函数完成. rpcbind:RPC

基于NFS v4版本搭建NFS服务器

基于NFS  v4版本搭建NFS服务器 1资源规划 作用 IP 版本 NFS服务端 192.168.78.1 Centos6.5 64位 NFS客户端 192.168.78.1 Centos6.5 64位 2 NFS服务端安装配置 2.1 安装rpm包 yum install  nfs-utils  nfs-utils-lib  nfs4-acl-tools rpcbind 2.2 新建要导出的目录 mkdir  -pv  /home/data/ mkdir  -pv  /home/nfs/ 2

基于centos7.4 KVM动态迁移

KVM动态迁移动态迁移(Live Migration):也叫在线迁移(Online Migration).就是在保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理主机移动到另一个物理主机的过程.该过程不会对最终用户造成明 显的影响,从而使得管理员能够在不影响用户正常使用的情况下,对物理服务器进行离线维修或者升级.与静态迁移不同的是,为了保证迁移过程中虚拟机服务的可 用,迁移过程仅有非常短暂的停机时间.迁移的前面阶段,服务在源主机的虚拟机上运行,当迁移进行到一定阶段,目的主机已经具备了运行