我正在尝试在kubernetes中设置可配置的主机路径,但是我遇到了问题。我创建了一个配置图,该图具有路径,然后尝试用该配置图值替换占位符。这是我的配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: php
namespace: app
spec:
template:
spec:
containers:
- name: php
env:
- name: PHP_FOLDER
valueFrom:
configMapKeyRef:
name: local-paths
key: CODE_PATH
volumes:
- name: src-code
hostPath:
path: PHP_FOLDER
type: Directory
我也尝试过
apiVersion: apps/v1
kind: Deployment
metadata:
name: php
namespace: app
spec:
template:
spec:
containers:
- name: php
env:
- name: PHP_FOLDER
valueFrom:
configMapKeyRef:
name: local-paths
key: CODE_PATH
volumes:
- name: src-code
hostPath:
path: $(PHP_FOLDER)
type: Directory
我遇到错误:Error response from daemon:
create $(PHP_FOLDER): "$(PHP_FOLDER)" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path
或MountVolume.SetUp failed for volume "src-code" : hostPath type check failed: PHP_FOLDER is not a directory
答案 0 :(得分:1)
您只是不能直接在yaml文件中使用环境值。您所做的实际上实际上更糟。 ConfigMap或密钥在运行时中创建,这意味着它们将在容器开始运行之前不可用。但是,yaml解析是在pod或部署甚至创建之前进行的。我认为您应该更多地实践时间表,直到在生产甚至测试中使用kubernetes为止。
在这种情况下,最佳实践是在部署和自动化之前使用bash脚本更改yaml文件。
答案 1 :(得分:0)
您不能将变量用于路径定义。
答案 2 :(得分:0)
正如其他用户正确指出的那样,您不能在纯yaml / kubectl中使用env变量。我建议您在部署命令之前添加精益层并使用例如envsubst或ansible