为什么 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。
考虑这个 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。