[kubernetes]-k8s开启swap

news2024/12/1 0:20:36

导语:记录k8s开启swap后先后做的调整

测试版本

k8s1.20版本

使用参数--fail-swap-on=false

Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"

使用测试 可以开启swap不报错 但是pod使用swap不太理想。且无法实现在使用swap的时候限制pod的内存。会造成内存打满,服务器io打满,导致一些组件和pod重启。

k8s1.22.15版本

使用参数--fail-swap-on=false

Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"

使用配置/var/lib/kubelet/config.yaml 添加最后4行

也可以在kubeadm初始化的时候 修改对应的configmap kubelet-config

apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 0s
    enabled: true
  x509:
    clientCAFile: /etc/kubernetes/pki/ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 0s
    cacheUnauthorizedTTL: 0s
cgroupDriver: systemd
clusterDNS:
- 100.64.0.10
clusterDomain: cluster.local
cpuManagerReconcilePeriod: 0s
evictionPressureTransitionPeriod: 0s
fileCheckFrequency: 0s
healthzBindAddress: 127.0.0.1
healthzPort: 10248
httpCheckFrequency: 0s
imageMinimumGCAge: 0s
kind: KubeletConfiguration
logging: {}
#memorySwap: {}
nodeStatusReportFrequency: 0s
nodeStatusUpdateFrequency: 0s
rotateCertificates: true
runtimeRequestTimeout: 0s
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /etc/kubernetes/manifests
streamingConnectionIdleTimeout: 0s
syncFrequency: 0s
volumeStatsAggPeriod: 0s
featureGates:
  NodeSwap: true
memorySwap:
  swapBehavior: UnlimitedSwap

注意如果需要调整swap使用的阀值,需要先配置vm.swap,再安装docker,再安装k8s。否则容器内的swap限制需要重启服务器才能生效。

用于大致查看swap使用的脚本swap.sh

#!/bin/bash
#script name: swap_check.sh
#description: 这是一个检查哪些进程使用了SWAP分区的脚本
do_swap () {
  SUM=0
  OVERALL=0
  java_sum=0
  lung_sum=0
  aiclass_sum=0
  #获取进程目录
  for DIR in `find /proc/ -maxdepth 1 -type d|egrep "^/proc/[0-9]"`;do
        #获取进程PID
    PID=`echo $DIR | cut -d / -f 3`
    #获取进程名称
    PROGNAME=`ps -p $PID -o comm --no-headers`
    #获取进程的所有分区中SWAP值
#    echo PROGNAME $PROGNAME
#    if [[ "$PROGNAME"  =~  "java" ]] ; then
#      echo  1 java
#    elif [[ "$PROGNAME"  =~  "aiclassifier" ]] ; then
#      echo 2 aiclass
#    else
#      echo 3 lung
#    fi
    for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
    do
          #进程swap值求和 这里取的是km换算成M   除以2是因为统计的时候重复了
      let SUM=$SUM+$SWAP/1024/2
   #   echo PROGNAME $PROGNAME
      if [[ "$PROGNAME"  =~  "java" ]] ; then
   #     echo  1 java
        let java_sum=$java_sum+$SWAP/1024/2
      elif [[ "$PROGNAME"  =~  "aiclassifier" ]] ; then
  #      echo 2 aiclass
        let aiclass_sum=$aiclass_sum+$SWAP/1024/2
      else
  #      echo 3 lung
        let lung_sum=$lung_sum+$SWAP/1024/2
      fi
 #   echo 4
    done
    echo "PID=$PID - Swap used: ${SUM}M - $PROGNAME"


    #总共swap分区值求和
    let OVERALL=$OVERALL+$SUM
    SUM=0
  done
  echo "Overall swap used: ${OVERALL}M"
  echo "java swap used:${java_sum}M"
  echo "aiclass swap used:${aiclass_sum}M"
  echo "lung swap used:${lung_sum}M"
}
do_swap > tmp.txt
#查询结果排序并截取top10
cat tmp.txt |grep used |awk -F[\ \(] '{print $5,$1,$7}' | sort -n | tail -10
cat tmp.txt |grep -v used |awk -F[\ \(] '{print $5,$1,$7}' | sort -n | tail -10
cat tmp.txt |tail -4
rm -rf tmp.txt

除以2是因为有重复统计

也可以安装netdata查看

wget -c https://github.com/netdata/netdata/releases/download/v1.36.1/netdata-latest.tar.gz
tar zxvf netdata-latest.tar.gz
cd netdata-v1.36.1/
# 安装所需依赖
apt-get install zlib1g-dev uuid-dev libmnl-dev gcc make git autoconf autoconf-archive autogen automake pkg-config curl  -y 
apt-get install libuv1-dev -y
./netdata-installer.sh

可在opt/netdata/usr/lib/netdata/conf.d/apps_groups.conf中添加对应的进程名和command名

AI: AI*

重启之后就可以监控到带AI字符的进程占用的swap的使用量。不过偶尔会出现进程重复计算的情况,直接削峰查看会比较精确。

效果如下

结论:高内存pod如果在开启swap时不限制内存,仍旧会将物理内存吃完,导致组件一直重启,服务器负载和io飙升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java面试】List接口

文章目录Iterator 和 ListIterator 有什么区别?遍历一个 List 有哪些不同的方式?每种方法的实现原理是什么?Java中List 遍历的最佳实践是什么?说一下 ArrayList 的优缺点如何实现数组和 List 之间的转换?ArrayList 和 …

M4 tm4c1294单片机软件调式总结

1,框架图: 调式基本方法: (1)加串口打印初始化,单步跟踪查看,类似gdb的单步; (2)打印命令行,重点参数添加命令行打印; (3&#xff…

Redis 的相关基础知识

【一】 Redis 中默认的端口号为什么是6379 图中的人名为 Alessia Merz ,其中的 Merz 对应的九键输入法按出来的就是6379 【二】 Redis 默认的数据库 Redis 中默认使用的是16个数据库,类似数组下标从0开始,初始默认使用0号数据库 【三】 Redis…

vscode搭建Verilog HDL开发环境

工欲善其事,必先利其器。应该没有多少人会使用Quartus和vivado这些软件自带的编辑器吧,原因在于这些编辑器效率很低,Verilog HDL代码格式比较固定,通常可以利用代码片段补全加快书写。基本上代码写完之后才会打开Quartus或者vivad…

一文带你了解Spring中的事务管理

文章目录前言一、事务的基础概念二、spring中事务的使用声明式事务编程式事务如何选择事务方式三、spring中事务管理实现原理前言 本文将涉及以下知识点: 事务的基础概念spring当中事务的使用spring当中事务管理的实现原理 一、事务的基础概念 事务(T…

python画图

python画图1.使用matplotlib画图2.使用pyecharts画图2.x pyecharts的三种图片渲染工具2.x.1 snapshot_selenium2.x.2 snapshot_phantomjs2.x.3 snapshot_pyppeteer1.使用matplotlib画图 2.使用pyecharts画图 pyecharts是一款将python与echarts结合的强大的数据可视化工具&…

阿里云服务器安装tomcat

一、前置条件 安装tomcat需要先安装jdk,所以没有安装jdk同学,详见参考文章或者此文章 二、Linux上安装tomcat 1. 下载Apache tomcat tomcat官网下载地址 在左边,可以选择下载各种版本的tomcat。根据服务器操作系统选择下载。Linux操作系统…

第七章TCP/IP——ARP网络攻击与欺骗

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。个人爱好: 编程,打篮球,计算机知识个人名言:海不辞水,故能成其大;山不辞石…

分布式文件系统和对象存储魔力象限,右上角都有谁?

自Gartner 首次发布      分布式文件系统和      对象存储魔力象限以来      戴尔科技集团      就牢牢位居领导者象限      今年也不例外      恭喜      连续第七年获评领导者!    对于入选本年度的魔力象限领导者,我们感到十分荣幸。我们相…

docker安装jenkins最新版

前言 使用的是centos7的linux系统, 检查docker 是否开启网络 如果没有开启网络会报错:WARNING: IPv4 forwarding is disabled. Networking will not work. 检查网络状态 sysctl net.ipv4.ip_forward如果返回为“net.ipv4.ip_forward 1”则表示网络转发正常&am…

1534_TriCore编译器Tasking使用_汇编语言语法以及标识符

全部学习汇总: GreyZhang/TriCore_Tasking_Compiler_Skills: Some skills for Tasking compiler on AURIX platform. Happy hacking! (github.com) 1. 如同C语言,汇编语言也可以续行而且采用了同样的续行符号。不过,我遇到的汇编一直都是很统…

TMS Echo数据复制的Delphi框架

TMS Echo数据复制的Delphi框架 TMS Echo是用于数据复制的Delphi框架。它是TMS Business产品阵容的一部分,它取决于TMS Aurelius的运营。 TMS Echo允许您至少拥有两个数据库并在它们之间同步信息。您对单个客户数据库所做的更改(插入、更新、删除)可能会传输到其他数…

PowerMax——业界首个引入NVIDIA BlueField DPU的高端存储

高性能、可扩展、弹性与空间 全球越来越多的领先企业 都依靠关键任务型存储 承载企业核心业务 DPU作为一个新兴起的概念,正在以惊人的速度崛起。据预测,DPU将成为未来计算的三大支柱之一,CPUGPUDPU构成未来的数据中心。 现在,全球首款 集成NVIDIA BlueField DPU技术的 关…

QMudiaPlayer(状态)

在音乐播放中介绍了QMediaPlayer的基本用法,在这里更深度的使用QMediaPlayer。 媒体播放器的当前媒体的状态: QMediaPalyer::MediaStatus 会发射 mediaStatusChanged()信号 QMediaPlayer::UnknownMediaSt…

数据库、计算机网络,操作系统刷题笔记3

数据库、计算机网络,操作系统刷题笔记3 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle&…

精度和召回率的区别

先弄懂TP、FP、FN、TN T:ture 这件事是做对了 F:false 这件事做错了 N:negtive 负类 P:positive 正类TP:正确的把它判断成正例了 FP:错误的把它判断成正例了 FN:错误的把它判断成负例了 它本身是正例,把它判断成负例,为0个 TN…

[附源码]Python计算机毕业设计电影院订票系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

grafana 画富集多个指标 label 的表格

下午5点:老哥,今天把业务趋势图搞出来吧。 一、怎么画表格 我们的需要是做下面的视图,他是一个表格,而且有着多个数据源 添加图表 填入数据,展示原始图形 转换为 table 只显示最新一条 选择查询条件的 instant…

【前端】CSS

努力经营当下,直至未来明朗! 文章目录前言一、【基本语法规范】二、【CSS引入方式】三、【代码风格】四、【CSS选择器】1. 基础选择器2. 复合选择器五、【CSS常用元素属性】1. 【字体相关属性】2. 【文本属性】3. 【背景属性】4. 【圆角矩形】5. 【调试】…

C++回顾从入门开始

前言 新手搭配视频 回顾复习直接看 有问题请评论提出看到会及时修改 include、iostream、main() #include <iostream> using namespace std; int main() {cout << "Hello World!" << endl;return 0; } 解释 int表示函数的返回值类型&#xff0c…