安徽芜湖网站建设,软件工程师资格考试,北京网络安全公司排名,宁德市地图简介
Kubernetes支持NFS存储#xff0c;需要安装nfs-subdir-external-provisioner#xff0c;它是一个存储资源自动调配器#xff0c;它可将现有的NFS服务器通过持久卷声明来支持Kubernetes持久卷的动态分配。该组件是对Kubernetes NFS-Client Provisioner的扩展#xff0…简介
Kubernetes支持NFS存储需要安装nfs-subdir-external-provisioner它是一个存储资源自动调配器它可将现有的NFS服务器通过持久卷声明来支持Kubernetes持久卷的动态分配。该组件是对Kubernetes NFS-Client Provisioner的扩展 nfs-client-provisioner已经不提供更新而且nfs-client-provisioner Github 仓库也已经处于归档状态已经迁移到nfs-subdir-external-provisioner的仓库 rbac.yaml和deployment.yaml创建在任何空间都可以storage class是集群资源不受名称空间限制 获取NFS Subdir External Provisioner部署文件
$ wget https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/archive/refs/tags/nfs-subdir-external-provisioner-4.0.18.zip
$ unzip -o nfs-subdir-external-provisioner-4.0.18.zip
$ cd nfs-subdir-external-provisioner-nfs-subdir-external-provisioner-4.0.18/deploy/
$ ls创建名称空间
$ kubectl create ns nacos-test创建RBAC资源
$ sed -i s/namespace:.*/namespace: nacos-test/g rbac.yaml deployment.yaml
$ kubectl create -f rbac.yaml$ vim deployment.yaml注意/data/nfs/nacos目录一定要提前创建好
$ kubectl apply -f deployment.yaml$ kubectl get deployment,pods -n nacos-test部署Storage Class
$ vim class.yaml注意Storage class的配置参数一定要提前编辑好Storage Class一旦被创建则无法修改如需更改只能删除原Storage class资源对象并重新创建。${.PVC.namespace}/${.PVC.name}添加后archiveOnDelete的值为true当删除pvc后数据目录会被移动到nfs服务器的共享目录下和名称空间同级的以archive开头的目录
$ kubectl apply -f class.yaml$ kubectl get sc设置默认Storage Class $ kubectl get sc创建测试PVC
$ vim test-claim.yaml$ kubectl apply -f test-claim.yaml
$ kubectl get pvc -n nacos-test创建测试pod
$ vim test-pod.yaml$ kubectl apply -f test-pod.yaml
$ kubectl get pod -n nacos-test查看文件写入 查看pod内挂载
$ kubectl exec -it test-pod -n nacos-test -- sh -c df -h注意在输出结果中可以看到挂载的NFS存储的可用空间为6.1T(这是整个磁盘的大小)而不是PVC中分配的1G所以storage class申请的是动态资源只要空间足够大就不会出现数据卷资源不够的情况。 PV名称格式是pvc随机字符串所以每次只要不删除PVC那么Kubernetes中PV与存储绑定将不会丢失要是删除PVC也就意味着删除了绑定的文件夹下次就算重新创建相同名称的PVC生成的文件夹名称也不会一致因为PV名是随机生成的字符串而文件夹命名又跟PV有关所以删除PVC需谨慎
测试删除pod和pvc
$ kubectl delete -f test-pod.yaml test-claim.yaml
$ kubectl get pod -n nacos-test查看NFS数据目录 从结果中可以看到Kubernetes删除PVC后在NFS存储层并没有立即删除PVC对应的数据目录及数据而是将原来的数据目录改名为archived-原有数据目录名称的形式。 该结果与配置Storage Class时的参数archiveOnDelete的值设置为true的预期相符
Storage Class回收策略
第一种配置
archiveOnDelete: false
reclaimPolicy: Delete #默认没有配置默认值为Delete测试结果
pod删除重建后数据依然存在旧pod名称及数据依然保留给新pod使用sc删除重建后数据依然存在旧pod名称及数据依然保留给新pod使用删除PVC后PV被删除且NFS Server对应数据被删除
第二种配置
archiveOnDelete: false
reclaimPolicy: Retain测试结果
pod删除重建后数据依然存在旧pod名称及数据依然保留给新pod使用sc删除重建后数据依然存在旧pod名称及数据依然保留给新pod使用删除PVC后PV不会被删除且状态由Bound变为ReleasedNFS Server对应数据被保留重建sc后新建PVC会绑定新的pv旧数据可以拷贝到新的PV中
第三种配置
archiveOnDelete: ture
reclaimPolicy: Retain测试结果
pod删除重建后数据依然存在旧pod名称及数据依然保留给新pod使用sc删除重建后数据依然存在旧pod名称及数据依然保留给新pod使用删除PVC后PV不会被删除且状态由Bound变为ReleasedNFS Server对应数据被保留重建sc后新建PVC会绑定新的pv旧数据可以通过拷贝到新的PV中
第四种配置
archiveOnDelete: ture
reclaimPolicy: Delete 测试结果
pod删除重建后数据依然存在旧pod名称及数据依然保留给新pod使用sc删除重建后数据依然存在旧pod名称及数据依然保留给新pod使用删除PVC后PV不会被删除且状态由Bound变为ReleasedNFS Server对应数据被保留重建sc后新建PVC会绑定新的pv旧数据可以通过拷贝到新的PV中
设置默认的Storage Class
在Kubernetes中管理员可以为有不同存储需求的PVC创建相应的Storage Class来提供动态的存储资源PV供应同时在集群级别设置一个默认的Storage Class为那些未指定Storage Class的PVC使用。管理员要明确系统默认提供的Storage Class应满足和符合PVC的资源需求同时注意避免资源浪费 要在集群中启用默认的Storage Class就需要在kube-apiserver服务准入控制器–enableadmission-plugins中开启 DefaultStorageClass从 Kubernetes 1.10版本开始默认开启
--enable-admission-plugins.. ., DefaultStorageClass然后在Storage Class的定义中设置一个annotation
kind: Storageclass
apiVersion: storage.k8s.io/v1
metadata:name: gold
annotations:storageclass.beta.kubernetes.io/is-default-classtrue
provisioner: kubernetes.io/gce-pd
parameters:type: pd-ssd存储绑定模式
Immediate绑定模式
存储绑定模式的默认值为Immediate表示当一个PersistentVolumeClaim (PVC)创建出来时就动态创建PV并进行PVC与PV的绑定操作。需要注意的是对于拓扑受限 (Topology-limited) 或无法从全部Node访问的后端存储将在不了解Pod调度需求的情况下完成PV的绑定操作这可能会导致某些Pod无法完成调度
WaitForFirstConsumer绑定模式
WaitForFirstConsumer绑定模式表示PVC与PV的绑定操作延迟到第一个使用PVC的Pod创建出来时再进行。系统将根据Pod的调度需求在Pod所在的Node上创建PV这些调度需求可以通过以下条件不限于进行设置
Pod对资源的需求Node SelectorPod亲和性和反亲和性设置Taint和Toleration设置
目前支持WaitForFirstConsumer绑定模式的存储卷包括AWSElasticBlockStore、AzureDisk、GCEPersistentDisk。另外有些存储插件通过预先创建好的PV绑定支持WaitForFirstConsumer模式比如AWSElasticBlockStore、 AzureDisk、 GCEPersistentDisk和Local 在使用WaitForFirstConsumer模式的环境中如果仍然希望基于特定拓扑信息Topology进行PV绑定操作则在Storage Class的定义中还可以通过allowedTopologies字段进行设置。下面的例子通过matchLabelExpressions设置目标Node的标签选择条件(zoneus-central1-a或us-central1-b)PV将在满足这些条件的Node上允许创建
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: standard
provisioner: kubernetes.io/gce-pd
parameters:type: pd-standard
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:- key: failure-domain.beta.kubernetes.io/zone vallues:- us-central1-a- us-central1-b