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

资源预留必要性

以常见的kubeadm安装的k8s集群来说,默认情况下kubelet没有配置kube-reserverd和system-reserverd资源预留。worker node上的pod负载,理论上可以使用该节点服务器上的所有cpu和内存资源。比如某个deployment controller管理的pod存在bug,运行时无法正常释放内存,那么该worker node上的kubelet进程最终会抢占不到足够的内存,无法向kube-apiserver同步心跳状态,该worker node节点的状态进而被标记为NotReady。随后deployment controller会在另外一个worker节点上创建一个pod副本,又重复前述过程,压垮第二个worker node,最终整个k8s集群将面临“雪崩”危险。

资源分类

Node capacity:节点总的资源
kube-reserved:预留给k8s进程的资源(如kubelet, container runtime, node problem detector等)
system-reserved:预留给操作系统的资源(如sshd、udev等)
eviction-threshold:kubelet eviction的阀值
allocatable:留给pod的可用资源=Node capacity  -  kube-reserved  -  system-reserved  -  eviction-threshold

配置方法

以ubuntu 16.04+k8s v1.14的环境举例,配置步骤如下。

1.修改/var/lib/kubelet/config.yaml

enforceNodeAllocatable:
- pods
- kube-reserved
- system-reserved
systemReserved:
  cpu: "1"
  memory: "2Gi"
kubeReserved:
  cpu: "1"
  memory: "2Gi"
systemReservedCgroup: /system.slice
kubeReservedCgroup: /system.slice/kubelet.service

 参数解释

enforce-node-allocatable=pods,kube-reserved,system-reserved   #默认为pod设置,这里要给kube进程和system预留所以要加上。
  kube-reserved-cgroup=/system.slice/kubelet.service   #k8s组件对应的cgroup目录
  system-reserved-cgroup=/system.slice               #系统组件对应的cgroup目录
  kube-reserved=cpu=1,memory=2Gi                  #k8s组件资源预留大小
  system-reserved=cpu=2,memory=4Gi              #系统组件资源预留大小。结合主机配置和系统空载占用资源量的监控,实际测试确定。

注:根据实际需求,也可以对ephemeral-storage做预留,例如“kube-reserved=cpu=1,memory=2Gi, ephemeral-storage=10Gi"

2.修改/lib/systemd/system/kubelet.service

由于cpuset和hugetlb这两个cgroup subsystem默认没有初始化system.slice,需要在启动进程前指定创建。

[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/home/

[Service]
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/cpuset/system.slice/kubelet.service
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/hugetlb/system.slice/kubelet.service
ExecStart=/usr/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10

[Install]
WantedBy=multi-user.target

3.重启kubelet进程

systemctl restart kubelet
systemctl status kubelet

4.查看worker node的可用资源

kubectl describe node [Your-NodeName]

Capacity:
 cpu:                40
 ephemeral-storage:  197608716Ki
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             131595532Ki
 pods:               110
Allocatable:
 cpu:                37
 ephemeral-storage:  182116192365
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             125201676Ki
 pods:               110

参考文档:

https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/

https://my.oschina.net/jxcdwangtao/blog/1629059

原文地址:https://www.cnblogs.com/abcdef/p/11705969.html

时间: 2024-10-09 20:33:45

如何做k8s worker节点资源预留?的相关文章

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

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

k8s master查看不到worker节点

k8s master查看不到worker节点 一. 问题 master节点已经安装好,但是worker加入master显示成功,但是在master节点上使用kubectl get nodes命令查看不到,且master节点时而ready时而NotReady,worker重置kubeadm reset后,master节点恢复正常. 二 . 解决方法 通过设置hosts和hostname解决 2.1 设置hosts $ cat /etc/hosts 192.168.25.131 master01 1

使用kubeadm部署k8s集群09-配置worker节点

使用kubeadm部署k8s集群09-配置worker节点 2018/1/4 配置 worker 节点 初始化 加入集群 切换 worker 节点连接到 apiserver 的 LB 入口 调整集群中节点角色和调度策略 初始化 /etc/hosts ### k8s master @envDev 10.10.9.67 tvm-00 10.10.9.68 tvm-01 10.10.9.69 tvm-02 k8s worker @envDev 10.10.9.74 tvm-0310.10.9.75 t

k8s中node节点资源不足

节点资源耗尽状态 1.查看节点组件的状态 2.查看节点上pod的状态 查看日志内容发现如下内容: 1.Node emay-CMPP01 status is now: NodeHasDiskPressure 2.Warning: "EvictionThresholdMet Attempting to reclaim nodefs" 从以上内容大致可以判断出node3处于磁盘空间不足的状态下,并且该node上的kubelet daemon判断达到了Eviction阀值,试图回收磁盘空间(通

kubernetes(七)二进制安装-worker节点安装

配置kubelet kubelet 运行在每个 worker 节点上,接收 kube-apiserver 发送的请求,管理 Pod 容器,执行交互式命令,如 exec.run.logs 等. kubelet 启动时自动向 kube-apiserver 注册节点信息,内置的 cadvisor 统计和监控节点的资源使用情况. 为确保安全,部署时关闭了 kubelet 的非安全 http 端口,对请求进行认证和授权,拒绝未授权的访问(如 apiserver.heapster 的请求). 创建 kube

蜗龙徒行-Spark学习笔记【三】Spark集群中worker节点扩展实战经验

一.集群原先配置: 从机名sparkMaster,Ubuntu12.04-32 ,用户名Root , 内存4g    (只用于任务调度和分配,不做计算节点) 从机名sparkSlave1,Ubuntu12.04-32 ,用户名Root , 内存4g    (计算节点) 从机名sparkSlave2,Ubuntu12.04-32 ,用户名Root , 内存1.7g (计算节点) 二.扩展原因:计算数据量增大,原先的两个工作节点已不不能满足实时性的需求,由于实验室计算资源有限,故将原先的调度节点也增

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进程预留的资源, evictio

K8s多节点部署详细步骤,附UI界面的搭建

K8s多节点部署 需要准备的环境: 6台centos7设备:192.168.1.11 master01192.168.1.12 node1192.168.1.13 node2192.168.1.14 master02192.168.1.15 lb1192.168.1.16 lb2VIP:192.168.1.100 实验步骤: 1:自签ETCD证书 2:ETCD部署 3:Node安装docker 4:Flannel部署(先写入子网到etcd)---------master----------5:自

任务中如何确定spark分区数、task数目、core个数、worker节点个数、excutor数量

1.任务中如何确定spark RDD分区数.task数目.core个数.worker节点个数.excutor数量 (1)hdfs 上的文件的存储形式是以 Block 的形式存储的,每个 File 文件都包含了很多块,一个Block默认是128M大小.当 spark 从 hdfs 上读取数据的时候,会根据具体数据格式对应的 InputFormat 进行解析,一般是将若干个Block合并成一个输入分片,称为 InputSplit,其中要注意InputSplit不能跨越文件 File. (2)spar