导出内存转储Azure Kubernetes [英] Export Memory Dump Azure Kubernetes

查看:0
本文介绍了导出内存转储Azure Kubernetes的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

推荐答案

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

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设置这些值,DaemonSets是在每个节点上运行一次的Pod。

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

  1. 创建DaemonSet-在执行初始设置的每台计算机上运行的Pod。
  2. 此DaemonSet将作为特权容器运行,以允许其切换到根命名空间。
  3. 成功切换命名空间后,可以更改/proc/sys/kernel/core_pattern的值。
  4. 值应该类似于|/bin/dd of=/core/%h.%e.%p.%t(dd将获取核心文件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,其中包含即将完成的守护程序集配置。

我将在这里留下一些我在研究过程中使用的链接:

Sideote:

我也可以将AzureFileSystem挂载到每个容器中,并将/proc/sys/kernel/core_pattern的值设置为/core/%h.%e.%p.%t,但这需要我提到每个容器上的挂载。通过这种方式,我可以释放此管理任务的Pod的配置,并将其放在(我认为)所属的位置,即初始计算机设置中。

这篇关于导出内存转储Azure Kubernetes的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆