在Linux中,将目录A挂载到目录B,则目录B原有的文件都会被目录A下的文件覆盖。
那么在k8s中,如何将configmap挂载到容器中某个目录的文件中呢?答案是使用subPath。
subPath的使用方法一共有两种:
1. 同一个pod中多容器挂载同一个卷时提供隔离
2. 将configMap和secret作为文件挂载到容器中而不覆盖挂载目录下的文件
使用 subPath
有时,在单个 Pod 中共享卷以供多方使用是很有用的。 volumeMounts.subPath
属性可用于指定所引用的卷内的子路径,而不是其根路径。
下面例子展示了如何配置某包含 LAMP 堆栈(Linux Apache MySQL PHP)的 Pod 使用同一共享卷。 此示例中的 subPath
配置不建议在生产环境中使用。 PHP 应用的代码和相关数据映射到卷的 html
文件夹,MySQL 数据库存储在卷的 mysql
文件夹中:
apiVersion: v1 kind: Pod metadata: name: my-lamp-site spec: containers: - name: mysql image: mysql env: - name: MYSQL_ROOT_PASSWORD value: "rootpasswd" volumeMounts: - mountPath: /var/lib/mysql name: site-data subPath: mysql - name: php image: php:7.0-apache volumeMounts: - mountPath: /var/www/html name: site-data subPath: html volumes: - name: site-data persistentVolumeClaim: claimName: my-lamp-site-data
那么如果 subPath 不是文件夹,而是一个文件,又该如何解决呢?同样的道理,只需要通过 subPath 指定出该文件即可,注意 subPath 要使用相对目录。具体如下所示:
containers: - volumeMounts: - name: demo-config mountPath: /etc/ssl.key subPath: ssl.key # 如果没有subPath,则/etc/ssl.key将被当成一个目录,根据Linux挂载的概念,该目录下的所有文件会被覆盖 volumes: - name: demo-ssl configMap: name: ssl-secret
configmap内容:
apiVersion: v1 kind: ConfigMap metadata: name: demo-ssl data: ssl.key: | username:admin password:123456
参考:
Kubernetes subPath | 容器原目录下的文件全被覆盖了,什么鬼?
原文地址:https://www.cnblogs.com/FengZeng666/p/15134342.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。