【问题标题】:Export Memory Dump Azure Kubernetes导出内存转储 Azure Kubernetes
【发布时间】:2019-11-05 16:37:32
【问题描述】:

我需要从 Aks Cluster 导出内存转储并将其保存在某个位置

我该怎么做?容易导出到存储帐户吗?是否存在其他解决方案?有人可以给我一步吗?

【问题讨论】:

    标签: azure azure-aks


    【解决方案1】:

    编辑:之前的答案是错误的,我没注意你需要转储。您实际上需要从 Boot Diagnostic 或某些命令行获取它:

    https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/boot-diagnostics#enable-boot-diagnostics-on-existing-virtual-machine

    【讨论】:

    • 你能说得更具体些吗?我通读了文档,但找不到问题的答案。
    【解决方案2】:

    这个问题很老了,但还是让我分享一下我是如何实现的:

    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。

    掌握了所有这些知识,您可以执行以下操作:

    1. 创建一个DaemonSet - 一个在每台执行初始设置的机器上运行的 pod。
    2. 此 DaemonSet 将作为特权容器运行,以允许它切换到根命名空间。
    3. 切换命名空间成功后,可以更改/proc/sys/kernel/core_pattern的值。
    4. 该值应该类似于|/bin/dd of=/core/%h.%e.%p.%tdd 将获取核心文件stdin,并将其保存到参数of 定义的位置)。核心文件现在将保存在/core/。文件名可以用the docs for core files中的变量来解释。
    5. 在知道文件将被保存到根命名空间的/core/ 之后,我们可以将我们的存储挂载到那里——在我的例子中是Azure File StorageHere's a tutorial of how to mount AzureFileStorage
    6. Pods have the 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 配置,并将其放在(在我看来)所属的位置,即初始机器设置。

    【讨论】:

    • 能否请您详细说明您写的旁注?我们的服务在每个容器上运行。有100多个容器。如果发生崩溃,我们想获取容器的核心文件。我们的要求是让每个容器将核心文件写入共享存储 Azure 文件系统。我们可以通过更改每个容器的 core_pattern 来实现吗?
    • @PraveenMak 我只知道规定的方法。如果您不想将共享挂载到每个容器中,我建议您按照上述步骤操作并忽略我的旁注。如果您无法控制主机系统(例如无法运行特权容器),我必须进行检查。这个线程也可能有帮助:github.com/moby/moby/issues/11740
    猜你喜欢
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2020-07-14
    相关资源
    最近更新 更多