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
Я попробовал другой конфиг, но безуспешно:(
Любое предложение будет очень полезным
Я использую kubernetes, предоставленный с докером для Windows:
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"}
3 ответа
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 /, но не уверены, что вы подразумеваете под ним переопределение содержимое
Проблема в том, что вы используете 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>
вы все правильно сделали, вы просто пропустили ключевой параметр в вашем томе. поскольку вы пытаетесь заменить только один файл другим, я имею в виду, что вы используете subPath для замены только одного файла, который в вашем случае является файлом «app-conf.xml», но вы не указываете, какой ключ в вашем configMap, который заменит этот файл. каждый ключ configMap рассматривается как независимый файл конфигурации
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
key: <enter the key here>