【问题标题】:systemd service inside kubernetes is unable to get the envKubernetes 内的 systemd 服务无法获取环境
【发布时间】:2019-09-06 20:21:29
【问题描述】:

我设置了 Centos systemd 服务,但无法读取 kubernetes 环境变量。如果我在 pod 内运行 bash,我可以看到 env(例如 _UI_SERVICE_PORT_TCP_443=443、KUBERNETES_PORT_443_TCP_ADDR=10.202.0.1 或 container=docker),但当我在容器内将 bash 脚本作为服务执行时却看不到。

我也尝试过 Type=forking 和 ExecStart=/bin/bash 相信执行的 bash 会继承 kubernetes env 但它是干净的。

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/ LANG=en_US.UTF-8 SHLVL=1
_=/bin/printenv

[Unit] Description= script after boot on k8s After=e.service

[Service] Type=forking ExecStart=@BINDIR@/virtual_service.py

【问题讨论】:

  • 您是否在作为 pod 一部分的 docker 容器内运行 systemd?
  • 是的。它是官方的 centos systemd 容器。 systemd 似乎没问题,因为我在这个容器中运行其他服务没有问题。
  • 我使用了这个图像:hub.docker.com/r/centos/systemd,在 dockerfile 中进行了这个更改:ENTRYPOINT ["/usr/sbin/init"] CMD ["/usr/sbin/init"]

标签: kubernetes centos systemd


【解决方案1】:

您的问题似乎与services 中环境变量的处理有关。据我了解,环境变量在作为服务运行时会被剥离,因此当您的进程作为服务运行时,您将无法访问 bash 所看到的内容。

This answer 提供了很好的描述和一些解决方法。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    我找到了答案。 /proc/1/environ 包含环境,当我作为服务运行时,我设法读取了环境。 希望这对将来的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 2015-08-23
      • 2015-11-17
      相关资源
      最近更新 更多