? ? ? 1. 集群外主机用上次nfsdata共享目录中创建用来测试的pv(1~3)目录 用来对三个静态pv
? ? ? ?2.? ?创建pv的应用文件? ? ? ? ? ? ? ? ?? ???vim?pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
? name: pv1
spec:
? capacity:? ? ? ? ? ? ? ? ? ? ?#定义资源大小
? ? storage: 5Gi? ? ? ? ? ?? #这里5Gi
? volumeMode: Filesystem
? accessModes: ? ? ? ? ? ?#访问方式
? ? - ReadWriteOnce? ? ? ?#只能被单个节点以读写的方式映射
? persistentVolumeReclaimPolicy: Recycle ?#回收策略
? storageClassName: nfs
? nfs:
? ? path: /nfsdata/pv1 ? ? ? ? ?#nfs服务器输出地址
? ? server: 192.168.72.171---
apiVersion: v1
kind: PersistentVolume
metadata:
? name: pv2
spec:
? capacity:
? ? storage: 10Gi
? volumeMode: Filesystem
? accessModes:
? ? - ReadWriteMany? ??#可以被多个节点以读写的方式映射
? persistentVolumeReclaimPolicy: Recycle
? storageClassName: nfs
? nfs:
? ? path: /nfsdata/pv2
? ? server: 192.168.72.171
---
apiVersion: v1
kind: PersistentVolume
metadata:
? name: pv3
spec:
? capacity:
? ? storage: 15Gi
? volumeMode: Filesystem
? accessModes:
? ? - ReadOnlyMany? ? ? ? ? #可以被多个节点以只读方式映射
? persistentVolumeReclaimPolicy: Recycle
? storageClassName: nfs
? nfs:
? ? path: /nfsdata/pv3
? ? server: 192.168.72.171
? ? ? ? ?3.??创建pvc的应用文件? ? ? ? ? ? ? ? ???vim?pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
? name: pvc1? ? ? ? ? ? ? ? ? ? ? ?#起的名字
spec:
? storageClassName: nfs ? ? #存储类型
? accessModes:
? ? - ReadWriteOnce ? ? ? ? #匹配的访问模式
? resources:
? ? requests:? ? ? ? ? ? ? ? ? ? ?#资源要求
? ? ? storage: 1Gi? ? ? ? ? ? ?#上面条件都要满足才可匹配上---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
? name: pvc2
spec:
? storageClassName: nfs
? accessModes:
? ? - ReadWriteMany
? resources:
? ? requests:
? ? ? storage: 10Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
? name: pvc3
spec:
? storageClassName: nfs
? accessModes:
? ? - ReadOnlyMany
? resources:
? ? requests:
? ? ? storage: 15Gi
? ? ?? ??4. pod中如何使用卷? 先创建pod应用文件? ? ?vim?pod.yaml
apiVersion: v1
kind: Pod
metadata:
? name: test-pd ? ? ? ? ? ? ? ? ? ? ? ? ?#起的pod名字
spec:
? containers:
? - image: nginx
? ? name: nginx
? ? volumeMounts:
? ? - mountPath: /usr/share/nginx/html ?#声明挂接的目录
? ? ? name: vol1
? volumes:
? - name: vol1
? ? persistentVolumeClaim:
? ? ? claimName: pvc1
? ? ? ? ? ? 5.?在nfs输出目录中创建测试页? ? 然后访问pod? ? ? ? ? #注意使用的主机
? ? ? ? ? ? ?调用的路径:pod->pvc->pv(pod请求pvc,pvc找pv)
? ? ? ? ? ? ??6.??回收资源,需要按顺序回收:?pod?->?pvc?->?pv
? ???pv的回收需要拉取镜像,提前在node节点导入镜像:k8s.gcr.io/debian-base:v2.0.0
? ? ? ? ? ? ? kubectl?delete??pod?test-pd
? ? ? ? ? ? ? kubectl?delete??-f?pvc.yaml
? ? ? ? ? ? ? kubectl?delete?-f?pv.yaml
官方地址? https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
? ? ? ? ? ? ? ? ?1. 上传镜像到私有仓库
? ? ? ? ? ? ? ? ?2.? ? 创建编辑文件? ? ? ? ? ??? vim?deploy.yaml
apiVersion:?v1
kind:?Namespace
metadata:
??labels:
????kubernetes.io/metadata.name:?nfs-client-provisioner
??name:?nfs-client-provisioner
---
apiVersion:?v1
kind:?ServiceAccount
metadata:
??name:?nfs-client-provisioner
??namespace:?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:?ServiceAccount
????name:?nfs-client-provisioner
????namespace:?nfs-client-provisioner
roleRef:
??kind:?ClusterRole
??name:?nfs-client-provisioner-runner
??apiGroup:?rbac.authorization.k8s.io
---
kind:?Role
apiVersion:?rbac.authorization.k8s.io/v1
metadata:
??name:?leader-locking-nfs-client-provisioner
??namespace:?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-provisioner
??namespace:?nfs-client-provisioner
subjects:
??-?kind:?ServiceAccount
????name:?nfs-client-provisioner
????namespace:?nfs-client-provisioner
roleRef:
??kind:?Role
??name:?leader-locking-nfs-client-provisioner
??apiGroup:?rbac.authorization.k8s.io
---
apiVersion:?apps/v1
kind:?Deployment
metadata:
??name:?nfs-client-provisioner
??labels:
????app:?nfs-client-provisioner
??namespace:?nfs-client-provisioner
spec:
??replicas:?1
??strategy:
????type:?Recreate
??selector:
????matchLabels:
??????app:?nfs-client-provisioner
??template:
????metadata:
??????labels:
????????app:?nfs-client-provisioner
????spec:
??????serviceAccountName:?nfs-client-provisioner
??????containers:
????????-?name:?nfs-client-provisioner
??????????image:?sig-storage/nfs-subdir-external-provisioner:v4.0.2
??????????volumeMounts:
????????????-?name:?nfs-client-root
??????????????mountPath:?/persistentvolumes
??????????env:
????????????-?name:?PROVISIONER_NAME
??????????????value:?k8s-sigs.io/nfs-subdir-external-provisioner
????????????-?name:?NFS_SERVER
??????????????value:?192.168.56.171
????????????-?name:?NFS_PATH
??????????????value:?/nfsdata
??????volumes:
????????-?name:?nfs-client-root
??????????nfs:
????????????server:?192.168.56.171
????????????path:?/nfsdata
---
apiVersion:?storage.k8s.io/v1
kind:?StorageClass
metadata:
??name:?nfs-client
??annotations:
????storageclass.kubernetes.io/is-default-class:?"true"
provisioner:?k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
??archiveOnDelete:?"false"? ? ? ? ? ? ? ?##删除时不打包备份,删除PVC是会自动删除PV
apiVersion:?v1
kind:?PersistentVolumeClaim
metadata:
??name:?pvc1
spec:
??#storageClassName:?nfs-client
??accessModes:
????-?ReadWriteOnce
??resources:
????requests:
??????storage:?10Gi
---
apiVersion:?v1
kind:?PersistentVolumeClaim
metadata:
??name:?pvc2
spec:
??#storageClassName:?nfs-client
??accessModes:
????-?ReadWriteMany
??resources:
????requests:
??????storage:?20Gi
---
apiVersion:?v1
kind:?PersistentVolumeClaim
metadata:
??name:?pvc3
spec:
??#storageClassName:?nfs-client
??accessModes:
????-?ReadOnlyMany
??resources:
????requests:
??????storage:?30Gi
? ? ? ? ? ? ? ? 动态自动创建pv
apiVersion:?v1
kind:?Pod
metadata:
??name:?test-pd
spec:
??containers:
??-?image:?nginx
????name:?nginx
????volumeMounts:
????-?mountPath:?/usr/share/nginx/html
??????name:?vol1
??volumes:
??-?name:?vol1
????persistentVolumeClaim:
??????claimName:?pvc1
---
apiVersion:?v1
kind:?Pod
metadata:
??name:?test-pd-2
spec:
??containers:
??-?image:?nginx
????name:?nginx
????volumeMounts:
????-?mountPath:?/usr/share/nginx/html
??????name:?vol1
??volumes:
??-?name:?vol1
????persistentVolumeClaim:
??????claimName:?pvc2
---
apiVersion:?v1
kind:?Pod
metadata:
??name:?test-pd-3
spec:
??containers:
??-?image:?nginx
????name:?nginx
????volumeMounts:
????-?mountPath:?/usr/share/nginx/html
??????name:?vol1
??volumes:
??-?name:?vol1
????persistentVolumeClaim:
??????claimName:?pvc3
? ? ? ? ? ? ? ? 7. 删除pod pvc
? ? ? ? ? ? ?动态创建的pv,回收时自动删除,nfs输出目录也会被删除。
? ? ? ? ? ? ? ? ? ? ?kubectl?delete??-f?pod.yaml
? ? ? ? ? ? ? ? ? ? ?kubectl?delete??-f?pvc.yaml
? ? ? ? ? ?