前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「走进k8s」Kubernetes1.15.1的持久化存储PV(31)

「走进k8s」Kubernetes1.15.1的持久化存储PV(31)

作者头像
IT架构圈
发布2019-09-04 16:20:37
8100
发布2019-09-04 16:20:37
举报
文章被收录于专栏:IT架构圈IT架构圈

前面学了kubernetes的资源对象,也大概说了下StatefulSet 有状态应用和无状态应用,我们可以通过hostPath或者emptyDir的方式来持久化数据,为了使得容器在重建后,数据卷还可以正常的使用,Kubernetes 引入了PV和PVC的概念,这两个就是对资源对象来进行存储管理的。

(一)认识PV/PVC/StorageClass

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

  • ① 认识PV

PersistentVolume(PV)是集群中由管理员配置的一段网络存储。它是集群中的资源,就像节点是集群资源一样。PV是容量插件,如Volumes,但其生命周期独立于使用PV的任何单个pod。此API对象捕获存储实现的详细信息,包括Ceph,NFS,iSCSI或特定于云提供程序的存储系统。都是通过插件机制完成与共享存储的对接。

  • ② 认识PVC

PersistentVolumeClaim(PVC)是由用户进行存储的请求。它类似于pod。Pod消耗节点资源,PVC消耗PV资源。Pod可以请求特定级别的资源(CPU和内存)。声明可以请求特定的大小和访问模式(例如,可以一次读/写或多次只读)。虽然PersistentVolumeClaims允许用户使用抽象存储资源,但是PersistentVolumes对于不同的问题,用户通常需要具有不同属性(例如性能)。群集管理员需要能够提供各种PersistentVolumes不同的方式,而不仅仅是大小和访问模式,而 PVC 可以请求特定的存储空间和访问模式。对于真正使用存储的用户不需要关心底层的存储实现细节,只需要直接使用 PVC 即可。

  • ③ 认识StorageClass

但是通过 PVC 请求到一定的存储空间也很有可能不足以满足应用对于存储设备的各种需求,而且不同的应用程序对于存储性能的要求可能也不尽相同,比如读写速度、并发性能等,为了解决这一问题,Kubernetes 又为我们引入了一个新的资源对象:StorageClass,通过 StorageClass 的定义,管理员可以将存储资源定义为某种类型的资源,比如快速存储、慢速存储等,用户根据 StorageClass 的描述就可以非常直观的知道各种存储资源的具体特性了,这样就可以根据应用的特性去申请合适的存储资源了。

(二)NFS安装

为了方便演示,决定使用相对简单的 NFS 这种存储资源,接下来我们在节点192.168.86.100上来安装 NFS 服务

  • ① 【Master节点配置】数据目录:/data/k8s/
代码语言:javascript
复制
mkdir -p /data/k8s/
  • ② 【Master节点配置】关闭防火墙
代码语言:javascript
复制
systemctl stop firewalld.service

systemctl disable firewalld.service
  • ③ 【Master节点配置】安装配置 nfs
代码语言:javascript
复制
yum -y install nfs-utils rpcbind
  • ④【Master节点配置】 设置权限共享目录
代码语言:javascript
复制
chmod 777 /data/k8s/
  • ⑤ 【Master节点配置】配置 nfs,nfs 的默认配置

文件在 /etc/exports 文件下,在该文件中添加下面的配置信息

代码语言:javascript
复制
vi /etc/exports
# /data/k8s  *(rw,sync,no_root_squash)

/data/k8s:是共享的数据目录 *:表示任何人都有权限连接,当然也可以是一个网段,一个 IP,也可以是域名 rw:读写的权限 sync:表示文件同时写入硬盘和内存 norootsquash:当登录 NFS 主机使用共享目录的使用者是 root 时,其权限将被转换成为匿名使用者,通常它的 UID 与 GID,都会变成 nobody 身份

*⑥ 【Master节点配置】启用 rpc 注册

看到 Started 证明启动成功了

代码语言:javascript
复制
systemctl start rpcbind.service

systemctl enable rpcbind

systemctl status rpcbind
  • ⑦ 【Master节点配置】启动 nfs 服务

看到 Started 证明启动成功了

代码语言:javascript
复制
systemctl start nfs.service

systemctl enable nfs

systemctl status nfs
  • ⑧ 【Master节点配置】确定rpc 和 nfs 已经关联
代码语言:javascript
复制
rpcinfo -p|grep nfs
  • ⑨ 【Master节点配置】具体文件挂载权限
代码语言:javascript
复制
cat /var/lib/nfs/etab
  • ⑩ 【node1节点配置】关闭防火墙
代码语言:javascript
复制
systemctl stop firewalld.service

systemctl disable firewalld.service
  • ⑪【node1节点配置】安装nfs
代码语言:javascript
复制
yum -y install nfs-utils rpcbind
  • ⑫【node1节点配置】先启动 rpc、然后启动 nfs
代码语言:javascript
复制
systemctl start rpcbind.service

systemctl enable rpcbind.service

systemctl start nfs.service

systemctl enable nfs.service
  • ⑬【node1节点配置】客户端来挂载下 nfs 测试下
代码语言:javascript
复制
showmount -e 192.168.86.100
  • ⑭【node1节点配置】新建目录,将 nfs 共享目录挂载到上面的目录
代码语言:javascript
复制
mkdir -p /root/course/kubeadm/data

mount -t nfs 192.168.86.100:/data/k8s /root/course/kubeadm/data
  • ⑮【node1节点配置】输入文件查看
代码语言:javascript
复制
echo "idig8.com">>/root/course/kubeadm/data/a.txt

cat /root/course/kubeadm/data/a.txt
  • ⑯【master节点配置】 nfs 服务端查看
代码语言:javascript
复制
cat /data/k8s/a.txt

上边说明NFS服务搭建完毕。

(二)PV
  • ① 官方API

https://kubernetes.io/docs/concepts/storage/persistent-volumes/

  • ② yaml介绍

PV 作为存储资源,主要包括存储能力、访问模式、存储类型、回收策略等关键信息,

  • ③创建yaml文件
代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolume
metadata:
  name:  pv1
spec:
  capacity: 
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /data/k8s
    server: 192.168.86.100
  • ④ 运行yaml文件
代码语言:javascript
复制
kubectl apply -f pv-demo.yaml

pv1 已经创建成功了,状态是 Available,表示 pv1 就绪,可以被 PVC 申请。

  • ⑤ Capacity(存储能力)

一个 PV 对象都要指定一个存储能力,通过 PV 的 capacity属性来设置的,目前只支持存储空间的设置,就是我们这里的 storage=1Gi,不过未来可能会加入 IOPS、吞吐量等指标的配置。

  • ⑥ AccessModes(访问模式)

用于描述用户应用对存储资源的访问权限

ReadWriteOnce(RWO)

读写权限,但是只能被单个节点挂载

ReadOnlyMany(ROX)

只读权限,可以被多个节点挂载

ReadWriteMany(RWX)

读写权限,可以被多个节点挂载

Volume 插件支持的访问模式

  • ⑦ persistentVolumeReclaimPolicy(回收策略)

PV 支持的策略有三种: Retain(保留),Recycle(回收),Delete(删除)。目前只有 NFS 和 HostPath 两种类型支持回收策略。当然一般来说还是设置为 Retain 。

Retain(保留)

保留数据,需要管理员手工清理数据。

Recycle(回收)

清除 PV 中的数据,效果相当于执行 rm -rf /thevoluem/*。

Delete(删除)

与 PV 相连的后端存储完成 volume 的删除操作,当然这常见于云服务商的存储服务,比如 ASW EBS。

  • ⑧ 状态

会处于4中不同的阶段

Available(可用)

表示可用状态,还未被任何 PVC 绑定

Bound(已绑定)

表示 PVC 已经被 PVC 绑定

Released(已释放)

PVC 被删除,但是资源还未被集群重新声明

Failed(失败)

表示该 PV 的自动回收失败

PS:这次主要说了PV里面的参数说明。下次说PVC的声明方法和具体的使用。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程坑太多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (一)认识PV/PVC/StorageClass
  • (二)NFS安装
  • (二)PV
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档