容器实例coredump持久化

最近更新时间:2023-02-02 20:30:03

查看PDF

容器有时会在发生异常后无法正常工作,业务日志中若无足够的信息来定位问题原因,则需要结合 coredump 来进一步分析,本文将介绍如何使容器实例产生 coredump 并保存到外部存储。

功能概述

容器实例默认关闭coredump,避免磁盘占用过多而导致业务不可用。您可以通过Annotation开启coredump:

Annotation Key Annotation Value示例 是否必填 描述
k8s.ksyun.com/kci-core-pattern “/tmp/cores/core.%h.%e.%p.%t” 设置容器实例的Core dump文件保存目录

主要参数信息如下:

  • %h:主机名(在 Pod 内主机名即 Pod 的名称),推荐。
  • %e:程序文件名,推荐。
  • %p:进程 ID,可选。
  • %t:coredump 的时间,可选。

最终生成的 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中。
image20230202200815112.png

更新及关闭coredump

支持通过kubectl edit pod <pod_name>的方式对运行中的pod进行coredump文件保存路径的更新,以及关闭coredump:

  • 更新k8s.ksyun.com/kci-core-pattern注解的值,修改coredump文件保存路径
  • 删除k8s.ksyun.com/kci-core-pattern注解,关闭coredump

文档内容是否对您有帮助?

根本没帮助
文档较差
文档一般
文档不错
文档很好

在文档使用中是否遇到以下问题

内容不全,不深入
内容更新不及时
描述不清晰,比较混乱
系统或功能太复杂,缺乏足够的引导
内容冗长

更多建议

0/200

评价建议不能为空

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

问题反馈