Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,61 @@
# Changelog

## 2026-09-24 — [#1231](https://github.com/cobaltcore-dev/cortex/pull/1231)

### cortex v0.4.5 (sha-d4309076)

Bug fixes:
- Aggregate filter must consider failover requests — the `FilterAggregateMetadata` scheduling filter now enforces tenant-pinning checks for failover intents (`reserve_for_failover`, `reuse_failover_reservation`); only capacity-probe requests bypass the filter ([#1229](https://github.com/cobaltcore-dev/cortex/pull/1229))
- Report capacity without CPU as the binding factor for flavor groups with varying cpu/mem ratios — introduces `ExclusivelyRawCapacity` on `FlavorGroupCapacity` status, providing unquantized memory/CPU totals from exclusively-assigned hosts for accurate Limes/LIQUID capacity reporting ([#1227](https://github.com/cobaltcore-dev/cortex/pull/1227))
- Fix overlay cache config — moved the `cache` configuration block into the correct `cortex` config scope in Helm values and added `CommittedResource` to cached GVKs ([#1228](https://github.com/cobaltcore-dev/cortex/pull/1228))

Non-breaking changes:
- Update `k8s.io/api`, `k8s.io/apimachinery`, `k8s.io/client-go` to v0.37.1 ([#1225](https://github.com/cobaltcore-dev/cortex/pull/1225))

New metrics:
- `cortex_committed_resource_exclusively_raw_capacity_gib` — raw unquantized memory in GiB across hosts exclusively assigned to a flavor group

CRD changes:
- `FlavorGroupCapacity` `.status.exclusivelyRawCapacity` added (map, optional)

### cortex-postgres v0.6.18 (sha-f3d9a8b4)

Non-breaking changes:
- Shared rebuild with updated dependencies

### cortex-shim v0.1.20 (sha-d4309076)

Non-breaking changes:
- Shared binary rebuild with updated dependencies

### cortex-placement-shim v0.1.20

Includes updated chart cortex-shim v0.1.20.

### cortex-nova v0.0.94

Includes updated charts cortex v0.4.5 and cortex-postgres v0.6.18.

### cortex-cinder v0.0.94

Includes updated charts cortex v0.4.5 and cortex-postgres v0.6.18.

### cortex-manila v0.0.94

Includes updated charts cortex v0.4.5 and cortex-postgres v0.6.18.

### cortex-crds v0.0.94

Includes updated chart cortex v0.4.5.

### cortex-ironcore v0.0.94

Includes updated chart cortex v0.4.5.

### cortex-pods v0.0.94

Includes updated chart cortex v0.4.5.

## 2026-09-21 — [#1222](https://github.com/cobaltcore-dev/cortex/pull/1222)

### cortex v0.4.4 (sha-d4309076)
Expand Down
7 changes: 7 additions & 0 deletions api/v1alpha1/flavor_group_capacity_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,13 @@ type FlavorGroupCapacityStatus struct {
// +kubebuilder:validation:Optional
ExclusivelyFreeCapacity map[string]resource.Quantity `json:"exclusivelyFreeCapacity,omitempty"`

// ExclusivelyRawCapacity is the unquantized sum of effective memory and CPU across the
// hosts exclusively assigned to this group by the round-robin split. Unlike
// ExclusivelyFreeCapacity, this is not constrained by slot packing or CPU/memory ratio.
// Safe to sum across groups — no host is counted twice.
// +kubebuilder:validation:Optional
ExclusivelyRawCapacity map[string]resource.Quantity `json:"exclusivelyRawCapacity,omitempty"`

// ExclusivelyFreeSlots is the number of smallest-flavor VM slots available from ExclusivelyFreeCapacity.
// +kubebuilder:validation:Optional
ExclusivelyFreeSlots int64 `json:"exclusivelyFreeSlots,omitempty"`
Expand Down
7 changes: 7 additions & 0 deletions api/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions cmd/manager/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -396,9 +396,12 @@ func main() {
var cacheMonitor *cache.Monitor
var cacheWrapper *cache.Wrapper
if c := conf.GetConfigOrDie[cache.RootConfig](); c.Cache.Enabled {
setupLog.Info("overlay caching is enabled", "gvks", c.Cache.GVKs, "ttl", c.Cache.TTL)
cacheMonitor = cache.NewMonitor("cortex_")
cacheWrapper = cache.NewWrapper(mgr, c.Cache, cacheMonitor)
multiclusterClient.Wrappers = append(multiclusterClient.Wrappers, cacheWrapper)
} else {
setupLog.Info("overlay caching is disabled")
}
if err := multiclusterClient.InitFromConf(ctx, mgr, multiclusterClientConfig); err != nil {
setupLog.Error(err, "unable to initialize multicluster client")
Expand Down
8 changes: 4 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ require (
golang.org/x/sync v0.23.0
golang.org/x/term v0.46.0
gopkg.in/yaml.v3 v3.0.1
k8s.io/api v0.37.0
k8s.io/apimachinery v0.37.0
k8s.io/client-go v0.37.0
k8s.io/api v0.37.1
k8s.io/apimachinery v0.37.1
k8s.io/client-go v0.37.1
sigs.k8s.io/controller-runtime v0.25.1
)

Expand Down Expand Up @@ -124,7 +124,7 @@ require (
k8s.io/component-base v0.37.0 // indirect
k8s.io/klog/v2 v2.140.0 // indirect
k8s.io/kube-openapi v0.0.0-20260721132016-d427ff9ee9ad // indirect
k8s.io/streaming v0.37.0 // indirect
k8s.io/streaming v0.37.1 // indirect
k8s.io/utils v0.0.0-20260626114624-be93311217bd // indirect
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.36.0 // indirect
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
Expand Down
16 changes: 8 additions & 8 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -283,24 +283,24 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
k8s.io/api v0.37.0 h1:Z//Vj9N7RA/yS2sDmxyeo7h+RR4zbUrd2vrd3Z0TbB4=
k8s.io/api v0.37.0/go.mod h1:LKXgcJWMc+f4OLbP5SFR8rulEg07zZhpi/zMULiBImk=
k8s.io/api v0.37.1 h1:l6N77U7tjwB5L056bgrBTJIEdevac/naBZ3iSvDNfpM=
k8s.io/api v0.37.1/go.mod h1:zSlbB1YpJ1YQlFVQy20UYll81UJSJJUMLhkhvg6Z78M=
k8s.io/apiextensions-apiserver v0.37.0 h1:zRMQ3+/LIE5oZ0tVvXwYHC+dIkSP5cjNWju7AZU1LOI=
k8s.io/apiextensions-apiserver v0.37.0/go.mod h1:HU0PfSBwchHL5iDau6jjt9zU6ryWkDDlaVUiq91NK80=
k8s.io/apimachinery v0.37.0 h1:Np2AbDtf8x6RDHiD8T9LbKJ9gaegeVNa8yNm5FuGKm0=
k8s.io/apimachinery v0.37.0/go.mod h1:RN3nhprFSCxOi5Selxd7oMTXOe/c+ZbcE7Im+TS2zkE=
k8s.io/apimachinery v0.37.1 h1:hGCYyvKHCwtwMitj2vU4vYx0Z16N9GyZk9BBnz0wDAE=
k8s.io/apimachinery v0.37.1/go.mod h1:jF84AyUi/IRIXRot5f+lm6MpxoWI+F1XgjaMmwCdTFw=
k8s.io/apiserver v0.37.0 h1:TXg7OxsOWrAH8J4Zi/gBAZuMw1Dfdd+6cca2h4qjRqo=
k8s.io/apiserver v0.37.0/go.mod h1:OddHDF4gy9qyIb8o/3+qaeP6S0vEObWLgOygVqXksv0=
k8s.io/client-go v0.37.0 h1:nsN31fy8wBySuZ+QRnKmrjRSQLOG2rvoGN0tKd12zhQ=
k8s.io/client-go v0.37.0/go.mod h1:FcGqw+Ll/gNQiq+nPGY1Oyt9y7SgDh1d3MW3RFDEbn0=
k8s.io/client-go v0.37.1 h1:QTv/5ha4jAHtW9qxxVBkQVFBRDb4jHfFopQqqMdc+wM=
k8s.io/client-go v0.37.1/go.mod h1:dnAPtTnCNY38Ho04D2KdY1F4IKausa9UbqaAZKl60SY=
k8s.io/component-base v0.37.0 h1:3SdSa4+itMdFTDFTeR8CxKGmSTSMXFlKL4ky8OqjguM=
k8s.io/component-base v0.37.0/go.mod h1:LjOebp4R9y6LODWZQv102ZQxGheLcDO2ZJLAw6bbh4I=
k8s.io/klog/v2 v2.140.0 h1:Tf+J3AH7xnUzZyVVXhTgGhEKnFqye14aadWv7bzXdzc=
k8s.io/klog/v2 v2.140.0/go.mod h1:o+/RWfJ6PwpnFn7OyAG3QnO47BFsymfEfrz6XyYSSp0=
k8s.io/kube-openapi v0.0.0-20260721132016-d427ff9ee9ad h1:oXImqH8mQNk7PmvzKhmN3ddJoY6OnyM225MXwGHPm0A=
k8s.io/kube-openapi v0.0.0-20260721132016-d427ff9ee9ad/go.mod h1:0/mqHCVhlumdJ3BhCfnjSZQE037nAhNodh1/hK0T8/I=
k8s.io/streaming v0.37.0 h1:iPBUZLZiKt5bV+lxJurASMOV07VuBhNpiwJt2//AWrM=
k8s.io/streaming v0.37.0/go.mod h1:APlJR26ZWRcVy5bIEj0QRrKUXROtBHPcxl2NT7EAzPU=
k8s.io/streaming v0.37.1 h1:TpzVfQeFuVndn2g9mFqxy1UcUYPwDzqjUmwR/IzJCWc=
k8s.io/streaming v0.37.1/go.mod h1:APlJR26ZWRcVy5bIEj0QRrKUXROtBHPcxl2NT7EAzPU=
k8s.io/utils v0.0.0-20260626114624-be93311217bd h1:Ea7fgQ5we8Y9T0OX5o0dAHzQOBRI07D/dEYRaB9ZZEs=
k8s.io/utils v0.0.0-20260626114624-be93311217bd/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.36.0 h1:/YpDJ4vReG7ZmzSpBGxduXgywWkJU9zHubgJG03MT+Y=
Expand Down
8 changes: 4 additions & 4 deletions helm/bundles/cortex-cinder/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,23 @@ apiVersion: v2
name: cortex-cinder
description: A Helm chart deploying Cortex for Cinder.
type: application
version: 0.0.93
version: 0.0.94
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex-postgres
- name: cortex-postgres
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.6.17
version: 0.6.18

# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.4.4
version: 0.4.5
alias: cortex-knowledge-controllers
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.4.4
version: 0.4.5
alias: cortex-scheduling-controllers

# Owner info adds a configmap to the kubernetes cluster with information on
Expand Down
4 changes: 2 additions & 2 deletions helm/bundles/cortex-crds/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ apiVersion: v2
name: cortex-crds
description: A Helm chart deploying Cortex CRDs.
type: application
version: 0.0.93
version: 0.0.94
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.4.4
version: 0.4.5

# Owner info adds a configmap to the kubernetes cluster with information on
# the service owner. This makes it easier to find out who to contact in case
Expand Down
4 changes: 2 additions & 2 deletions helm/bundles/cortex-ironcore/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ apiVersion: v2
name: cortex-ironcore
description: A Helm chart deploying Cortex for IronCore.
type: application
version: 0.0.93
version: 0.0.94
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.4.4
version: 0.4.5

# Owner info adds a configmap to the kubernetes cluster with information on
# the service owner. This makes it easier to find out who to contact in case
Expand Down
8 changes: 4 additions & 4 deletions helm/bundles/cortex-manila/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,23 @@ apiVersion: v2
name: cortex-manila
description: A Helm chart deploying Cortex for Manila.
type: application
version: 0.0.93
version: 0.0.94
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex-postgres
- name: cortex-postgres
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.6.17
version: 0.6.18

# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.4.4
version: 0.4.5
alias: cortex-knowledge-controllers
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.4.4
version: 0.4.5
alias: cortex-scheduling-controllers

# Owner info adds a configmap to the kubernetes cluster with information on
Expand Down
8 changes: 4 additions & 4 deletions helm/bundles/cortex-nova/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,23 @@ apiVersion: v2
name: cortex-nova
description: A Helm chart deploying Cortex for Nova.
type: application
version: 0.0.93
version: 0.0.94
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex-postgres
- name: cortex-postgres
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.6.17
version: 0.6.18

# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.4.4
version: 0.4.5
alias: cortex-knowledge-controllers
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.4.4
version: 0.4.5
alias: cortex-scheduling-controllers

# Owner info adds a configmap to the kubernetes cluster with information on
Expand Down
12 changes: 6 additions & 6 deletions helm/bundles/cortex-nova/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,6 @@ kvm:
# skipped by the filter, even if they match one of the prefixes above.
ignoredDomainNames: []

# Cache configuration for the transparent in-process overlay cache.
cache:
enabled: true
gvks:
- cortex.cloud/v1alpha1/Reservation

cortex: &cortex
crd: {enable: false}
# Disable the default ServiceMonitor and metrics service from the kubebuilder stack.
Expand Down Expand Up @@ -139,6 +133,12 @@ cortex: &cortex
# ssoSecretRef:
# name: cortex-nova-openstack-sso
# namespace: default
# Cache configuration for the transparent in-process overlay cache.
cache:
enabled: true
gvks:
- cortex.cloud/v1alpha1/Reservation
- cortex.cloud/v1alpha1/CommittedResource
monitoring:
labels: &cortexMonitoringLabels
github_org: cobaltcore-dev
Expand Down
4 changes: 2 additions & 2 deletions helm/bundles/cortex-placement-shim/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ apiVersion: v2
name: cortex-placement-shim
description: A Helm chart deploying the Cortex placement shim.
type: application
version: 0.1.19
version: 0.1.20
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex-shim
- name: cortex-shim
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.1.19
version: 0.1.20
# Owner info adds a configmap to the kubernetes cluster with information on
# the service owner. This makes it easier to find out who to contact in case
# of issues. See: https://github.com/sapcc/helm-charts/pkgs/container/helm-charts%2Fowner-info
Expand Down
4 changes: 2 additions & 2 deletions helm/bundles/cortex-pods/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ apiVersion: v2
name: cortex-pods
description: A Helm chart deploying Cortex for Pods.
type: application
version: 0.0.93
version: 0.0.94
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.4.4
version: 0.4.5

# Owner info adds a configmap to the kubernetes cluster with information on
# the service owner. This makes it easier to find out who to contact in case
Expand Down
2 changes: 1 addition & 1 deletion helm/dev/cortex-prometheus-operator/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ dependencies:
# CRDs of the prometheus operator, such as PrometheusRule, ServiceMonitor, etc.
- name: kube-prometheus-stack
repository: oci://ghcr.io/prometheus-community/charts
version: 91.4.1
version: 91.5.1
2 changes: 1 addition & 1 deletion helm/library/cortex-postgres/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ apiVersion: v2
name: cortex-postgres
description: Postgres setup for Cortex.
type: application
version: 0.6.17
version: 0.6.18
appVersion: "sha-f3d9a8b4"
4 changes: 2 additions & 2 deletions helm/library/cortex-shim/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ apiVersion: v2
name: cortex-shim
description: A Helm chart to distribute cortex shims.
type: application
version: 0.1.19
appVersion: "sha-d4309076"
version: 0.1.20
appVersion: "sha-3bc1856b"
icon: "https://example.com/icon.png"
dependencies: []
4 changes: 2 additions & 2 deletions helm/library/cortex/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ apiVersion: v2
name: cortex
description: A Helm chart to distribute cortex.
type: application
version: 0.4.4
appVersion: "sha-d4309076"
version: 0.4.5
appVersion: "sha-51ca67fa"
icon: "https://example.com/icon.png"
dependencies: []
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,19 @@ spec:
VM slots available from ExclusivelyFreeCapacity.
format: int64
type: integer
exclusivelyRawCapacity:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
description: |-
ExclusivelyRawCapacity is the unquantized sum of effective memory and CPU across the
hosts exclusively assigned to this group by the round-robin split. Unlike
ExclusivelyFreeCapacity, this is not constrained by slot packing or CPU/memory ratio.
Safe to sum across groups — no host is counted twice.
type: object
flavors:
description: Flavors holds per-flavor capacity data for all flavors
in the group.
Expand Down
Loading
Loading