Kubelet资源预留

[toc]

Kubelet Node Allocatable

  • Kubelet Node Allocatable用来为Kube组件和System进程预留资源,从而保证当节点出现满负荷时也能保证Kube和System进程有足够的资源。
  • 目前支持cpu, memory, ephemeral-storage三种资源预留。
  • Node Capacity是Node的所有硬件资源,kube-reserved是给kube组件预留的资源,system-reserved是给System进程预留的资源, eviction-threshold是kubelet eviction的阈值设定,allocatable才是真正scheduler调度Pod时的参考值(保证Node上所有Pods的request resource不超过Allocatable)。
  • Node Allocatable Resource = Node Capacity - Kube-reserved - system-reserved - eviction-threshold

配置参数

  • --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 。如果不设置此项,上面的--kube-reserved也不会生效。
  • --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。如果不设置此项的话,上面的--system-reserved也不会生效。
  • --eviction-hard,用来配置kubelet的hard eviction条件,只支持memory和ephemeral-storage两种不可压缩资源。当出现MemoryPressure时,Scheduler不会调度新的Best-Effort QoS Pods到此节点。当出现DiskPressure时,Scheduler不会调度任何新Pods到此节点。

配置示例

[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service

[Service]
WorkingDirectory=/var/lib/kubelet
ExecStartPre=-/bin/mkdir -p /sys/fs/cgroup/cpuset/system.slice/kubelet.service /sys/fs/cgroup/hugetlb/system.slice/kubelet.service
ExecStart=/opt/kubernetes/bin/kubelet   --eviction-hard=memory.available<1024Mi,nodefs.available<10%,nodefs.inodesFree<5%   --system-reserved=cpu=0.5,memory=1G   --kube-reserved=cpu=0.5,memory=1G   --kube-reserved-cgroup=/system.slice/kubelet.service   --system-reserved-cgroup=/system.slice   --enforce-node-allocatable=pods,kube-reserved,system-reserved   --address=10.1.61.189   --hostname-override=10.1.61.189   --cgroup-driver=cgroupfs   --pod-infra-container-image=hub.dz11.com/kubernetes/pause-amd64:3.0   --experimental-bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig   --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig   --cert-dir=/opt/kubernetes/ssl   --cluster-dns=10.1.61.136   --cluster-domain=wh01.   --hairpin-mode=promiscuous-bridge   --allow-privileged=true   --fail-swap-on=false   --serialize-image-pulls=false   --max-pods=60   --logtostderr=true   --v=2
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

原文地址:https://www.cnblogs.com/breezey/p/9100331.html

时间: 2024-10-07 09:44:12

Kubelet资源预留的相关文章

如何做k8s worker节点资源预留?

资源预留必要性 以常见的kubeadm安装的k8s集群来说,默认情况下kubelet没有配置kube-reserverd和system-reserverd资源预留.worker node上的pod负载,理论上可以使用该节点服务器上的所有cpu和内存资源.比如某个deployment controller管理的pod存在bug,运行时无法正常释放内存,那么该worker node上的kubelet进程最终会抢占不到足够的内存,无法向kube-apiserver同步心跳状态,该worker node

k8s节点资源预留的正确姿势

QOS分类 CPU限额中的request和limit 节点资源预留相关参数 为什么参数enforce-node-allocatable要添加kube-reserved,system,reserved (预留参数配置中cpu相关都是设置cpu.shares) 配置过程遇到的问题(cgroup要手动创建,代码) 我认为的一个合理配置 原文地址:https://www.cnblogs.com/orchidzjl/p/12684761.html

WSFC 主机资源预留

Hyper-V群集中未预留给VM虚拟机的物理内存量由主机使用,但是作为群集的一部分,主机通常会从群集中的其他节点接收VM 以保持其高度可用性, 这可以是用户发起的移动,例如从另一个节点实时迁移VM,也可以是资源或硬件故障的导致VM故障切换, 因此最初用户对主机预留的内存没有太多控制权,来自另一个节点的VM 可以轻松移动到特定节点并压倒其内存, 因此引入群集环境变量RootMemoryReserved,以确保群集主机具有最少量的主机物理内存储备 RootMemoryReserved属性于2008R

kubelet资源限制

sed -i 's/--port=10250/& --kube-reserved=cpu=1,memory=1Gi,ephemeral-storage=2Gi --system-reserved=cpu=1,memory=1Gi,ephemeral-storage=2Gi --eviction-hard=memory.available<500Mi,nodefs.available<10%/' /etc/kubernetes/kubelet 原文地址:https://www.cnblo

Powercli 批量配置虚拟机资源预留

Get-VMResourceConfiguration ` -vm $vm.name | Set-VMResourceConfiguration -CpuReservationMhz 576 -MemReservationMB 1024

设计的一些kubernetes面试题

公司现在上了一部分的业务至k8s,老实说,我心里很慌,在项目改造中,每天都会遇到很多问题,好友找我出一份k8s面试题,参考了网上的一些,再加上自己公司遇到的一些问题,整理如下: 参考链接:http://yaoguais.github.io/article/golang/k8sinterview.html 1.理论篇 1.1 简要说下Kubernetes有哪些核心组件以及这些组件负责什么工作? etcd:提供数据库服务保存了整个集群的状态 kube-apiserver:提供了资源操作的唯一入口,并

kubernetes kubelet组件中cgroup的层层&quot;戒备&quot;

cgroup是linux内核中用于实现资源使用限制和统计的模块,docker的风靡一时少不了cgroup等特性的支持.kubernetes作为容器编排引擎,除了借助docker进行容器进程的资源管理外,还提供了一些更加高级的资源管理功能,以提高资源利用率和更加稳定的程序运行环境,其中必然少不了cgroup这类资源管控技术的应用,那么kubernetes是如何使用cgroup哪? 如果仔细观察kubelet中关于cgroup的配置,就会发现这些配置参数多达十几个,错综复杂,怎样才能合理的配置这些参

LMT-LicManager客户端解决license预留问题

License是软件许可证的英文,软件许可证是一种格式合同,由软件作者与用户签订,用以规定和限制软件用户使用软件(或其源代码)的权利,以及作者应尽的义务. 软件许可证的分类很多,根据许可证使用时间来分,软件许可证可大致分为终身许可证,年度许可证. 终身许可证,顾名思义,便是一旦与软件开发商达成协议,签订合同后可终身无限制的使用该软件.此类许可证多见于个人用户领域. 年度许可证,指的是客户与软件开发商签订协议,按年付费来使用该软件.此类软件许可证多见于商业软件领域. 相比终身许可证,年度许可证不太

高可用 kubernetes 集群部署实践

前言 Kubernetes(k8s) 凭借着其优良的架构,灵活的扩展能力,丰富的应用编排模型,成为了容器编排领域的事实标准.越来越多的企业拥抱这一趋势,选择 k8s 作为容器化应用的基础设施,逐渐将自己的核心服务迁移到 k8s 之上. 可用性对基础设施而言至关重要.各大云计算厂商纷纷推出了高可用.可扩展的 k8s 托管服务,其中比较有代表性的有 Amazon EKS.Azure Kubernetes Service (AKS).Google Kubernetes Engine.阿里云容器服务 K