为k8s预留系统资源

Kubernetes 的节点可以按照 Capacity 调度。默认情况下 pod 能够使用节点全部可用容量。 这是个问题,因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的系统守护进程。 除非为这些系统守护进程留出资源,否则它们将与 pod 争夺资源并导致节点资源短缺问题。

kubelet 公开了一个名为 Node Allocatable 的特性,有助于为系统守护进程预留计算资源。 Kubernetes 推荐集群管理员按照每个节点上的工作负载密度配置 Node Allocatable

节点可分配

如何配置

  • --enforce-node-allocatable,默认为pods,要为kube组件和System进程预留资源,则需要设置为pods,kube-reserved,system-reserve
  • --cgroups-per-qos,Enabling QoS and Pod level cgroups,默认开启。开启后,kubelet会将管理所有workload Pods的cgroups。
  • --cgroup-driver,默认为cgroupfs,另一可选项为systemd。取决于容器运行时使用的cgroup driver,kubelet与其保持一致。比如你配置docker使用systemd cgroup driver,那么kubelet也需要配置--cgroup-driver=systemd。
  • --kube-reserved,用于配置为kube组件(kubelet,kube-proxy,dockerd等)预留的资源量,比如—kube-reserved=cpu=1000m,memory=8Gi,ephemeral-storage=16Gi。
  • --kube-reserved-cgroup,如果你设置了--kube-reserved,那么请一定要设置对应的cgroup,并且该cgroup目录要事先创建好,否则kubelet将不会自动创建导致kubelet启动失败。比如设置为kube-reserved-cgroup=/kubelet.service 。
  • --system-reserved,用于配置为System进程预留的资源量,比如—system-reserved=cpu=500m,memory=4Gi,ephemeral-storage=4Gi。
  • --system-reserved-cgroup,如果你设置了--system-reserved,那么请一定要设置对应的cgroup,并且该cgroup目录要事先创建好,否则kubelet将不会自动创建导致kubelet启动失败。比如设置为system-reserved-cgroup=/system.slice。
  • --eviction-hard,用来配置kubelet的hard eviction条件,只支持memory和ephemeral-storage两种不可压缩资源。当出现MemoryPressure时,Scheduler不会调度新的Best-Effort QoS Pods到此节点。当出现DiskPressure时,Scheduler不会调度任何新Pods到此节点。

以32C/96G为例:

我是kubespray安装的在/etc/kubernetes/kubelet.env添加以下参数后重启kubelet生效:

--system-reserved=cpu=200m,memory=10Gi \
--eviction-hard=memory.available<10Gi,nodefs.available<1Gi,imagefs.available<1Gi \
--eviction-minimum-reclaim=memory.available=1Gi,nodefs.available=500Mi,imagefs.available=1Gi \
--node-status-update-frequency=10s --eviction-pressure-transition-period=30s"

内存压测:

yum install -y stress
stress -i 1 --vm 1 --vm-bytes 20G

最新文章

  1. Eclipse 显示所有文件
  2. HDU4010 (动态树)
  3. Some Simple Models of Neurons
  4. [译]SQL Server 之 查询计划的简单参数化
  5. SQL查看表锁定,死锁解锁
  6. Heritrix 3.1.0 源码解析(三十七)
  7. sql2005数据库转换成sql2000
  8. cocos2d-x实战 C++卷 学习笔记--第4章 使用菜单
  9. Polyline对象 - (及其他对象的关系)
  10. PHP学习笔记八【数组】
  11. MVC中使用AuthorizeAttribute做身份验证操作【转】
  12. Objective-C语法概述
  13. 【Unity技巧】统一管理回调函数——观察者模式
  14. es6 filter() 数组过滤方法总结
  15. 在vue中调用echarts中的地图散点图~
  16. echarts地图 禁止高亮显示(转载)
  17. Linux配置防火墙,开启80端口、3306端口
  18. openstack cpu pinning
  19. InstallShield 2015 安装 在vs2015
  20. BZOJ2553 Beijing2011禁忌(AC自动机+动态规划+矩阵快速幂+概率期望)

热门文章

  1. 联赛模拟测试25 C. Repulsed 贪心+树形DP
  2. C语言积累一点点
  3. 关于Java引用,你必须知道这些
  4. [Luogu P2824] [HEOI2016/TJOI2016]排序 (线段树+二分答案)
  5. 我的第二次C语言作业
  6. Java_静态代理与Lambda
  7. 关于C语言中的位运算符的学习即应用
  8. Netty源码解析 -- ChannelOutboundBuffer实现与Flush过程
  9. 配置交换机基于接口划分VLAN(接入层设备作为网关)
  10. 使用Python虚拟环境