mirror of
https://github.com/portainer/portainer.git
synced 2025-07-21 14:29:40 +02:00
* feat(nodes limits)Review the resource assignement when creating a Kubernetes application EE-437 * feat(nodes limits) review feedback EE-437 * feat(nodes limits) workaround for lodash cloneDeep not working in production mode EE-437 * feat(nodes limits) calculate max cpu of slide bar with floor function instead of round function EE-437 * feat(nodes limits) another review feedback EE-437 * feat(nodes limits) cleanup code EE-437 * feat(nodes limits) EE-437 pr feedback update * feat(nodes limits) EE-437 rebase onto develop branch * feat(nodes limits) EE-437 another pr feedback update Co-authored-by: Simon Meng <simon.meng@portainer.io>
65 lines
1.6 KiB
JavaScript
65 lines
1.6 KiB
JavaScript
import _ from 'lodash-es';
|
|
|
|
/**
|
|
* NodesLimits Model
|
|
*/
|
|
export class KubernetesNodesLimits {
|
|
constructor(nodesLimits) {
|
|
this.MaxCPU = 0;
|
|
this.MaxMemory = 0;
|
|
this.nodesLimits = this.convertCPU(nodesLimits);
|
|
|
|
this.calculateMaxCPUMemory();
|
|
}
|
|
|
|
convertCPU(nodesLimits) {
|
|
_.forEach(nodesLimits, (value) => {
|
|
if (value.CPU) {
|
|
value.CPU /= 1000.0;
|
|
}
|
|
});
|
|
return nodesLimits;
|
|
}
|
|
|
|
calculateMaxCPUMemory() {
|
|
const nodesLimitsArray = Object.values(this.nodesLimits);
|
|
this.MaxCPU = _.maxBy(nodesLimitsArray, 'CPU').CPU;
|
|
this.MaxMemory = _.maxBy(nodesLimitsArray, 'Memory').Memory;
|
|
}
|
|
|
|
// check if there is enough cpu and memory to allocate containers in replica mode
|
|
overflowForReplica(cpu, memory, instances) {
|
|
_.forEach(this.nodesLimits, (value) => {
|
|
instances -= Math.min(Math.floor(value.CPU / cpu), Math.floor(value.Memory / memory));
|
|
});
|
|
|
|
return instances > 0;
|
|
}
|
|
|
|
// check if there is enough cpu and memory to allocate containers in global mode
|
|
overflowForGlobal(cpu, memory) {
|
|
let overflow = false;
|
|
|
|
_.forEach(this.nodesLimits, (value) => {
|
|
if (cpu > value.CPU || memory > value.Memory) {
|
|
overflow = true;
|
|
}
|
|
});
|
|
|
|
return overflow;
|
|
}
|
|
|
|
excludesPods(pods, cpuLimit, memoryLimit) {
|
|
const nodesLimits = this.nodesLimits;
|
|
|
|
_.forEach(pods, (value) => {
|
|
const node = value.Node;
|
|
if (node && nodesLimits[node]) {
|
|
nodesLimits[node].CPU += cpuLimit;
|
|
nodesLimits[node].Memory += memoryLimit;
|
|
}
|
|
});
|
|
|
|
this.calculateMaxCPUMemory();
|
|
}
|
|
}
|