OpenShift在部署前验证pod内存和cpu



我们使用部署配置将我们的服务部署到OpenShift,我们在yaml文件中指定资源限制。

我们正在使用Azure Devops的OC Process命令来部署我们的服务。

寻找一种在部署前验证请求的内存和cpu是否可用的方法。

有没有办法从Azure Devops或通过一些bash脚本,我可以包括在任务。

它是kube-scheduler,负责调度节点中可用所需资源的pod。

当您为Pod中的容器指定资源请求时,kube-scheduler使用此信息来决定将Pod放置在哪个节点上。当您为容器指定资源限制时,kubelet将强制执行这些限制,以便运行的容器不允许使用超过您设置的限制的资源。kubelet还专门为该容器保留至少一定数量的系统资源请求。

https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

我认为发明一个脚本来控制节点上的这些参数是一种反模式。

你应该做的是:

  1. 使用n. pod提供的+ cpu/ram请求/限制进行预评估
  2. 确保工作线程有足够的资源来处理预期的负载
  3. 在部署请求/限制的管道中添加控件,以确保释放的资源是您所期望的
  4. 配置主动监控,当节点的资源使用达到一定水平时进行拦截(使用Prometheus/Alertmanager监控堆栈很容易实现这一点),并最终继续扩展节点/pod

显然,如果你有不需要限制的资源,可能是为了管理资源的异常峰值或这种类型的东西(我认为对于Jenkins来说,例如),最好有专门用于这些部署的节点。

如果集群不是由您支配的,但可能与其他应用程序团队共享,那么将名称空间配额和/或将工作人员的Taint/tolerance与您的项目关联起来绝对是一个好主意。

要返回脚本请求,您可以这样做:

#!/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:如上所述,我会避免使用这种方法。

最新更新