使用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}