容器有时会在发生异常后无法正常工作,业务日志中若无足够的信息来定位问题原因,则需要结合 coredump 来进一步分析,本文将介绍如何使容器实例产生 coredump 并保存到外部存储。
容器实例默认关闭coredump,避免磁盘占用过多而导致业务不可用。您可以通过Annotation开启coredump:
Annotation Key | Annotation Value示例 | 是否必填 | 描述 |
---|---|---|---|
k8s.ksyun.com/kci-core-pattern | “/tmp/cores/core.%h.%e.%p.%t” | 否 | 设置容器实例的Core dump文件保存目录 |
主要参数信息如下:
最终生成的 core 文件完整路径如下所示:
/tmp/cores/core.nginx-7855fc5b44-p2rzt.bash.36.1602488967
coredump文件一般用于离线分析问题,因此设置coredump文件的保存路径时,一般采用外挂存储,而不是保存在容器本地路径,避免容器退出而丢失coredump文件。容器实例支持自定义设置coredump文件保存路径,设置后将自动开启coredump。
以使用KFS作为外挂存储为例,操作步骤如下:
1.按如下配置示例,创建容器实例
apiVersion: v1
kind: Pod
metadata:
name: nfs-pod
labels:
app: nginx
annotations:
k8s.ksyun.com/kci-core-pattern: "/tmp/cores/core.%h.%e.%p.%t" # 设置coredump文件保存路径
spec:
hostname: nfs-test
volumes:
- nfs: # 替换成您真实的server地址和path路径
server: 10.0.*.**
path: /cfs-eHhkjGSJHK
name: test
containers:
- name: nginx
image: nginx:latest
volumeMounts:
- name: test
mountPath: /tmp/cores
nodeName: rbkci-virtual-kubelet
2.触发coredump
连接容器实例,在在容器内执行sleep 100
命令后按Ctrl
+\
键,触发coredump,生成的coredump文件将自动保存到KFS中。
支持通过kubectl edit pod <pod_name>
的方式对运行中的pod进行coredump文件保存路径的更新,以及关闭coredump:
k8s.ksyun.com/kci-core-pattern
注解的值,修改coredump文件保存路径k8s.ksyun.com/kci-core-pattern
注解,关闭coredump文档内容是否对您有帮助?
评价建议不能为空
非常感谢您的反馈,我们会继续努力做到更好!