首页 > 系统相关 >k8s 关闭 enableServiceLink-Pod-CPU-内存占用过高

k8s 关闭 enableServiceLink-Pod-CPU-内存占用过高

时间:2024-07-09 11:55:50浏览次数:29  
标签:exec spring PORT PG env Pod k8s CPU

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

特性说明:

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主进程)

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

 

 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,并关闭该特性。

 

 

环境

  1. kubernetes 1.20.4
  2. Spring Boot 2.5.0-M3

目标

enableServiceLinks 表示是否将 Service 的相关信息注入到 Pod 的环境变量中,默认是 true。

示例

Pod.yaml

apiVersion: v1

kind: Pod

metadata:

name: spring-k8s

spec:

containers:

- name: spring-k8s

image: jiangbo920827/spring-k8s:liveness

ports:

- containerPort: 8080

 

查看环境变量

[root@master ~]# kubectl exec spring-k8s -- printenv|grep PG

SVC_PG_SERVICE_HOST=10.110.153.250

SVC_PG_PORT_5432_TCP=tcp://10.110.153.250:5432

SVC_PG_PORT_5432_TCP_PROTO=tcp

SVC_PG_PORT_5432_TCP_ADDR=10.110.153.250

SVC_PG_PORT=tcp://10.110.153.250:5432

SVC_PG_SERVICE_PORT=5432

SVC_PG_PORT_5432_TCP_PORT=5432

删除环境变量 yaml

apiVersion: v1

kind: Pod

metadata:

name: spring-k8s

spec:

enableServiceLinks: false

containers:

- name: spring-k8s

image: jiangbo920827/spring-k8s:liveness

ports:

- containerPort: 8080

再次通过命令 kubectl exec spring-k8s -- printenv|grep PG 查看,已经没有相关的环境变量了。

总结

enableServiceLinks 可以设置 Service 环境变量是否注入 Pod 中,但是 k8s 自己默认的环境变量除外。

 

标签:exec,spring,PORT,PG,env,Pod,k8s,CPU
From: https://www.cnblogs.com/david-cloud/p/18291463

相关文章

  • K8s 中 Pod OOMKilled 原因
    在我们日常的工作当中,通常应用都会采用Kubernetes进行容器化部署,但是总是会出现一些问题,例如,JVM堆小于Docker容器中设置的内存大小和Kubernetes的内存大小,但是还是会被OOMKilled。在此我们介绍一下K8s的OOMKilled的ExitCode编码。 ExitCode137表明容器收到......
  • K8S学习教程(三):在PetaExpress KubeSphere 容器部署 Wiki 系统 wiki.js 并启用中文全
      背景wiki.js是非常优秀的开源Wiki系统,尽管在与xwiki功能相比,还不算完善,但也在不断进步。常用的功能还是比较实用的,如:Wiki写作、分享、权限管理功能还是非常实用的,UI设计非常的漂亮,精美的界面和直观的操作体验,能够满足小团队的基本知识管理需求。认真阅读......
  • k8s集群离线部署
    K8s离线部署环境目标k8s离线部署步骤部署docker详情见文章:《离线安装docker及后端项目离线打包》https://blog.csdn.net/qq_45371023/article/details/140279746?spm=1001.2014.3001.5501所用到的所有文件在:链接:https://pan.baidu.com/s/10cb-dXkgdShdjPEBCyvTrw?......
  • 嵌入式C语言面试相关知识——CPU、进程和线程相关(相关问题很多,会经常过来更新)
    嵌入式C语言面试相关知识——CPU、进程和线程相关一、博客声明二、自问题目——CPU相关1、什么是中断?如何处理中断?2、解释上下文切换(ContextSwitch)?3、在嵌入式中如何优化CPU使用?三、自问题目——进程相关1、什么是进程?2、嵌入式系统中进程和线程的区别是什么?3、在嵌......
  • PN转232网关模块接扫码枪与CPU通讯
    在现代物流、汽车生产线等领域,广泛使用条码扫码枪快速扫描产品条码,提高工作效率。为了保证条码扫码枪与CPU之间的准确通信,PN转232网关模块成为关键部件。本文将深入研究PN转232网关模块(BT-PNR20)的作用和原理,以及如何实现条码扫码枪与CPU之间的高效通信。一、PN转232网关模块的功......
  • k8s集群-sealos快速部署
    下载sealos工具官方文档页面https://sealos.run/docs/self-hosting/lifecycle-management/quick-start/install-cliwgethttps://github.com/labring/sealos/releases/download/v4.3.7/sealos_4.3.7_linux_amd64.tar.gz部署1、配置好ssh免密后进行部署2、国内机器需要添加如......
  • debian11 podman搭建rocketmq (初步测试)
    前言由于个人学习测试需要,想要在debian11环境下,使用podman搭建一个简单的单节点rocketmq,搭建过程比较繁琐,所以记录下来留作后续参考。由于对rocketmq镜像不熟悉,有些配置可能存在错误,会在后续有能力优化时继续更新此文档。后续可能会补充podman-compose实现方式,目前是shell脚本......
  • 2U上架式信创网安设备:搭载国产CPU+FPGA高性能信创设备
        在中国信息技术应用创新(简称“信创”)背景下,由本土企业研发和生产的网络安全设备。旨在满足国家安全自主可控的战略需求,减少对外国技术和产品的依赖,提升网络基础设施的信息安全水平。为了响应国家的发展战略,近期为客户定制了一批高性能的2U网安设备,搭载国产CPU+FPGA......
  • 统信UOS-1070A安装k8s
     系统版本[root@localhost~]#cat/etc/os-version[Version]SystemName=UOSServerSystemName[zh_CN]=统信服务器操作系统ProductType=ServerProductType[zh_CN]=服务器EditionName=eEditionName[zh_CN]=eMajorVersion=20MinorVersion=1070OsBuild=12038.100.100......
  • 【K8s】专题六(5):Kubernetes 稳定性之重启策略、滚动更新策略
    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!目录一、重启策略1、基本介绍2、资源清单(示例)二、滚动更新策略1、基本介绍2、资源清单(示例)3、主要优点一、重启策略1、基本介绍重启策略(RestartPoli......