导出内存转储Azure Kubernetes [英] Export Memory Dump Azure Kubernetes
本文介绍了导出内存转储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。
掌握所有这些知识后,您可以执行以下操作:
- 创建DaemonSet-在执行初始设置的每台计算机上运行的Pod。
- 此DaemonSet将作为特权容器运行,以允许其切换到根命名空间。
- 成功切换命名空间后,可以更改
/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。 - Pods have the
RestartPolicy
set toAlways
。由于Pod的作业已完成,并且您不希望它自动重新启动,因此请使用sleep infinity
让它保持运行。
这篇文章几乎是我在联系Microsoft支持人员时发现的内容的副本。Here's the thread in their forum,其中包含即将完成的守护程序集配置。
我将在这里留下一些我在研究过程中使用的链接:
- how to generate core file in docker container?
- How to access docker host filesystem from privileged container
- https://medium.com/@patnaikshekhar/initialize-your-aks-nodes-with-daemonsets-679fa81fd20e
Sideote:
我也可以将AzureFileSystem挂载到每个容器中,并将/proc/sys/kernel/core_pattern
的值设置为/core/%h.%e.%p.%t
,但这需要我提到每个容器上的挂载。通过这种方式,我可以释放此管理任务的Pod的配置,并将其放在(我认为)所属的位置,即初始计算机设置中。
这篇关于导出内存转储Azure Kubernetes的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文