[kubernetes]-k8s开启swap

导语:记录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飙升。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
网盘文件永久链接 目录: 1 kubernetes极速入门课程介绍mp4 2kubernetes极速入门k8s初识容器mp4 3 kubernetes极速入门k8s初识容器管理工具及容器编排管理工具介绍mp4 4 kubernetes极速入门k8s初识k8s初识mp4 5 kubernetest极速入门k8s初识k8初识总结mp4 6 kubernetes极速入门k8s功能mp4 7 kubernetes极速入门k8s架构场学习目标学习步骤,mp4 8 kubernetes极速入门k8架构,mp4 9 kubernetes极速入门k8s集群部署场黑学习目标学习步骤mp4 10 kubernetes极速入门k8s集群部署部署工具介绍mp4 11 kubernetes极速入门k8s集群部署主机准备主机系统准备mp4 12 kubernetes极速入门k8s集群部署主机准备主机名设置mp4 13 ekubernetes极速入门k8s集群部署主机准备P没置及主机名解释:mp4 14 kubernetes极速入门k8s集群部署主机准备主机安全设置mp4 15 kubernetes极速入门k8s集群部署主机准备主机时间同步没置:mp4 16 kubernetes极速入门kBs集群部署主机准备永久关闭主机sWap分区mp4 17 kubernetes极速入门ks集群部署主机备配置主机网析过功能mp4 18 kubernetes极速入门k8s集群部署主机佳备配置主机pvs功能mp4 19 kubernetest极速入门k8s集群部署 docker安装mp4 20 kubernetes极速入门k8s集群部害集群软件安装及配置mp4 21 kubernetes极速入门k8s集群部害集群镜像准备mp4 22 kubernetes极速入门k8s集群部署集群初始化mp4 23 kubernetes极速入门k8s集群部署k8s集群部署后验证mp4 24 kubernetes极速入门k8s集群部学习总结_mp4 25 kubernetesi极速入门k8s集群客户端工具kump4 26 kubernetes极速入门k8s集群资源清单YAML文件书写方法YAM介绍mp4 27 kubernetes极速入门k8s集群资源清单 YAM, mp4 28 kubernetes极速入门k8s集群 Name Spacel命名空间 Name Space介绍及查看mp4 29 kubernetes!极速入门k8s集群 Name Spacer命名空间 NameSpace创建mp4 30 kubernetes极速入门k8s集群 Name Space命,mp4 31 kubernetes极速入门k8s集群核心概念 podPod介绍及创建mp4 32 kubernetes极速入门k8s集群核心概念 pod, mp4 33 kubernetes极速入门k8s集群核心概念 Controller介绍分类 Deployment控制器介绍创建 Deployment控制器类型应用mp4 34 kubernetes极速入门k8s集群核心概念 Controller使用资源清单文件创建 Deployment控制器类型应用mp4 35 kubernetes极速入门k8s集群核心概念 Controller使用命令行或资源清单文件删除 Deployment控制器类型应用mp4 36 kubernetes极速入门k8s集群核心概念 Cont mp4 37 kubernetes极速入门k8s集群核心概念 Service Service介绍mp4 38 kubernetes极速入门k8s集群核心概念 Service通过命令行创建 Service,mp4 39 kubernetes极速入门k8s集群核心概念 Service通过资源清单文件创建 Service ClusterlP. mp4 40 kubernetes极速入门k8s集群核心概念 Service通过资源清单文件创建 Service Node Port. mp4 41 kubernetes极速入门k8s集群核心概念 Serv, mp4 42 kubernetesl极速入门结果有方法请注意mp4

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷来辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值