容器中的Kubernetes环境变量

3

我希望能够从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并传递此参数。谢谢!
2个回答

3

在容器下面应该添加env部分,像这样:

  containers:
  - name: master
    env:
    - name: slave_host
      value: slavevalue

2
为了详细说明@Kun Li的答案,除了直接在部署清单中添加环境变量,您还可以创建一个ConfigMap(或Secret,取决于存储的数据),并在您的清单中引用它们。与手动将环境变量添加到几个不同应用程序相比,这是共享相同环境变量的好方法。
请注意,ConfigMap可以由一个或多个key:value对组成,并且不仅限于存储环境变量,这只是其中一种用例。如我之前提到的,如果数据被归类为敏感信息,请考虑使用Secret
以下是ConfigMap清单的示例,本例中用于存储环境变量:
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中配置的所有环境变量,请在您的清单中使用以下内容:

  containers:
    envFrom:
      - configMapRef:
          name: my-env-var

如果您想从包含多个变量的ConfigMap中选择一个特定的环境变量:
  containers:
    env:
      - name: slave_host
        valueFrom:
          configMapKeyRef:
            name: my-env-var
            key: slave_host

请参阅此页面,以获取在不同情况下使用ConfigMap的更多示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接