我想将一些值从Kubernetes yaml文件传递到容器。这些值将在我的Java应用程序中使用System.getenv("x_slave_host")
读取。
我有这个dockerfile:
FROM jetty:9.4
...
ARG slave_host
ENV x_slave_host $slave_host
...
$JETTY_HOME/start.jar -Djetty.port=9090
kubernetes yaml文件包含我在env
部分中添加的部分:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: master
spec:
template:
metadata:
labels:
app: master
spec:
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: master
image: xregistry.azurecr.io/Y:latest
ports:
- containerPort: 9090
volumeMounts:
- name: shared-data
mountPath: ~/.X/experiment
- env:
- name: slave_host
value: slavevalue
- name: jupyter
image: xregistry.azurecr.io/X:latest
ports:
- containerPort: 8000
- containerPort: 8888
volumeMounts:
- name: shared-data
mountPath: /var/folder/experiment
imagePullSecrets:
- name: acr-auth
在本地,当我使用docker compose做同样的事情时,它使用args工作。这是一个片段:
master:
image: master
build:
context: ./master
args:
- slave_host=slavevalue
ports:
- "9090:9090"
所以现在我尝试在Kubernetes中做同样的事情。但是,我收到以下错误(在Azure上部署):
error: error validating "D:\\a\\r1\\a\\_X\\deployment\\kub-deploy.yaml": error validating data: field spec.template.spec.containers[1].name for v1.Container is required; if you choose to ignore these errors, turn validation off with --validate=false
换句话说,如何将我的docker compose文件重写为kubernetes并传递此参数。
谢谢!
答案 0 :(得分:2)
env部分应添加到容器下方,如下所示:
containers:
- name: master
env:
- name: slave_host
value: slavevalue
答案 1 :(得分:2)
除了添加环境变量(例如,您可以直接在Deployment清单中创建ConfigMap
(或Secret
,具体取决于要存储的数据)并在清单中引用它们。与手动将环境变量添加到几个不同的应用程序相比,这是在应用程序之间共享相同的环境变量的好方法。
请注意,ConfigMap
可以由一对或多对key: value
组成,并且不仅限于存储环境变量,它只是用例之一。正如我之前提到的,如果数据被归类为敏感数据,请考虑使用Secret
。
ConfigMap
清单的示例,在这种情况下,用于存储环境变量:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-env-var
data:
slave_host: slavevalue
要创建一个ConfigMap
,并使用key=value
持有一对kubectl create
:
kubectl create configmap my-env --from-literal=slave_host=slavevalue
要掌握ConfigMap
中配置的所有环境变量,请在清单中使用以下内容:
containers:
envFrom:
- configMapRef:
name: my-env-var
或者,如果您想从ConfigMap
中选择一个包含多个变量的特定环境变量,则:
containers:
env:
- name: slave_host
valueFrom:
configMapKeyRef:
name: my-env-var
key: slave_host
有关在不同情况下使用ConfigMap
的更多示例,请参见此@Kun Li。