操作场景
容器有时会在发生异常后无法正常工作,业务日志中若无足够的信息来定位问题原因,则需要结合 coredump 来进一步分析,本文将介绍如何使容器产生 coredump 并保存。
注意:
本文仅适用于容器服务 TKE 集群。
前提条件
操作步骤
开启 coredump
1. 在节点上执行以下命令,为节点设置 core 文件的存放路径格式:
# 在节点上执行echo "/tmp/cores/core.%h.%e.%p.%t" > /proc/sys/kernel/core_pattern
主要参数信息如下:
%h:主机名(在 Pod 内主机名即 Pod 的名称),推荐。
%e:程序文件名,推荐。
%p:进程 ID,可选。
%t:coredump 的时间,可选。
最终生成的 core 文件完整路径如下所示:
/tmp/cores/core.nginx-7855fc5b44-p2rzt.bash.36.1602488967
2. 节点完成配置后,无需更改容器原有配置,将以继承的方式自动生效。如需在多个节点上批量执行,则请对应实际情况进行操作:
对于存量节点,请参见 使用 Ansible 批量操作 TKE 节点。
对于增量节点,请参见 设置节点的启动脚本。
启用 COS 扩展组件
创建存储桶
创建 Secret
可通过以下3种方式创建可以访问对象存储的 Secret,请按需选择:
若通过控制台使用对象存储,可参见 创建可以访问对象存储的 Secret。
若通过 YAML 文件使用对象存储,可参见 创建可以访问对象存储的 Secret。
若使用 kubectl 命令行工具创建 Secret,可参考以下代码片段:
kubectl create secret generic cos-secret -n kube-system --from-literal=SecretId=AKI*****************lV --from-literal=SecretKey=paQ9***************sZF
注意:
注意替换 SecretId、SecretKey 以及命名空间。
创建 PV 和 PVC
使用 COS 插件需要手动创建 PV 和创建 PVC,并完成绑定。
创建 PV
1. 在目标集群详情页面,选择左侧菜单栏中的存储 > PersistentVolume,进入 “PersistentVolume” 页面。
2. 单击新建进入“新建PersistentVolume” 页面,参考以下信息创建 PV。如下图所示:

主要参数信息如下:

来源设置:选择静态创建。
Secret:选择已在 创建 Secret 中创建的 Secret,本文以 coredump 为例(kube-system 命名空间下)。
存储桶列表:选中已创建的用于存储 coredump 文件的存储桶。
存储桶子目录:此处指定根目录,如果需要指定子目录,请提前在存储桶中创建。
3. 单击创建PersistentVolume即可。
创建 PVC
1. 在目标集群详情页,选择左侧菜单栏中的存储 > PersistentVolumeClaim,进入 “PersistentVolumeClaim” 页面。
2. 单击新建进入“新建PersistentVolumeClaim” 页面,参考以下信息创建 PVC。如下图所示:

主要参数信息如下:

命名空间:要与需要挂载存储 COS 的 PVC 的容器所在命名空间相同,如果有多个命名空间,可以创建多对 PV 与 PVC。
PersistentVolume:选择在 创建 PV 中已创建的 PV 的名称。
3. 单击创建PersistentVolumeClaim即可。
挂载 COS 存储
通过控制台创建 Pod 使用 PVC
说明:
本步骤以创建工作负载 Deployment 为例。
1. 在目标集群详情页,选择左侧菜单栏中的工作负载 > Deployment,进入 “Deployment” 页面。
2. 单击新建进入“新建Workload” 页面,参考 创建 Deployment 进行创建,并设置数据卷挂载。如下图所示:

主要参数信息如下:

数据卷:添加在 创建 PVC 中已创建的 PVC。
挂载点:单击添加挂载点,进行挂载点设置。选择为该步骤中所添加的数据卷 “core”。引用数据卷中声明的 PVC,挂载至目标路径,本文以
/tmp/cores
为例。3. 单击创建Workload即可。
通过 YAML 创建 Pod 使用 PVC
通过 YAML 创建 Pod,示例如下:
containers:- name: pod-coscommand: ["tail", "-f", "/etc/hosts"]image: "centos:latest"volumeMounts:- mountPath: /tmp/coresname: corevolumes:- name: corepersistentVolumeClaim:# Replaced by your pvc name.claimName: coredump