当前位置: 首页> 财经> 创投人物 > 个人博客网页模板_青岛营销型网站推广_肇庆seo排名外包_自己怎么制作网站

个人博客网页模板_青岛营销型网站推广_肇庆seo排名外包_自己怎么制作网站

时间:2025/7/13 19:04:13来源:https://blog.csdn.net/huaz_md/article/details/143482776 浏览次数:0次
个人博客网页模板_青岛营销型网站推广_肇庆seo排名外包_自己怎么制作网站

华子目录

  • 存储类`storageclass`
  • 存储类的作用
    • 一、定义存储特性
    • 二、`动态卷`供应
    • 三、管理多种存储类型
    • 四、抽象存储细节
    • 五、支持存储扩展和回收策略
    • 六、应用场景
  • `StorageClass`说明
  • `StorageClass`的属性
  • 存储分配器`NFS Client Provisioner`
  • 部署`NFS Client Provisioner`
    • 创建`sa`并授权

存储类storageclass

  • 官网:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

Kubernetes中,存储类StorageClass)是一种资源对象,它描述了集群中的存储类型分类”,并用于定义存储卷的配置模板。其作用主要体现在以下几个方面:

存储类的作用

一、定义存储特性

StorageClass管理员提供了一种描述存储的方式,允许他们定义特定存储提供者(如AWS EBSAzure DiskGCE Persistent Disk等)、预配置策略(如备份策略加密)、IO性能访问模式等。这使得用户能够以抽象的方式使用这些存储,而无需关心后端存储的具体实现细节。

二、动态卷供应

当用户在创建持久卷声明PersistentVolumeClaimPVC)时,只需要指定StorageClassNameKubernetes即可根据这个StorageClass自动创建持久卷PersistentVolumePV)及底层存储。这大大减少手动创建并维护PV工作量提高存储管理灵活性效率

三、管理多种存储类型

Kubernetes集群中,可能需要连接到不同类型存储,如SSDHDD等。StorageClass可以帮助管理这些存储选项,通过定义不同StorageClass来区分不同类型存储,从而满足应用程序存储性能容量等方面的不同需求

四、抽象存储细节

通过使用StorageClass,用户不需要了解后端存储的具体实现细节,只需要知道不同StorageClass名称及其提供存储类型性能。这使得存储管理更加简单直观,同时也提高了系统的可扩展性可维护性

五、支持存储扩展和回收策略

StorageClass还支持存储卷扩展回收策略配置。例如,可以设置是否允许卷扩展,以及当PVC被删除PV回收策略(如DeleteRetain)。这些配置使得存储管理更加灵活可控

六、应用场景

StorageClassKubernetes中的应用场景非常广泛,特别是在需要持久化存储应用程序中。例如,在部署需要存储数据集群时(如Elasticsearch集群),每个节点都需要存储数据,而传统PV只能挂载一个Pod上。通过定义StorageClass并配合StatefulSet控制器,可以为每个状态Pod自动创建PVC并进行挂载,从而实现数据的持久化存储

StorageClass说明

  • StorageClass提供了一种描述存储类class)的方法,不同的class可能会映射不同的服务质量等级和备份策略其他策略等。
  • 每个StorageClass都包含provisionerparametersreclaimPolicy字段, 这些字段会在StorageClass需要动态分配PersistentVolume时会使用到

StorageClass的属性

  • 属性说明:https://kubernetes.io/zh/docs/concepts/storage/storage-classes/
  • Provisioner存储分配器):用来决定使用哪个卷插件分配PV,该字段必须指定。可以指定内部分配器,也可以指定外部分配器外部分配器代码地址为: kubernetes-incubator/external-storage,其中包括NFSCeph
  • Reclaim Policy回收策略):通过reclaimPolicy字段指定创建的Persistent Volume回收策略回收策略包括:Delete或者Retain没有指定默认为Delete

存储分配器NFS Client Provisioner

  • 源码地址:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
  • NFS Client Provisioner是一个automatic provisioner,使用NFS作为存储自动创建PV对应PVC本身不提供NFS存储,需要外部先有一套NFS存储服务
  • PV${namespace}-${pvcName}-${pvName}命名格式提供(在NFS服务器上)
  • PV回收的时候以archieved-${namespace}-${pvcName}-${pvName}命名格式(在NFS服务器上)

部署NFS Client Provisioner

创建sa并授权

[root@k8s-master volume]# vim rbac.yml
apiVersion: v1
kind: Namespace
metadata:name: nfs-client-provisioner
---
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisionernamespace: nfs-client-provisioner
---
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-provisionernamespace: nfs-client-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: nfs-client-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: nfs-client-provisioner
subjects:- kind: ServiceAccountname: nfs-client-provisionernamespace: nfs-client-provisioner
roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io
[root@k8s-master volume]# kubectl apply -f rbac.yml
namespace/nfs-client-provisioner created
serviceaccount/nfs-client-provisioner created
clusterrole.rbac.authorization.k8s.io/nfs-client-provisioner-runner created
clusterrolebinding.rbac.authorization.k8s.io/run-nfs-client-provisioner created
role.rbac.authorization.k8s.io/leader-locking-nfs-client-provisioner created
rolebinding.rbac.authorization.k8s.io/leader-locking-nfs-client-provisioner created
[root@k8s-master volume]# kubectl -n nfs-client-provisioner get sa
NAME                     SECRETS   AGE
default                  0         27s
nfs-client-provisioner   0         27s
[root@k8s-master volume]# vim deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-client-provisionerlabels:app: nfs-client-provisionernamespace: nfs-client-provisioner
spec:replicas: 1strategy:type: Recreateselector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisionerimage: sig-storage/nfs-subdir-external-provisioner:v4.0.2volumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: k8s-sigs.io/nfs-subdir-external-provisioner- name: NFS_SERVERvalue: 172.25.254.250- name: NFS_PATHvalue: /nfsdatavolumes:- name: nfs-client-rootnfs:server: 172.25.254.250path: /nfsdata

在这里插入图片描述
在这里插入图片描述

[root@k8s-master volume]# docker load -i nfs-subdir-external-provisioner-4.0.2.tar[root@k8s-master volume]# docker tag registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2 harbor.huazi.org/sig-storage/nfs-subdir-external-provisioner:v4.0.2
[root@k8s-master volume]# docker push harbor.huazi.org/sig-storage/nfs-subdir-external-provisioner:v4.0.2
[root@k8s-master volume]# kubectl apply -f deployment.yml
deployment.apps/nfs-client-provisioner created
[root@k8s-master volume]# kubectl -n nfs-client-provisioner get deployments.apps
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
nfs-client-provisioner   1/1     1            1           27s

创建存储类

[root@k8s-master volume]# vim class.yml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-client
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:archiveOnDelete: "false"
[root@k8s-master volume]# kubectl apply -f class.yml
storageclass.storage.k8s.io/nfs-client created
[root@k8s-master volume]# kubectl get sc
NAME         PROVISIONER                                   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client   k8s-sigs.io/nfs-subdir-external-provisioner   Delete          Immediate           false                  34s

创建pvc

[root@k8s-master volume]# vim pvc.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: test-claim
spec:storageClassName: nfs-clientaccessModes:- ReadWriteManyresources:requests:storage: 1G
[root@k8s-master volume]# kubectl apply -f pvc.yml
persistentvolumeclaim/test-claim created
[root@k8s-master volume]# kubectl get pvc
NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
test-claim   Bound    pvc-a164d606-732f-4005-a6a6-4798fdbc75f4   1G         RWX            nfs-client     <unset>                 90s
#在nfs服务器上可以看到
[root@harbor ~]# cd /nfsdata/
[root@harbor nfsdata]# ls
default-test-claim-pvc-a164d606-732f-4005-a6a6-4798fdbc75f4
#当我们删掉pvc后
[root@k8s-master volume]# kubectl delete -f pvc.yml
persistentvolumeclaim "test-claim" deleted#再查看nfs服务器,发现pv已经被自动删除了
[root@harbor nfsdata]# ls
[root@harbor nfsdata]#
[root@k8s-master volume]# kubectl apply -f pvc.yml
persistentvolumeclaim/test-claim created

创建测试pod

[root@k8s-master volume]# vim pod.yml
kind: Pod
apiVersion: v1
metadata:name: test-pod
spec:containers:- name: test-podimage: busyboxcommand:- "/bin/sh"args:- "-c"- "touch /mnt/SUCCESS && exit 0 || exit 1"volumeMounts:- name: nfs-pvcmountPath: "/mnt"restartPolicy: "Never"volumes:- name: nfs-pvcpersistentVolumeClaim:claimName: test-claim
[root@k8s-master volume]# kubectl apply -f pod.yml
pod/test-pod created
[root@k8s-master volume]# kubectl get pods -o wide
NAME       READY   STATUS      RESTARTS   AGE   IP            NODE            NOMINATED NODE   READINESS GATES
test-pod   0/1     Completed   0          38s   10.244.2.38   k8s-node2.org   <none>           <none>
[root@harbor nfsdata]# ls
default-test-claim-pvc-4460dd22-b4d8-4192-b249-3b687dacdf39
[root@harbor nfsdata]# cd default-test-claim-pvc-4460dd22-b4d8-4192-b249-3b687dacdf39/
[root@harbor default-test-claim-pvc-4460dd22-b4d8-4192-b249-3b687dacdf39]# ls
SUCCESS
[root@harbor default-test-claim-pvc-4460dd22-b4d8-4192-b249-3b687dacdf39]# ll
总用量 0
-rw-r--r-- 1 root root 0 114 22:36 SUCCESS
关键字:个人博客网页模板_青岛营销型网站推广_肇庆seo排名外包_自己怎么制作网站

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: