备案 网站名称什么用,公司的网站设计方案,网站打开速度检测攻击,竞价推广培训班哪里有K8S之存储卷
一、emptyDir
emptyDir#xff1a;可实现Pod中的容器之间共享目录数据#xff0c;但emptyDir存储卷没有持久化数据的能力#xff0c;存储卷会随着Pod生命周期结束而一起删除二、hostPath
hostPath#xff1a;将Node节点上的目录/文件挂载到Pod容器的指定目录…K8S之存储卷
一、emptyDir
emptyDir可实现Pod中的容器之间共享目录数据但emptyDir存储卷没有持久化数据的能力存储卷会随着Pod生命周期结束而一起删除二、hostPath
hostPath将Node节点上的目录/文件挂载到Pod容器的指定目录中有持久化数据的能力但只能在单个Node节点上持久化数据不能实现跨Node节点的Pod共享数据 三、nfs
nfs使用NFS服务将存储卷挂载到Pod容器的指定目录中有持久化数据的能力且也能实现跨Node节点的Pod共享数据四、PV PVC 1.PV
PVK8S在指定存储设备空间中逻辑划分创建的可持久化的存储资源对象1.1创建PV的方式
手动根据配置文件创建的静态PV
通过StorageClass调用存储卷插件创建的动态PV1.2PV的四种状态
PV状态说明Available可用表示可用状态PV 被创建出来了还未被 PVC 绑定Bound已绑定表示 PV 已经被 PVC 绑定PV 与 PVC 是一对一的绑定关系Released已释放表示 PVC 被删除但是 PV 资源还未被回收Failed失败表示 PV 自动回收失败
2.PVC
PVC是对PV资源对象的请求和绑定也是Pod能挂载使用的一种存储卷类型3.创建静态的PV PVC
3.1创建步骤
创建使用 静态PV
1准备好存储设备和共享目录
2手动创建PV资源配置 存储卷类型 访问模式RWO RWX ROX RWOP 存储空间大小 回收策略Retain Recycle Delete等
3创建PVC资源配置请求PV资源的访问模式必要条件必须是PV能支持的访问模式 存储空间大小默认就近选择大于等于指定大小的PV来绑定PV
4创建Pod和Pod控制器资源挂载PVC存储卷配置存储卷类型为 persistentVolumeClaim 并在容器配置中定义存储卷挂载点目录3.2创建过程
1.部署nfs服务器
通过vim /etc/exports
/opt/data/ 192.168.111.0/24(rw,no_root_squash,sync)
通过exportfs -arv 在线发布2.准备pv的yaml文件
apiVersion: v1
kind: PersistentVolume ##类型为pv
metadata:name: pv01 ##pv名称
spec:capacity:storage: 1Gi ##pv存储卷大小volumeMode: FilesystemaccessModes: ##访问模式- ReadWriteOnce- ReadWriteMany#persistentVolumeReclaimPolicy: Recycle#storageClassName: slownfs: ##pv持久卷的类型path: /opt/pv/v1 ## 挂载路径server: 192.168.111.40 ## nfs服务器类型3.准备pvc的yaml文件
apiVersion: v1
kind: PersistentVolumeClaim ##类型为pvc
metadata:name: mypvc-1 ##pvc名称
spec:accessModes: ##访问模式- ReadWriteOncevolumeMode: Filesystemresources:requests: ##请求资源量storage: 2Gi#storageClassName: slow4.准备pod的yaml文件挂载pvc存储卷
apiVersion: v1
kind: Pod
metadata:name: mypod-1
spec:containers:- name: mypod-1image: nginxvolumeMounts: ##pod的容器内存储卷挂载路径- mountPath: /var/www/htmlname: mypdvolumes:- name: mypdpersistentVolumeClaim:claimName: mypvc-1 ##指定pvc的存储卷名称
4.创建动态PV PVC
4.1创建步骤
创建使用 动态PV
1准备好存储设备和共享目录
2如果是外置存储卷插件需要先创建serviceaccount账户Pod使用的账户和做RBAC授权创建角色授予相关资源对象的操作权限再将账户和角色进行绑定使serviceaccount账户具有对PV PVC StorageClass等资源的操作权限
3创建外置存储卷插件provisioner的Pod配置中使用serviceaccount账户作为Pod的用户并设置相关环境变量参数
4创建StorageClassSC资源配置中引用存储卷插件的插件名称PROVISIONER_NAME
---------------- 以上操作是一劳永逸的以后只需要创建PVC时设置StorageClass就可以自动调用存储卷插件动态生成PV资源 ----------------
5创建PVC资源配置中设置 StorageClass资源名称 访问模式 存储空间大小。创建PVC资源会自动创建相关的PV资源。
6创建Pod资源挂载PVC存储卷配置存储卷类型为 persistentVolumeClaim 并在容器配置中定义存储卷挂载点目录
4.2创建过程
1.部署nfs服务器
通过vim /etc/exports
/opt/data/ 192.168.111.0/24(rw,no_root_squash,sync)
通过exportfs -arv 在线发布2.准备serviceaccount账户Pod使用的账户和做RBAC授权
vim nfs-client-rbac.yaml
#创建 Service Account 账户用来管理 NFS Provisioner 在 k8s 集群中运行的权限
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisioner
---
#创建集群角色
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: nfs-client-provisioner-clusterrole
rules:- 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: [list, watch, create, update, patch]- apiGroups: []resources: [endpoints]verbs: [create, delete, get, list, watch, patch, update]
---
#集群角色绑定
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: nfs-client-provisioner-clusterrolebinding
subjects:
- kind: ServiceAccountname: nfs-client-provisionernamespace: default
roleRef:kind: ClusterRolename: nfs-client-provisioner-clusterroleapiGroup: rbac.authorization.k8s.iokubectl apply -f nfs-client-rbac.yaml3.使用 Deployment 来创建 NFS Provisioner
NFS Provisioner(即 nfs-client)有两个功能一个是在 NFS 共享目录下创建挂载点(volume)另一个则是将 PV 与 NFS 的挂载点建立关联。#由于 1.20 版本启用了 selfLink所以 k8s 1.20 版本通过 nfs provisioner 动态生成pv会报错解决方法如下
vim /etc/kubernetes/manifests/kube-apiserver.yaml
spec:containers:- command:- kube-apiserver- --feature-gatesRemoveSelfLinkfalse #添加这一行- --advertise-address192.168.80.20
......kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml
kubectl delete pods kube-apiserver -n kube-system
kubectl get pods -n kube-system | grep apiserver#创建 NFS Provisioner
vim nfs-client-provisioner.yaml
kind: Deployment
apiVersion: apps/v1
metadata:name: nfs-client-provisioner
spec:replicas: 1selector:matchLabels:app: nfs-client-provisionerstrategy:type: Recreatetemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisioner #指定Service Account账户containers:- name: nfs-client-provisionerimage: quay.io/external_storage/nfs-client-provisioner:latestimagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: nfs-storage #配置provisioner的Name确保该名称与StorageClass资源中的provisioner名称保持一致- name: NFS_SERVERvalue: stor01 #配置绑定的nfs服务器- name: NFS_PATHvalue: /opt/k8s #配置绑定的nfs服务器目录volumes: #申明nfs数据卷- name: nfs-client-rootnfs:server: stor01path: /opt/k8skubectl apply -f nfs-client-provisioner.yaml kubectl get pod
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-cd6ff67-sp8qd 1/1 Running 0 14s4.创建 StorageClass负责建立 PVC 并调用 NFS provisioner 进行预定的工作并让 PV 与 PVC 建立关联vim nfs-client-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-client-storageclass
provisioner: nfs-storage #这里的名称要和provisioner配置文件中的环境变量PROVISIONER_NAME保持一致
parameters:archiveOnDelete: false #false表示在删除PVC时不会对数据目录进行打包存档即删除数据为ture时就会自动对数据目录进行打包存档存档文件以archived开头kubectl apply -f nfs-client-storageclass.yamlkubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs-client-storageclass nfs-storage Delete Immediate false 43s5.创建pvc资源
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: test-nfs-pvc
spec:accessModes:- ReadWriteManystorageClassName: nfs-client-storageclassresources:requests:storage: 1Gi6.创建pod挂载pvc存储卷
apiVersion: v1
kind: Pod
metadata:name: test-storageclass-pod
spec:containers:- name: dongtaipvcimage: nginx:latestimagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-pvcmountPath: /mntrestartPolicy: Nevervolumes:- name: nfs-pvcpersistentVolumeClaim:claimName: test-nfs-pvc
piVersion: v1
kind: Pod
metadata:name: test-storageclass-pod
spec:containers:- name: dongtaipvcimage: nginx:latestimagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-pvcmountPath: /mntrestartPolicy: Nevervolumes:- name: nfs-pvc
im: claimName: test-nfs-pvc piVersion: v1 kind: Pod metadata: name: test-storageclass-pod spec: containers:
name: dongtaipvc image: nginx:latest imagePullPolicy: IfNotPresent volumeMounts: name: nfs-pvc mountPath: /mnt restartPolicy: Never volumes: name: nfs-pvc