Bboysoul's Blog

首页 归档 资源 公告

使用nfs-client-provisioner动态创建pv

September 3, 2020

简介

要实现kubernetes中动态创建pv必须先创建StorageClass,每一个StorageClass对应了一个provisioner,kubernetes中内置了很多provisioner,但是很难受的是没有内置的nfs provisioner,对于我们这种没有钱的玩家,nfs是实现后端存储最简单直接的方法,所以不知道为什么k8s不提供,但是没关系有方法实现,k8s允许提供外部的provisioner,而nfs可以使用nfs-client-provisioner

https://github.com/kubernetes-retired/external-storage/tree/master/nfs-client

配置NFS-Client provisioner

首先clone这个项目

git clone https://github.com/kubernetes-retired/external-storage.git

之后进入nfs-client/deploy/文件夹

cd nfs-client/deploy/

可以看到有下面几个文件

[[email protected] deploy]# ll
总用量 28
-rw-r--r-- 1 root root  225 9月   3 14:26 class.yaml
-rw-r--r-- 1 root root 1030 9月   3 13:17 deployment-arm.yaml
-rw-r--r-- 1 root root 1040 9月   3 13:30 deployment.yaml
drwxr-xr-x 2 root root  214 9月   3 13:32 objects
-rw-r--r-- 1 root root 1834 9月   3 13:19 rbac.yaml
-rw-r--r-- 1 root root  241 9月   3 13:55 test-claim.yaml
-rw-r--r-- 1 root root  399 9月   3 13:38 test-pod.yaml

首先你要做的是创建一个独立的命名空间

vim namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: nfs-client

之后修改rbac.yamldeployment.yaml的namespace为你创建的namespace

修改完成之后我们修改deployment.yaml

          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: 192.168.1.11
            - name: NFS_PATH
              value: /data/kubernetes
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.1.11
            path: /data/kubernetes

PROVISIONER_NAME之后创建StorageClass要使用到,你可以修改成其他的名字,其他的参数根据你的nfs服务器来配置

之后apply rbac和deployment

kubectl apply -f deployment.yaml

kubectl apply -f rbac.yaml

创建完成之后我们来创建StorageClass

查看class.yaml

cat class.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-nfs-storage
provisioner: fuseim.pri/ifs # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
  archiveOnDelete: "false"

provisioner就是刚才deployment中的PROVISIONER_NAME,还有一个比较关键的参数是archiveOnDelete,如果你想在删除了pvc之后还保留数据的话需要把这个参数改为true,不然你删除了pvc同时pv也会删除,然后数据也会丢失

apply class.yaml

kubectl apply -f class.yaml

测试

test-claim.yamltest-pod.yaml是用来测试的,首先看test-claim.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-claim
  annotations:
    volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi

很简单,只要pvc有

  annotations:
    volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"

那么就会动态创建pv

接着你就可以使用这两个文件测试下是不是会动态创建pv,以及删除pvc之后数据还在不在了

欢迎关注我的博客www.bboy.app

Have Fun


Tags:
本文总阅读量 本文总访客量 本站总访问量 本站总访客数