【发布时间】:2019-11-05 16:37:32
【问题描述】:
我需要从 Aks Cluster 导出内存转储并将其保存在某个位置
我该怎么做?容易导出到存储帐户吗?是否存在其他解决方案?有人可以给我一步吗?
【问题讨论】:
我需要从 Aks Cluster 导出内存转储并将其保存在某个位置
我该怎么做?容易导出到存储帐户吗?是否存在其他解决方案?有人可以给我一步吗?
【问题讨论】:
编辑:之前的答案是错误的,我没注意你需要转储。您实际上需要从 Boot Diagnostic 或某些命令行获取它:
【讨论】:
这个问题很老了,但还是让我分享一下我是如何实现的:
Linux 有一个名为 RLIMIT_CORE 的内部设置,它限制了您在应用程序崩溃时收到的核心转储的大小 - 这是您很快就会发现的。
接下来,您必须定义核心文件的保存位置,这在文件/proc/sys/kernel/core_pattern 中完成。给定的路径可以是一个相对文件名(保存在崩溃的二进制文件旁边),一个绝对路径(绝对安装的namespace)或者 - 这里是有趣的地方 - 一个管道,后跟一个绝对路径可执行文件(应用程序或脚本)。此脚本将 (according to the docs - see headline Piping core dumps to a program) 作为用户和组 root 启动 - 但此外,它还将在全局命名空间中执行 (according to this post in the Linux mailing list) - 换句话说,在容器外部。
如果您像我一样,并且您无权访问用于 AKS 集群上新节点的映像,您希望使用 DaemonSets 设置这些值,这是一个在每个节点上运行一次的 pod。
掌握了所有这些知识,您可以执行以下操作:
/proc/sys/kernel/core_pattern的值。|/bin/dd of=/core/%h.%e.%p.%t(dd 将获取核心文件stdin,并将其保存到参数of 定义的位置)。核心文件现在将保存在/core/。文件名可以用the docs for core files中的变量来解释。/core/ 之后,我们可以将我们的存储挂载到那里——在我的例子中是Azure File Storage。 Here's a tutorial of how to mount AzureFileStorage。RestartPolicy set to Always。由于您的 pod 的工作已经完成,并且您不希望它自动重新启动,因此请使用 sleep infinity 让它继续运行。这篇文章几乎是我在联系 Microsoft 支持时发现的内容的副本。 Here's the thread in their forum,其中包含一个几乎完成的 DaemonSet 配置。
我将在此处留下一些我在研究期间使用的链接:
旁注:
我也可以将 AzureFileSystem 安装到每个容器中,并将 /proc/sys/kernel/core_pattern 的值设置为 /core/%h.%e.%p.%t,但这需要我提及每个容器上的安装。通过这种方式,我可以释放此管理任务的 pod 配置,并将其放在(在我看来)所属的位置,即初始机器设置。
【讨论】: