4.2.4 环境变量

非容器化的传统管理方式中,复杂应用程序的配置信息多数由配置文件进行指定,用户可借助于简单的文本编辑器完成配置管理。然而,对于容器隔离出的环境中的应用程序,用户就不得不穿透容器边界在容器内进行配置编辑并进行重载,这种方式复杂且低效。于是,有环境变量在容器启动时传递配置信息就成为一种备受青睐的方式。

这种方式依赖于应用程序支持通过环境变量进行配置的能力,否则,用户在制作 Docker 镜像时需要通过 entrypoint 脚本完成环境变量到程序配置文件的同步。

向 Pod 对象中的容器环境变量传递数据的方法有两种:env 和 envFrom,这里重点介绍第一种方式,第二种方式将在介绍ConfigMap 和 Sescrt 资源时进行说明。

通过环境变量配置容器化应用时,需要在容器配置段中嵌套使用 env 字段,他的值是一个由环境变量构成的列表。环境变量通常由 name 和 value 字段构成。

  • name <string>:环境变量的名称,必选字段。
  • value <string>:传递给环境变量的值,通过$(VAR_NAME)引用,逃逸格式为“$$(VAR_NAME)”,默认值为空。

下面配置清单中定义的Pod对象为其容器 filebeat 传递了两个环境变量,REDIS_HOST 定义了 filebeat 收集的日志信息要发往的 Redis 主机地址,LOG_LEVEL 则定义了 filebeat 的日志级别:

apiVersion: v1
kind: Pod
metadata:
    name: pod-with-env
spec:
    containers:
    - name: filebeat
      image: ikubernetes/filebeat:5.6.5-alpine
      env:
      - name: REDIS_HOST
        value: db.ilinux.io:6379
      - name: LOG_LEVEL
        value: info

这些环境变量可直接注入容器的 shell 环境中,无论它们是否真正被用到,使用 printenv 一类的命令都能在容器中获取到所有环境变量的列表。

results matching ""

    No results matching ""