当前位置: 首页 > news >正文

K8S篇-安装nfs插件

前言

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

安装nfs存储插件

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

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

GitHub 地址:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

创建NFS服务端

这里使用的是trueNas提供的NFS服务:
ip地址:192.168.1.10
存储目录:/mnt/kingStoragePool
也可以自行实现一个nfs服务器。

部署NFS Provisioner

所有节点都必须提前安装nfs-utils

yum install nfs-utils

使用下面的命令查看nfs状态:

[root@centos-k8s-master ~]# showmount -a 192.168.1.10
All mount points on 192.168.1.10:
192.168.1.13:/mnt/kingStoragePool[root@centos-k8s-master ~]# rpm -qa | grep nfs
libnfsidmap-0.25-19.el7.x86_64
nfs-utils-1.3.0-0.68.el7.2.x86_64
[root@centos-k8s-master ~]# rpm -qa | grep rpcbind
rpcbind-0.2.0-49.el7.x86_64

创建 ServiceAccount

现在的 Kubernetes 集群大部分是基于 RBAC 的权限控制,所以创建一个一定权限的 ServiceAccount 与后面要创建的 “NFS Provisioner” 绑定,赋予一定的权限。

apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisionernamespace: provisioner# 替换成你要部署的 Namespace
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
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: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: run-nfs-client-provisioner
subjects:- kind: ServiceAccountname: nfs-client-provisionernamespace: provisioner
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-provisionernamespace: provisioner
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-provisionernamespace: provisioner
subjects:- kind: ServiceAccountname: nfs-client-provisionernamespace: provisioner
roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io

部署RBAC:

kubectl apply -f nfs-rbac.yaml

部署 NFS-Subdir-External-Provisioner

创建 NFS Provisioner 部署文件,这里将其部署到 “provisioner” Namespace 中。
nfs-provisioner-deploy.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-client-provisionerlabels:app: nfs-client-provisioner
spec:replicas: 1strategy:type: Recreate                   ## 设置升级策略为删除再创建(默认为滚动更新)selector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisioner#image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0image: registry.cn-beijing.aliyuncs.com/xngczl/nfs-subdir-external-provisione:v4.0.0volumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAME     ## Provisioner的名称,以后设置的storageclass要和这个保持一致value: nfs-client- name: NFS_SERVER           ## NFS服务器地址,需和valumes参数中配置的保持一致value: 192.168.1.10- name: NFS_PATH             ## NFS服务器数据存储目录,需和valumes参数中配置的保持一致value: /mnt/kingStoragePoolvolumes:- name: nfs-client-rootnfs:server: 192.168.1.10     ## NFS服务器地址path: /mnt/kingStoragePool            ## NFS服务器数据存储目录

创建 NFS Provisioner:

# -n: 指定应用部署的 Namespace
kubectl apply -f nfs-provisioner-deploy.yaml -n provisioner

创建 NFS SotageClass

创建一个 StoageClass,声明 NFS 动态卷提供者名称为 “nfs-storage”。

nfs-storage.yaml:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-storageannotations:storageclass.kubernetes.io/is-default-class: "false"  ## 是否设置为默认的storageclass
provisioner: nfs-client                                   ## 动态卷分配者名称,必须和上面创建的"provisioner"变量中设置的Name一致
parameters:archiveOnDelete: "true"                                 ## 设置为"false"时删除PVC不会保留数据,"true"则保留数据
mountOptions:- hard                                                  ## 指定为硬挂载方式- nfsvers=4                                             ## 指定NFS版本,这个需要根据NFS Server版本号设置
kubectl apply -f nfs-storage.yaml -n provisioner
http://www.lryc.cn/news/30995.html

相关文章:

  • xmu 离散数学 卢杨班作业详解【4-7章】
  • 多重背包问题中的二进制状态压缩
  • 汇编语言程序设计(四)之汇编指令
  • Vant2 源码分析之 vant-sticky
  • 【自然语言处理】【大模型】大语言模型BLOOM推理工具测试
  • 云桌面技术初识:VDI,IDV,VOI,RDS
  • 基于本地centos构建gdal2.4.4镜像
  • 生产环境线程问题排查
  • Day908.joinsnljdist和group问题和备库自增主键问题 -MySQL实战
  • 算法 - 剑指Offer 丑数
  • 【ONE·C || 文件操作】
  • cmd窗口中java命令报错。错误:找不到或无法加载主类 java的jdk安装过程中踩过的坑
  • Breathwork(呼吸练习)
  • taobao.itemprops.get( 获取标准商品类目属性 )
  • QT配置安卓环境(保姆级教程)
  • 【uni-app教程】八、UniAPP Vuex 状态管理
  • 同花顺测试面经(30min)
  • C++-简述#ifdef、#else、#endif和#ifndef的作用
  • VictoriaMetrics 集群部署
  • 【基于感知损失的无监督泛锐化】
  • 在vercel上用streamlit部署网站
  • 华为OD机试题 - 斗地主(JavaScript)| 含思路
  • i.MX8MP平台开发分享(clock篇)-计算clock速度相关的内核API
  • 实验4 设计模式实验3
  • CNN基础
  • 【UEFI基础】UEFI事件介绍
  • Markdown 语法速查表
  • 【C++】-- 类型转换
  • 汇编基础语法和指令总结+案例(用32位汇编实现插入排序)
  • C++多线程--线程安全的单例模式