存储组件 nfs-subdir-external-provisioner 是一个存储资源自动调配器,它可用将现有的 NFS 服务器通过持久卷声明来支持 Kubernetes 持久卷的动态分配。此组件是对 nfs-client-provisioner 的扩展,nfs-client-provisioner 已经不提供更新,且 nfs-client-provisionerGithub仓库已经迁移到 nfs-subdir-external-provisioner 的仓库。

nfs-subdir-external-provisioner官方Github地址

k8s版本:v1.23.1

准备工作:
  • 搭建好NFS服务;
  • 安装好helm

使用helm安装:
  1. 使用命令行进行安装:

    #添加helm源
    helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner #创建个namespace(可选,主要是为了查看资源方便)
    kubectl create ns nfs-sc-default #使用helm安装(10.1.129.86为NFS地址,/data/nfs-data为共享的目录)
    helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
    --set storageClass.name=nfs-sc-default #指定sc的名字
    --set nfs.server=10.1.129.86 \ #指定nfs地址
    --set nfs.path=/data/nfs-data \ #指定nfs的共享目录
    --set storageClass.defaultClass=true \ #指定为默认sc
    -n nfs-sc-default #指定命名空间 #查看创建的sc
    kubectl get sc
  2. 使用values.yaml进行安装:

    #下载chart
    helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner #解压后可以看到values.yaml
    cat values.yaml | egrep -v '#|^$' ###########
    replicaCount: 1
    strategyType: Recreate
    image:
    repository: k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner
    tag: v4.0.2
    pullPolicy: IfNotPresent
    imagePullSecrets: []
    nfs:
    server: 10.1.129.86 #指定nfs地址
    path: /data/nfs-data #指定nfs的共享目录
    mountOptions:
    volumeName: nfs-subdir-external-provisioner-root
    reclaimPolicy: Retain
    storageClass:
    create: true
    defaultClass: true #指定为默认sc
    name: nfs-sc-default #指定sc的名字
    allowVolumeExpansion: true
    reclaimPolicy: Delete
    archiveOnDelete: true
    onDelete:
    pathPattern:
    accessModes: ReadWriteOnce
    annotations: {}
    leaderElection:
    enabled: true
    rbac:
    create: true
    podSecurityPolicy:
    enabled: false
    podAnnotations: {}
    podSecurityContext: {}
    securityContext: {}
    serviceAccount:
    create: true
    annotations: {}
    name:
    resources: {}
    nodeSelector: {}
    tolerations: []
    affinity: {}
    labels: {}
    ########### #就修改了上面4处参数后使用values.yaml文件进行安装
    helm install nfs-subdir-external-provisioner \
    nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
    -f values.yaml \
    -n nfs-sc-default #查看创建的sc
    kubectl get sc

测试:
  1. 创建pvc测试:

    先创建个test-pvc.yaml,在这个yaml文件里我们没有特意指定使用哪个sc,是因为之前创建的sc是默认的sc,如果没有指定默认sc,需要在这个文件里指定使用哪个sc

    cat test-pvc.yaml
    
    ##########
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
    name: test-pvc
    # storageClassName: nfs-sc-default #指定sc名字,如果之前设定nfs-sc-default为默认sc可不用写这行指定
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 1Mi
    ########## #创建pvc
    kubectl apply -f test-pvc.yaml -n nfs-sc-default #查看pvc
    kubectl get pvc -n nfs-sc-default

    查看pv,如图第二个为sc创建的pv,名字为随机,并已经与test-pvc绑定了:

  2. 创建pod测试:

    创建test-pod.yaml文件,在这个yaml文件里我们只指定了busybox文件创建了个SUCCESS文件,绑定的volume里指定的是之前创建的test-pvc

    cat test-pod.yaml
    
    #########
    kind: Pod
    apiVersion: v1
    metadata:
    name: test-pod
    spec:
    containers:
    - name: test-pod
    image: busybox:latest
    command:
    - "/bin/sh"
    args:
    - "-c"
    - "touch /mnt/SUCCESS && exit 0 || exit 1"
    volumeMounts:
    - name: nfs-pvc
    mountPath: "/mnt"
    restartPolicy: "Never"
    volumes:
    - name: nfs-pvc
    persistentVolumeClaim:
    claimName: test-pvc
    ######### #创建测试pod
    kubectl apply -f test-pod.yaml -n nfs-sc-default #查看pod已经显示创建成功了
    kubectl get pod -n nfs-sc-default
  3. 查看NFS目录里创建的文件:

    可以看见SUCCESS文件创建成功,并且可以看出命名目录的规则为namespace名称-pvc名称-pv名称PV 名称是随机字符串,所以 每次只要不删除PVC,那么Kubernetes中的与存储绑定将不会丢失,要是删除PVC也就意味着删除了绑定的文件夹,下次就算重新创建相同名称的PVC,生成的文件夹名称也不会一致,因为PV 名是随机生成的字符串,而文件夹命名又跟PV 有关,所以删除PVC需谨慎。

  4. 删除相关测试的资源:

    kubectl delete -f test-pod.yaml  -n nfs-sc-default
    kubectl delete -f test-pvc.yaml -n nfs-sc-default

使用helm安装nfs-subdir-external-provisioner实现动态创建存储的更多相关文章

  1. Helm 安装Kafka

    helm镜像库配置 helm repo add stable http://mirror.azure.cn/kubernetes/charts helm repo add incubator http ...

  2. 使用helm安装jenkin和gitlab

    一.使用服务介绍 存储: 阿里云NAS k8s网络插件: calico k8s版本: 1.15.2 二.helm安装 https://www.cnblogs.com/zhangb8042/p/1020 ...

  3. Linux下安装nfs服务器

    1. 安装nfs服务 $sudo apt-get install nfs-kernel-server portmap 2. 在配置文件/etc/exports中添加以下内容/home/jxhui/nf ...

  4. CentOS7 安装NFS SSH免密码登陆

    配置5台虚拟机 ip为192.168.1.160 - 164,使用160作为共享服务器 使用yum安装nfs 以及rpcbind,有很多文章介绍,这里不再赘述 一.启动服务 1.启动rpcbind s ...

  5. Linux centos 7 安装NFS服务

    NFS服务简介:NFS是Network File System的缩写,即网络文件系统.客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下.---主要功能指的是共享文件 为什么要安装NF ...

  6. kubernetes包管理工具Helm安装

    helm官方建议使用tls,首先生成证书. openssl genrsa -out ca.key.pem openssl req -key ca.key.pem -new -x509 -days -s ...

  7. kubernetes(k8s) helm安装kafka、zookeeper

    通过helm在k8s上部署kafka.zookeeper 通过helm方法安装 k8s上安装kafka,可以使用helm,将kafka作为一个应用安装.当然这首先要你的k8s支持使用helm安装.he ...

  8. centos7安装NFS

    在服务器上安装nfs服务,并将该服务器的/data目录进行共享. 服务端配置 安装nfs组件,并检查安装状态 yum install nfs-utils rpcbindrpm -qa nfs-util ...

  9. Ubuntu下安装nfs服务器

    安装 NFS 软件包在 ubuntu 终端输入下面命令安装 NFS 服务器:vmuser@Linux-host: ~$ sudo apt-get install nfs-kernel-server # ...

随机推荐

  1. Collection类集

    1.Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的 ...

  2. 多线程-线程间通信-多生产者多消费者问题解决(notifyAll)

    1 package multithread4; 2 3 /* 4 * 生产者,消费者. 5 * 6 * 多生产者,多消费者的问题. 7 * 8 * if判断标记,只有一次,会导致不该运行的线程运行了. ...

  3. python第三方模块详细教程(紧急情况宝典)

    目录 一:第三方模块 第三方模块:并不是python自带的 需要基于网络下载! 使用下载第三方模块 需要将python pip添加到环境变量 1.验证pip路径添加成功 2.pycharm添加第三方模 ...

  4. ORACLE数据库误操作DELETE并且提交数据库之后如何恢复被删除的数据

    一:根据时间来恢复: 1.查询数据库当前时间() select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; 2.查询删除数据时间点之前的数据 ...

  5. python10day

    昨日回顾 函数是以功能为导向,减少重复代码.增强可读性. 函数的调用:func().写几次执行几次 函数的返回值return 终止函数 return单个值 return多个值,按元组返回 函数的参数: ...

  6. H264 编解码协议

    1.概述 H264是MPEG-4标准所定义的最新编码格式,同时也是技术含量最高.代表最新技术水平的视频编码格式之一,标准写法应该是H.264.H.264视频格式是经过有损压缩的,但是在技术上尽可能做到 ...

  7. 【XR-4】文本编辑器

    直接做是困难的,不妨依照部分分来思考. - Subtask 3 首先会进入一个误区:维护修改,通过循环串的性质在 \(\tt KMP\) 自动机上优化遍历. 但可以发现这样很难处理,我们不妨 直接维护 ...

  8. Atcoder ARC-068

    A 不难发现从 \(5\) 开始一直往 \(6\) 转再转回来是最优的,直接模拟即可. B 不难发现可以将多余部分直接贪心消去,最后必然会剩下两个或 \(1\) 个多余的数. 如果剩下两个,此时多余的 ...

  9. Win10正式版屏幕一直闪烁怎么办

    这个原因是由于两个账户都在线,一个账户更替到另一个账户时出现的 解决办法:先注销一个账户,再登录到另一个账户,即只保持一个账户在线,就不会出现屏幕闪烁的情况.

  10. PHP 取整

    转载请注明来源:https://www.cnblogs.com/hookjc/ 对于功能强大的PHP语言来说,能掌握到它的函数用法,一般都能灵活的编写各种需求的PHP程序.我们经常用到的PHP取整函数 ...