Kubernetes 卷将 ConfigMap 挂载到 pod 中的文件而不覆盖所有其他文件
Kubernetes Volume Mount ConfigMap to File within the pod without overwriting all other files
我的 Kubernetes 集群中有以下 ConfigMap,其中包含我的应用程序的 web.config
每个环境都有一个不同的,所以我想将 ConfigMap 批量挂载到 pod 中的 web.config
.
ConfigMap:
kind: ConfigMap
apiVersion: v1
metadata:
name: stars-website-data-config
namespace: stars-website
data:
config: |-
<?xml version="1.0"?>
<configuration>
...
</configuration>
部署:
kind: Deployment
apiVersion: apps/v1
metadata:
name: stars-website-data
namespace: stars-website
spec:
template:
spec:
containers:
- name: stars-website-data
...
volumeMounts:
- name: config
mountPath: C:\STARS.Website.Data
volumes:
- name: config
configMap:
name: stars-website-data-config
items:
- key: config
path: web.config
这似乎可以满足我的要求,但它会替换该目录中的所有其他文件和文件夹。
PS C:\STARS.Website.Data> ls
Directory: C:\STARS.Website.Data
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 5/14/2021 10:55 AM ..2021_05_14_09_55_42.624339347
d----l 5/14/2021 10:55 AM ..data
-a---l 5/14/2021 10:55 AM 0 web.config
PS C:\STARS.Website.Data> cat .\web.config
<?xml version="1.0"?>
<configuration>
<configSections>
如果我尝试使用 subPath
值,例如:
kind: Deployment
apiVersion: apps/v1
metadata:
name: stars-website-data
namespace: stars-website
spec:
template:
spec:
containers:
- name: stars-website-data
...
volumeMounts:
- name: config
mountPath: C:\STARS.Website.Data\web.config
subPath: web.config
volumes:
- name: config
configMap:
name: stars-website-data-config
items:
- key: config
path: web.config
我收到以下错误:
Error: Error response from daemon: invalid volume specification: 'c:\var\lib\kubelet\pods\ddfe6b07-4bff-42fe-ad3b-a02add00fbbf\volumes\kubernetes.io~configmap\config\web.config:C:\STARS.Website.Data\web.config:ro': invalid mount config for type "bind": source path must be a directory
当 configMap 作为卷挂载时,它将删除之前存在于挂载路径中的所有文件,这是预期的行为。请参阅此 link.
中的警告部分
根据您的子路径配置,直接为基于 windows 的容器绑定挂载文件存在限制,请参考此 discussion。首选方法是为基于 windows 的容器安装目录,您可以创建单独的空目录,然后可以将 configmap 挂载到该目录,这可能是快速直接的解决方案。
此 link 提供了可能对您有用的解决方案。
使用上述 link 中给出的子路径配置或变通解决方案的一个主要缺点是,每当您更新 configmap 时,它都不会自动更新项目密钥。
谢谢,
我的 Kubernetes 集群中有以下 ConfigMap,其中包含我的应用程序的 web.config
每个环境都有一个不同的,所以我想将 ConfigMap 批量挂载到 pod 中的 web.config
.
ConfigMap:
kind: ConfigMap
apiVersion: v1
metadata:
name: stars-website-data-config
namespace: stars-website
data:
config: |-
<?xml version="1.0"?>
<configuration>
...
</configuration>
部署:
kind: Deployment
apiVersion: apps/v1
metadata:
name: stars-website-data
namespace: stars-website
spec:
template:
spec:
containers:
- name: stars-website-data
...
volumeMounts:
- name: config
mountPath: C:\STARS.Website.Data
volumes:
- name: config
configMap:
name: stars-website-data-config
items:
- key: config
path: web.config
这似乎可以满足我的要求,但它会替换该目录中的所有其他文件和文件夹。
PS C:\STARS.Website.Data> ls
Directory: C:\STARS.Website.Data
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 5/14/2021 10:55 AM ..2021_05_14_09_55_42.624339347
d----l 5/14/2021 10:55 AM ..data
-a---l 5/14/2021 10:55 AM 0 web.config
PS C:\STARS.Website.Data> cat .\web.config
<?xml version="1.0"?>
<configuration>
<configSections>
如果我尝试使用 subPath
值,例如:
kind: Deployment
apiVersion: apps/v1
metadata:
name: stars-website-data
namespace: stars-website
spec:
template:
spec:
containers:
- name: stars-website-data
...
volumeMounts:
- name: config
mountPath: C:\STARS.Website.Data\web.config
subPath: web.config
volumes:
- name: config
configMap:
name: stars-website-data-config
items:
- key: config
path: web.config
我收到以下错误:
Error: Error response from daemon: invalid volume specification: 'c:\var\lib\kubelet\pods\ddfe6b07-4bff-42fe-ad3b-a02add00fbbf\volumes\kubernetes.io~configmap\config\web.config:C:\STARS.Website.Data\web.config:ro': invalid mount config for type "bind": source path must be a directory
当 configMap 作为卷挂载时,它将删除之前存在于挂载路径中的所有文件,这是预期的行为。请参阅此 link.
中的警告部分根据您的子路径配置,直接为基于 windows 的容器绑定挂载文件存在限制,请参考此 discussion。首选方法是为基于 windows 的容器安装目录,您可以创建单独的空目录,然后可以将 configmap 挂载到该目录,这可能是快速直接的解决方案。
此 link 提供了可能对您有用的解决方案。
使用上述 link 中给出的子路径配置或变通解决方案的一个主要缺点是,每当您更新 configmap 时,它都不会自动更新项目密钥。
谢谢,