kubernetes OpenShift在部署前验证pod内存和CPU

xvw2m8pv  于 2023-03-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(198)

bounty将在6天后过期。回答此问题可获得+50的声望奖励。user804401正在寻找规范答案

我们使用Deployment Config将服务部署到OpenShift,并在yaml文件中指定资源限制。
我们正在使用Azure Devops中的OC Process命令部署我们的服务。
正在寻找一种方法来验证在部署之前请求的内存和cpu是否可用。
有没有一种方法可以从Azure Devops或通过一些我可以包含在任务中的bash脚本来实现这一点。

holgip5t

holgip5t1#

kube调度器负责调度节点中的pod,其中所需的资源可用。
为Pod中的容器指定资源请求时,kube调度程序将使用此信息来决定将Pod放置在哪个节点上。为容器指定资源限制时,Kubelet强制执行这些限制,从而不允许正在运行的容器使用超过您设置的限制的资源。库单元还至少保留该系统资源的请求量专门供该容器使用。
https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
我认为发明一个脚本来控制节点上的这些参数是一种反模式。
你应该做的是:
1.用提供的n. pod + cpu/ram请求/限制进行预评估
1.确保工作进程有足够的资源来完成预期负载
1.在部署请求/限制的管道中添加控制,以确保释放的资源是您所期望的
1.配置主动监控,以便在节点达到某个资源使用饱和水平时进行拦截(使用Prometheus/Alertmanager监控堆栈,可以非常容易地实现这一点),并最终继续扩展节点/Pod
显然,如果您的资源不必有限制,也许是为了管理资源的异常峰值或这类事情(例如,我认为Jenkins),最好将节点专用于这些部署。
如果集群不是由您支配,而是可能与其他应用程序团队共享,那么将Quota on Namespace和/或专用于您的Project的Workers的Taint/ Tolerations关联起来绝对是一个好主意。
要返回到脚本请求,您可以执行以下操作:

#!/bin/bash

your_service_cpu=<INSERT HERE YOUR DEPLOYMENTS CPU LIMIT>
your_service_memory=<INSERT HERE YOUR DEPLOYMENTS MEM LIMIT>

for i in $(kubectl get nodes -l node-role.kubernetes.io/worker --no-headers | awk '{print $1}')
do 
  worker=$(echo $(kubectl top node $i --no-headers | awk '{print $1}'))
  cpu=$(echo $(kubectl top node $i --no-headers | awk '{print $2}'))
  memory=$(echo $(kubectl top node $i --no-headers | awk '{print $4}'))
#  echo $worker
#  echo $cpu
#  echo $memory
  cpu_int=$(echo "${cpu%?}")
  memory_int=$(echo "${memory%??}")
#  echo $cpu_int
#  echo $memory_int
  if (( $your_service_cpu >= $cpu_int ))
  then 
    exit 1
  fi
  if (( $your_service_memory >= $memory_int ))
  then
    exit 1
  fi
done

剧本绝对可以改进。
PS:如上所述,我会避免这种做法。

相关问题