kubernetes - Configmap - Удаляются существующие файлы

При использовании ConfigMap в качестве смонтированного тома все существующие файлы и папки внутри смонтированного места модуля удаляются.

ConfigMap создается с помощью команды:

$ kubectl create configmap tomcat-configmap --from-file=./config/tomcat-config.xml

Yaml-файл развертывания:

kind: Service
apiVersion: v1
metadata:
  name: tomcat-svc
spec:
  selector:
    app: tomcat-container
  ports:
  - protocol: TCP
    port: 83
    targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
spec:
  selector:
    matchLabels:
      app: tomcat-container
  replicas: 1
  template:
    metadata:
      labels:
        app: tomcat-container
    spec:
      containers:
      - name: tomcat
        image: bitnami/tomcat:latest
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: tomcat-configmap-volume
          mountPath: /usr/local/tomcat/webapps/examples/WEB-INF/classes/com/test/app-conf.xml
          subPath: app-conf.xml
      volumes:
        - name: tomcat-configmap-volume
          configMap:
            name: tomcat-configmap

Я пробовал другую конфигурацию, но безуспешно :(

Любое предложение было бы очень полезным

Я использую кубернеты с докером для окон:

Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:17:39Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"windows/amd64"}

Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:05:37Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

person Kolo    schedule 29.10.2018    source источник
comment
Можете ли вы предоставить результат kubectl describe configmaps tomcat-configmap, если он пустой, вы делаете что-то не так.   -  person Crou    schedule 30.10.2018
comment
kubectl describe cm tomcat-configmap Имя: tomcat-configmap Пространство имен: по умолчанию Ярлыки: ‹none› Аннотации: ‹none› Данные ==== app-conf.xml: ‹apps› ‹app› ‹name› TEST1 ‹/name› ‹ / app ›‹/apps› События: ‹none›   -  person Kolo    schedule 30.10.2018
comment
Как видите, он не пустой. Есть ли у вас какие-нибудь предложения или идеи? заранее спасибо   -  person Kolo    schedule 31.10.2018


Ответы (2)


kind: Service
apiVersion: v1
metadata:
  name: tomcat-svc
spec:
  selector:
  app: tomcat-container
  ports:
  - protocol: TCP
    port: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
spec:
  selector:
    matchLabels:
      app: tomcat-container
  replicas: 1
  template:
    metadata:
      labels:
        app: tomcat-container
    spec:
  containers:
  - name: tomcat
    image: bitnami/tomcat:latest
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: tomcat-configmap-volume
      mountPath: /usr/local/tomcat/webapps/examples/WEB-INF/classes/com/test
      #subPath: app-conf.xml
  volumes:
    - name: tomcat-configmap-volume
      configMap:
        name: tomcat-configmap

Ответ, предоставленный Рико выше, должен работать, в любом случае я предоставляю результат реализации ниже:

Закомментируйте подпуть, подпуть действительно полезен, когда вы хотите переопределить существующий файл конфигурации. Кроме того, ваш путь tomcat - / opt / bitnami / tomcat в образе, который вы используете, и вы монтируете файл в настраиваемом динамически созданном месте в / usr / local / tomcat /, не зная, что вы имеете в виду под этим, переопределяя содержимое

Снимок экрана

person dheeraj tripathi    schedule 10.12.2018
comment
Спасибо за ваш ответ. Я попробую и буду держать вас в курсе - person Kolo; 11.12.2018
comment
Это работает как шарм. Уверен, что мне чего-то не хватало. Спасибо большое - person Kolo; 11.12.2018
comment
Выполнено. Просто чтобы дать больше информации. Проблема возникает, когда контейнер tomcat запускается под пользователем без полномочий root. У меня есть собственный образ, основанный на tomcat, и я запускаю его с конкретным пользователем без прав, и когда я монтирую том на основе configmap, существующее содержимое стирается, а смонтированный файл принадлежит пользователю root. - person Kolo; 14.12.2018
comment
Вы можете запустить свой контейнер как пользователь без полномочий root, скажем, как пользователь tomcat, установив USER tomcat в Dokcerfile, а также, если вы хотите, чтобы права / владение монтируемых файлов были пользователем, отличным от пользователя по умолчанию, тогда вы можете сослаться на этот kubernetes.io/docs/tasks/configure-pod-container /, здесь вы определяете идентификатор группы пользователей в fsgroup и runas - person dheeraj tripathi; 14.12.2018

Проблема здесь в том, что вы используете subPath, и это должно быть каталогом, и вы думаете, что app-conf.xml должен быть создан как файл.

На самом деле вам нужно только следующее:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
spec:
  selector:
    matchLabels:
      app: tomcat-container
  replicas: 1
  template:
    metadata:
      labels:
        app: tomcat-container
    spec:
      containers:
      - name: tomcat
        image: bitnami/tomcat:latest
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: tomcat-configmap-volume
          mountPath: /usr/local/tomcat/webapps/examples/WEB-INF/classes/com/test
      volumes:
        - name: tomcat-configmap-volume
          configMap:
            name: tomcat-configmap

И назовите свой файл app-conf.xml, чтобы при создании ConfigMap ему был назначен data ключ app-conf.xml в самой ConfigMap:

$ kubectl create configmap tomcat-configmap --from-file=./app-conf.xml

Тогда ваша ConfigMap будет выглядеть так:

$ kubectl describe cm tomcat-configmap
Name:         tomcat-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
app-conf.xml:
----
<xml>
...
...
</xml>

Events:  <none>
person Rico    schedule 29.10.2018
comment
Спасибо, Рико, за ответ. К сожалению, это не сработало. Все еще сталкиваюсь с той же проблемой - person Kolo; 30.10.2018