k8s 持久卷使用相关记录,供后续研究参考。。。
组成 PV ( PersistentVolume ) + PVC ( PersistentVolume ) + SC ( StorageClass ) + NFS
k8s 持久卷挂载方案有多种,我这里使用的是 NFS
k8s 集群为 master + 2 node 自行搭建 使用 flannel 做网络插件,实现k8s集群内部通信
IP:k8s-master: 192.168.1.230
k8s-node01:192.168.1.231
k8s-node02:192.168.1.232
一、NFS 搭建
NFS 搭建很简单,自行百度
需要创建对应网络共享目录,配置相应权限
创建完成后,即可通过k8s StorageClass 来创建存储卷绑定策略及指定相关存储卷插件类型
注:需要在所有工作节点都安装NFS 不然会在 Deployment 中部署 replicas 多实例时报错。 通过命令 kubectl describe pods xxx 中查看 Events 事件中提示报错信息: NFS 服务器文件系统崩坏等信息。未截图
二、创建 SC 配置
没办法,太懒了,C位是我的。下同
其中 allowVolumeExpansion: true #是否允许扩容 这个字段是默认指定 true 不需手动添加
启动:kubectl create -f bxy-nfs-StorageClass.yaml
框起来的三个字段在上面 yaml 配置截图中有相关注释
三、创建 PV 配置
框起来的是指定了这个挂载卷的容量大小,我挂载的路径为 /bxy/nfsdata
spec.nfs.server 字段为 NFS 文件系统所在服务器的真实 IP
spec.storageClassName 字段对应 StorageClass 配置中的 metedata.name 字段
spec.mountOptions 字段没搞太懂,此为官网中 NFS 相应挂载配置
https://www.cnblogs.com/yanh0606/p/11269142.html 相关资料网站
启动:kubectl create -f bxy-nfs-pv.yaml
注意创建完 PV 后,会看到 Status 类型为 Available ,这是因为 PV 还没有和 PVC 绑定,当绑定成功后会自动改成 Bound
四、创建 PVC 配置
框起来的部分是请求的资源大小,我写的是 5G ,但实际绑定成功后会自动改变为 PV 中设置的容量大小 6G
spec.selector.matchLabels 这个字段与 PV 中的 labels 字段匹配
#pvc 通过 matchLabels和pv中的label匹配,来关联要使用的存储空间。
#https://my.oschina.net/sskxyz/blog/3130131
#表明此PVC希望使用Label:name: "bxy-pv-labels"的PV。
#https://www.cnblogs.com/yanh0606/p/11269142.html
启动:kubectl create -f bxy-nfs-pvc.taml
注意框起来的部分,状态为 Bound 并且容量为 6G,而不是配置文件中请求的 5G 容量
再次回过头来看下我们的 pv 状态
未创建 PVC 之前状态:
创建 PVC 后对比:
在未创建 PVC 之前我的 PV 状态为 Available ,现在状态自动更改为 Bound,说明已经自动绑定成功,并且 CLAIM 中添加了 PVC namespace/name
最后,我们启动一个 NG 来,检验下是否能成功挂载此卷。
五、创建 Deployment 配置
框中的就是和刚创建的持久卷相关连部分,没啥好解释的,注释基本都写了,可能有部分不是很准确,自行在摸索吧。
启动:kubectl create -f nginx-nfs-deploy.taml
挂载很成功,没啥好说的,毕竟已经实验多次了。
对了,这里没有 Port 相关的配置,会在下面写一个 Service 来做端口映射配置
在看下具体的 Pod 吧。
两个 NG 很健康
这个是 Pod 的 Events ,可以看到这个 Pod 被调度到 k8s-node02 上面了,创建启动啥的都和正常,没啥毛病。
下面就是让这个 NG 可以在外网能够访问。
六、创建 Service 配置
spec.clusterIP 这个是我手动添加的,只要在 k8s flannel 网段类就可以了
基本上都注释的很详细了,也不再说啥了。
启动看看吧。
没啥问题,访问下看看
嗯,是访问到了,但是没有文件,这个我们在 挂载目录下添加个文件试试效果,顺便也能确认下我们的挂载卷是否生效了
在访问下,看看效果。。。
三台服务器都能访问 NG ,这个就是 Service 中的配置效果。
老铁,没毛病吧。