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 服务器上。

形如下图所示: img

5. 使用PVC

更新配置文件后删除pod,让k8s重新创建pod即可让修改配置生效,从而避免重新构建镜像。

最后更新于

这有帮助吗?