kubernetes集群之GC处理
一.简单说明
GC(Garbage Collector)即垃圾收集清理,kubernetes集群中,kubelet的GC功能将会清理未使用的image和container。其中kubelet对container每分钟执行一次GC,对image每5分钟执行一次GC。这样可以保障kubernetes集群资源紧缺的情况下,保证其NODE节点的稳定性。
二.kubernetes的驱逐策略
kubelet能够主动检测和防止计算资源的全面短缺,这种情况下,kubelet可以主动的结束一个或多个pod以回收短缺的资源,如果被驱逐的Pod由Deployment管理,这里Deployment会创建另一个Pod给kubernetes来调度。
三.kubernetes的驱逐信号
kubelet支持按照以下表格中描述的信号触发驱逐
| 驱逐信号 | 描述 |
|---|---|
| memory.available | memory.available := node.status.capacity[memory] - node.stats.memory.workingSet |
| nodefs.available | nodefs.available := node.stats.fs.available |
| nodefs.inodesFree | nodefs.inodesFree := node.stats.fs.inodesFree |
| imagefs.available | imagefs.available := node.stats.runtime.imagefs.available |
| imagefs.inodesFree | imagefs.inodesFree := node.stats.runtime.imagefs.inodesFree |
上面的每个信号都支持字面值或百分比的值,基于百分比的值的计算与每个信号对应的总容量有关。
- memory.available
memory.available的值从cgroupfs获取,而不是通过类似free -m的工具,因为free -m不能在容器中工作。
kubelet支持两种文件系统分区:
- nodefs
nodefs文件系统,kubelet将其用于卷和守护程序日志等。 - imagefs
imagefs文件系统,容器运行时用于保存镜像和容器可写层。
四.驱逐阈值
kubelet支持指定驱逐阈值,用于触发kubelet回收资源。
阈值配置形式如下:
[eviction-signal][operator][quantity]
- eviction-signal:这里是驱逐的信号
- operator:是所需的关系运算符,例如
< - quantity:是驱逐阈值值标志,例如1Gi,也可以使用
%标记表示百分比
举例说明:
如果一个节点由10Gi内存,希望在可用内存下降到1Gi以下时,引起驱逐操作,则驱逐阈值可以使用下面任意一种方式指定(但不是两者同时):
- memory.available<10%
或 - memory.available<1Gi
4.1 软驱逐阈值
软驱逐阈值使用一对由驱逐阈值和管理员必须指定的宽限期组成的配置对。在超过宽限期前,kubelet不会采取任何动作回收和驱逐信号关联的资源。如果没有提供宽限期,kubelet启动时将报错。
此外,如果达到了软驱逐阈值,操作员可以指定从节点驱逐 pod 时,在宽限期内允许结束的 pod 的最大数量。如果指定了pod.Spec.TerminationGracePeriodSeconds值,kubelet将使用它和宽限期二者中较小的一个。如果没有指定,kubelet将立即终止 pod,而不会优雅结束它们。
软驱逐阈值的配置支持下列标记:
- eviction-soft
描述了驱逐阈值的集合(例如 memory.available<1.5Gi),如果在宽限期之外满足条件将触发 pod 驱逐。 - eviction-soft-grace-period
描述了驱逐宽限期的集合(例如 memory.available=1m30s),对应于在驱逐 pod 前软驱逐阈值应该被控制的时长。 - eviction-max-pod-grace-period
描述了当满足软驱逐阈值并终止 pod 时允许的最大宽限期值(秒数)。
4.2 硬驱逐阈值
硬驱逐阈值没有宽限期,一旦察觉,kubelet将立即采取行动回收关联的短缺资源。如果满足硬驱逐阈值,kubelet将立即结束 pod 而不是优雅终止。
硬驱逐阈值的配置支持下列标记:
- eviction-hard
描述了驱逐阈值的集合(例如 memory.available<1Gi),如果满足条件将触发 pod 驱逐。
kubelet 有如下所示的默认硬驱逐阈值:
- memory.available<100Mi
- nodefs.available<10%
- nodefs.inodesFree<5%
- imagefs.available<15%
五.kubernetes最小驱逐回收
在某些场景,驱逐 pod 会导致回收少量资源。这将导致 kubelet 反复碰到驱逐阈值。除此之外,对如 disk 这类资源的驱逐时比较耗时的。
为了减少这类问题,kubelet可以为每个资源配置一个 minimum-reclaim。当 kubelet 发现资源压力时,kubelet将尝试至少回收驱逐阈值之下 minimum-reclaim 数量的资源。
例如使用下面的配置:
--eviction-hard=memory.available<500Mi,nodefs.available<1Gi,imagefs.available<100Gi
--eviction-minimum-reclaim="memory.available=0Mi,nodefs.available=500Mi,imagefs.available=2Gi"`
如果 memory.available 驱逐阈值被触发,kubelet将保证 memory.available 至少为 500Mi。对于 nodefs.available,kubelet将保证 nodefs.available 至少为 1.5Gi。对于 imagefs.available,kubelet将保证 imagefs.available 至少为 102Gi,直到不再有相关资源报告压力为止。
所有资源的默认 eviction-minimum-reclaim 值为 0。
注意:当磁盘驱逐成熟时,下面的 kubelet 标志将被标记为废弃的,以简化支持驱逐的配置。
| 现有标签 | 新标签 |
|---|---|
| --image-gc-high-threshold | --eviction-hard or eviction-soft |
| --image-gc-low-threshold | --eviction-minimum-reclaim |
| --maximum-dead-containers | deprecated |
| --maximum-dead-containers-per-container | deprecated |
| --minimum-container-ttl-duration | deprecated |
| --low-diskspace-threshold-mb | --eviction-hard or eviction-soft |
| --outofdisk-transition-frequency | --eviction-pressure-transition-period |
参考官网链接:https://kubernetes.io/zh/docs/tasks/administer-cluster/out-of-resource/
kubernetes集群之GC处理的更多相关文章
- 二进制安装部署kubernetes集群---超详细教程
本文收录在容器技术学习系列文章总目录 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以打赏博主一杯咖啡钱 ...
- Kubernetes探索学习001--Centos7.6使用kubeadm快速部署Kubernetes集群
Centos7.6使用kubeadm快速部署kubernetes集群 为什么要使用kubeadm来部署kubernetes?因为kubeadm是kubernetes原生的部署工具,简单快捷方便,便于新 ...
- kubeadm搭建kubernetes集群之二:创建master节点
在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...
- CentOS 7.5 使用 yum 安装 Kubernetes 集群(二)
一.安装方式介绍 1.yum 安装 目前CentOS官方已经把Kubernetes源放入到自己的默认 extras 仓库里面,使用 yum 安装,好处是简单,坏处也很明显,需要官方更新 yum 源才能 ...
- (转)实验文档4:kubernetes集群的监控和日志分析
改造dubbo-demo-web项目为Tomcat启动项目 Tomcat官网 准备Tomcat的镜像底包 准备tomcat二进制包 运维主机HDSS7-200.host.com上:Tomcat8下载链 ...
- (转)实验文档3:在kubernetes集群里集成Apollo配置中心
使用ConfigMap管理应用配置 拆分环境 主机名 角色 ip HDSS7-11.host.com zk1.od.com(Test环境) 10.4.7.11 HDSS7-12.host.com zk ...
- 监控 Kubernetes 集群应用
Prometheus的数据指标是通过一个公开的 HTTP(S) 数据接口获取到的,我们不需要单独安装监控的 agent,只需要暴露一个 metrics 接口,Prometheus 就会定期去拉取数据: ...
- Kubernetes集群搭建 ver1.20.5
目录 部署方式 1. 基础环境准备 1.1 基础初始化 1.2 安装docker 2. 部署harbor及haproxy高可用反向代理 2.1 镜像加速配置 2.2 高可用master可配置 3. 初 ...
- 基于Containerd安装部署高可用Kubernetes集群
转载自:https://blog.weiyigeek.top/2021/7-30-623.html 简述 Kubernetes(后续简称k8s)是 Google(2014年6月) 开源的一个容器编排引 ...
- 升级二进制kubernetes集群
升级二进制kubernetes集群 背景介绍 最近由于时间不足,暂时无法对小版本更新第一时间出新的文档.若需要升级集群版本,可以参考此文档进行操作,每个节点一个一个地更新.大版本更新请各位持续关注我的 ...
随机推荐
- mac mamp php扩展安装
官网下载需要开启的php扩展 PHP扩展下载官网地址 解压扩展包,指定mamp所使用的php版本的phpize编译安装 # 在解压的扩展包中执行以下命令 /Applications/MAMP/bin/ ...
- php-fpm 启动后没有监听端口9000
netstat -tpln未发现监听9000端口.查看/var/log/php7-fpm.log一切正常. 随后查看PHP配置文件:/usr/local/php/etc/php-fpm.conf (源 ...
- PaddleOCR学习笔记1
尝试使用PaddleOCR方法,如何使用自定义的模型方法,参数怎么配置,图片识别尝试简单提高识别率方法. 目前仅仅只是初步学习下如何使用PaddleOCR的方法. 一,测试识别图片: 1.png : ...
- windows端5款mysql客户端工具
1. MySQL Workbench 这属于mysql官方出品,免费,功能强大,是首选. 2. HeidiSQL 免费,功能强大,强烈推荐. 3. dbForge Studio for MySQL 收 ...
- Docker,vs2019下 使用.net core创建docker镜像 遇到的一些问题
步骤主要分为以下几步: 1.创建docker for linux 的.netcore 项目(vs 自动创建了dockerfile 如果没有需要自己创建在根目录下) 2.编译项目到指定目录下 3.b ...
- APEX实战第3篇:如何完善项目基础功能
上一篇<APEX实战第2篇:构建自己第一个APEX程序>虽然有了程序,但实在是太单薄! 本篇将会介绍一些数据库的基础知识,演示如何通过函数.触发器.存储过程.视图等来完善项目的一些基础功能 ...
- 【Java】字符串常用操作
字符的常用技巧 char c; 字母的顺序:c - 'A'.c - 'a' 字母大小写转换:c - 'a' + 'A'.c - 'A' + 'a' 数字字符转换为数字:c - '0' String.S ...
- 举个栗子之gorpc - 消息的编码和解码
2022年的第一个rpc,比以往来的更早一些... 留杭过年...写点东西 初始化项目gorpc 借助go module我们可以轻易创建一个新的项目 mkdir gorpc go mod init g ...
- 如何使用 OpenAI Agents SDK 构建 MCP
1.概述 OpenAI Agents SDK 现已支持 MCP(模型上下文协议),这是 AI 互操作性的重大变革.这使开发人员能够高效地将 AI 模型连接到外部工具和数据源.本篇博客,笔者将指导使用 ...
- 帮客户解决基于surging的物流速运网关内存泄漏问题
一.概述 有surging企业客户找到我,系统已经在线上环境运行,在使用过程中碰到内存不能释放的问题,每次都要和客户打招呼进行重启造成很坏的影响,问能不能彻底解决掉,然后我打包票可以解决,解决不了不收 ...