Kubernetes (十三) 存储——持久卷-动静态分配

发布时间:2024年01月15日

一. 简介? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?二. NFS持久化存储步骤(静态分配)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? 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

? 三.StorageClass (动态分配)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

官方地址? 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

? ? ? ? ? ? ? ? 3. 创建pvc? ? ? ? ? ? ???? vim?pvc.yaml

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

? ? ? ? ? ? ? ? ? ?4. 查看到nfs输出目录自动创建? ? ? ? ? ? ? ? ? ? ? ?#注意主机
? ? ? ? ? ? ? ? ? ?5.?创建测试页
? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? 6. 创建pod文件文件 并进行访问? ? ? ? ??vim?pod.yaml

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

?

? ? ? ? ? ?

文章来源:https://blog.csdn.net/BJZX_OL/article/details/135591236
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。