【问题标题】:K8s env variable using volume mountPath value使用卷 mountPath 值的 K8s 环境变量
【发布时间】:2021-02-18 10:01:04
【问题描述】:

我有一个 K8s 部署 yaml 定义,其中声明了几个 env 变量。我想声明一个环境变量,其值要从特定卷的挂载路径中引用。

例如,我希望它如下 yaml 所示,从第 42 行到第 45 行。 (注意:我仅将其用作示例。我知道这是不正确的)。是否有可能实现这一目标以及如何实现?

 37     spec:
 38       containers:
 39         - name: appplugin
 40           image: {{APP_VERSION}}
 41           env:
 42           - name: INFRA_ACCESS_IP
 43             valueFrom:
 44               fieldRef:
 45                 fieldPath: status.hostIP
 42           - name: LOG_BASE_DIR
 43             valueFrom:
 44               fieldRef:
 45                 fieldPath: volumeMounts.app-logs.mountPath.subPath
 46           envFrom:
 47           - configMapRef:
 48               name: infra-config
 49           - configMapRef:
 50               name: core-config
 51           ports:
 52           - containerPort: 9095
 53           volumeMounts:
 54           - name: app-certs
 55             mountPath: /etc/secrets/certs
 56             readOnly: true
 57           - name: app-logs
 58             mountPath: /var/log/toHost/
 59             subPath: app-logs

【问题讨论】:

    标签: kubernetes kubectl


    【解决方案1】:

    不直接。如果您查看EnvVarSource 对象的API 文档,您会发现downward API 支持的字段数量有限;通常只有元数据字段、服务帐户名称、动态 IP 和节点信息以及资源限制。

    在您显示的文件的上下文中,文件路径是固定的,您不需要动态查找。由于每个容器都有一个独立的文件系统,因此您不太可能在不同的部署中实际更改此路径,并且只需直接指定该路径即可:

    env:
      - name: LOG_BASE_DIR
        value: app-logs
    volumeMounts:
      - name: app-logs
        mountPath: /var/log/toHost/
        subPath: app-logs
    

    如果您使用 Helm 之类的模板工具,您可以在部署时配置此值。 Helm 具有在部署时可配置的“值”的概念,并且可以在安装时注入这些值(或进行更复杂的操作)。如果您有理由,可以使用它来设置容器内的路径:

    image: {{ .Values.appVersion }}
    env:
      - name: LOG_BASE_DIR
        value: {{ .Values.logBaseDir | default "app-logs" }}
    volumeMounts:
      - name: app-logs
        mountPath: /var/log/toHost/
        subPath: {{ .Values.logBaseDir | default "app-logs" }}
    

    (特别是对于日志,最好完全跳过此配置并将日志发送到您的进程的标准输出。然后kubectl logs 可以稍后检索它们。您也可以deploy a log collector as a DaemonSet 将这些日志捕获到其他系统.)

    【讨论】:

    • 环境变量 LOG_BASE_DIR 会自动选择 subPath 属性的值吗?如果没有,我们如何添加它?
    • 一个不是自动从另一个设置的。在 Helm 方法中,您会将两者设置为相同的计算值。
    • 我尝试按照您的建议使用“app-logs”,但没有成功。猜猜这个功能在特定的 K8s 中可用,我使用的是 v1.16.15 版本。我还看到提到“volumeMounts.subPath”属性。
    猜你喜欢
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 2019-06-18
    • 2022-01-11
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    相关资源
    最近更新 更多