实际应用中发现,部分节点性能不足,某些较大的服务如果跑在这些机器上。会很快消耗该机器的内存和cpu资源,如果用uptime看一下的就会发现负载特别高(合理的范围这个值应该等于cpu个数),高到一定值就会导致该节点挂了。

比较好的方式是

1:底层,采用性能高的服务器用openstack分出多个虚机,通过资源的自动伸缩,但是目前还没有这个条件。直接跑在低性能的裸机上。

2:应用层,把大型服务重构成可以水平扩展的微服务,然后多个微服务分配在多个节点。

由于上述短时间难以搞定,但是为了保证集群的健康,还有一种方式,就是当某台节点的资源达到一定值,自动清理应用,以node第一优先级。

为了做更可靠的调度,尽量减少资源过量使用,kubernetes把主机的资源分为几个部分:
● Node Capacity:主机容量是一个固定值,是主机的实际的容量。
● System-Reserved:不属于kubernetes的进程占用的资源量。
● Kubelet Allocatable:可以被kubelet用来启动容器的资源量。
● Kube-Reserved:被kubernetes的组件占用的资源量,包括docker daemon,kubelet,kube-proxy等。
[Allocatable] = [Node Capacity] – [Kube-Reserved] – [System-Reserved]
kubernetes调度器在调度Pod和kubelet在部署Pod做资源校验时都使用 Allocatable 资源量作为数据输入。

可以在kubelet中设置系统保留资源来提高Node节点的稳定性。参数为 –system-reserved 和 –kube-reserved。
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
添加

参数:
1:设置预留系统服务的资源
--system-reserved=cpu=200m,memory=1G

2:设置预留给k8s组件的资源(主要组件)
--kube-reserved=cpu=200m,memory=1G
系统内存-system-reserved-kube-reserved 就是可以分配给pod的内存

3:驱逐条件
--eviction-hard=memory.available<500Mi,nodefs.available<1Gi,imagefs.available<100Gi

4:最小驱逐
--eviction-minimum-reclaim="memory.available=0Mi,nodefs.available=500Mi,imagefs.available=2Gi"

5:节点状态更新时间
--node-status-update-frequency =10s

6:驱逐等待时间
--eviction-pressure-transition-period=20s

验证方案:
1:设置--eviction-hard=memory.available<2Gi(建议设置25%,但是配置无法写百分)
2:./memtester 6G
free查看,内存使用已经超出设定的值
3:约10秒后MemoryPressure状态变成True
4:释放申请的内存后约10s后,MemoryPressure变回false(如果不设置node-status-update-frequency 会等5分钟才会变回False。设置了10秒,10秒内才会变回False)
eviction-pressure-transition-period(default 5m0s)

问题:被驱逐的pod 状态是The node was low on resource: memory.,无法自动删除,需要手动删除

systemctl daemon-reload
systemctl restart kubelet
现有参数 新参数
—image-gc-high-threshold —eviction-hard or eviction-soft
—image-gc-low-threshold —eviction-minimum-reclaim
—maximum-dead-containers 弃用
—maximum-dead-containers-per-container 弃用
—minimum-container-ttl-duration 弃用
—low-diskspace-threshold-mb —eviction-hard or eviction-soft
—outofdisk-transition-frequency —eviction-pressure-transition-period

结论:

4g1C 以上推荐:
Environment="KUBELET_OTHER_ARGS=--pod-infra-container-image=wyun.io/google-containers/pause-amd64:3.0 --system-reserved=cpu=200m,memory=250Mi --kube-reserved=cpu=200m,memory=250Mi --eviction-hard=memory.available<1Gi,nodefs.available<1Gi,imagefs.available<1Gi --eviction-minimum-reclaim=memory.available=500Mi,nodefs.available=500Mi,imagefs.available=1Gi --node-status-update-frequency=10s --eviction-pressure-transition-period=30s"

● Kubelet通过Eviction Signal来记录监控到的Node节点使用情况。
● Eviction Signal支持:memory.available, nodefs.available, nodefs.inodesFree, imagefs.available, imagefs.inodesFree。
● 通过设置Hard Eviction Thresholds和Soft Eviction Thresholds相关参数来触发Kubelet进行Evict Pods的操作。
● Evict Pods的时候根据Pod QoS和资源使用情况挑选Pods进行Kill。
● Kubelet通过eviction-pressure-transition-period防止Node Condition来回切换引起scheduler做出错误的调度决定。
● Kubelet通过--eviction-minimum-reclaim来保证每次进行资源回收后,Node的最少可用资源,以避免频繁被触发Evict Pods操作。
● 当Node Condition为MemoryPressure时,Scheduler不会调度新的QoS Class为BestEffort的Pods到该Node。
● 当Node Condition为DiskPressure时,Scheduler不会调度任何新的Pods到该Node。

测试:
模拟增加内存
stress -i 1 --vm 1 --vm-bytes 2G
or
memtester

查看状态:
while true; do kubectl describe node izbp1ijmrejjh7tz |grep MemoryPressure&& sleep 2; done
while true; do free -h&& sleep 2; done

问题:
1:会在同一时间出现很多相同的pod Failed的状态(MemoryPressure)
改变eviction-minimum-reclaim=memory.available=500M 设置的大一点

kubeernetes节点资源限制的更多相关文章

  1. 脚本检测CDN节点资源是否与源站资源一致

    需求: 1.所有要检测的资源url放到一个单独文件中 2.检测cdn节点资源大小与源站文件大小是否一致 3.随机抽查几个资源,检查md5sum是否一致 4.使用多线程,可配置线程数 代码目录: hex ...

  2. k8s pod节点调度及k8s资源优化

    一.k8s pod 在节点间调度控制 k8s起pod时,会通过调度器scheduler选择某个节点完成调度,选择在某个节点上完成pod创建.当需要在指定pod运行在某个节点上时,可以通过以下几种方式: ...

  3. Kubernetes自动横向伸缩集群节点以及介绍PDB资源

    在kubernetes中,有HPA在需要的时候创建更多的pod实例.但万一所有的节点都满了,放不下更多pod了,怎么办?显然这个问题并不局限于Autoscaler创建新pod实例的场景.即便是手动创建 ...

  4. redhat6.5 redis单节点多实例3A集群搭建

    在进行搭建redis3M 集群之前,首先要明白如何在单节点上完成redis的搭建. 单节点单实例搭建可以参看这个网:https://www.cnblogs.com/butterflies/p/9628 ...

  5. Keepalived详解(四):通过vrrp_script实现对集群资源的监控【转】

    一.通过vrrp_script实现对集群资源的监控: Keepalived基础HA功能时用到了vrrp_script这个模块,此模块专门用于对集群中服务资源进行监控.与此模块一起使用的还有track_ ...

  6. Kubernetes学习之路(二十三)之资源指标和集群监控

    目录 1.资源指标和资源监控 2.Weave Scope监控集群 (1)Weave Scope部署 (2)使用 Scope (3)拓扑结构 (4)实时资源监控 (5)在线操作 (6)强大的搜索功能 2 ...

  7. 理解DDoS防护本质:基于资源较量和规则过滤的智能化系统

    本文由  网易云发布. 随着互联网生态逐渐形成,DDoS防护已经成为互联网企业的刚需要求,网易云安全(易盾)工程师根据DDoS的方方面面,全面总结DDoS的攻防对抗. 1.什么是DDoS DDoS全称 ...

  8. 11gR2 RAC重新启动后仅仅能起单节点

    11gR2 RAC重新启动后仅仅能起单节点 问题背景: 将11gR2 RAC正常部署完毕之后运行两节点重新启动操作发现当中有一个节点的集群资源无法启动,遂再次重新启动该无法启动集群资源的节点,还是不可 ...

  9. Keepalived 资源监控

    简介: 作为一个高可用集群软件,Keepalived 没有 Heartbeat .RHCS 等专业的高可用集群软件功能强大,它不能够实现集群资源的托管,也不能实现对集群中运行服务的监控,好在 Keep ...

随机推荐

  1. 命令行利用KVM创建虚拟机

    一,实验环境 OS:CENTOS6.5 X86_64 二,KVM宿主环境配置 1.cat /proc/cpuinfo | egrep 'vmx|svm'  //查看是否支持虚拟技术 2.安装KVM相关 ...

  2. 201521123018 《Java程序设计》第2周学习总结

    1. 本章学习总结 * String类 * Java数组Array的使用 2. 书面作业 Q1.(1) 使用Eclipse关联jdk源代码,并查看String对象的源代码(截图)? (2)分析Stri ...

  3. Eclipse rap 富客户端开发总结(11) : rcp/rap与spring ibatis集成

    1. rcp/rap 与 spring 集成 Activator 是rcp/rap 启动时需要加载的类, 只需要加载一遍,所以与spring 集成的时候一般是在这个类里面加载spring 的Appli ...

  4. Spring第三篇【Core模块之对象依赖】

    前言 在Spring的第二篇中主要讲解了Spring Core模块的使用IOC容器创建对象的问题,Spring Core模块主要是解决对象的创建和对象之间的依赖关系,因此本博文主要讲解如何使用IOC容 ...

  5. Struts2第四篇【请求数据自动封装、Action得到域对象】

    前言 前三篇的Struts博文基本把Struts的配置信息讲解完了-..本博文主要讲解Struts对数据的处理 一般地,我们使用Servlet的时候都是分为几个步骤的: 得到web层的数据.封装数据 ...

  6. WebUtils复用代码【request2Bean、UUID】

    request封装到Bean对象 public static <T> T request2Bean(HttpServletRequest httpServletRequest, Class ...

  7. Azure ARM (16) 基于角色的访问控制 (Role Based Access Control, RBAC) - 使用默认的Role

    <Windows Azure Platform 系列文章目录> 今天上午刚刚和客户沟通过,趁热打铁写一篇Blog. 熟悉Microsoft Azure平台的读者都知道,在老的Classic ...

  8. 谈一谈synchronized关键词

    1.使用 java中的每一个对象都可以作为synchronized的锁进行代码同步,常见的形式 同步代码块锁是synchronized括号内的对象 普通成员方法上,锁是当前的对象,synchroniz ...

  9. Java 自增(++) 和 C语言中自增的区别

    在Java.c语言等高级语言中自增和自减的作用基本一致,都是变量自身加一或减一.下面我只对自增进行说明,自减是类似的. 自增运算符(++),有两种书写形式,一个是在变量前: ++ num; 另一种在变 ...

  10. 第6章 Overlapped I/O, 在你身后变戏法 ---1

    这一章描述如何使用 overlapped I/O(也就是 asynchronous I/O).某些时候 overlapped I/O 可以取代多线程的功用.然而,overlapped I/O 加上co ...