全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

容器实例coredump持久化

最近更新时间:2024-04-23 16:44:05

容器有时会在发生异常后无法正常工作,业务日志中若无足够的信息来定位问题原因,则需要结合 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
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: type
            operator: In
            values:
            - virtual-kubelet
  tolerations:
  - key: rbkci-virtual-kubelet.io/provider
    value: kingsoftcloud
    effect: NoSchedule

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

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈