kubernetes
  • Introduction
  • 安装
    • 组件端口
    • 二进制安装
    • Kubeadm
      • 安装单Master集群
      • 安装高可用集群(手动分发证书)
      • 安装高可用集群(自动上传证书)
      • 安装ETCD集群
      • 安装高可用集群(外部ETCD)
    • 启动参数解析
      • ETCD相关参数
  • 负载均衡
    • Service
    • Ingress
    • 安装MetalLB
    • Nginx-ingress-controller
      • 转发TCP与UDP服务
      • 启动参数
      • 自定义Nginx模板
  • 存储
    • Volume
    • PV与PVC
    • StorageClass
    • Local-PV
      • Static-Provisioner
    • 实践
      • Ceph-RBD
      • NFS
  • 有状态服务
    • Mysql实践
    • Operator
      • Etcd
      • Zookeeper
      • Mysql
  • 认证与授权
    • 认证
      • 实践
    • 授权
  • Helm
    • 安装
    • Chart
      • 依赖
    • Helm命令
    • Repository
  • 日志
  • 监控
    • Prometheus体系
      • Prometheus
        • 内置函数
        • 配置
          • 规则文件
        • PromQL
      • Exporter
        • Metrics
      • Grafana
        • 配置
      • AlertManager
        • 配置
    • 容器监控
      • Cadvisor的指标
      • k8s中部署Prom与Cadvisor
  • Istio
  • 资源预留
    • imagefs与nodefs
    • 总结
  • 集群联邦
    • 联邦DNS原理
    • 联邦DNS安装
    • 安装federation-v1
  • Other
    • ImagePullSecret
    • QOS
    • Apiserver的代理
    • 资源配额
Powered by GitBook
On this page
  • Eviction与OOM
  • imagefs与nodefs
  • 建议的参数配置

Was this helpful?

  1. 资源预留

总结

Eviction与OOM

1、eviction是指kubelet对该节点上的Pod进行驱逐,OOM是指cgroup对进程进行kill

2、kubelet对Pod进行驱逐时,是根据--eviction-hard参数;比如该参数如果设置了memory.available<20%,那么当主机的内存使用率达到80%时,kubelet便会对Pod进行驱逐。但是,--eviction-hard=memory.available<20%不会对/sys/fs/cgroup/memory/kubepods/memory.limit_in_bytes的值产生影响,因为kubepods/memory.limit_in_bytes = capacity - kube-reserved - system-reserved,换句话说,Pod的内存使用量总和是可以超过80%的,且不会被OOM-kill,只会被eviction。

3、kubernetes对Pod的驱逐机制如下:(1)首先驱逐没有设置资源限制的Pod(2)然后驱逐资源上限和资源下限不一样的Pod(3)最后驱逐资源上限等资源下限的Pod (4)注意,这里说的资源,是指Pod中设置的cpu与内存

imagefs与nodefs

1、imagefs为docker安装目录所在分区,nodefs为kubelet的参数--root-dir指定目录所在的分区

2、Pod使用的inode可以超过阈值,当节点的inode使用率达到阈值时,kubernetes会对pod进行驱逐,直到inode使用率低于阈值为止。由于单个Pod不能设置inode的使用量,所以驱逐Pod的时候,不是根据Pod的inode使用量来驱逐。

建议的参数配置

--enable-node-allocatable=pods
--system-reserved=cpu=xx
--eviction-hard=memory.available<20%,nodefs.inodesFree<20%,imagefs.inodesFree<20%,nodefs.available<20%,imagefs.available<20%

说明:--system-reserved参数中不能设置百分比,所以上面的cpu=xx中的xx要用绝对值表示。一般为系统预留20%的cpu,比如总CPU为10,则xx为2。

上面配置的效果:

1、当主机上总的内存使用率达到80%时,kubelet开始对Pod进行驱逐(不是OOM-Kill)

2、当主机上imagefs与nodefs的使用率达到80%时,kubelet开始对Pod进行驱逐

3、当主机上所有Pod的cpu使用率之和达到80%时,cgroup会对某个Pod中的进程进行Kill(不是驱逐),至于kill哪一个进程,机制还不清楚

Previousimagefs与nodefsNext集群联邦

Last updated 5 years ago

Was this helpful?