获得网页源码怎么做网站,舆情系统源码,dede织梦仿站网站建设,莱芜可信赖的网站建设文章目录 前言技术积累存储类#xff08;storage class#xff09;什么是NFS什么是PV\PVC为什么要用NFS-StorageClass 安装NFS-StorageClass保证K8S集群正常投用安装NFS工具与客户端NFS安装常见错误安装NFS-StorageClass存储器 前言
前面的博文我们介绍了如何用kuberadmin的… 文章目录 前言技术积累存储类storage class什么是NFS什么是PV\PVC为什么要用NFS-StorageClass 安装NFS-StorageClass保证K8S集群正常投用安装NFS工具与客户端NFS安装常见错误安装NFS-StorageClass存储器 前言
前面的博文我们介绍了如何用kuberadmin的架构概述与简单执行流程以及部署K8S集群的详细步骤。今天我们继续介绍如何安装持久化工具NFS-StorageClass。
技术积累
存储类storage class
存储类是Kubernetes资源类型的一种是管理员为创建PV方便而按需创建的类别。 要使用 StorageClass就得安装对应的自动配置程序比如这里存储后端使用的是 nfs那么就需要使用到一个 nfs-client 的自动配置程序也叫它 Provisioner这个程序使用我们已经配置好的 nfs 服务器来自动创建持久卷也就是自动创建 PV。PV、PVC和StorageClass之间的运作关系如下图所示
什么是NFS
网络文件系统英文Network File System(NFS)是由SUN公司研制的UNIX表示层协议(presentation layer protocol)能使使用者访问网络上别处的文件就像在使用自己的计算机一样。 NFS是主流的k8s数据持久化解决方案与pod共享存储解决方案NFS数据卷提供对NFS挂载支持可以自动将NFS共享 路径挂载到Pod中NFS是一个主流的文件共享服务器。 什么是PV\PVC
在Kubernetes中PVPersistent Volume网络管理员配置的存储和PVCPersistent Volume Claim用户申请的存储是用于持久化存储的两个概念 它们的区别如下 PV是实际的存储资源例如物理存储设备、网络存储设备等。PVC是对PV的请求描述了应用程序需要多少存储资源以及存储资源的属性。 PV由管理员手动配置而PVC由应用程序自动创建。应用程序在需要持久化存储时可以创建一个PVCKubernetes将根据PVC的要求自动查找或创建一个匹配的PV并将PV与PVC进行绑定。 PV和PVC是分离的概念它们可以独立地管理。当一个PVC被删除时它所绑定的PV并不会立即被删除。相反PV会被标记为Released状态等待管理员手动删除。 PV和PVC之间的绑定是一对一的关系。一个PVC只能绑定一个PV而一个PV只能被一个PVC绑定。但是多个PVC可以绑定同一个PV以实现共享存储。 PV可以设置访问模式Access Modes例如ReadWriteOnce、ReadWriteMany和ReadOnlyMany。Access Modes定义了多个Pod如何访问同一个PV。例如ReadWriteOnce表示PV只能被一个Pod以读写方式访问而ReadWriteMany表示PV可以被多个Pod以读写方式访问。 为什么要用NFS-StorageClass
PV 都是静态的要使用的一个 PVC 的话就必须手动去创建一个 PV这种方式在很大程度上并不能满足我们的需求比如我们有一个应用需要对存储的并发度要求比较高而另外一个应用对读写速度又要求比较高特别是对于 StatefulSet 类型的应用简单的来使用静态的 PV 就很不合适了这种情况下我们就需要用到动态 PV这就需要 StorageClass动态的创建PV。 要使用 StorageClass需要安装对应的自动配置程序比如我们这里存储使用的是 NFS那么我们就需要使用到一个 nfs-client 的自动配置程序我们也叫它 Provisioner这个程序使用我们已经配置好的 NFS服务器来自动创建持久卷也就是自动帮我们创建 PV。 安装NFS-StorageClass
保证K8S集群正常投用
[rootmaster ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 60d v1.27.2
node1 Ready none 60d v1.27.2
node2 Ready none 60d v1.27.2
[rootmaster ~]#安装NFS工具与客户端
# 所有kubernetes集群节点中都需要安装nfs
[rootmaster ~]# yum install -y nfs-utils# 在master节点中执行
[rootmaster ~]# echo /data/nfs *(insecure,rw,sync,no_root_squash) /etc/exports
[rootmaster ~]# mkdir -p /data/nfs chmod -R 777 /data/nfs
[rootmaster ~]# exportfs -r
#master节点启动rpc 与 nfs
[rootmaster ~]# systemctl enable rpcbind systemctl start rpcbind
[rootmaster ~]# systemctl enable nfs systemctl start nfs#在所有的node节点执行
[rootmaster ~]# systemctl enable rpcbind systemctl start rpcbind
[rootmaster ~]# systemctl enable nfs systemctl start nfs
[rootmaster ~]# showmount -e master#验证k8s集群节点nfs工具安装和配置正确
[rootmaster ~]# showmount -e master
Export list for master:
/data/nfs *
[rootmaster ~]#如下图所示表示安装成功
NFS安装常见错误
1、clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused) 需要关闭服务端和客户端防火墙以及selinux。
安装NFS-StorageClass存储器
创建k8s执行文件
[rootmaster ~]# vim nfs-storage.yaml
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-storageannotations:storageclass.kubernetes.io/is-default-class: true
provisioner: nfs-provisioner
parameters:archiveOnDelete: true ---
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: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/nfs-subdir-external-provisioner:v4.0.2# resources:# limits:# cpu: 10m# requests:# cpu: 10mvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: nfs-provisioner- name: NFS_SERVERvalue: 10.10.22.91 ## master nfs服务器IP- name: NFS_PATH value: /data/nfs ## nfs服务器共享的目录路径volumes:- name: nfs-client-rootnfs:server: 10.10.22.91path: /data/nfs
---
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执行k8s安装文件
#执行nfs-storageclass安装文件
[rootmaster ~]# kubectl apply -f nfs-storage.yaml
#验证执行结果
[rootmaster ~]# kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs-storage (default) nfs-provisioner Delete Immediate false 60d
[rootmaster ~]#如下图所示表示安装成功
⭐️路漫漫其修远兮吾将上下而求索