공부/Kubernetes

Mount multiple files with one configmap

토고미 2021. 6. 24. 11:16

k8s에서 하나의 configmap을 이용하여 여러 개의 파일을 마운트하는 법을 알아보자.

 

아래와 같이 하나의 configmap에서 여러 개의 파일을 만들 수 있다.

이해를 위해 파일이라고 했지만, 사실은 key-value로 저장된다고 하는 것이 정확하다.

kind: ConfigMap
apiVersion: v1
metadata:
  name: example-config
data:
  fileOne.conf: |-
    blahblahblah
    blahblahblah
  
  fileTwo.conf: |-
    {
      "sample": {
        "config" : "example"
       }
    }        

이렇게 fileOne.conf 라는 key 하나와 fileTwo.conf 라는 key 하나, 총 두개의 key를 만들었다.

 

이제 이 key값을 파일이름으로하여 pod에 마운트 하면된다.

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - image: togomi/sample-image
    name: sample-container
    volumeMounts:
    - name: fileOne
      mountPath: /path/to/where/fileOne.conf
      subPath: fileOne.conf
    - name: fileTwo
      mountPath: /path/to/where/fileTwo.conf
      subPath: fileTwo.conf
  volumes:
  - name: fileOne
    configMap:
      name: example-config
      items:
      - key: fileOne.conf
        path: fileOne.conf
  - name: fileTwo
    configMap:
      name: example-config
      items:
      - key: fileTwo.conf
        path: fileTwo.conf

 

subPath는 무엇인지 의문이 들 수 있다.

 

volumeMount는 기본적으로 그 폴더를 덮어씌워버린다.

즉, 빈 폴더에 mount를 한다면 문제가 없지만,

기존에 파일이 있는 폴더라면 기존의 파일들이 사라진다는 뜻이다.

 

이 때, subPath를 지정하면 기존 파일은 보존하면서 그 파일만 추가할 수 있다.

주의할 점은 mountPath에 subPath의 파일이름까지 전부 써줘야한다.