使用coredump分析实例程序异常
更新时间:2024-09-25
功能概述
coredump是指在程序运行过程中发生异常终止或崩溃时,操作系统将程序的内存内容转储到一个特殊的文件(即coredump文件)中,以便于后续的调试和分析。BCI容器实例支持例开启coredump运维任务,以便在容器异常终止时可以查看分析coredump生成的文件,从而定位问题原因,修复程序异常。 BCI支持将coredump文件存入CFS中或者对象存储BOS中。
使用流程
BCI默认关闭coredump,避免磁盘占用过多而导致业务不可用。您可以根据需要选择以下方式开启coredump运维任务。
方式一:支持指定Pod Annotation创建Pod开启coredump运维任务 此种形式开启的coredump运维任务在容器运行异常终止或者退出时,触发coredump生成的core文件,该core文件保存在容器/tmp/cores目录中,该目录实际由同地域CFS挂载。
方式二:支持手动开启coredump运维任务 手动通过OpenAPI开启coredump后,BCI将生成一个coredump运维任务,在容器运行异常终止或者退出时,触发coredump生成的core文件将自动保存到对象存储BOS中。
指定Pod Annotation创建Pod开启coredump运维任务
操作步骤如下:
- 创建BCI 容器实例, 需要注意如下两点:
- 指定并添加如下Pod CorePattern Annotation。需要保证完全一致 bci.virtual-kubelet.io/core-pattern: /tmp/cores
- Pod的远程存储需挂载在容器内/tmp/cores路径,示例如下。

示例example如下:
                Plain Text
                
            
            1apiVersion: v1
2kind: PersistentVolume
3metadata:
4  name: coredump-pv-cfs
5  namespace: default
6spec:
7  accessModes:
8  - ReadWriteMany
9  capacity:
10    storage: 1Gi
11  mountOptions:
12  - nfsvers=4.2
13  nfs:
14    path: /  #这里指定远程存储cfs内部路径
15    server: cfs-xxxxxxxxx.cfs.gz.baidubce.com #这里指定远程存储cfs地址
16  persistentVolumeReclaimPolicy: Retain
17  volumeMode: Filesystem
18---
19apiVersion: v1
20kind: PersistentVolumeClaim
21metadata:
22  name: coredump-pvc-cfs
23  namespace: default
24spec:
25  accessModes:
26  - ReadWriteMany
27  resources:
28    requests:
29      storage: 1Gi
30  volumeMode: Filesystem
31---
32apiVersion: apps/v1
33kind: Deployment
34metadata:
35  name: core-dump-deployment
36  namespace: default
37spec:
38  progressDeadlineSeconds: 600
39  replicas: 2
40  revisionHistoryLimit: 10
41  selector:
42    matchLabels:
43      app: core-dump-deployment
44  strategy:
45    rollingUpdate:
46      maxSurge: 25%
47      maxUnavailable: 25%
48    type: RollingUpdate
49  template:
50    metadata:
51      annotations:
52        bci.virtual-kubelet.io/core-pattern: /tmp/cores ## 必须指定这个annotation, 必须完全一致不能更改。
53        myannotation: "myannotation"
54      labels:
55        app: core-dump-deployment
56        mylabel: "mylabel"
57    spec:
58      containers:
59      - image: hub.baidubce.com/cce/nginx-alpine-go
60        imagePullPolicy: IfNotPresent
61        name: c01
62        workingDir: /work
63        ports:
64        - containerPort: 8080
65          protocol: TCP
66        resources:
67          limits:
68            cpu: 0.25
69            memory: 512Mi
70          requests:
71            cpu: 0.25
72            memory: 512Mi
73        terminationMessagePath: /dev/termination-log
74        terminationMessagePolicy: File
75        volumeMounts:
76        - mountPath: /tmp/cores  ##这里需要将远程存储挂载到容器内/tmp/cores路径,该路径不支持自定义
77          name: coredump
78      enableServiceLinks: true
79      nodeName: bci-virtual-kubelet-0
80      nodeSelector:
81        type: virtual-kubelet
82      preemptionPolicy: PreemptLowerPriority
83      priority: 0
84      dnsPolicy: ClusterFirst
85      enableServiceLinks: false
86      restartPolicy: Always
87      schedulerName: default-scheduler
88      securityContext: {}
89      serviceAccount: default
90      serviceAccountName: default
91      terminationGracePeriodSeconds: 30
92      tolerations:
93      - effect: NoSchedule
94        key: virtual-kubelet.io/provider
95        operator: Equal
96        value: baidu
97      - effect: NoExecute
98        key: node.kubernetes.io/not-ready
99        operator: Exists
100        tolerationSeconds: 300
101      - effect: NoExecute
102        key: node.kubernetes.io/unreachable
103        operator: Exists
104        tolerationSeconds: 300
105      volumes:
106      - name: coredump
107        persistentVolumeClaim:
108          claimName: coredump-pvc-cfs- 触发coredump。连接BCI实例,在容器内执行sleep 100命令后按Ctrl+\键,可触发coredump,生成的core文件将自动保存到CFS中。
- 查看并下载core文件。可登陆CFS相关路径获取core文件
手动开启coredump运维任务
当前BCI仅支持通过OpenAPI开启运维任务。步骤如下
- 确保BCI实例成功创建并处于Running状态,获取到podID
- 为BCI实例开启coredump运维任务。调用OpenAPI创建coredump运维任务,接口需指定目标BCI实例,然后将OpsType设为coredump,OpsValue设为enable,设置保存coredump文件的BOS bucket地址,即可开启coredump运维任务。一个注意事项是指定BCI实例时,需确保目标BCI实例在创建时没有设置CorePattern Annotation。
                Plain Text
                
            
            1 POST http://{{endpoint_bci}}/v2/opstask 
2 
3 示例request body:
4 {
5    "podId":"pod-xxxx",
6    "opsType":"coredump",
7    "opsValue":"enable",
8    "bucket":"xxxbucket"
9} - 触发coredump。连接BCI实例,在容器内执行sleep 100命令后按Ctrl+\键,可触发coredump,生成的core文件将自动保存到BOS中。
- 下载Core文件。调用OpenAPI查询运维任务接口,指定BCI实例podId和运维任务类型OpsType为coredump查询参数,查看运维任务的结果,从返回信息的result中,可以获取core文件是否已保存到BOS中,可到BOS相关bucket下载core文件。
                Plain Text
                
            
            1GET http://{{endpoint_bci}}/v2/opsrecord?podId=xxx&opsType=coredump
2
3示例reponse
4{
5    "result": [
6        {
7            "opsType": "coredump",
8            "opsStatus": "success",
9            "storageType": "bos",
10            "~~~~storageContent": "please goto bos page to download file core.p-ysappvy3.sh.8.1713786425 .",
11            "createTime": 1713786437000
12        }
13    ]
14}