用户指南

最佳实践

API 文档

容器 coredump 持久化

最近更新时间:2022-01-17 14:46:34

操作场景

容器有时会在发生异常后无法正常工作,业务日志中若无足够的信息来定位问题原因,则需要结合 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. 节点完成配置后,无需更改容器原有配置,将以继承的方式自动生效。如需在多个节点上批量执行,则请对应实际情况进行操作:

启用 COS 扩展组件

为了避免容器重启后丢失 core 文件,需要为容器挂载 volume。由于为每个 Pod 单独挂载云盘的成本太高,所以将组件挂载至 COS 对象存储。具体操作步骤请参见 安装 COS 扩展组件

创建存储桶

登录 对象存储控制台,手动创建 COS 存储桶,用于存储容器 coredump 生成的 core 文件,本文以创建自定义名称为 coredump 的存储桶为例。具体操作步骤请参见 创建存储桶

创建 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-cos
    command: ["tail", "-f", "/etc/hosts"]
    image: "centos:latest"
    volumeMounts:
    - mountPath: /tmp/cores
      name: core
  volumes:
  - name: core
    persistentVolumeClaim:
      # Replaced by your pvc name.
      claimName: coredump

相关文档

使用对象存储 COS

目录