此 Helm Chart 旨在部署自动将大多数公共云 kubernetes 服务提供商和私有 kubernetes 实例的核心转储保存到 S3 兼容存储服务的功能。
请阅读 CONTRIBUTING.md,它有一些重要的注释。特别注意编码风格指南和开发者原产地证书
作为会员、贡献者和领导者,我们承诺让每个人在参与我们的社区时都获得无骚扰的体验,无论年龄、体型、有形或无形的残疾、种族、性别特征、性别认同和表达、经验水平、教育程度、社会经济地位、国籍、个人外表、种族、宗教或性认同和取向。
我们承诺以有助于建设开放、热情、多元化、包容和健康社区的方式行事和互动。
完整的行为准则可在此处获取
请参阅图表 README.md 了解完整详细信息。
这是已确认的测试目标的矩阵。请公关环境也已知有效
提供者 | 产品 | 版本 | 已验证? | 在职的? |
AWS | 埃克斯 | 1.21 | 是的 | 是的 |
AWS | 罗莎 | 4.8 | 是的 | 是的 |
定制建造 | K8S | 不适用 | 是的 | 是的 |
数字海洋 | K8S | 1.21.5-do.0 | 是的 | 是的 |
谷歌 | GKE-cos_containerd | 1.20.10-gke.1600 | 是的 | 是的 |
谷歌 | GKE-Ubuntu | 1.20.10-gke.1600 | 是的 | 是的 |
国际商业机器公司 | 伊克斯 | 1.19-1.21 | 是的 | 是的 |
国际商业机器公司 | 韩国 | 4.6-4.8 | 是的 | 是的 |
微软 | AKS | 1.19 | 是的 | 是的 |
微软 | 阿罗 | 4.8 | 是的 | 是的 |
红帽 | 本地部署 | 4.8 | 是的 | 是的 |
核心转储是可观察性的关键部分。
随着系统变得更加分布式,核心转储为团队提供了一种非侵入性的方法来了解程序在部署到的任何环境中出现故障的原因。
核心转储在很多场景中都很有用,但它们在以下情况下非常相关:
进程退出时没有有用的堆栈跟踪
进程内存不足
应用程序未按预期运行
核心转储的传统问题是:
管理转储的开销
转储分析需要特定的工具,而开发人员的计算机上无法轻松获得这些工具。
管理对转储的访问,因为它们可能包含敏感信息。
该图表旨在通过利用云环境中的通用平台(K8s、ROKS 和对象存储)来承担重任,从而解决围绕核心转储的问题。
该图表部署了两个流程:
该代理管理/proc/sys/kernel/*
配置的更新,部署 Composer 服务并将 Composer 创建的核心转储 zip 文件上传到对象存储实例。
Composer负责核心转储的处理,并从 CRICTL 创建运行时、容器核心转储和图像 JSON 文档,并将它们插入到单个 zip 文件中。 zip 文件存储在节点的本地文件系统上,供代理上传。
安装 IBM Cloud Core Dump Handler Helm 图表时,以下 Kubernetes 资源将部署到您的 Kubernetes 集群中:
命名空间:创建一个特定的命名空间来安装组件 - 默认为 ibm-observe
Handler Daemonset :daemonset 在集群中的每个工作节点上部署一个 pod。 daemonset 包含配置,使提升的进程能够定义核心模式,将核心转储放入对象存储中,并收集 pod 信息(如果可用)。
特权策略:守护进程配置主机节点,因此需要特权。
服务帐户:运行守护程序集的标准服务帐户
卷声明:用于将 Composer 复制到主机并启用对生成的核心转储的访问
集群角色:使用事件资源创建并创建动词并与服务帐户关联。
要在集群中安装 Helm Chart,您必须具有管理员平台角色。
此图表部署特权 kubernetes 守护进程集,具有以下含义:
每个 kubernetes 节点自动创建特权容器,能够读取核心文件,查询 crictl 的 pod 信息。
守护进程集使用主机路径功能与底层 Linux 操作系统交互。
Composer 二进制文件已部署并在主机服务器上运行
核心转储可能包含敏感的运行时数据,并且必须相应地管理存储桶访问。
对象存储密钥作为秘密存储并用作守护程序集中的环境变量
IBM Cloud Core Dump Handler 需要每个工作程序节点上有以下资源才能成功运行:
$ helm delete core-dump-handler --namespace observe
host-name
的永久卷 $ kubectl get pvc -n observe
$ helm install core-dump-handler . --namespace observe
helm delete core-dump-handler -n observe
构建镜像docker build -t YOUR_TAG_NAME .
将镜像推送到容器注册表
更新values.yaml
文件中的容器以使用它。
image :
registry : YOUR_REGISTRY
repository : YOUR_REPOSITORY
tag : YOUR_TAG
或使用设置运行 helm install 命令
--set image.registry=YOUR_REGISTRY
--set image.repository=YOUR_REPOSITORY
--set image.tag=YOUR_TAG
这些服务是使用 rustup 用 Rust 编写的。
可以使用基本文件夹中的cargo test
来运行本地单元测试
目前仅支持 IBM Cloud ROKS 和 IKS,但我们很乐意为其他服务进行集成测试,但我们无法在发布之前运行它们。
要运行集成测试构建,请按照自定义构建的说明进行操作
在项目文件夹的根目录中创建一个名为.env
的文件,其中包含以下配置
S3_ACCESS_KEY=XXXX
S3_SECRET=XXXX
S3_BUCKET_NAME=XXXX
S3_REGION=XXXX
将目录更改为集成文件夹并运行测试
cd integration
./run-ibm.sh
版本构建在预发布分支上,例如,手动运行pre-8.5.0
集成测试,并在合并到主分支时生成版本。
目前无法自动执行此操作,因为 github 操作中的 kubernetes 集成不够可靠。
如果您希望使用自己的集成测试来测试预发布版本,请提出问题,我们可以就您的测试运行进行协作。
查找问题的第一个地方是代理控制台。成功安装应该如下所示
[2021-09-08T22:28:43Z INFO core_dump_agent] Setting host location to: /var/mnt/core-dump-handler
[2021-09-08T22:28:43Z INFO core_dump_agent] Current Directory for setup is /app
[2021-09-08T22:28:43Z INFO core_dump_agent] Copying the composer from ./vendor/default/cdc to /var/mnt/core-dump-handler/cdc
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for kernel.core_pattern /var/mnt/core-dump-handler/core_pattern.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/core_pattern.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for kernel.core_pipe_limit /var/mnt/core-dump-handler/core_pipe_limit.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/core_pipe_limit.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for fs.suid_dumpable /var/mnt/core-dump-handler/suid_dumpable.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/suid_dumpable.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of kernel.core_pattern=|/var/mnt/core-dump-handler/cdc -c=%c -e=%e -p=%p -s=%s -t=%t -d=/var/mnt/core-dump-handler/core -h=%h -E=%E
kernel.core_pattern = |/var/mnt/core-dump-handler/cdc -c=%c -e=%e -p=%p -s=%s -t=%t -d=/var/mnt/core-dump-handler/core -h=%h -E=%E
kernel.core_pipe_limit = 128
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of kernel.core_pipe_limit=128
fs.suid_dumpable = 2
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of fs.suid_dumpable=2
[2021-09-08T22:28:43Z INFO core_dump_agent] Creating /var/mnt/core-dump-handler/.env file with LOG_LEVEL=info
[2021-09-08T22:28:43Z INFO core_dump_agent] Executing Agent with location : /var/mnt/core-dump-handler/core
[2021-09-08T22:28:43Z INFO core_dump_agent] Dir Content []
如果代理运行成功,则 Composer 配置可能存在问题。要检查 Composer 的日志,请在代理中打开一个 shell,然后使用 cat 查找composer.log 以查看是否有任何错误消息。
cat /var/mnt/core-dump-handler/composer.log
如果没有错误,那么您应该在 value.yaml 中将默认日志从error
更改为debug
,并重新部署图表。再次创建核心转储, /var/mnt/core-dump-handler/composer.log
core-dump-handler/composer.log 应包含每次上传的具体详细信息。