java应用从nfs加载配置文件
背景
配置文件变化,无需重新构建镜像部署。
1. 准备nfs
1、准备好nfs服务器。参考:nfs安装 的nfs服务端配置。 2、k8s node节点可以不启用rpcbind服务,但是必须安装nfs-utils(yum install nfs-utils),否则nfs-client-provisioner pod无法启动,因为nfs-client.yaml里面有nfs的相关配置,而这些nfs配置要生效需依赖nfs-utils。参考:nfs安装 的nfs客户端配置。
2. 创建StorageClass对象
理论部分参考:StorageClass
2.1 nfs-client.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: nfs-client-provisioner
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: nfs-client-provisioner
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: quay.io/external_storage/nfs-client-provisioner:latest
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: fuseim.pri/ifs
- name: NFS_SERVER
value: nfs
- name: NFS_PATH
value: /mnt/nfs/k8s
volumes:
- name: nfs-client-root
nfs:
server: nfs
path: /mnt/nfs/k8s[v_warn]k8s node节点可以不启用rpcbind服务,但必须安装nfs-utils。[/v_warn]
2.2 nfs-client-sa.yaml
2.3 nfs-client-class.yaml
现在我们来创建这些资源对象吧:
创建完成后查看下资源状态:
3. 创建PVC对象
查看pvc:
自动生成了一个关联的 PV 对象,访问模式是 RWX,回收策略是 Delete,这个 PV 对象并不是我们手动创建的吧,这是通过我们上面的 StorageClass 对象自动创建的:
4. 拷贝配置文件到nfs共享目录
创建pvc之后就能在nfs看到已经生成相应的共享目录。
共享目录命名规则如下:
自动创建的 PV 以
${namespace}-${pvcName}-${pvName}这样的命名格式创建在 NFS 服务器上的共享数据目录中而当这个 PV 被回收后会以
archieved-${namespace}-${pvcName}-${pvName}这样的命名格式存在 NFS 服务器上。
形如下图所示: 
5. 使用PVC
更新配置文件后删除pod,让k8s重新创建pod即可让修改配置生效,从而避免重新构建镜像。
最后更新于
这有帮助吗?