@oondemand/oon-core-back 0.7.23 → 0.7.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oondemand/oon-core-back",
3
- "version": "0.7.23",
3
+ "version": "0.7.28",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/oondemand/oon-platform.git",
@@ -55,12 +55,16 @@ function memoryMi(value) {
55
55
 
56
56
  /**
57
57
  * Cota do namespace calculada pelas réplicas e pelo perfil de recursos, com
58
- * espaço para o pod extra do rolling update (maxSurge 1). Nunca fica abaixo
59
- * do piso anterior, então Apps de 1 réplica mantêm a cota de sempre.
58
+ * espaço para o pior momento do rolling update: as réplicas antigas ainda em
59
+ * encerramento (preStop + encerramento gracioso, até 40 s; Pod em
60
+ * encerramento continua contando na cota), as novas e o pod extra (maxSurge 1)
61
+ * = 2 × réplicas + 1. Com só réplicas + 1, a criação da réplica nova era
62
+ * recusada (exceeded quota) até a antiga sair. A cota é um teto, não reserva
63
+ * CPU nem memória no cluster. Nunca fica abaixo do piso anterior.
60
64
  */
61
65
  function namespaceQuota({ replicas = 1, profile = "small" } = {}) {
62
66
  const resources = RESOURCE_PROFILES[profile] || RESOURCE_PROFILES.small;
63
- const pods = replicas + 1;
67
+ const pods = 2 * replicas + 1;
64
68
  return {
65
69
  requestsCpu: `${Math.max(QUOTA_FLOOR.requestsCpuMilli, pods * cpuMilli(resources.cpuRequest))}m`,
66
70
  requestsMemory: `${Math.max(QUOTA_FLOOR.requestsMemoryMi, pods * memoryMi(resources.memoryRequest))}Mi`,
@@ -209,15 +213,15 @@ spec:
209
213
  spec:
210
214
  serviceAccountName: oon-runtime
211
215
  terminationGracePeriodSeconds: ${TERMINATION_GRACE_SECONDS}
212
- # DoNotSchedule: com ScheduleAnyway as 2 réplicas de Apps globais ficaram
213
- # no mesmo nó. Com maxSkew 1 o pod extra do rolling update ainda cabe e,
214
- # com um único nó, o desvio é zero e nada fica pendente.
216
+ # Distribuição preferencial por nó, contando só os pods da mesma revisão
217
+ # (matchLabelKeys): era a contagem dos pods da revisão anterior que deixava
218
+ # as réplicas novas juntas. ScheduleAnyway, e não a regra obrigatória: com o
219
+ # cluster cheio, a regra obrigatória deixava a réplica Pending ("Insufficient
220
+ # cpu" num nó, spread no outro) e o rollout estourava o prazo.
215
221
  topologySpreadConstraints:
216
222
  - maxSkew: 1
217
223
  topologyKey: kubernetes.io/hostname
218
- whenUnsatisfiable: DoNotSchedule
219
- # Só os pods da mesma revisão: sem isso, ao fim do rolling update os
220
- # pods novos podem ficar todos no mesmo nó.
224
+ whenUnsatisfiable: ScheduleAnyway
221
225
  matchLabelKeys: [pod-template-hash]
222
226
  labelSelector:
223
227
  matchLabels: { app.kubernetes.io/name: ${context.appCode} }