Назад | Перейти на главную страницу

Монтирование файлов конфигурации в Kubernetes

Я изо всех сил пытаюсь создать два файла конфигурации JSON в главном каталоге приложения (/ publish), оставив все остальные файлы в этом каталоге нетронутыми. Я пробовал следующее:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: url_to_image
        ports:
        - containerPort: 1234
        volumeMounts:
        - name: config-files
          mountPath: "/publish"
      volumes:
      - name: config-files
        configMap:
          name: myapp
---
apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  ports:
    - port: 80
      targetPort: 1234
      protocol: TCP
  type: NodePort
  selector:
    app: myapp
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: myapp
  labels:
    app: myapp
data:
  appsettings.json: |
    { some JSON }
  sharedsettings.json: |
    { more JSON }

Два файла конфигурации (appsettings.json и sharedsettings.json) созданы правильно, но, к сожалению, все остальные файлы в / publish удаляются в процессе.

Какой был бы лучший подход?

Хорошо, нашел решение, но оно не очень элегантное. Есть ли лучшие решения?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: url_to_image
        ports:
        - containerPort: 1234
        volumeMounts:
        - name: appsettings
          mountPath: "/publish/appsettings.json"
          subPath: whatever
        volumeMounts:
        - name: sharedsettings
          mountPath: "/publish/sharedsettings.json"
          subPath: whatever
      volumes:
      - name: appsettings
        configMap:
          name: myapp
          items:
          - key: appsettings.json
            path: whatever
      - name: sharedsettings
        configMap:
          name: myapp
          items:
          - key: sharedsettings.json
            path: whatever
---
apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  ports:
    - port: 80
      targetPort: 1234
      protocol: TCP
  type: NodePort
  selector:
    app: myapp
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: myapp
  labels:
    app: myapp
data:
  appsettings.json: |
    { some JSON }
  sharedsettings.json: |
    { more JSON }