@ 存储类(Storage Class)
根据官网的存储制备器表格, NFS没有对应的内置制备器 -> 
https://kubernetes.io/zh/docs/concepts/storage/storage-classes/
但可以使用外部制备器,代码仓库 -> 
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

修改deployment.yaml的NFS服务器地址和路径, 然后apply

[root@k8s-master nfs-external-provisioner]# kubectl apply -f .
storageclass.storage.k8s.io/managed-nfs-storage created
deployment.apps/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 nfs-external-provisioner]# 

现在可以获取到存储类

[root@k8s-master nfs-external-provisioner]# kubectl get sc
NAME                  PROVISIONER                                   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
managed-nfs-storage   k8s-sigs.io/nfs-subdir-external-provisioner   Delete          Immediate           false                  27s
[root@k8s-master nfs-external-provisioner]#

test-deploy-sc.yaml内容如下

apiVersion: apps/v1
kind: Deployment
metadata:name: web-sc
spec:selector:matchLabels:app: test-pvreplicas: 3template:metadata:labels:app: test-pvspec:containers:- name: nginximage: nginxvolumeMounts:- name: pv1mountPath: /usr/share/nginx/htmlvolumes:- name: pv1persistentVolumeClaim:claimName: test-sc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: test-sc
spec:storageClassName: "managed-nfs-storage"accessModes:- ReadWriteManyresources:requests:storage: 60Gi
---
apiVersion: v1
kind: Service
metadata:name: web-sc
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:app: test-pv

关注其中的PVC资源, 储存需求60G, storageClassName对应nfs-external-provisioner/class.yaml
spec:
  storageClassName: "managed-nfs-storage"
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 60Gi

class.yaml内容如下

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: managed-nfs-storage
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:archiveOnDelete: "false"

说明:
line 4,存储类名称 "managed-nfs-storage"
line 7,archiveOnDelete, VOLUME路径在PVC删除后是否归档 false -> 自动删除 / true -> 归档保留

@ PV动态供给
当前环境没有PV或者PVC

[root@k8s-master ~]# kubectl get pv
No resources found
[root@k8s-master ~]# kubectl get pvc
No resources found in default namespace.
[root@k8s-master ~]# 

现在创建Deployment,SVC和PVC, 可以看到同时创建了一个容量60G的PV, 回收策略是Delete

[root@k8s-master ~]# kubectl apply -f test-deploy-sc.yaml
deployment.apps/web-sc created
persistentvolumeclaim/test-sc created
service/web-sc created
[root@k8s-master ~]# kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS          REASON   AGE
pvc-2c936885-8d66-4e60-8a0e-8e5e2fc437ae   60Gi       RWX            Delete           Bound    default/test-sc   managed-nfs-storage            6s
[root@k8s-master ~]# kubectl get pvc
NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
test-sc   Bound    pvc-2c936885-8d66-4e60-8a0e-8e5e2fc437ae   60Gi       RWX            managed-nfs-storage   13s
[root@k8s-master ~]#

进入Pod中的容器,在存储路径touch一个文件试试

[root@k8s-master ~]# kubectl get pod
NAME                                      READY   STATUS    RESTARTS   AGE
nfs-client-provisioner-5fd446cd9d-c62kl   1/1     Running   0          54m
web-sc-596569cb9f-cvj4r                   1/1     Running   0          42m
web-sc-596569cb9f-plnr5                   1/1     Running   0          42m
web-sc-596569cb9f-x8g9v                   1/1     Running   0          42m
[root@k8s-master ~]# kubectl exec -it web-sc-596569cb9f-cvj4r -- bash
root@web-sc-596569cb9f-cvj4r:/# cd /usr/share/nginx/html
root@web-sc-596569cb9f-cvj4r:/usr/share/nginx/html# ls
root@web-sc-596569cb9f-cvj4r:/usr/share/nginx/html# touch testSC
root@web-sc-596569cb9f-cvj4r:/usr/share/nginx/html#

再到NFS服务器查看,可以看到NFS路径下多了一个文件夹 default-test-sc-pvc-2c936885-8d66-4e60-8a0e-8e5e2fc437ae 对应kubectl get pvc的VOLUME列pvc-2c936885-8d66-4e60-8a0e-8e5e2fc437ae,显然是自动创建的,进入改路径可以看到刚才touch的文件

[root@k8s-node2 ~]# cd /nfstest/
[root@k8s-node2 nfstest]# ls -l
total 0
drwxrwxrwx 2 root root 20 Aug 29 11:55 default-test-sc-pvc-2c936885-8d66-4e60-8a0e-8e5e2fc437ae
drwxr-xr-x 2 root root  6 Aug 29 09:54 pv0001
drwxr-xr-x 2 root root  6 Aug 29 09:54 pv0002
drwxr-xr-x 2 root root  6 Aug 29 09:54 pv0003
drwxr-xr-x 2 root root  6 Aug 29 09:54 pv0004
drwxr-xr-x 2 root root  6 Aug 29 10:03 pv0005
[root@k8s-node2 nfstest]# cd default-test-sc-pvc-2c936885-8d66-4e60-8a0e-8e5e2fc437ae/
[root@k8s-node2 default-test-sc-pvc-2c936885-8d66-4e60-8a0e-8e5e2fc437ae]# ls
testSC
[root@k8s-node2 default-test-sc-pvc-2c936885-8d66-4e60-8a0e-8e5e2fc437ae]#

再来试试删除这个PVC,这里路径和里面的文件会被删除,对应 class.yaml的如下配置

parameters:
  archiveOnDelete: "false"

[root@k8s-master ~]# kubectl delete -f test-deploy-sc.yaml
deployment.apps "web-sc" deleted
persistentvolumeclaim "test-sc" deleted
service "web-sc" deleted
[root@k8s-master ~]#NFS:
[root@k8s-node2 nfstest]# pwd
/nfstest
[root@k8s-node2 nfstest]# ls
pv0001  pv0002  pv0003  pv0004  pv0005
[root@k8s-node2 nfstest]#

将 class.yam 配置archiveOnDelete改为"true", 为PV创建的路径和文件会保留

[root@k8s-master nfs-external-provisioner]# kubectl apply -f class.yaml
The StorageClass "managed-nfs-storage" is invalid: parameters: Forbidden: updates to parameters are forbidden.
[root@k8s-master nfs-external-provisioner]# kubectl delete -f class.yaml
storageclass.storage.k8s.io "managed-nfs-storage" deleted
[root@k8s-master nfs-external-provisioner]# kubectl apply -f class.yaml
storageclass.storage.k8s.io/managed-nfs-storage created
[root@k8s-master nfs-external-provisioner]# kubectl apply -f ../test-deploy-sc.yaml
deployment.apps/web-sc created
persistentvolumeclaim/test-sc created
service/web-sc created
[root@k8s-master nfs-external-provisioner]#

进入创建的Pod,touch文件,然后删除PVC, 可以在NFS服务器看到 目录default-<PVC NAME>-<PVC VOLUME>的名称更新为 archived-default-<PVC NAME>-<PVC VOLUME> ,即删除PVC后给数据做了归档, 原目录下的内容也保留了

k8s-master:
[root@k8s-master ~]# kubectl get pod
NAME                                      READY   STATUS    RESTARTS   AGE
nfs-client-provisioner-5fd446cd9d-c62kl   1/1     Running   0          66m
web-sc-596569cb9f-c5979                   1/1     Running   0          55s
web-sc-596569cb9f-cl6pb                   1/1     Running   0          55s
web-sc-596569cb9f-cpr88                   1/1     Running   0          55s
[root@k8s-master ~]# kubectl exec -it web-sc-596569cb9f-c5979 -- bash
root@web-sc-596569cb9f-c5979:/usr# cd /usr/share/nginx/html/
root@web-sc-596569cb9f-c5979:/usr/share/nginx/html# ls
root@web-sc-596569cb9f-c5979:/usr/share/nginx/html# touch Hahahaha
root@web-sc-596569cb9f-c5979:/usr/share/nginx/html#NFS:
[root@k8s-node2 nfstest]# ls
default-test-sc-pvc-7b7c6f87-95e2-4d58-97af-b06723154615  pv0001  pv0002  pv0003  pv0004  pv0005
[root@k8s-node2 nfstest]# cd default-test-sc-pvc-7b7c6f87-95e2-4d58-97af-b06723154615/
[root@k8s-node2 default-test-sc-pvc-7b7c6f87-95e2-4d58-97af-b06723154615]# ls
Hahahaha
[root@k8s-node2 default-test-sc-pvc-7b7c6f87-95e2-4d58-97af-b06723154615]# cd ..
[root@k8s-node2 nfstest]#k8s-master:
[root@k8s-master ~]# kubectl delete -f test-deploy-sc.yaml
deployment.apps "web-sc" deleted
persistentvolumeclaim "test-sc" deleted
service "web-sc" deleted
[root@k8s-master ~]#NFS:
[root@k8s-node2 nfstest]# ls
archived-default-test-sc-pvc-7b7c6f87-95e2-4d58-97af-b06723154615  pv0001  pv0002  pv0003  pv0004  pv0005
[root@k8s-node2 nfstest]# cd archived-default-test-sc-pvc-7b7c6f87-95e2-4d58-97af-b06723154615/
[root@k8s-node2 archived-default-test-sc-pvc-7b7c6f87-95e2-4d58-97af-b06723154615]# ls
Hahahaha
[root@k8s-node2 archived-default-test-sc-pvc-7b7c6f87-95e2-4d58-97af-b06723154615]#

[K8S] PV动态供给相关推荐

  1. 使用nfs为k8s提供pv动态供给存储

    环境:k8s一主两从 k8s version: 1.20.2 k8s-master: 192.168.31.200 k8s-node1: 192.168.31.201 k8s-node2: 192.1 ...

  2. K8s PV和PVC(动态)

    存储类(StorageClass) 当用户需要使用存储时,需要通过PVC进行绑定PV,有几种情况会出现问题(一句话就是k8s你不自能) PVC需求匹配不到需要的PV PVC需求量很大的时候,PV创建会 ...

  3. k8s——pv(静态+动态storageclass)与pvc

    k8s--pv(静态+动态storageclass)与pvc PVC和PV PV概念 PVC概念 PV与PVC之间的关系 两种PV的提供方式 基于nfs创建静态PV资源和PVC资源 配置nfs存储(1 ...

  4. K8S持久化存储:NFS+StorageClass实现动态供给

    K8S持久化存储:NFS+StorageClass实现动态供给 一.简介:K8S中的持久化存储 二.部署nfs-provisioner 三.创建StorageClass 四.实验 实验1:部署depl ...

  5. Kubernetes之PersistentVolumeClaim 静态与动态供给实现NFS网络存储(李作强)

    PersistentVolume 静态供给 网络存储 NFS是一种很早的技术,单机的存储在服务器方面还是非常主流的,但nfs唯一的就是缺点比较大就是没有集群版,做集群化还是比较费劲的,文件系统做不了, ...

  6. aws--efs---使用efs创建k8s的动态pvc

    我们之前使用EBS作为k8s的动态pvc的pv,但是EBS不支持ReadWriteMany类型的声明. 所以尝试使用efs作为存储底层来声明pvc. 动态pvc声明方案 创建efs文件存储系统 使用命 ...

  7. Docker(二十九)k8s 创建动态存储,基于nfs 的storageclass

    可参照官方的配置 https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client/deploy 第一种 ...

  8. k8s pv pvc

    综述 持久化卷(Persistent Volume, PV)允许用户将外部存储映射到集群,而持久化卷申请(Persistent Volume Claim, PVC)则类似于许可证,使有授权的应用(Po ...

  9. 【K8S】k8s pv,pvc无法删除问题

    一般删除步骤为:先删pod再删pvc最后删pv. 遇到的问题 但是遇到pv始终处于"Terminating"状态,而且删不掉.如下图: 解决方法 直接删除k8s中的记录: kube ...

  10. 基于K8s的动态Jenkins Slave构建实践

    前言 源于这篇文章分享的经验 基于 Kubernetes 的 Jenkins 构建集群实践,这里记录一下实践落地过程. 环境 这里Jenkins Master的安装没有采用容器镜像的方式,直接就是rp ...

最新文章

  1. WPF中的容器控件——Grid
  2. mac下java 开发环境搭建
  3. JavaScript 读取、写入Txt文档
  4. Elasticsearch聚合查询案例分享
  5. 寻找榜样的力量!CSDN【百万人学 AI】评选活动重磅启动
  6. 【docker】为docker下的php容器安装php-redis扩展【编译安装】
  7. 《Go 语言程序设计》读书笔记 (五) 协程与通道
  8. Ajax Step By Step1
  9. 别让for循环毁了你的程序(一)
  10. 10-算法 快速排序
  11. 【Android】笔记
  12. 记录一次bypy使用提示无法创建目录错误
  13. CCF计算机职业资格认证系列一CCF软件能力认证
  14. 推导全部勾股数方法(转)
  15. 乱舞之双刀--mhp2怪物猎人双刀攻略…
  16. UserBehavior用户行为分析
  17. springboot基于javaweb的社区留守儿童帮扶系统毕业设计源码101603
  18. 平面解析几何----圆锥曲线中的自极三角形
  19. 2005考研阅读Text4翻译
  20. <代码随想录二刷>链表

热门文章

  1. 【支付】——毕业设计中利用websocket做模拟支付
  2. Less变量动态修改
  3. 山大计算机学院副院长屠长河,孟祥旭(山东大学教授,博士生导师)_百度百科...
  4. python求主析取范式_肤浅的聊聊 TiDB 扫表算子, 扫索引算子, 合取范式(CNF), 析取范式(DNF), skyline pruning...
  5. html中的embed标签属性,html中Embed标签的语法和属性设置
  6. 一个简洁、美观的登录页面
  7. 怎么把PDF转换成Word?2种转Word方法技巧
  8. 【初探篇】Nginx 虚拟主机与域名解析
  9. sqrt mysql_详解MySQL中的SQRT函数的使用方法_MySQL
  10. 在 Java 中将 Word 转换为 PDF