首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >容器的Kubernetes env变量

容器的Kubernetes env变量
EN

Stack Overflow用户
提问于 2018-08-06 06:51:44
回答 2查看 2.3K关注 0票数 3

我想将Kubernetes yaml文件中的一些值传递给容器。这些值将使用System.getenv("x_slave_host")在我的Java应用程序中读取。我有这个dockerfile:

代码语言:javascript
复制
FROM jetty:9.4
...
ARG slave_host
ENV x_slave_host $slave_host
...
$JETTY_HOME/start.jar -Djetty.port=9090

kubernetes yaml文件包含以下部分,我在其中添加了env部分:

代码语言:javascript
复制
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工作。这是一个代码片段:

代码语言:javascript
复制
  master:
    image: master
    build:
      context: ./master
      args:
        - slave_host=slavevalue
    ports:
      - "9090:9090"

所以现在我试着用Kubernetes做同样的事情。但是,我收到以下错误(将其部署到Azure上):

代码语言:javascript
复制
    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合成文件重写为kubernetes并传递此参数。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-06 09:48:52

containers下需要添加env部分,如下所示:

代码语言:javascript
复制
  containers:
  - name: master
    env:
    - name: slave_host
      value: slavevalue
票数 3
EN

Stack Overflow用户

发布于 2018-08-06 16:24:08

为了详细说明@Kun Li的答案,除了直接在部署清单中添加环境变量之外,您还可以创建一个ConfigMap (或Secret,取决于所存储的数据)并在清单中引用这些变量。与手动将环境变量添加到几个不同的应用程序相比,这是在应用程序之间共享相同环境变量的好方法。

请注意,一个ConfigMap可以由一个或多个key: value对组成,它并不限于存储环境变量,这只是其中一个用例。正如我之前提到的,如果数据被归类为敏感数据,请考虑使用Secret

ConfigMap清单示例,在本例中用于存储环境变量:

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-env-var
data:
  slave_host: slavevalue

使用kubectl create创建包含一个key=value对的ConfigMap

kubectl create configmap my-env --from-literal=slave_host=slavevalue

要获得在ConfigMap中配置的所有环境变量,请在清单中使用以下内容:

代码语言:javascript
复制
  containers:
    envFrom:
      - configMapRef:
          name: my-env-var

或者,如果您想从包含多个变量的ConfigMap中选择一个特定的环境变量:

代码语言:javascript
复制
  containers:
    env:
      - name: slave_host
        valueFrom:
          configMapKeyRef:
            name: my-env-var
            key: slave_host

有关在不同情况下使用ConfigMap的更多示例,请参阅此page

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51698817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档