k8s 可以通过 terminationMessagePath 来设置容器退出的消息来源。即当容器退出的时候,Kubernetes 从容器的 terminationMessagePath 字段中指定的终止消息文件中检索终止消息,默认值为 /dev/termination-log。通过定制这个字段,可以告诉 Kubernetes 使用自定义的文件。Kubernetes 在容器成功和失败时,使用指定文件中的内容来填充容器的状态消息,最大为4K。

在下例中,容器将终止消息写入 /tmp/termination-log 给 Kubernetes 来接收:
apiVersion: v1
kind: Pod
metadata:
  name: msg-path-demo
spec:
  containers:
  - name: msg-path-demo-container
    image: debian
    terminationMessagePath: "/tmp/termination-log"
此外,用户可以设置容器的 terminationMessagePolicy 字段,以便进一步自定义。 此字段默认为 “File“,这意味着仅从终止消息文件中检索终止消息。还可以将 terminationMessagePolicy 设置为 “FallbackToLogsOnError“,即告诉 Kubernetes,在容器因错误退出时,如果终止消息文件为空,则使用容器日志输出的最后一块作为终止消息。 日志输出限制为 2048 字节或 80 行,以较小者为准。
apiVersion: v1
kind: Pod
metadata:
  name: msg-path-demo
spec:
  containers:
  - name: msg-path-demo-container
    image: debian
    terminationMessagePath: "/tmp/termination-log"
    terminationMessagePolicy: "FallbackToLogsOnError"

Pod内所有容器的终止信息大小之和最大为12K,当总和超过12K时,Kubernetes的状态管理器会对其加以限制。比如Pod内由4个InitContainer和8个用户Container,则状态管理器会限制每个容器的终止信息最大为1K,既截取每个Container终止信息的前1K。