如何将多个文件/机密挂载到 kubernetes 的公共目录中?
How to mount multiple files / secrets into common directory in kubernetes?
我有多个从不同文件创建的机密。我想将它们全部存储在公共目录 /var/secrets/
中。不幸的是,我无法这样做,因为 kubernetes 在 pod 验证步骤中抛出 'Invalid value: "/var/secret": must be unique 错误。下面是我的 pod 定义的示例。
apiVersion: v1
kind: Pod
metadata:
labels:
run: alpine-secret
name: alpine-secret
spec:
containers:
- command:
- sleep
- "3600"
image: alpine
name: alpine-secret
volumeMounts:
- name: xfile
mountPath: "/var/secrets/"
readOnly: true
- name: yfile
mountPath: "/var/secrets/"
readOnly: true
volumes:
- name: xfile
secret:
secretName: my-secret-one
- name: yfile
secret:
secretName: my-secret-two
如何将来自多个机密的文件存储在同一目录中?
已编辑:
@Jonas 回答正确!
但是,如果您像我在问题中那样使用卷,那么简短的回答是您不能那样做,您必须指定mountPath
到一个未使用的目录- 卷必须是唯一的,不能安装到公共目录。
解法:
我最后所做的是,我没有将文件保存在单独的秘密中,而是创建了一个包含多个文件的秘密。
预计数量
您可以使用一个 projected volume 在同一目录中拥有两个秘密
例子
apiVersion: v1
kind: Pod
metadata:
labels:
run: alpine-secret
name: alpine-secret
spec:
containers:
- command:
- sleep
- "3600"
image: alpine
name: alpine-secret
volumeMounts:
- name: xyfiles
mountPath: "/var/secrets/"
readOnly: true
volumes:
- name: xyfiles
projected:
sources:
- secret:
name: my-secret-one
- secret:
name: my-secret-two
(编辑:没关系 - 我只是注意到@Jonas 早些时候给出了相同的答案。+1 来自我)
从 Kubernetes v1.11+ 开始,可以使用 projected
个卷:
A projected volume maps several existing volume sources into the same
directory.
Currently, the following types of volume sources can be projected:
- secret
- downwardAPI
- configMap
- serviceAccountToken
This is an example“...如何使用投影卷将多个现有卷源安装到同一目录”。
可能是子路径 (using subPath) 会有所帮助。
示例:
volumeMounts:
- name: app-redis-vol
mountPath: /app/config/redis.yaml
subPath: redis.yaml
- name: app-config-vol
mountPath: /app/config/app.yaml
subPath: app.yaml
volumes:
- name: app-redis-vol
configMap:
name: config-map-redis
items:
- key: yourKey
path: redis.yaml
- name: app-config-vol
configMap:
name: config-map-app
items:
- key: yourKey
path: app.yaml
此处您的名为 config-map-redis
的 configMap 从文件 redis.yaml
创建,作为文件 redis.yaml
安装在 app/config/
中。
还将 configMap config-map-app
安装在 app/config/
中作为 app.yaml
这里有一篇很好的文章:Injecting multiple Kubernetes volumes to the same directory
我有多个从不同文件创建的机密。我想将它们全部存储在公共目录 /var/secrets/
中。不幸的是,我无法这样做,因为 kubernetes 在 pod 验证步骤中抛出 'Invalid value: "/var/secret": must be unique 错误。下面是我的 pod 定义的示例。
apiVersion: v1
kind: Pod
metadata:
labels:
run: alpine-secret
name: alpine-secret
spec:
containers:
- command:
- sleep
- "3600"
image: alpine
name: alpine-secret
volumeMounts:
- name: xfile
mountPath: "/var/secrets/"
readOnly: true
- name: yfile
mountPath: "/var/secrets/"
readOnly: true
volumes:
- name: xfile
secret:
secretName: my-secret-one
- name: yfile
secret:
secretName: my-secret-two
如何将来自多个机密的文件存储在同一目录中?
已编辑: @Jonas 回答正确!
但是,如果您像我在问题中那样使用卷,那么简短的回答是您不能那样做,您必须指定mountPath
到一个未使用的目录- 卷必须是唯一的,不能安装到公共目录。
解法: 我最后所做的是,我没有将文件保存在单独的秘密中,而是创建了一个包含多个文件的秘密。
预计数量
您可以使用一个 projected volume 在同一目录中拥有两个秘密
例子
apiVersion: v1
kind: Pod
metadata:
labels:
run: alpine-secret
name: alpine-secret
spec:
containers:
- command:
- sleep
- "3600"
image: alpine
name: alpine-secret
volumeMounts:
- name: xyfiles
mountPath: "/var/secrets/"
readOnly: true
volumes:
- name: xyfiles
projected:
sources:
- secret:
name: my-secret-one
- secret:
name: my-secret-two
(编辑:没关系 - 我只是注意到@Jonas 早些时候给出了相同的答案。+1 来自我)
从 Kubernetes v1.11+ 开始,可以使用 projected
个卷:
A projected volume maps several existing volume sources into the same directory.
Currently, the following types of volume sources can be projected:
- secret
- downwardAPI
- configMap
- serviceAccountToken
This is an example“...如何使用投影卷将多个现有卷源安装到同一目录”。
可能是子路径 (using subPath) 会有所帮助。
示例:
volumeMounts:
- name: app-redis-vol
mountPath: /app/config/redis.yaml
subPath: redis.yaml
- name: app-config-vol
mountPath: /app/config/app.yaml
subPath: app.yaml
volumes:
- name: app-redis-vol
configMap:
name: config-map-redis
items:
- key: yourKey
path: redis.yaml
- name: app-config-vol
configMap:
name: config-map-app
items:
- key: yourKey
path: app.yaml
此处您的名为 config-map-redis
的 configMap 从文件 redis.yaml
创建,作为文件 redis.yaml
安装在 app/config/
中。
还将 configMap config-map-app
安装在 app/config/
中作为 app.yaml
这里有一篇很好的文章:Injecting multiple Kubernetes volumes to the same directory