主页 > 电脑硬件  > 

k8s持久化存储(NFS-StorageClass)

k8s持久化存储(NFS-StorageClass)

一、StatefulSet由以下几个部分组成:

用于定义网络标志(DNS domain)的Headless Service用于创建PersistentVolumes的volumeClaimTemplates定义具体应用的StatefulSet

二、StatefulSet 特点 StatefulSet 适用于有以下某个或多个需求的应用:

稳定,唯一的网络标志。稳定,持久化存储。有序,优雅地部署和 scale。有序,优雅地删除和终止。有序,自动的滚动升级。

三、什么是StorageClass StatefulSet是为了解决有状态服务的问题(对应Deployments和 ReplicaSets是为无状态服务而设计),其应用场景包括:

稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现

稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现

有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现

有序收缩,有序删除(即从N-1到0)

StorageClass是一个存储类,通过创建StorageClass可以动态生成一个存储卷,供k8s用户使用。使用StorageClass可以根据PVC动态的创建PV,减少管理员手工创建PV的工作。

四、StorageClass部署流程 要使用 StorageClass,我们就得安装对应的自动配置程序,比如我们这里存储后端使用的是 nfs,那么我们就需要使用到一个 nfs-client 的自动配置程序,我们也叫它 Provisioner,这个程序使用我们已经配置好的 nfs 服务器,来自动创建持久卷,也就是自动帮我们创建 PV。

搭建StorageClass+NFS,大致有以下几个步骤: 1.创建一个可用的NFS Serve 2.创建Service Account.这是用来管控NFS provisioner在k8s集群中运行的权限 3.创建StorageClass.负责建立PVC并调用NFS provisioner进行预定的工作,并让PV与PVC建立管理 4.创建NFS provisioner.有两个功能,一个是在NFS共享目录下创建挂载点(volume),另一个则是建了PV并将PV与NFS的挂载点建立关联

五、部署步骤 1)部署NFS 在所有节点中执行:

yum -y install nfs-utils rpcbind systemctl enable rpcbind && systemctl start nfs systemctl enable nfs-server && systemctl start rpcbind

2)创建共享目录

# 创建共享目录 mkdir /home/data # 设置环境变量 vi /etc/exports # 添加以下内容 /home/data *(insecure,rw,sync,no_subtree_check,no_root_squash) # 重启服务 systemctl restart nfs

3)创建目录

添加nfs-subdir-external-provisioner仓库 helm repo add nfs-subdir-external-provisioner kubernetes-sigs.github.io/nfs-subdir-external-provisioner #查看nfs-subdir-external-provisioner所有版本 helm search repo nfs-subdir-external-provisioner --versions #拉取文件 helm install my-nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --version 4.0.17 #如果下载有问题直接下载tgz包 github /kubernetes-sigs/nfs-subdir-external-provisioner/releases/download/nfs-subdir-external-provisioner-4.0.17/nfs-subdir-external-provisioner-4.0.17.tgz #编辑values配置文件 vi nfs-subdir-external-provisioner/values.yaml 修改如下参数 replicaCount: 3 # 第1行,副本个数,根据自身需求设置,建议3个 image: registry -beijing.aliyuncs /xngczl/nfs-subdir-external-provisione repository: # 第5行,设置镜像仓库 tag: v4.0.0 # 第6行,镜像版本 nfs: server: 192.168.100.15 # 第11行,nfs server端地址 path: /home/data # 第12行,nfs目录 storageClass: defaultClass: true # 第27行,设置为默认存储类,如果不设置,使用存储类时需要指定 name: nfs-storage # 第31行,设置存储类资源名称

4)创建namespace

kubectl create namespace nfs-storage

5)安装nfs-subdir-external-provisioner

[root@master1 ~]# helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner -n nfs-storage NAME: nfs-subdir-external-provisioner LAST DEPLOYED: Fri Dec 29 19:44:31 2023 NAMESPACE: nfs-storage STATUS: deployed REVISION: 1 TEST SUITE: None

6)查看pod状态

[root@master1 ~]# kubectl get pod -n nfs-storage NAME READY STATUS RESTARTS AGE nfs-subdir-external-provisioner-6b48cd99bc-hvgqx 1/1 Running 0 9s nfs-subdir-external-provisioner-6b48cd99bc-k9ph5 1/1 Running 0 9s nfs-subdir-external-provisioner-6b48cd99bc-kcrf4 1/1 Running 0 9s

7)测试

vim test-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pvc spec: storageClassName: nfs-storage # 指定存储类,如果设置了默认,可以去掉 accessModes: - ReadWriteMany resources: requests: storage: 1Mi #创建pvc,会自动相应的pv kubectl apply -f test-pvc.yaml -n nfs-storage #查看pvc和pv是否创建 [root@master1 ~]# kubectl get pvc,pv -n nfs-storage NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/test-pvc Bound pvc-98c9cdeb-6519-4c8e-a147-61472fb06959 1Mi RWX nfs-storage 96s NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/pvc-98c9cdeb-6519-4c8e-a147-61472fb06959 1Mi RWX Delete Bound nfs-storage/test-pvc nfs-storage 96s

六、关于StorageClass回收策略对数据的影响 第一种:

# 配置 archiveOnDelete: "false" reclaimPolicy: Delete #默认没有配置,默认值为Delete #结果 1.pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用 2.sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用 3.删除PVC后,PV被删除且NFS Server对应数据被删除

第二种:

#配置 archiveOnDelete: "false" reclaimPolicy: Retain #结果 1.pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用 2.sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用 3.删除PVC后,PV不会别删除,且状态由Bound变为Released,NFS Server对应数据被保留 4.重建sc后,新建PVC会绑定新的pv,旧数据可以通过拷贝到新的PV中

第三种:

#配置 archiveOnDelete: "ture" reclaimPolicy: Retain #结果 1.pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用 2.sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用 3.删除PVC后,PV不会别删除,且状态由Bound变为Released,NFS Server对应数据被保留 4.重建sc后,新建PVC会绑定新的pv,旧数据可以通过拷贝到新的PV中

第四种:

#配置 archiveOnDelete: "ture" reclaimPolicy: Delete #结果 1.pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用 2.sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用 3.删除PVC后,PV不会别删除,且状态由Bound变为Released,NFS Server对应数据被保留 4.重建sc后,新建PVC会绑定新的pv,旧数据可以通过拷贝到新的PV中
标签:

k8s持久化存储(NFS-StorageClass)由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“k8s持久化存储(NFS-StorageClass)