为什么 Kubernetes Pod 容器中的命令行回显不显示在日志中

Why doesn't command line echo in Kubernetes Pod container show in logs

考虑这个 Kubernetes Pod:

# pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: testing123
spec:
  containers:
  - name: testing123
    image: busybox:latest
    command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600']

如果我部署此 Pod 并且 运行 logs 我会看到:

$ kubectl apply -f pod.yaml
$ k logs testing123           
Hello, Kubernetes!

到目前为止,还不错。我现在“登录”到 Pod 和 运行 回显命令:

$ k exec -ti testing123 -- ash
/ # echo "Run after logging in."
Run after logging in.
/ # exit
$ k logs testing123           
Hello, Kubernetes!
$

为什么 Run after logging in. 没有出现在 Pod 的日志输出中?

容器日志是从它们的命令行/入口点 stdout 和 stderr 捕获的。

当您进入一个容器 (kubectl exec) 时,您会生成一个新进程,它有自己的 stdin/stdout/stderr。