十四、k8s数据卷与持久卷

一、为什么需要数据卷

容器部署过程中一般有一下三种数据:

a、启动时需要的初始数据,如配置文件

b、启动过程中产生的临时数据,改临时数据需要多个容器间共享

c、启动过程中产生的业务数据,如mysql的data目录

二、数据卷概述

1、概述

k8s中volume提供了在容器中挂载外部存储的能力

Pod需要设置卷来源(spec.volume)和挂载点(spec.containers.volumeMounts)两个信息后才可以使用相应的Volume

2、数据卷类型大致分类

a、本地(hostpath,emptyDir等):数据存储在Pod所在节点

b、网络(NFS,Ceph,GlusterFS等):数据存储在远程存储服务器

c、公有云(AWS EBS等):数据存储在云存储产品上

d、k8s资源(configmap,secret等):数据存储在k8s

支持的数据卷类型参考:https://kubernetes.io/docs/concepts/storage/volumes/

三、数据卷:emptyDir、hostpath、 NFS

1、emptyDir

是一个临时存储卷,与pod生命周期绑定在一起,如pod删除了卷也会删除

应用场景:Pod中容器之间数据共享

2、hostPath

挂载Node文件系统(pod所在节点)上文件或目录到Pod中的容器

应用场景:Pod中容器需要访问宿主机文件

3、NFS

NFS数据卷:提供对NFS挂载支持,可以自动将nfs共享路径挂载到pod中

NFS:是一个主流的文件共享服务器

# yum install nfs-utils

# vi /etc/exports

/ifs/kubernetes *(rw,no_root_squash)

# mkdir -p /ifs/kubernetes

# systemctl start nfs

# systemctl enable nfs

注:每个Node上都要安装nfs-utils包

4、nfs示例

将网站程序通过NFS数据卷共享,让所有Pod使用

四、持久卷概述

persistentVolume(PV): 对存储资源创建和使用的抽象,使得存储作为集群中的资源管理

PersistentVolumeClaim(PVC): 让用户不需关心具体的Volume实现细节

五、PV与pvc使用流程

支持持久卷的存储插件:https://kubernetes.io/docs/concepts/storage/persistent-volumes/

# 查看pvc

# kubectl get pvc

# 查看 pv

# kubectl get pv

多pv创建:

多pv创建:pv.ysqml

在nfs目录创建相应的pv0001,pv0002,pv0003

# cd /ifs/k8s

# mkdir pv0001 pv0002 pv0003

# kubectl apply -f pv.ysqml

回收(删除)pv0003,删除前先备份pv0003:

# mv /ifs/k8s/pv0003 /ifs/k8s/pv0003.back

# kubectl delete pv pv0003

如果需要重新使用,只需要进行pv备份即可。

注:

1、 pv与pvc之间是一对一的关系

2、pv与pvc默认使用访问模式和容量匹配

3、pv的容量限制实际的存储容量取决于后端存储

4、容量匹配策略,如果申请的容量,pv没有刚好合适的,会分配接近于最大的那个PV,如果都不满足,pod处于pending状态。

pvc在申请pv时,向上取空间打小。如果有三个pv,5Gi,15Gi,40Gi。pvc现在申请19Gi空间,他只会取40Gi;若再申请一个16Gi空间,由于40Gi已经使用,这时就会报错,提示无法申请到相应的空间。

六、pv生命周期

ACCESS MODES(访问模式):

AccessModes是用来对pv进行访问模式的设置,用于描述用户应用对存储资源的访问权限,访问权限包括下面几种方式:

1、ReadWriteOne(RWO):读写权限,但是只能被单个节点挂载

2、ReadOnlyMany(ROX):只读权限,可以被多个节点挂载

3、ReadWriteMany(RWX):读写权限,可以被多个节点挂载

RECLAIM POLICY(回收策略):

目前PV支持的策略有三种:

1、Retain(保留):保留数据,需要管理员手工清理数据。默认设置。

2、Recycle(回收):清除PV中的数据,效果相当于执行rm -rf  /ifs/kuberneres/*

3、Delete(删除):与PV相连的后端存储同时删除

修改回收策略:persistentVolumeReclaimPolicy: Retain

STATUS(状态):

一个PV的生命周期中,可能会处于4中不同的阶段:

1、Available(可用):表示可用状态,还未被任何pvc绑定

2、Bound(已绑定):表示PV已经被pvc绑定

3、Released(已释放):PVC被删除,但是资源还未被集群重新声明

4、Failed(失败): 表示该PV的自动回收失败

现在PV使用方式成为静态供给,需要k8s运维工程师提前创建一堆pv,供开发者使用。

七、pv动态供给(StorageClass),不用创建pv

pv静态供给明显的缺点是维护成本太高!因此,k8s开始支持pv动态供给,使用StorageClass对象实现。

k8s默认不支持nfs动态供给,需要单独部署社区开发的插件。

项目地址:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

部署:

# cd deploy

#授权访问APIserver

# kubectl  apply -f rbc.yaml 

#部署插件,需修改里面nfs服务器地址与共享目录, 需要修改镜像地址《默认地址是国外的》。nfs地址和目录

# kubectl apply -f deployment.yaml

#创建存储类  再生产中需要把archiveOnDelete: "false" 改成archiveOnDelete: "true",保留备份

# kubectl apply -f class.yaml

# 查看存储类

# kubectl get sc

# 测试:在创建pvc时同事创建pv,指定存储类名称

支持动态供给的存储插件:

https://kubernetes.io/docs/concepts/storage/storage-classes/

支持动态供给的存储插件github地址:

https://github.com/kubernetes-sigs/sig-storage-lib-external-provisioner  1.20以后使用地址

nfs动态供给github地址:

https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/tree/master/deploy    1.20以后使用地址

用到的文件有:

八、nfs实战:

nfs服务器配置:

# yum install nfs-utils nfs

# systemctl start nfs-server

# systemctl enable nfs-server

# showmount -e 92.168.6.1

# firewall-cmd --permanent --zone=public --add-service=nfs-server

 #  firewall-cmd --permanent --zone=public --add-service=nfs

#  firewall-cmd --permanent --zone=public --add-service=rpc-bind

#  firewall-cmd --permanent --zone=public --add-service=mountd

#  firewall-cmd --reload

deployment使用:

# yum install nfs-utils   《所有k8s服务器安装》

  • 14
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Kubernetes中为Nginx配置持久卷(Persistent Volume)的步骤如下: 1. 首先,您需要一个支持持久卷的存储后端(例如NFS、AWS EBS、Azure Disk等)。确保您已经正确配置了存储后端,并且Kubernetes集群已经正确配置了该存储后端的插件。 2. 创建一个持久卷声明(Persistent Volume Claim,PVC)。创建一个YAML文件(例如nginx-pvc.yaml),并在其中定义您的PVC配置。以下是一个示例配置文件: ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nginx-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi ``` 在此配置中,我们定义了一个名为"nginx-pvc"的PVC,它请求1Gi的存储容量,并指定了ReadWriteOnce的访问模式。根据您的需求,您可以根据需要调整存储容量和访问模式。 3. 使用kubectl命令将PVC配置应用到集群中:`kubectl apply -f nginx-pvc.yaml` 4. 创建一个Nginx的Deployment资源,并将PVC与Deployment关联。创建一个YAML文件(例如nginx-deployment-pvc.yaml),并在其中定义您的Deployment和Volume配置。以下是一个示例配置文件: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 volumeMounts: - name: nginx-volume mountPath: /var/www/html # 挂载路径根据 Nginx 配置文件中的路径来确定 volumes: - name: nginx-volume persistentVolumeClaim: claimName: nginx-pvc ``` 在此配置中,我们在Deployment的spec中添加了一个volumeMounts和volumes字段。volumeMounts用于将持久卷挂载到容器中的指定路径,volumes用于定义持久卷的名称和PVC的名称。 5. 使用kubectl命令将Deployment配置应用到集群中:`kubectl apply -f nginx-deployment-pvc.yaml` 现在,Nginx的Deployment将会使用持久卷来存储数据。当Pod被重新调度或删除后,持久卷中的数据将保留,并且当Pod重新创建时将会重新挂载到新的Pod上。 请注意,上述步骤仅提供了配置持久卷并将其挂载到Nginx容器的基本示例。具体的配置可能因您使用的存储后端和需求而有所不同。请参考Kubernetes文档以获得更多详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值