17.4.1 构建可管理的容器镜像
FROM scratch
可以将需要的工具也打包到镜像中.
17.4.2 合理地给镜像打标签, 正确地使用 ImagePullPolicy
不要使用 latest.
- 如果你使用的是可更改的标签(总是向相同的标签推送更改),那么你需要在 pod spec 中将 imagePullPolicy 设置为 Always 。
17.4.3 使用多维度而不是单维度的标签
给所有的资源都打上标 签,而不仅仅是 pod
标签可以包含如下的内容

17.4.4 通过注解描述每个资源
资源至少应该包括一个描述资源的注解和 一个描述 资源负责人的注解。
在微服务框架中, pod 应该包含 一 个注解来描述该 pod 依赖的 其他服务的名称。这样就很容易展现 pod 之间的依赖关系了。其他的注解可以包括构建和版本信息,以及其他工具或者图形界面会使用到的元信息(图标名称等)。
17.4.5 给进程终止提供更多的信息
把所有必需的调试信息都写到日志文件中 。
或者写入 /dev/termination-log, kubelet 可以读取该文件, 并且可以用 kubectl describe pod 命令查看.
- 可以用 pod spec.terminationMessagePath 字段更改路径
使用例子:

查看退出原因:

如果容器没有向任何文件写入消息,可以将 terminationMessagePolicy 字段的值设直为 FallbackToLogsOnError。 在这种情况下,容器的最后几行 日志会被当作终止消息(当然仅当容器没有成功终止的情况 下 )。
17.4.6 处理应用日志
应用应该将日志写到标准输出终端而不是文件中。这样可以很容易地通过 kubectl logs 命令来查看应用日志 。
查看之前 pod 的日志需要使用 --previous 选项.
将日志或者其他文件复制到容器或者从容器中复制出来
kubectl cp
$ kubectl cp foo-pod:/var/log/foo.log foo.log$ kubectl cp localfile foo-pod:/etc/remotefile# 可以使用 -c 指定容器
使用集中式日志记录
- ELK
- EFK

处理多行日志输出
- 可以输出 json 格式
