k8s 关闭 enableServiceLink
1. 什么是enableServiceLinks
enableServiceLinks 表示是否将 Service 的相关信息注入到 Pod 的环境变量中,默认是 true。
2. 背景现场:
在很多环境出现dockerd内存资源占用过高,导致整机内存吃紧
过pprof分析,发现大部分内存消耗在exec env上,即在执行kubelet exec或probe时,dockerd会将container env 复制到exec obj上,当未释放exec积累过多时,现象就是dockerd整体内存过高。
对于解决该问题,分两个方向解决:
1. probe超时透传至dockerd,解决exec泄露问题。
2. 当前pod默认都开启了enableServiceLinks, 导致env过多(部分env 4000+),进一步恶化了该问题。
3. 特性说明:
enableServiceLinks特性,是k8s提供给pod发现和访问svc的两种方案之一(另一种是DNS)。
该特性在pod启动时,kubelet会将active svc通过env {SVCNAME}_SERVICE_HOST、
{SVCNAME}_SERVICE_PORT 形式注册到container env,应用自身则可以通过env获取svc访问地址。
kubectl exec podxxx -nns -- printenv
env的数量过大,一来加剧dockerd内存泄露,二来也会影响exec执行性能(执行前会加载所有env到exec主进程)
4. 如何关闭该特性
该特性需要在pod.spec显式关闭,在专有云场景下,可以在pod webhook中通过标签过滤指定pod,并关闭该特性。
本文来自博客园,作者:鱼丸粗面没鱼丸,转载请注明原文链接:https://www.cnblogs.com/Robi-9662/p/17513770.html