Ant*_*nne 5 kubernetes configmap
我注意到,当我创建并挂载包含一些文本文件的配置映射时,容器会将这些文件视为的符号链接../data/myfile.txt。
例如,如果我的配置映射名为tc-configs并包含2个名为stripe1.xml和stripe2.xml的xml文件,如果我将此配置映射安装到容器中的/ configs,则容器中将包含:
bash-4.4# ls -al /configs/
total 12
drwxrwxrwx 3 root root 4096 Jun 4 14:47 .
drwxr-xr-x 1 root root 4096 Jun 4 14:47 ..
drwxr-xr-x 2 root root 4096 Jun 4 14:47 ..2018_06_04_14_47_03.291041453
lrwxrwxrwx 1 root root 31 Jun 4 14:47 ..data -> ..2018_06_04_14_47_03.291041453
lrwxrwxrwx 1 root root 18 Jun 4 14:47 stripe1.xml -> ..data/stripe1.xml
lrwxrwxrwx 1 root root 18 Jun 4 14:47 stripe2.xml -> ..data/stripe2.xml
Run Code Online (Sandbox Code Playgroud)
我猜Kubernetes需要这些符号链接以及../data和..timestamp /文件夹,但是我知道某些应用程序如果看到意外的文件或文件夹,可能会启动失败
有没有办法告诉Kubernetes不要生成所有这些符号链接并直接挂载文件?
我认为这种解决方案是令人满意的:在mountPath中指定确切的文件路径,将摆脱符号链接。 ..data and ..2018_06_04_19_31_41.860238952
因此,如果我应用这样的清单:
apiVersion: v1
kind: Pod
metadata:
name: my-lamp-site
spec:
containers:
- name: php
image: php:7.0-apache
volumeMounts:
- mountPath: /var/www/html/users.xml
name: site-data
subPath: users.xml
volumes:
- name: site-data
configMap:
name: users
---
apiVersion: v1
kind: ConfigMap
metadata:
name: users
data:
users.xml: |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<users>
</users>
Run Code Online (Sandbox Code Playgroud)
显然,我显式地使用了子路径,并且它们不是ConfigMaps的“自动更新魔术”的一部分,我将不再看到任何符号链接:
$ kubectl exec my-lamp-site -c php -- ls -al /var/www/html
total 12
drwxr-xr-x 1 www-data www-data 4096 Jun 4 19:18 .
drwxr-xr-x 1 root root 4096 Jun 4 17:58 ..
-rw-r--r-- 1 root root 73 Jun 4 19:18 users.xml
Run Code Online (Sandbox Code Playgroud)
注意不要忘记subPath,否则users.xml将是目录!
回到我的初始清单:
spec:
containers:
- name: php
image: php:7.0-apache
volumeMounts:
- mountPath: /var/www/html
name: site-data
volumes:
- name: site-data
configMap:
name: users
Run Code Online (Sandbox Code Playgroud)
我会看到这些符号链接回来:
$ kubectl exec my-lamp-site -c php -- ls -al /var/www/html
total 12
drwxrwxrwx 3 root root 4096 Jun 4 19:31 .
drwxr-xr-x 3 root root 4096 Jun 4 17:58 ..
drwxr-xr-x 2 root root 4096 Jun 4 19:31 ..2018_06_04_19_31_41.860238952
lrwxrwxrwx 1 root root 31 Jun 4 19:31 ..data -> ..2018_06_04_19_31_41.860238952
lrwxrwxrwx 1 root root 16 Jun 4 19:31 users.xml -> ..data/users.xml
Run Code Online (Sandbox Code Playgroud)
非常感谢psycotica0上K8S加拿大松弛的把我在正确的轨道上子路径(它们在迅速提到configmap文档)
恐怕我不知道你是否可以告诉 Kubernetes 不要生成这些符号链接,尽管我认为这是一种本机行为。
如果这些文件和链接是一个问题,我能想到的一种解决方法是将 configmap 安装在一个文件夹上,并在初始化容器时将文件复制到另一个文件夹:
initContainers:
- name: copy-config
image: busybox
command: ['sh', '-c', 'cp /configmap/* /configs']
volumeMounts:
- name: configmap
mountPath: /configmap
- name: config
mountPath: /configs
Run Code Online (Sandbox Code Playgroud)
但是您必须声明两个卷,一个用于 configMap (configmap),另一个用于最终目录 (config):
volumes:
- name: config
emptyDir: {}
- name: configmap
configMap:
name: myconfigmap
Run Code Online (Sandbox Code Playgroud)
显然,可以根据需要更改配置卷的卷类型。
| 归档时间: |
|
| 查看次数: |
2028 次 |
| 最近记录: |