七、 kubernetes 核心技术-PVC 和 PV

网友投稿 264 2022-10-21

七、 kubernetes 核心技术-PVC 和 PV

数据卷emptydir,是本地存储,Pod重启,数据不存在了,需要对数据持久化存储

1、基本概念

管理存储是管理计算的一个明显问题。该 PersistentVolume 子系统为用户和管理员提供了 一个 API,用于抽象如何根据消费方式提供存储的详细信息。为此,我们引入了两个新的 API 资源:PersistentVolume 和 PersistentVolumeClaim

​PersistentVolume(PV)​:持久化存储,存储资源进行抽象,对外提供可以调用的地方(生产者)。 此 API 对象捕获存储实现的详细信息,包括 NFS,iSCSI 或特定于云提供程 序的存储系统。

​StorageClass​ 为管理员提供了一种描述他们提供的存储的“类”的方法。 不同的类可能 映射到服务质量级别,或备份策略,或者由群集管理员确定的任意策略。 Kubernetes 本 身对于什么类别代表是不言而喻的。 这个概念有时在其他存储系统中称为“配置文件”。

PVC 和 PV 是一一对应的。

2、生命周期

PV 是群集中的资源。PVC 是对这些资源的请求,并且还充当对资源的检查。PV 和 PVC 之间 的相互作用遵循以下生命周期:

Provisioning ——-> Binding ——–>Using——>Releasing——>Recycling

供应准备 Provisioning—通过集群外的存储系统或者云平台来提供存储持久化支持。

- ​静态提供 Static​:集群管理员创建多个 PV。 它们携带可供集群用户使用的真实存储的 详细信息。 它们存在于 Kubernetes API 中,可用于消费

绑定 Binding—用户创建 pvc 并指定需要的资源和访问模式。在找到可用 pv 之前,pvc 会保持未绑定状态。

使用 Using—用户可在 pod 中像 volume 一样使用 pvc。

释放 Releasing—用户删除 pvc 来回收存储资源,pv 将变成“released”状态。由于还 保留着之前的数据,这些数据需要根据不同的策略来处理,否则这些存储资源无法被其他 pvc 使用。

回收 Recycling—pv 可以设置三种回收策略:保留(Retain),回收(Recycle)和删除 (Delete)。

- 保留策略:允许人工处理保留的数据。

- 删除策略:将删除 pv 和外部关联的存储资源,需要插件支持。

- 回收策略:将执行清除操作,之后可以被新的 pvc 使用,需要插件支持

3、NFS作为持久化存储

(1) 安装NFS

​server端​

yum install nfs-utils.x86_64 -ymkdir /datavim /etc/exports/data 192.168.0.0/24(rw,async,no_root_squash,no_all_squash)systemctl start rpcbindsystemctl start nfs

​node节点端​

yum install nfs-utils.x86_64 -y

(2) 创建PV卷(NFS类型)

apiVersion: v1kind: PersistentVolumemetadata: name: nfs-server10 labels: app: nfs-server10spec: capacity: storage: 10Gi accessModes: - ReadWriteMany # · ReadWriteOnce(RWO):是最基本的方式,可读可写,但只支持被单个 Pod 挂载。 # · ReadOnlyMany(ROX):可以以只读的方式被多个 Pod 挂载。 # · ReadWriteMany(RWX):这种存储可以以读写的方式被多个 Pod 共享。 persistentVolumeReclaimPolicy: Recycle # 保留(Retain),回收(Recycle)和删除 (Delete)。 nfs: path: "/k8s-nfs-data/" server: "192.168.18.6" readOnly: false

​创建并查看​

kubectl apply -f *.yaml

(3) 创建PVC

apiVersion: v1kind: PersistentVolumeClaimmetadata: name: web01-pvcspec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi

​创建并查看​

kubectl apply -f *.yaml

(4) Pod挂载持久化存储YAML示例

apiVersion: apps/v1kind: Deploymentmetadata: creationTimestamp: null labels: app: web04 name: web04spec: replicas: 1 selector: matchLabels: app: web04 strategy: {} template: metadata: creationTimestamp: null labels: app: web04 spec: containers: - image: nginx:1.14 name: nginx resources: {} volumeMounts: - name: html mountPath: /usr/share/nginx/html volumes: - name: html persistentVolumeClaim: claimName: nginx-svcstatus: {}

​创建并查看​

kubectl apply -f *.yaml# 常见对外访问kubectl expose deployment web04 --port=80 --type=NodePort --target-port=80

​在nfs server 目录中创建web html文件​

echo "nfs pv html" > /k8s-nfs-data/index.html

​浏览器访问​

4、挂载到接到本地

volumeMounts: - mountPath: "/prometheus" name: data - mountPath: "/etc/prometheus" name: config-volume volumes: - name: data emptyDir: {} - name: config-volume configMap: name: prometheus-config

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java实战之晚会抽奖系统的实现
下一篇:一、kubernetes 概念
相关文章

 发表评论

暂时没有评论,来抢沙发吧~