k8s pv配置教程
在Kubernetes官网的学习教程:wordpress中,我尝试了手动创建pv并绑定pvc,但是每次申请pvc都要手动添加pv并绑定是一件很麻烦且很容易出错的事情,官方也早就意识到这个问题,提出了动态存储分配,只需要通过storageclass即可实现
本文使用了nfs作为集群存储用于实践,线上建议考虑使用ceph等分布式文件存储系统,nfs搭建教程参考:How to Install NFS Server and Client on Ubuntu 22.04
安装nfs provisioner
- 确认nfs服务器在集群节点中可以正常访问
1 | # 安装客户端 |
- 新建一个目录如nfs-example,创建
kustomization.yaml
文件
鉴于gfw的影响,建议下载github.com/kubernetes-sigs/nfs-subdir-external-provisioner仓库,并将deploy文件夹提取出来,里面主要是账户创建、角色绑定、命名空间、deployment等配置
1 | # kustomization.yaml |
- 创建命名空间nfs-provisioner
1 | # namespace.yaml |
- 创建nfs deployment的patch,主要修改image地址、nfs信息,用于后续的合并
1 | # patch_nfs_details.yaml |
- 添加资源并发布
汇总后的kustomization.yaml
内容如下所示
1 | # kustomization.yaml |
执行命令
1 | # 发布到集群中 |
到这里,基于nfs的动态存储分配基本可用
wordpress实践
从教程:wordpress下载相关yaml配置
修改wordpress-deployment.yaml
以及mysql-deployment.yaml
的pvc配置,在spec下添加storageClassName: nfs-client
当然,如果不添加上述命令,可以将storageclass:nfs-client设置成默认,这样一来就不需要改任何配置了
修改nfs-client为默认
- 通过patch修改
1 | kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' |
- 修改storageclass的配置文件
1 | ... |
其他操作不再赘述,到这里就结束了
错误处理
- chown: changing ownership of ‘/var/lib/mysql/‘: Operation not permitted
这是因为nfs需要添加no_root_squash
权限,修改/etc/exports
添加,这个权限太大,不适合线上使用
- mount: /mnt/nfs_clientshare: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.
helper program.
节点没有安装nfs客户端导致的,安装nfs-common即可