k8s之StorageClass(NFS)

实验环境

k8s环境参考: k8s-v1.20.10 二进制部署指导文档

NFS-Subdir-External-Provisioner 简介

NFS-Subdir-External-Provisioner是一个自动配置卷程序,它使用现有的和已配置的 NFS 服务器来支持通过持久卷声明动态配置 Kubernetes 持久卷,PV命名规则如下

  1. PV以 ${namespace}-${pvcName}-${pvName}的命名格式提供(在NFS服务器上)
  2. PV回收的时候以 archieved-${namespace}-${pvcName}-${pvName} 的命名格式(在NFS服务器上)

NFS-Subdir-External-Provisioner此组件是对nfs-client-provisioner 的扩展,nfs-client-provisioner 已经不提供更新,且 nfs-client-provisioner 的 Github 仓库已经迁移到 NFS-Subdir-External-Provisioner的仓库,GitHub地址

NFS服务器配置

所以节点必须安装nfs-utils

# 具体配置过程略,这里仅看下nfs配置
[root@k8s-node-1 k8s-nfs]# cat /etc/exports
/data/k8s-nfs/nfs-provisioner 192.168.0.0/24(rw,no_root_squash)

创建ServiceAccount

[root@k8s-master-1 storageClass]# cat serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: nfs-client-provisioner-runner
rules:- apiGroups: [""]resources: ["nodes"]verbs: ["get", "list", "watch"]- 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: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: run-nfs-client-provisioner
subjects:- kind: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
roleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
rules:- apiGroups: [""]resources: ["endpoints"]verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
subjects:- kind: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io

部署 NFS-Subdir-External-Provisioner

[root@k8s-master-1 storageClass]# 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:nodeName: k8s-master-1   #设置在master节点运行tolerations:             #设置容忍master节点污点- key: node-role.kubernetes.io/masteroperator: Equalvalue: "true"serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisionerimage: registry.cn-hangzhou.aliyuncs.com/jiayu-kubernetes/nfs-subdir-external-provisioner:v4.0.0imagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: k8s/nfs-subdir-external-provisioner- name: NFS_SERVERvalue: 192.168.0.11- name: NFS_PATHvalue: /data/k8s-nfs/nfs-provisionervolumes:- name: nfs-client-rootnfs:server: 192.168.0.11  # NFS SERVER_IPpath: /data/k8s-nfs/nfs-provisioner# 查看pods
[root@k8s-master-1 storageClass]# kubectl get pods
NAME                                      READY   STATUS    RESTARTS   AGE
nfs-client-provisioner-67d8f9ffff-vfvgd   1/1     Running   0          2m56s

创建NFS StorageClass

[root@k8s-master-1 storageClass]# cat storage.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: managed-nfs-storageannotations:storageclass.kubernetes.io/is-default-class: "false"  # 是否设置为默认的storageclass
provisioner: k8s/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
allowVolumeExpansion: true
parameters:archiveOnDelete: "false" # 设置为"false"时删除PVC不会保留数据,"true"则保留数据
# 查看storageclass
[root@k8s-master-1 storageClass]# kubectl get storageclass
NAME                  PROVISIONER                           RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
managed-nfs-storage   k8s/nfs-subdir-external-provisioner   Delete          Immediate           true                   19m

创建PVC

[root@k8s-master-1 storageClass]# cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-claim
spec:storageClassName: managed-nfs-storageaccessModes: ["ReadWriteMany","ReadOnlyMany"]resources:requests:storage: 100Mi
# 查看pvc
[root@k8s-master-1 storageClass]# kubectl get pvc
NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
nfs-claim   Bound    pvc-0258363b-6549-481e-9a6e-5dd4e1eca1ea   100Mi      ROX,RWX        managed-nfs-storage   3s
[root@k8s-master-1 storageClass]# kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM               STORAGECLASS          REASON   AGE
pvc-0258363b-6549-481e-9a6e-5dd4e1eca1ea   100Mi      ROX,RWX        Delete           Bound    default/nfs-claim   managed-nfs-storage            12s# k8s-node-1节点查看存储
[root@k8s-node-1 nfs-provisioner]# tree default-nfs-claim-pvc-0258363b-6549-481e-9a6e-5dd4e1eca1ea/
default-nfs-claim-pvc-0258363b-6549-481e-9a6e-5dd4e1eca1ea/

创建Pod并绑定PV

[root@k8s-master-1 storageClass]# cat busybox.yaml
apiVersion: v1
kind: Pod
metadata:name: test-pod
spec:containers:- name: test-podimage: busybox:1.28imagePullPolicy: IfNotPresentcommand:- "/bin/sh"args:- "-c"- "sleep 3600"volumeMounts:- name: nfs-pvcmountPath: "/mnt/busybox"restartPolicy: "Never"volumes:- name: nfs-pvcpersistentVolumeClaim:claimName: nfs-claim
[root@k8s-master-1 storageClass]# kubectl exec -it test-pod -- ls /mnt/busybox/
[root@k8s-master-1 storageClass]# kubectl exec -it test-pod -- touch /mnt/busybox/test.txt#k8s-node-1查看
[root@k8s-node-1 default-nfs-claim-pvc-bf5f8a3a-92ee-4ea4-baf1-156cdb87230e]# pwd
/data/k8s-nfs/nfs-provisioner/default-nfs-claim-pvc-bf5f8a3a-92ee-4ea4-baf1-156cdb87230e
[root@k8s-node-1 default-nfs-claim-pvc-bf5f8a3a-92ee-4ea4-baf1-156cdb87230e]# ls
test.txt

k8s之StorageClass(NFS)相关推荐

  1. K8S 配置 storageclass 使用 nfs 动态申领本地磁盘空间

    系列文章目录 第一章:✨ k8s入门:裸机部署 k8s 集群 第二章:✨ k8s入门:部署应用到 k8s 集群 第三章:✨ k8s入门:service 简单使用 第四章:✨ k8s入门:Statefu ...

  2. k8s存储+storageclass自动创建pv+StatefulSet自动创建pvc

    k8s存储 k8s存储 storageclass自动创建pv StatefulSet k8s存储 docker存储----k8s存储 docker的容器层可以提供存储:存储在可写层(CopyOnWri ...

  3. K8S的StorageClass实战(NFS)

    关于StorageClass 在K8S环境,当pod需要存储空间时,StorageClass比PV更灵活和方便,官方文档地址:https://kubernetes.io/docs/concepts/s ...

  4. K8S 下配置 Default StorageClass (NFS)

    创建NFS共享服务(Ubuntu) apt-get install -y nfs-kernel-server # 安装nfs服务器 apt-get install -y nfs-common #安装n ...

  5. k8s的storageclass

    1,添加helm库 helm repo add stable https://kubernetes-charts.storage.googleapis.com 2,安装nfs-client-provi ...

  6. K8S篇-安装nfs插件

    前言 有关k8s的搭建可以参考:http://t.csdn.cn/H84Zu 有关过程中使用到的nfs相关的nas,可以参考: http://t.csdn.cn/ACfoT http://t.csdn ...

  7. centos7下安装nfs文件服务器 为k8s中使用nfs做准备

    根据我们 服务器规划https://blog.csdn.net/wangxin123wangxin/article/details/122880160 nfs服务器部署到192.168.21.231上 ...

  8. 使用ansible部署K8S1.18集群并使用Kubesphere 3.1.1实现devops、日志收集、灰度发布、告警监控

    离线安装集群 参考 https://github.com/easzlab/kubeasz/blob/master/docs/setup/offline_install.md 离线文件准备 在一台能够访 ...

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

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

最新文章

  1. 用python3做学生管理系统_详解用python实现基本的学生管理系统(文件存储版)(python3)...
  2. 车联网行业No.1元征科技的云端架构实现
  3. Android 项目框架
  4. flask 实现异步非阻塞----gevent
  5. DreamWeaver连接Tomcat用以编辑和测试JSP
  6. firfox 和 chrome 移动端Web开发页面调试
  7. bzoj 2194 快速傅立叶之二
  8. qt tcp不可以循环发送_Qt tcp 多线程下QTCPsocket不能发送数据~解决办法(2)
  9. 扇贝有道180930每日一句
  10. eclipse代码加版权头插件
  11. apk提取加密素材_高效IO之Dex加密(三)
  12. 利用阿里云邮件推送免费发邮件,每天免费200封,速度快,还高大上
  13. java 调用图灵接口_图灵机器人(问答机器人)API调用示例
  14. ros自己写避障算法_基于ROS的机器人室内环境探索、避障和目标跟踪方法与流程...
  15. c语言与多字节编码,什么是单字节,双字节和多字节编码
  16. 动手学深度学习:3.16 实战Kaggle比赛:房价预测
  17. 显卡驱动无法更新代码19注册列表位置
  18. 记码农十周年(20110214--20210214)
  19. Coherent Reconstruction of Multiple Humans from a Single Image运行代码
  20. android自定义滚动日期,Android基于wheelView实现自定义日期选择器

热门文章

  1. EC11旋转编码器、stm32f103驱动程序
  2. 929. Unique Email Addresses*
  3. 如何追踪计算机IP位置,网管必备技巧:如何跟踪IP地址
  4. cocos2dx android游戏防破解总结
  5. 【网络教程】如何运用rar压缩软件打包程序,实现安装引导等功能!
  6. 使用QT获取当前星期的中英文显示
  7. C语言/C++ 矩阵的右下半部分【简单易懂,代码可以直接运行】
  8. 后端逆袭,一份不可多得的PHP学习指南
  9. mysql中工资表,MySQL操作工资表,获取累计工资和月平均工资
  10. 【Linux】之对外开放端口