首页 > 其他分享 >k8s 调优 参数优化

k8s 调优 参数优化

时间:2024-05-16 09:01:17浏览次数:24  
标签:-- cpu manager 调优 参数 k8s root CPU 资源

这些参数是 Kubernetes(K8s)中的一些配置选项,用于控制不同的行为和功能。让我逐个解释它们:

  1. --feature-gates=RotateKubeletClientCertificate=true,RotateKubeletServerCertificate=true

    • 这个参数用于启用或禁用一些实验性的功能。在这里,启用了两个功能:RotateKubeletClientCertificate 和 RotateKubeletServerCertificate。这些功能可能是用于定期轮换 Kubelet 的客户端证书和服务器证书,以增强安全性。
  2. --image-gc-high-threshold=70

    • 这个参数设置了镜像垃圾收集的高阈值。当节点上的磁盘使用率高于此阈值时,Kubernetes 将开始垃圾收集(删除不再使用的镜像)以释放空间。
  3. --image-gc-low-threshold=60

    • 这个参数设置了镜像垃圾收集的低阈值。一旦磁盘使用率下降到此阈值以下,垃圾收集过程将停止。
  4. --kube-reserved=cpu=500m,memory=512Mi,ephemeral-storage=1Gi

    • 这个参数设置了 Kubernetes 对节点上资源的保留量。具体来说,为 CPU 分配了 500 毫核(500m),内存分配了 512MB(512Mi),临时存储(ephemeral storage)分配了 1GB(1Gi)。
  5. --system-reserved=cpu=1000m,memory=1024Mi,ephemeral-storage=1Gi

    • 这个参数设置了系统对节点上资源的保留量。类似于上一个参数,为 CPU 分配了 1000 毫核(1000m),内存分配了 1024MB(1024Mi),临时存储(ephemeral storage)分配了 1GB(1Gi)。

这些参数可以根据你的集群需求进行调整,以确保系统的稳定性和性能。

 

控制节点上的 CPU 管理策略

1.前言
在业务中使用Kubernetes编排容器时,通常会使用到Request & Limits参数对容器进行CPU与内存的使用限制.
但是对于某些比较消耗系统资源的业务,可能需要进行资源的独占分配(以保证其运行的性能).
所以使用单一的资源限制,还不能达到pod运行的性能,所以需要进行资源独占的分配编排.
在Kubernetes 版本> v1.12中,有CPU Manager技术去实现Pod级别的绑定运行CPU.

1.1 理解CPU Manager作用
每个worker节点运行多个pod,某些Pods可能会运行高CPU负载的业务,这些高负载的pod,很有可能在当前的节点上
抢占CPU的资源,影响当前节点上其他pod的运行性能.所以采用此技术来解决这个问题.


1.2 CPU 管理策略配置
CPU 管理策略通过 kubelet 参数 --cpu-manager-policy 来指定。Kubernetes 支持两种管理策略:
none: 默认策略,表示现有的调度行为。
static: 允许为节点上的某些消耗CPU资源的pod对cpu有独占性。

CPU管理器定期通过CRI写入资源更新,以保证内存中CPU分配与cgroupfs一致.
同步频率通过新增的 Kubelet 配置参数 --cpu-manager-reconcile-period 来设置.
如果不指定,默认与 --node-status-update-frequency 的周期相同。


1.3 none策略
none 策略显式地启用现有的默认CPU亲和方式,
不提供操作系统调度器默认行为之外的亲和性策略.
通过 CFS 配额来实现 Guaranteed pods 的 CPU 使用限制.

1.4 static 策略
static 策略针对具有整数型(容器对 CPU 资源的限制值是一个大于或等于1的整数值) CPU requests的 Guaranteed Pod,
它允许该类 Pod 中的容器访问节点上的独占CPU资源.
这种独占性是使用 cpuset cgroup 控制器来实现的.

#独占的CPU资源计算
可用的独占性 CPU 资源数量等于节点的 CPU 总量减去通过 --kube-reserved 或 --system-reserved 参数保留的 CPU 。

#注意事项
当启用static策略时,要求使用--kube-reserved
或 --system-reserved 或 --reserved-cpus 来保证预留的CPU值大于零.(避免cpu共享池为空)

1.5 具体配置
#增加参数配置
--cpu-manager-policy=static
--kube-reserved=cpu=0.5,memory=1G
--feature-gates=CPUManager=true

#配置项(注意修改主机名)
[root@node-1 bin]#cat >/etc/kubernetes/cfg/kubelet<<EOF
KUBELET_OPTS="--logtostderr=true \
--v=4 \
--hostname-override=192.168.91.21 \
--kubeconfig=/etc/kubernetes/cfg/kubelet.kubeconfig \
--bootstrap-kubeconfig=/etc/kubernetes/cfg/bootstrap.kubeconfig \
--config=/etc/kubernetes/cfg/kubelet.config \
--cert-dir=/etc/kubernetes/ssl \
--kube-reserved=cpu=0.5,memory=1G \
--cpu-manager-policy="static" \
--feature-gates="CPUManager=true" \
--pod-infra-container-image=docker.io/kubernetes/pause:latest"
EOF


#说明
--kube-reserved:节点保留的cpu与内存


#重启服务
[root@node-1 ~]# systemctl daemon-reload && systemctl restart kubelet


1.6 测试
#注意测试之前需要将节点cpu调整到4 CORE
#查询当前机器的核心
[root@node-1 ~]# cat /proc/cpuinfo | grep process
processor : 0
processor : 1
processor : 2
processor : 3

#导入镜像
[root@node-1 ~]# docker load -i k8s.gcr.io.pause.3.1.tar.gz

#创建yaml
[root@master-1 nginx]# cat nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: cpu-manager-demo
labels:
app: cpu-manager-demo
spec:
replicas: 2
selector:
matchLabels:
app: cpu-manager-demo
template:
metadata:
labels:
app: cpu-manager-demo
spec:
containers:
- name: cpu-manager-demo
image: nginx
resources:
requests:
cpu: 2
memory: "256M"
limits:
cpu: 2
memory: "256M"
ports:
- containerPort: 80

#创建deployment
[root@master-1 nginx]# kubectl apply -f nginx-deployment.yaml
deployment.apps/cpu-manager-demo created


#在节点获取容器
[root@node-1 ~]# docker ps | grep cpu-manager-demo
e5efcefacc84 nginx "/docker-entrypoint.…" 2 minutes ago
Up 2 minutes
k8s_cpu-manager-demo_cpu-manager-demo-67bbfc5d96-bvp5w_default_271fa62c-089f-4677-9c2b-778dfb898411_0

#获取容器pid
[root@node-1 ~]# docker inspect e5efcefacc84 | grep Pid
"Pid": 20114,
"PidMode": "",
"PidsLimit": null,

#查询 PID= 20114 的线程可用的CPU核心
[root@node-1 ~]# taskset -c -p 20114
pid 20114's current affinity list: 0,1


#如果没有设置CPU绑定,则是每个核心都可以运行
[root@node-3 ~]# taskset -c -p 5634
pid 5634's current affinity list: 0-3

 

 

Kubernetes中的LimitRangerResourceQuota是用于资源管理和限制的两个重要功能。

  1. LimitRanger:

    • LimitRanger允许你为单个Pod中的各种资源(如CPU、内存)设置限制。这可以防止某个Pod占用过多的资源,从而影响其他Pod的正常运行。通过LimitRanger,你可以指定每个Pod的资源限制,确保集群中的资源分配合理,提高整体性能和稳定性。
  2. ResourceQuota:

    • ResourceQuota允许你为整个命名空间设置资源配额。这意味着你可以限制命名空间中所有Pod、容器和持久卷的资源使用量。ResourceQuota可以帮助你控制资源的消耗,避免过度使用集群资源,并在资源使用达到指定限制时触发警报或采取其他措施。

这两个功能结合起来,可以有效地管理Kubernetes集群中的资源,确保每个应用程序都能获得足够的资源,并且不会耗尽整个集群的资源。通过合理设置资源限制和配额,可以提高集群的可靠性和稳定性,同时最大化资源利用率。

 

 

  TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back     此页面的语言为中文(简体)   翻译为          

标签:--,cpu,manager,调优,参数,k8s,root,CPU,资源
From: https://www.cnblogs.com/gaoyuechen/p/18195210

相关文章

  • 搭建k8s集群完整版本
    搭建k8s集群完整版基础设置设置主机ipnmcliconaddifnameens33con-nameens33autoconnectyestypeethernetnmcliconmodifyens33ipv4.methodmanualipv4.dns114.114.114.114ipv4.addresses192.168.109.102/24ipv4.gateway192.168.109.2修改主机名hostname......
  • Spring Boot项目,LocalDateTime参数在不同传参方式下的报错
    背景很基础的问题,只是项目中有遇到,简单记录一下两个类似的请求,一个为GET请求,普通传参方式,一个为POST请求,JSON传参,用@RequestBody接受,两者的传参是同一个对象,其中有个参数updateTime,类型为LocalDateTimeGET请求正常,POST请求会报400原因很基础的问题GET请求的参数通常通过URL......
  • @Validated、@Valid在service层参数校验
    工具类:publicclassValidationUtils{privatestaticfinalValidatorvalidator;static{validator=Validation.buildDefaultValidatorFactory().getValidator();}/***校验对象**@paramobject待校验对象*@paramgroups待校验......
  • k8s-Service资源
    Service资源的作用: 因为k8s是使用RC来管理保证它的高可用,RC是管理k8spod的.如果一个pod挂掉了,就会马上自动启动一个可用的pod,那么新的pod的IP肯定就是新的。如果是采用端口映射的话,就会出现刚配置好的pod端口和ip在pod挂了后新的pod被启动了新pod又是一个新的ip,难道又马上......
  • 解决k8s调度不均
    在近期的工作中,我们发现k8s集群中有些节点资源使用率很高,有些节点资源使用率很低,尝试重新部署应用和驱逐Pod,发现并不能有效解决负载不均衡问题。调度不均衡的问题可能有多个原因导致,下面是一些可能的原因:节点资源分配不均:某些节点可能被分配了更多的资源(如CPU、内存)而导致......
  • 用javax.ws.rs.client.Invocation queryParam 执行url中带参数的请求
    来自于百度AI,为了实际需要,改成我自己的环境。importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;importorg.apache.commons.lang3.StringUtils;importorg.glassfish.jersey.client.ClientConfig;importorg.glassfish.jersey.client......
  • 解决ajax请求参数过多导致参数被截断的问题
    最近发现了个问题:ajaxpost请求查询参数数量动态变化有200-250000个,当参数超过一定数量N时,post传到后台接的参数就只有N个,多出的参数都没附到请求中,这也是奇怪的事情,浏览器对参数的个数有限制。jsconstpayload={date:"2024-05-10",sn:[]};for(leti=1;i<1000......
  • 在Linux中,如何进行网络性能调优?
    网络性能调优在Linux系统中是一个复杂且细致的过程,涉及多个方面,包括但不限于网络参数调整、协议栈优化、硬件配置、以及特定应用的优化。以下是一些基本的网络性能调优方法和步骤:1.网络参数调整1.1修改内核参数TCP缓冲区大小调整:通过调整/proc/sys/net/core/wmem_max和/p......
  • K8S之yaml 文件详解pod、deployment、service(转)
    原文:https://blog.csdn.net/footless_bird/article/details/125946101作者:墨鸦_Cormorant来源:CSDN K8S中的yaml文件yaml语法学习 Kubernetes支持YAML和JSON格式管理资源对象 JSON格式:主要用于api接口之间消息的传递 YAML格式:用于配置和管理,YAML是一种简......
  • k8s nodeName与nodeSelector的简单应用(转)
    原文:https://blog.csdn.net/xhredeem/article/details/127687465作者:xhredeem来源:CSDN默认情况下,k8smaster管理节点有污点标签,默认是NoSchedule,即不会被调度。新创建的pod会随机选择除了master管理节点的以外的node工作节点上创建。如果想要使某个新建pod在某个node节点创建......