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

1.搭建nfs服务

(1)nfs服务端的安装配置

# 安装nfs
~]# yum -y install nfs-utils rpcbind
# 创建nfs共享目录及设置权限
~]# mkdir /data/k8sdata -p
~]# chmod 755 /data/k8sdata -R
# 配置nfs
~]# cat /etc/exports
/data/k8sdata *(rw,sync,no_root_squash)

nfs主要配置说明:

* :表示任何⼈都有权限连接,这儿也可以配置为⼀个⽹段,⼀个 IP,或者域名

rw:权限为读写

sync:表示⽂件同时写⼊硬盘和内存

no_root_squash:当登录 NFS 主机使⽤共享⽬录的使⽤者是 root 时,其权限将被转换成为匿名使⽤者,通常它的 UID 与 GID,都会变成 nobody 身份

# 启动nfs,需要先启动rpcbind再启动nfs
~]# systemctl start rpcbind
~]# systemctl enable rpcbind
~]# systemctl status rpcbind
● rpcbind.service - RPC bind serviceLoaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)Active: active (running) since Sun 2020-08-09 14:53:03 CST; 50s agoMain PID: 15672 (rpcbind)CGroup: /system.slice/rpcbind.service└─15672 /sbin/rpcbind -w
~]# systemctl start nfs
~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
~]# systemctl status nfs
● nfs-server.service - NFS server and servicesLoaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)Drop-In: /run/systemd/generator/nfs-server.service.d└─order-with-mounts.confActive: active (exited) since Sun 2020-08-09 14:57:22 CST; 17s agoMain PID: 16369 (code=exited, status=0/SUCCESS)CGroup: /system.slice/nfs-server.service
# 查看具体的挂载权限
~]# cat /var/lib/nfs/etab
/data/k8sdata *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,no_root_squash,no_all_squash)

(2)nfs客户端的安装配置

Nfs客户端需要安装在使用nfs的各个节点上,即k8s集群的各个node节点上。

# 在客户端上安装启动nfs
~]# yum -y install nfs-utils rpcbind
~]# systemctl start rpcbind
~]# systemctl enable rpcbind
~]# systemctl start nfs
~]# systemctl enable nfs
# 查看nfs共享
~]# showmount -e 192.168.16.133
Export list for 192.168.16.133:
/data/k8sdata *

2、创建基于nfs的storageclass

(1)storageclass

要使⽤StorageClass,我们就得安装对应的⾃动配置程序,⽐如我们这⾥存储后端使⽤的是 nfs,那么我们就需要使⽤到⼀个 nfs-client的⾃动配置程序,我们也叫它 Provisioner,这个程序帮我们在配置好的nfs 服务器上⾃动创建持久卷,也就是⾃动帮我们创建PV。⾃动创建的PV以${namespace}-${pvcName}-${pvName}这样的命名格式创建在NFS服务器上的共享数据⽬录中,⽽当这个PV被回收后会以archieved-${namespace}-${pvcName}-${pvName}这样的命名格式存在NFS 服务器上。

(2)、安装配置nfs storageclass

# 拉取github相关的资源至本地
~]# git clone https://github.com/kubernetes-retired/external-storage.git
~]# cd external-storage/tree/master/nfs-client/deploy/
# 将deployment.yaml配置文件中的nfs服务器和路径修改为自己nfs服务器和路径
]# cat deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-client-provisionerlabels:app: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
spec:replicas: 1strategy:type: Recreateselector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisionerimage: quay.io/external_storage/nfs-client-provisioner:latestvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: fuseim.pri/ifs- name: NFS_SERVERvalue: 192.168.16.133- name: NFS_PATHvalue: /data/k8sdatavolumes:- name: nfs-client-rootnfs:server: 192.168.16.133path: /data/k8sdata
# 修改完成后创建该deployment控制器
deploy]# kubectl apply -f deployment.yaml
deployment.apps/nfs-client-provisioner created
# 创建sa,并绑定相应的权限
deploy]# kubectl apply -f rbac.yaml
serviceaccount/nfs-client-provisioner created
# 创建storageclass
deploy]# kubectl apply -f class.yaml
storageclass.storage.k8s.io/managed-nfs-storage created
# 查看创建的资源
deploy]# kubectl get pods
NAME                                      READY   STATUS             RESTARTS   AGE
nfs-client-provisioner-7d4d65c7b9-l487r   1/1     Running            0          8s
deploy]# kubectl get storageclass
NAME                  PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
managed-nfs-storage   fuseim.pri/ifs   Delete          Immediate           false                  22h

3、使用基于nfs的storageclass

(1)创建pvc调用storageclass动态提供pv

创建了storageclass后,创建pvc之前不需要创建相关的pv,只需调用storageclass提供pv的动态供给。

# 要创建的pvc内容如下
deploy]# cat test-claim.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: test-claimannotations:volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:accessModes:- ReadWriteManyresources:requests:storage: 1Mi
# 创建pvc
deploy]# kubectl apply -f test-claim.yaml
persistentvolumeclaim/test-claim created
deploy]# kubectl get pvc
NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
test-claim   Bound    pvc-15531f5b-b439-43cc-82a8-7152a5ffd50f   1Mi        RWX            managed-nfs-storage   5s

(2)在pod控制器中使用storageclass

在实际⼯作中,使⽤ StorageClass 更多的是StatefulSet控制器管理的pod,StatefulSet控制器中我们也可以通过⼀个volumeClaimTemplates属性直接使⽤ StorageClass。实际上volumeClaimTemplates下⾯就是⼀个PVC对象的模板,类似于StatefulSet下⾯的template,实际上就是⼀个 Pod 的模板,我们用这种模板就可以动态的去创建pvc对象了。

# statefulset控制器内容
]# cat statefulset-nfs-storageclass.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: nfs-test
spec:serviceName: "nginx"replicas: 2selector:matchLabels:app: nfs-testtemplate:metadata:labels:app: nfs-testspec:terminationGracePeriodSeconds: 5containers:- name: nginximage: nginx:1.18.0ports:- name: httpcontainerPort: 80volumeMounts:- name: webmountPath: /usr/share/nginx/htmlvolumeClaimTemplates:- metadata:name: webannotations:volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"spec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 1Gi
# 创建
]# kubectl apply -f statefulset-nfs-storageclass.yaml
# 查看创建的pvc
]# kubectl get pvc
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
web-nfs-test-0   Bound    pvc-f956a6c8-5382-4a0a-a7ed-d19ac07d83c2   1Gi        RWO            managed-nfs-storage   2m2s
web-nfs-test-1   Bound    pvc-2a25a995-37db-4173-be1e-7a94ea4f9e8f   1Gi        RWO            managed-nfs-storage   119s
# 创建pvc后会在nfs上生成相关的文件
~]# ll /data/k8sdata/
total 0
drwxrwxrwx 2 root root 6 Aug 11 22:06 default-test-claim-pvc-15531f5b-b439-43cc-82a8-7152a5ffd50f
drwxrwxrwx 2 root root 6 Aug 11 22:59 default-web-nfs-test-0-pvc-f956a6c8-5382-4a0a-a7ed-d19ac07d83c2
drwxrwxrwx 2 root root 6 Aug 11 22:59 default-web-nfs-test-1-pvc-2a25a995-37db-4173-be1e-7a94ea4f9e8f

k8s中使用基于nfs的storageclass相关推荐

  1. Docker(二十九)k8s 创建动态存储,基于nfs 的storageclass

    可参照官方的配置 https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client/deploy 第一种 ...

  2. k8s—centos7安装部署NFS服务器和客户端及基于nfs的动态存储storageclass使用总结

    ![技术公众号:后端技术解忧铺](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX ...

  3. @kubernetes(k8s)数据持久化Volume存储卷(emptyDir、hostPath、NFS、StorageClass)

    文章目录 kubernetes(k8s)数据持久化Volume 一.数据持久化 1.Vlolume概述 2.数据卷的分类 3.常用的四种数据卷 4.Pod使用Volume步骤: 5. volume基本 ...

  4. K8S持久化存储:NFS+StorageClass实现动态供给

    K8S持久化存储:NFS+StorageClass实现动态供给 一.简介:K8S中的持久化存储 二.部署nfs-provisioner 三.创建StorageClass 四.实验 实验1:部署depl ...

  5. k8s集群svc端口范围,nfs做StorageClass运行故障

    ================== kubeadm 更改NodePort端口范围 kubernetes默认端口号范围是 30000-32767 ,如果期望值不是这个区间则需要更改. 1.找到配置文件 ...

  6. 实战:k8s中基于角色的权限访问控制-RBAC(成功测试-博客输出)-20211005

    目录 文章目录 目录 写在前面 基础知识介绍 实验环境 实验软件 老师原课件内容 1..用K8S CA签发客户端证书 2. 生成kubeconfig授权文件 3. 创建RBAC权限策略 4.指定kub ...

  7. asp.net core程序在k8s中基于rabbitmq队列消息数的HPA实践!

    背景 最近一段时间,陆陆续续的把手里头项目都迁移到了k8s中,期间遇到很多的坑,并且也学到了许多k8s的知识(从0-1),大家都知道k8s中的一大特性是自动扩容,对此结合自己的业务发现很是有" ...

  8. k8s篇-yaml部署nfs storageclass

    测试的k8s集群版本为1.22 rbac.yml apiVersion: v1 kind: ServiceAccount metadata:name: nfs-client-provisioner# ...

  9. 关于K8s中Ansible AWX(awx-operator 0.30.0)平台Helm部署的一些笔记

    写在前面 整理一些K8s中通过Helm的方式部署AWX的笔记分享给小伙伴 博文内容为部署过程和遇到问题的解决过程 食用方式: 需要了解K8s 需要预置的K8s+Helm环境 需要科学上网 理解不足小伙 ...

最新文章

  1. Original error was: DLL load failed: 找不到指定的模块。--解决办法
  2. 数据中心可以从云计算学习可持续性运营
  3. PHP学习笔记4:字符串与正则
  4. Wi-Fi模块的设置方法汇总
  5. python 网络编程模块_Python网络编程之socket模块
  6. windows xp下Apache2.2.11整合Tomcat6.0.20
  7. python123反素数_初学python之路-day01
  8. DarkGDK的杯具体验
  9. 龙芯源码编译mysql_使用源码包在龙芯2F上安装mysql
  10. 住得越高越安静? 中间楼层噪音最大
  11. jupyter notebook 误删恢复
  12. 一文带你了解MySQL的前世今生,架构,组成部分,特点,适用场景
  13. Instant Neural Graphics Primitives with a Multiresolution Hash Encoding 翻译
  14. 项目经理考PMP,薪资会提高吗?
  15. 大数据面试题集锦-Hadoop面试题(一)
  16. 山东计算机网络期末试题,山东轻工业学院计算机网络期末试题A(13页)-原创力文档...
  17. 酒店IPTV方案 酒店电视系统方案哪一种比较好
  18. WeMall一元购惊喜上线!!!
  19. python 调用pyautogui 实时获取鼠标的位置、移动鼠标
  20. 1.1JVM内存结构——堆、栈、方法区、直接内存、堆和栈区别

热门文章

  1. 一文看懂!百度对话系统PLATO家族
  2. mongo慢查询排查
  3. 刀客羽朋面向对象pdf
  4. 更新品牌与Z世代交互方式|朋氪元宇宙即将内测
  5. 超实用的linux服务器vps测速脚本看看你的服务器到底跑多少带宽
  6. 新手向,从用Spark求平均值到reduceByKey详解
  7. tomcat 启动报错 registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister
  8. python神经网络分析案例_python神经网络实战
  9. python bp神经网络的库_python bp神经网络库
  10. 管理者如何正确激励员工、调动其工作积极性?