K8s中对pod-lifecycle使用bash且重定向执行结果到容器的标准输出
来自三线的随记
在某些场景下可能需要对pod postStart
或者preStop
执行bash脚本操作
然后为了查看日志会想将命令执行结果重定向到容器标准输出以便直接使用 kubectl logs 进行查看
这时候可以用以下方法配置( exec 1>/proc/1/fd/1 2>/proc/2/fd/2
)
lifecycle: preStop: exec: command: - /bin/bash - '-c' - | exec 1>/proc/1/fd/1 2>/proc/1/fd/2 echo [ This POD is being terminated!!!! ] sleep 3 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错误
但是在 containers[*].command 中可以使用 bash -cex