宿主机操作系统层面设置
-
设置ulimit开启core dump转存
# ulimit -c
unlimited
设置对core文件大小的限制,如:
# ulimit -c unlimited 不限制
# ulimit -c 1024 限制大小为1024
# ulimit -c 0 限制大小为0,即不输出core dump文件
-
设置core dump文件的输出路径
# 其中%p为pid
echo "/tmp/cores/core.%p" > /proc/sys/kernel/core_pattern
在kubernetes中测试生成core dump
-
使用
hostPath
的pod测试模板
apiVersion: v1
kind: Pod
metadata:
name: core-volume
spec:
volumes:
- name: core-path
hostPath:
path: /home/core-dump
containers:
- name: ubuntu
image: ubuntu
command: ["/bin/sleep","3600"]
volumeMounts:
- mountPath: /tmp/cores
name: core-path
上述配置在容器中生成的core dump路径为/tmp/cores/core.XXX
对应hostPath在宿主机上的路径为/home/core-dump/core.XXX
-
使用挂载pv的deployment测试模板
先手动定义一个测试pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
volume.beta.kubernetes.io/storage-provisioner: com.tencent.cloud.csi.cbs
volume.kubernetes.io/storage-provisioner: com.tencent.cloud.csi.cbs
name: cbs01
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: cbs
volumeMode: Filesystem
volumeName: pvc-2aa85d4a-e28f-40e8-821a-a8161cb689de
再定义一个deployment挂载这个pvc
apiVersion: apps/v1
kind: Deployment
metadata:
name: core
namespace: default
spec:
template:
metadata:
labels:
k8s-app: core
qcloud-app: core
spec:
containers:
- command: ["/bin/sleep","3600"]
image: ubuntu
imagePullPolicy: Always
name: core
volumeMounts:
- mountPath: /tmp/cores
name: vol
restartPolicy: Always
volumes:
- name: vol
persistentVolumeClaim:
claimName: cbs01
-
测试生成core dump
# 进入pod
kubectl exec -it core-volume -- bash
# 执行kill
kill -s SIGSEGV $$
-
对于使用hostPath绑目录的,在宿主机上/home/core-dump/可以找到core dump文件
-
对于使用pv的方法,利用其他容器再次挂载也可以看到core dump在pv里
同理只要CSI支持能挂载到目录的存储都是一样可以用的,cfs,对象存储都可以。
参考:www.cnblogs.com/zhangmingch…