缘由:
go-zero gateway主要内容开发接近完成了,有一个问题一直没有解决,马上要部署了,是时候解决了。
因为主要是RESTful <–> gRPC,go-zero通过解析pb文件访问后端gRPC服务,pb文件则是通过proto文件生成,proto文件是定义接口的,接口变化会导致pb文件的变化和更新,但是通常gateway模块的功能开发相对稳定和单一,完成后很少会有修改。不希望因为pb文件的变化而导致gateway重新构建、版本发布,pb文件则是更像配置文件存在。
但是k8s中配置文件只能是纯文本,对于pb这类二进制文件只能通过其他方式解决,于是存储卷便成了首选。从2018年玩k8s以来,一直都没有接触过存储卷。
底层的共享实现方式,NFS是最简单直接的。
原理:
nfs
网络文件系统,这个不陌生。
pv
持久化卷,对底层的共享存储的抽象,由管理员创建和配置,与具体底层共享存储技术的实现方式有关,如NFS,通过插件与共享存储对接。
pvc
持久卷声明,是用户存储的声明。
pvc与pod类似。pod消耗节点,pvc消耗pv;pod请求CPU/内存,pvc请求存储空间/访问模式
storage class
更像是动态pv,感觉用不上,没有做过多了解
实践:
安装NFS服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# 安装nfs,rpcbind待依赖会自动安装
sudo yum install -y nfs-utils
# 开放firewalld端口,否则会报错:mount.nfs: No route to host
sudo firewall-cmd --zone=public --add-service=rpc-bind --permanent
sudo firewall-cmd --zone=public --add-service=mountd --permanent
sudo firewall-cmd --zone=public --add-service=nfs --permanent
# 重新加载firewalld
sudo firewall-cmd --reload
# 编辑nfs配置文件
sudo vim /etc/exports
# 如添加/opt共享给所有来源,只读&同步
cat /etc/exports
/opt *(ro,sync)
# 修改文件后,执行以下指令生效
exportfs -rv
# 启用nfs服务,rpcbind会自动启用
sudo systemctl enable nfs
# 启动nfs服务,rpcbind会自动启动
sudo systemctl start nfs
|
k8s配置
pv-nfs.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nfs
spec:
accessModes:
- ReadOnlyMany
capacity:
storage: 1G
nfs:
path: <path>
server: <ip>
persistentVolumeReclaimPolicy: Retain
|
pvc-nfs.yaml
1
2
3
4
5
6
7
8
9
10
11
12
|
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-nfs
namespace: dev
spec:
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 1G
|
在deployment中添加存储卷配置:配置存储卷声明中填/选择:pvc-nfs;配置挂载到容器中路径。
更简单办法
以kuboard为例,在配置deployment的存储卷中,选择NFS,直接配置NFS Serve和NFS Path,可省去创建pv和pvc。开发环境,简单处理就好!
最后一步
本以为到这里就可以了,启动deployment报错:
1
2
3
4
|
文件系统类型错误、选项错误 上有坏超级块、 缺少代码页或助手程序,或其他错误
(对某些文件系统(如 nfs、cifs) 您可能需要一款 /sbin/mount.<类型> 助手程序)
有些情况下在 syslog 中可以找到一些有用信息- 请尝试
dmesg | tail 这样的命令看看。
|
经查,忘了在k8s工作节点上安装nfs-utils,默认系统是没有nfs客户端工具的
1
2
3
|
sudo yum install -y nfs-utils
sudo systemctl enable nfs
sudo systemctl start nfs
|
参考
https://zhuanlan.zhihu.com/p/399726898