K8s中对pod-lifecycle使用bash且重定向执行结果到容器的标准输出

来自三线的随记
Admin讨论 | 贡献2024年3月12日 (二) 11:55的版本 (创建页面,内容为“在某些场景下可能需要对pod <code>postStart</code>或者<code>preStop</code>执行bash脚本操作 然后为了查看日志会想将命令执行结果重定向到容器标准输出以便直接使用 kubectl logs 进行查看 这时候可以用以下方法配置( <code>exec 1>/proc/1/fd/1 2>/proc/2/fd/2</code> ) lifecycle: postStart: exec: command: - bash - -c…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

在某些场景下可能需要对pod postStart或者preStop执行bash脚本操作

然后为了查看日志会想将命令执行结果重定向到容器标准输出以便直接使用 kubectl logs 进行查看

这时候可以用以下方法配置( exec 1>/proc/1/fd/1 2>/proc/2/fd/2 )

        lifecycle:
          postStart:
            exec:
              command:
              - bash
              - -c
              - |-
                exec 1>/proc/1/fd/1 2>/proc/2/fd/2
                set -ex
                env > /etc/environment
                echo -e 'BASH_ENV=/etc/environment\n0 3 * * * /usr/local/bin/python /app/dcs_clear.py > /proc/1/fd/1 2>/proc/1/fd/2' | crontab -
                rm -rvf /etc/periodic/*/*


⚠️ 需要特别注意的是此处bash -c不能直接合并为bash -cxe或者bash -cx

否则会遇到 PostStartHookError 等hook错误