Kubernetes - subpath指定卷中的一个子目录

我们在部署项目中的一个服务的时候,这个服务的配置相对比较复杂(如下),有没有办法一次性把这些在不同文件夹下的配置文件,都作为本服务的configmaps,统一在启动pod的时候挂载进去呢:

[root test-server]# tree
.
├── @
├── check.sh
├── ci.pid
├── config
│   ├── application.yml
│   ├── logback.xml
│   ├── plugin
│   │   ├── test-s101-v1.yml
│   │   └── test-smk-v1.yml
│   ├── plugin-bak1115
│   │   ├── test-s101-v1.yml
│   │   └── test-smk-v1.yml
│   ├── plugin.bak20190111
│   │   ├── test-s101-v1.yml
│   │   └── test-smk-v1.yml
│   ├── Xxxxxx.json
│   ├── resource
│   │   ├── test-S101-V1.json
│   │   └── TEST-PARK-V1.json
│   ├── resource-bak1115
│   │   ├── test-S101-V1.json
│   │   └── test-SMK-V1.json
│   └── resource.bak20190111
│       ├── test-S101-V1.json
│       └── TEST-PARK-V1.json
├── error_nohup_outpoint20181022.sh
├── kill.sh
├── lib_bak
│   ├── test-server-0.0.1-SNAPSHOT.jar.0808
│   └── test-server-0.0.1-SNAPSHOT.jar.timezone
├── logtest
│   ├── tests101-v1.2018-11-15.0.log
│   └── tests109-v1.2019-06-22.0.log
├── logwww
│   ├── www-cover-v1.2018-11-15.0.log
│   └── www-trash-v1.2019-06-22.0.log
├── logvvv
│   ├── vvv-v2.2019-01-02.0.log
│   └── vvv-v2.2019-06-22.0.log
├── loguuuu
│   ├── uuuu-park-v1.2019-06-03.0.log
│   └── uuuu-park-v1.2019-07-03.0.log
├── logttt
│   ├── ttt.2019-05-07.0.log
│   └── ttt.2019-06-22.0.log
├── logsss
│   ├── sss-detectors-v1.2018-11-19.0.log
│   └── sss-detectors-v1.2019-06-22.0.log
├── logrrr
│   ├── rrr-envir-v1.2018-11-15.0.log
│   └── rrr-envir-v1.2019-06-22.0.log
├── logqqq
│   ├── qqq-park-v1.2018-11-15.0.log
│   └── qqq-park-v1.2019-06-22.0.log
├── logppp
│   ├── ppp-v1.2018-11-15.0.log
│   └── ppp-v1.2019-06-22.0.log
├── logooo
│   ├── ooo-smk-v1.2018-11-15.0.log
│   └── ooo-smk-v1.2019-06-22.0.log
├── logs
│   ├── log-nnn
│   │   ├── nnn-hs90bw-v1.2018-11-15.0.log
│   │   └── nnn-hs90bw-v1.2019-06-22.0.log
│   ├── logmmm
│   │   ├── mmm-hydrant-v1.2019-06-04.0.log
│   │   └── mmm-hydrant-v1.2019-07-03.0.log
│   ├── loglll
│   │   ├── lll-park-v1.2019-04-25.0.log
│   │   └── lll-park-v1.2019-06-22.0.log
│   └── logkkk
│       ├── kkk-cover-v1.2019-01-09.0.log
│       └── kkk-cover-v1.2019-06-22.0.log
├── logjjj
│   ├── jjj-gas-v1.2018-11-15.0.log
│   └── jjj-sos-v1.2019-06-22.0.log
├── logiii
│   ├── iii-cover-v1.2018-11-15.0.log
│   └── iii-cover-v1.2019-06-22.0.log
├── loghhh
│   ├── hhh-lock-v1.2018-11-15.0.log
│   └── hhh-lock-v1.2019-06-22.0.log
├── logggg
│   ├── ggg-park-v1.2018-11-19.0.log
│   └── ggg-uspark-v1.2019-07-02.0.log
├── logfff
│   ├── fff-v1.2018-11-15.0.log
│   └── fff-v1.2019-06-22.0.log
├── logeee
│   ├── eee-elev-v1.2018-12-19.0.log
│   └── eee-elev-v1.2019-07-02.0.log
├── logddd
│   ├── ddd-park-v1.2019-03-24.0.log
│   └── ddd-park-v1.2019-06-22.0.log
├── logccc
│   ├── ccc-press-v1.2018-12-19.0.log
│   └── ccc-press-v1.2019-06-22.0.log
├── logbbb
│   ├── bbb-hydra-v1.2018-11-15.0.log
│   └── bbb-hydra-v1.2019-06-22.0.log
├── logaaa
│   ├── aaa-trash-v1.2018-12-12.0.log
│   └── aaa-trash-v1.2019-06-22.0.log
├── log000
│   ├── 000-park-v1.2018-11-15.0.log
│   └── 000-park-v1.2019-06-22.0.log
├── logTEST
│   ├── TEST-park-v1.2018-12-30.0.log
│   └── TEST-park-v1.2019-06-22.0.log
├── logtest
│   ├── test-gas-v1.2018-11-15.0.log
│   └── test-smk-v1.2019-06-22.0.log
├── nohup.out
├── nohup.out.bak190622
├── plugin
│   ├── jar
│   │   ├── test-S101-V1.jar
│   │   └── test-SMK-V1.jar
│   ├── jar-bak1115
│   │   ├── test-S101-V1.jar
│   │   └── test-SMK-V1.jar
│   ├── js
│   │   ├── common.js
│   │   └── TH_LOCK_SAMPLE_V1.js
│   ├── python
│   └── test-SMK-V1.jar
├── test-adapter.2019-07-03.1.log
├── test-server-0.0.1-SNAPSHOT.jar
├── restart.sh
├── start.sh
└── tmp
    ├── device_add.sh
    ├── device_del.sh
    ├── device_up.sh
    ├── logback.xml
    ├── uplinkMsgSender.sh
    └── uplinkMsgSenderST.sh

我们还是先看看官方文档中给的解释:

Using subPath

有时,可以在一个pod中,将同一个卷共享,使其有多个用处。volumeMounts.subPath特性可以用来指定卷中的一个子目录,而不是直接使用卷的根目录。

以下是使用单个共享卷的LAMP堆栈(Linux Apache Mysql PHP)的pod的示例。HTML内容映射到其html文件夹,数据库将存储在mysql文件夹中:

apiVersion: v1
kind: Pod
metadata:
  name: my-lamp-site
spec:
    containers:
    - name: mysql
      image: mysql
      volumeMounts:
      - mountPath: /var/lib/mysql
        name: site-data
        subPath: mysql
    - name: php
      image: php
      volumeMounts:
      - mountPath: /var/www/html
        name: site-data
        subPath: html
    volumes:
    - name: site-data
      persistentVolumeClaim:
        claimName: my-lamp-site-data

下面是我们配置的YAML文件:

apiVersion: v1
kind: Service
metadata:
  name: TEST-server
  labels:
    app: TEST-server
spec:
  type: NodePort
  sessionAffinity: ClientIP
  ports:
  - port: 11116
    name: TEST-server-port
    nodePort: 31116
  selector:
    app: TEST-server
---
apiVersion: v1
kind: ReplicationController
metadata:
  name: TEST-server
spec:
  replicas: {{.Values.core.replicas}}
  selector:
    app: TEST-server
  template:
    metadata:
      name: TEST-server 
      labels:
        app: TEST-server
    spec:
      containers:
      - name: TEST-server
        image: {{.Values.docker.registry}}/TEST-server:{{.Values.TESTserver.version}}
        imagePullPolicy: {{.Values.docker.pullPolicy}}
        volumeMounts:
        - mountPath: /home/plugin/TEST-server/config/application.yml
          name: config-TESTserver
          subPath: application.yml
        - mountPath: /home/plugin/TEST-server/config/logback.xml
          name: config-TESTserver
          subPath: logback.xml
        - mountPath: /home/plugin/TEST-server/config/xxxx.json
          name: config-TESTserver
          subPath: Res2Param.json
        - mountPath: /home/plugin/TEST-server/config/plugin
          name: config-TESTserver-yml
#          subPath: *.yml
        - mountPath: /home/plugin/TEST-server/config/resource
          name: config-TESTserver-json
#          subPath: *.json
        - mountPath: /home/plugin/TEST-server/plugin/jar
          name: config-TESTserver-jar
#          subPath: *.jar
      volumes:
      - name: config-TESTserver
        configMap:
         name: config-TESTserver-cfg
      - name: config-TESTserver-yml
        configMap:
         name: config-TESTserver-yml
      - name: config-TESTserver-json
        configMap:
         name: config-TESTserver-json
      - name: config-TESTserver-jar
        configMap:
         name: config-TESTserver-jar

我们可以将config文件夹的文件配置到configmaps,但是不能将里面的子目录同时添加进去,需要将里面的子目录同样创建一个configmaps如(config-pluginserver-json),不过这样做的话,是需要创建多个configmaps的,不知道这样做是不是最好的方案;

posted @ 2022-01-27 18:36  zhangdaopin  阅读(64)  评论(0编辑  收藏  举报