diff --git a/Makefile.kube_git.var b/Makefile.kube_git.var index 872ca8959b..9d73e12dbc 100644 --- a/Makefile.kube_git.var +++ b/Makefile.kube_git.var @@ -1,5 +1,5 @@ KUBE_GIT_MAJOR=1 KUBE_GIT_MINOR=35 KUBE_GIT_VERSION=v1.35.3 -KUBE_GIT_COMMIT=757ccdfcf9a1f89059acaba311c3625c495a6732 +KUBE_GIT_COMMIT=2447118a5cf501f71c2da4b2f4ff14f3492aec10 KUBE_GIT_TREE_STATE=clean diff --git a/Makefile.version.aarch64.var b/Makefile.version.aarch64.var index c1e8ca7bf7..0d89b5f2b1 100644 --- a/Makefile.version.aarch64.var +++ b/Makefile.version.aarch64.var @@ -1 +1 @@ -OCP_VERSION := 5.0.0-0.nightly-arm64-2026-04-28-233705 +OCP_VERSION := 5.0.0-0.nightly-arm64-2026-04-29-233705 diff --git a/Makefile.version.x86_64.var b/Makefile.version.x86_64.var index 50f5eedb3b..542414b11b 100644 --- a/Makefile.version.x86_64.var +++ b/Makefile.version.x86_64.var @@ -1 +1 @@ -OCP_VERSION := 5.0.0-0.nightly-2026-04-26-064718 +OCP_VERSION := 5.0.0-0.nightly-2026-04-29-210124 diff --git a/assets/components/multus/kustomization.aarch64.yaml b/assets/components/multus/kustomization.aarch64.yaml index e3f1704465..0cb177a79c 100644 --- a/assets/components/multus/kustomization.aarch64.yaml +++ b/assets/components/multus/kustomization.aarch64.yaml @@ -2,7 +2,7 @@ images: - name: multus-cni-microshift newName: quay.io/openshift-release-dev/ocp-v5.0-art-dev - digest: sha256:d1a37c0124888c17bfd578e6312443aed062ab8a0f47ef6be518ba11feaf7fc3 + digest: sha256:39553f8b8ee836be1f442665fc55be7642261b7766f4b2fff0b30718abc9dae2 - name: containernetworking-plugins-microshift newName: quay.io/openshift-release-dev/ocp-v5.0-art-dev - digest: sha256:e412d7bfc2bc103930fdd4680e02733e9ad515f724bf1651b1f34202ad026e6a + digest: sha256:6cbb31dceaec7a3fd771c614b804176e0947bc4e5278e3af167b9b1ba744e740 diff --git a/assets/components/multus/kustomization.x86_64.yaml b/assets/components/multus/kustomization.x86_64.yaml index a7c2efbd1f..6d76735ac0 100644 --- a/assets/components/multus/kustomization.x86_64.yaml +++ b/assets/components/multus/kustomization.x86_64.yaml @@ -2,7 +2,7 @@ images: - name: multus-cni-microshift newName: quay.io/openshift-release-dev/ocp-v5.0-art-dev - digest: sha256:4a17e2f198c051b22b7bde9f9598a0571b1f9ba2b0647a53d9148114caedc3bc + digest: sha256:9e3d2bea43fd760020304e1b77e4d8b22c1effb0c575bb00efda8ce4c73f0ead - name: containernetworking-plugins-microshift newName: quay.io/openshift-release-dev/ocp-v5.0-art-dev - digest: sha256:0deefd19802c33a9c95d95d85480e14f67dc8517fa0c35b0f61de931d4b6217f + digest: sha256:12943ba669bad24ae74176906654bd96b46827714f7e0bb46db338d920215ede diff --git a/assets/components/multus/release-multus-aarch64.json b/assets/components/multus/release-multus-aarch64.json index fc3a4dca0e..b839360381 100644 --- a/assets/components/multus/release-multus-aarch64.json +++ b/assets/components/multus/release-multus-aarch64.json @@ -1,9 +1,9 @@ { "release": { - "base": "5.0.0-0.nightly-arm64-2026-04-28-233705" + "base": "5.0.0-0.nightly-arm64-2026-04-29-233705" }, "images": { - "multus-cni-microshift": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:d1a37c0124888c17bfd578e6312443aed062ab8a0f47ef6be518ba11feaf7fc3", - "containernetworking-plugins-microshift": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:e412d7bfc2bc103930fdd4680e02733e9ad515f724bf1651b1f34202ad026e6a" + "multus-cni-microshift": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:39553f8b8ee836be1f442665fc55be7642261b7766f4b2fff0b30718abc9dae2", + "containernetworking-plugins-microshift": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:6cbb31dceaec7a3fd771c614b804176e0947bc4e5278e3af167b9b1ba744e740" } } diff --git a/assets/components/multus/release-multus-x86_64.json b/assets/components/multus/release-multus-x86_64.json index 7533403394..2fe0810b0b 100644 --- a/assets/components/multus/release-multus-x86_64.json +++ b/assets/components/multus/release-multus-x86_64.json @@ -1,9 +1,9 @@ { "release": { - "base": "5.0.0-0.nightly-2026-04-26-064718" + "base": "5.0.0-0.nightly-2026-04-29-210124" }, "images": { - "multus-cni-microshift": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:4a17e2f198c051b22b7bde9f9598a0571b1f9ba2b0647a53d9148114caedc3bc", - "containernetworking-plugins-microshift": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:0deefd19802c33a9c95d95d85480e14f67dc8517fa0c35b0f61de931d4b6217f" + "multus-cni-microshift": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:9e3d2bea43fd760020304e1b77e4d8b22c1effb0c575bb00efda8ce4c73f0ead", + "containernetworking-plugins-microshift": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:12943ba669bad24ae74176906654bd96b46827714f7e0bb46db338d920215ede" } } diff --git a/assets/optional/operator-lifecycle-manager/kustomization.aarch64.yaml b/assets/optional/operator-lifecycle-manager/kustomization.aarch64.yaml index fa6e59415c..e6b2a94106 100644 --- a/assets/optional/operator-lifecycle-manager/kustomization.aarch64.yaml +++ b/assets/optional/operator-lifecycle-manager/kustomization.aarch64.yaml @@ -2,13 +2,13 @@ images: - name: quay.io/operator-framework/olm newName: quay.io/openshift-release-dev/ocp-v5.0-art-dev - digest: sha256:61b31ed5c54ccda514efad91215557de2b019c2f31210671ac0ad48f72f32ccf + digest: sha256:07ed90fa5b4c20381dc27f56f96f243496ff333f9fb36a8f1371b2ba39cb10af - name: quay.io/operator-framework/configmap-operator-registry newName: quay.io/openshift-release-dev/ocp-v5.0-art-dev - digest: sha256:05b26c0cbac278f457b1c05778e3195368f835f71fc0e36c31ad2cb99a11d4db + digest: sha256:bf6eac6d205af3f37faa86e0eb2ee268c9069c3562580e1edba78f0fe755aa45 - name: quay.io/openshift/origin-kube-rbac-proxy newName: quay.io/openshift-release-dev/ocp-v5.0-art-dev - digest: sha256:613bb10734418c7e80b2913c49705fff5846e3beb8ac1a3871509e38a3a2fb8f + digest: sha256:0446463c285378b96336a9bcfdc1560181ceb3c2c2c9d0e1274c4978d043a10e patches: - patch: |- @@ -16,12 +16,12 @@ patches: path: /spec/template/spec/containers/0/env/- value: name: OPERATOR_REGISTRY_IMAGE - value: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:05b26c0cbac278f457b1c05778e3195368f835f71fc0e36c31ad2cb99a11d4db + value: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:bf6eac6d205af3f37faa86e0eb2ee268c9069c3562580e1edba78f0fe755aa45 - op: add path: /spec/template/spec/containers/0/env/- value: name: OLM_IMAGE - value: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:61b31ed5c54ccda514efad91215557de2b019c2f31210671ac0ad48f72f32ccf + value: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:07ed90fa5b4c20381dc27f56f96f243496ff333f9fb36a8f1371b2ba39cb10af target: kind: Deployment labelSelector: app=catalog-operator diff --git a/assets/optional/operator-lifecycle-manager/kustomization.x86_64.yaml b/assets/optional/operator-lifecycle-manager/kustomization.x86_64.yaml index 12687853eb..73d282d399 100644 --- a/assets/optional/operator-lifecycle-manager/kustomization.x86_64.yaml +++ b/assets/optional/operator-lifecycle-manager/kustomization.x86_64.yaml @@ -2,13 +2,13 @@ images: - name: quay.io/operator-framework/olm newName: quay.io/openshift-release-dev/ocp-v5.0-art-dev - digest: sha256:043bf8e359196085290e24ae47f897f1befa89b336ca5a89dad843044ec74b39 + digest: sha256:c5f74f5219540934d1bb3beeec4e29805f7f7ed1ccdb4a17facad8c1e75d278c - name: quay.io/operator-framework/configmap-operator-registry newName: quay.io/openshift-release-dev/ocp-v5.0-art-dev - digest: sha256:fc1c3b770c61569f1377211fc150df061796335efac1d75e456258d319fc271d + digest: sha256:2402628c03bce12c8a8c0ed779ba576e3d7ce10ec4dfc813079183b46f45f580 - name: quay.io/openshift/origin-kube-rbac-proxy newName: quay.io/openshift-release-dev/ocp-v5.0-art-dev - digest: sha256:63f598debd51e32a3af22d3830d903ebcd78a8887265c09f04c71e2ad7470b3d + digest: sha256:3482ea3d2b8dce334f07b89086fdb06543d1a1680b4e71f937fbd13a171c42cf patches: - patch: |- @@ -16,12 +16,12 @@ patches: path: /spec/template/spec/containers/0/env/- value: name: OPERATOR_REGISTRY_IMAGE - value: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:fc1c3b770c61569f1377211fc150df061796335efac1d75e456258d319fc271d + value: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:2402628c03bce12c8a8c0ed779ba576e3d7ce10ec4dfc813079183b46f45f580 - op: add path: /spec/template/spec/containers/0/env/- value: name: OLM_IMAGE - value: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:043bf8e359196085290e24ae47f897f1befa89b336ca5a89dad843044ec74b39 + value: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:c5f74f5219540934d1bb3beeec4e29805f7f7ed1ccdb4a17facad8c1e75d278c target: kind: Deployment labelSelector: app=catalog-operator diff --git a/assets/optional/operator-lifecycle-manager/release-olm-aarch64.json b/assets/optional/operator-lifecycle-manager/release-olm-aarch64.json index 61b3f6160b..a65e36bfbb 100644 --- a/assets/optional/operator-lifecycle-manager/release-olm-aarch64.json +++ b/assets/optional/operator-lifecycle-manager/release-olm-aarch64.json @@ -1,10 +1,10 @@ { "release": { - "base": "5.0.0-0.nightly-arm64-2026-04-28-233705" + "base": "5.0.0-0.nightly-arm64-2026-04-29-233705" }, "images": { - "operator-lifecycle-manager": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:61b31ed5c54ccda514efad91215557de2b019c2f31210671ac0ad48f72f32ccf", - "operator-registry": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:05b26c0cbac278f457b1c05778e3195368f835f71fc0e36c31ad2cb99a11d4db", - "kube-rbac-proxy": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:613bb10734418c7e80b2913c49705fff5846e3beb8ac1a3871509e38a3a2fb8f" + "operator-lifecycle-manager": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:07ed90fa5b4c20381dc27f56f96f243496ff333f9fb36a8f1371b2ba39cb10af", + "operator-registry": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:bf6eac6d205af3f37faa86e0eb2ee268c9069c3562580e1edba78f0fe755aa45", + "kube-rbac-proxy": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:0446463c285378b96336a9bcfdc1560181ceb3c2c2c9d0e1274c4978d043a10e" } } diff --git a/assets/optional/operator-lifecycle-manager/release-olm-x86_64.json b/assets/optional/operator-lifecycle-manager/release-olm-x86_64.json index c77a943995..823b308747 100644 --- a/assets/optional/operator-lifecycle-manager/release-olm-x86_64.json +++ b/assets/optional/operator-lifecycle-manager/release-olm-x86_64.json @@ -1,10 +1,10 @@ { "release": { - "base": "5.0.0-0.nightly-2026-04-26-064718" + "base": "5.0.0-0.nightly-2026-04-29-210124" }, "images": { - "operator-lifecycle-manager": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:043bf8e359196085290e24ae47f897f1befa89b336ca5a89dad843044ec74b39", - "operator-registry": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:fc1c3b770c61569f1377211fc150df061796335efac1d75e456258d319fc271d", - "kube-rbac-proxy": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:63f598debd51e32a3af22d3830d903ebcd78a8887265c09f04c71e2ad7470b3d" + "operator-lifecycle-manager": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:c5f74f5219540934d1bb3beeec4e29805f7f7ed1ccdb4a17facad8c1e75d278c", + "operator-registry": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:2402628c03bce12c8a8c0ed779ba576e3d7ce10ec4dfc813079183b46f45f580", + "kube-rbac-proxy": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:3482ea3d2b8dce334f07b89086fdb06543d1a1680b4e71f937fbd13a171c42cf" } } diff --git a/assets/optional/sriov/deploy/role.yaml b/assets/optional/sriov/deploy/role.yaml index f83aeffa09..1190c8f3cd 100644 --- a/assets/optional/sriov/deploy/role.yaml +++ b/assets/optional/sriov/deploy/role.yaml @@ -4,13 +4,11 @@ rules: resources: - pods verbs: - - '*' - - apiGroups: - - apps - resources: - - daemonsets - verbs: - - '*' + - get + - list + - watch + - delete + - patch - apiGroups: - sriovnetwork.openshift.io resources: @@ -33,6 +31,12 @@ rules: verbs: - get - update + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - '*' - apiGroups: - '' resources: @@ -40,12 +44,6 @@ rules: verbs: - create - patch - - apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - '*' apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: diff --git a/assets/optional/sriov/kustomization.aarch64.yaml b/assets/optional/sriov/kustomization.aarch64.yaml index 028ee65ee0..c2b712e1bc 100644 --- a/assets/optional/sriov/kustomization.aarch64.yaml +++ b/assets/optional/sriov/kustomization.aarch64.yaml @@ -1,7 +1,7 @@ images: - name: quay.io/openshift/sriov-network-operator newName: registry.redhat.io/openshift4/ose-sriov-network-rhel9-operator - digest: sha256:5eeb860af6d45b1f3240ac4cb5c8b9cb22622fc51519e477cbc593c9a0171ec6 + digest: sha256:56c1a4eafecd9d84639062fcd22a114c84c70fcc0abff6a471b2ebad64d1c510 patches: - patch: |- @@ -9,47 +9,47 @@ patches: path: /spec/template/spec/containers/0/env/- value: name: SRIOV_CNI_IMAGE - value: registry.redhat.io/openshift4/sriov-cni-rhel9@sha256:16048bef3f808160dfa94fd34b041a4f84ffcb75eb9ded2908a9e71e98d0e548 + value: registry.redhat.io/openshift4/sriov-cni-rhel9@sha256:976c5d4287fe5c46c999bdbad3505d6a655e2f0ef36a1257e7573d540ba1c89b - op: add path: /spec/template/spec/containers/0/env/- value: name: SRIOV_DEVICE_PLUGIN_IMAGE - value: registry.redhat.io/openshift4/ose-sriov-network-device-plugin-rhel9@sha256:4b324d2e418962ac47806a0bd1c94541c5c43501b89fe4d125dd13c2bdb513b4 + value: registry.redhat.io/openshift4/ose-sriov-network-device-plugin-rhel9@sha256:4f58b37aebf7848490658c8d72d05d58d06e81f3eb9294bf2f316822d6a9aadb - op: add path: /spec/template/spec/containers/0/env/- value: name: NETWORK_RESOURCES_INJECTOR_IMAGE - value: registry.redhat.io/openshift4/ose-sriov-dp-admission-controller-rhel9@sha256:271277a2666224160b4bbcdd0b7f03cc7b99a348f8b7f0249d12c7c8ce004cd0 + value: registry.redhat.io/openshift4/ose-sriov-dp-admission-controller-rhel9@sha256:5e4b6c894007b41b4c16bccda566fec7a374bfa00a6b501196c5a5f3fb1040bd - op: add path: /spec/template/spec/containers/0/env/- value: name: SRIOV_NETWORK_CONFIG_DAEMON_IMAGE - value: registry.redhat.io/openshift4/ose-sriov-network-config-daemon-rhel9@sha256:ec55190ec419eb318f332199a1bcebfcb0688c593a046ff55b550c1775238df7 + value: registry.redhat.io/openshift4/ose-sriov-network-config-daemon-rhel9@sha256:07dc6cb29c0fee69abf75b81a5de3e4a1a8ec65a68c7c2e6b540ff35cde70b80 - op: add path: /spec/template/spec/containers/0/env/- value: name: SRIOV_NETWORK_WEBHOOK_IMAGE - value: registry.redhat.io/openshift4/ose-sriov-network-webhook-rhel9@sha256:52f166d47cc5d07c032323c9ced13c19a620ed555398669b8fed0d13027631e1 + value: registry.redhat.io/openshift4/ose-sriov-network-webhook-rhel9@sha256:435eb24e9d12c802966d438fd26ca13b45a05aade4e5f407299727958c36071f - op: add path: /spec/template/spec/containers/0/env/- value: name: SRIOV_INFINIBAND_CNI_IMAGE - value: registry.redhat.io/openshift4/ose-sriov-infiniband-cni-rhel9@sha256:3a504d033b3c364901840f5d3f1cc96d060785b0f8008abdb9e95b6ee1f33120 + value: registry.redhat.io/openshift4/ose-sriov-infiniband-cni-rhel9@sha256:7dbfa84c1952f10e6750ffb7d1353cc72d84f654c6da8ed3fec8561653721a8e - op: add path: /spec/template/spec/containers/0/env/- value: name: RDMA_CNI_IMAGE - value: registry.redhat.io/openshift4/ose-sriov-rdma-cni-rhel9@sha256:50dd61c1627f734cfa61fb7fa43eefab8aea40e2ff53dad2650d57afe04f6fdd + value: registry.redhat.io/openshift4/ose-sriov-rdma-cni-rhel9@sha256:48ef884aa59ebb56a30d94ba412b5d7e0766d0735c5c9789896c0ae5512fb764 - op: add path: /spec/template/spec/containers/0/env/- value: name: METRICS_EXPORTER_IMAGE - value: registry.redhat.io/openshift4/ose-sriov-network-metrics-exporter-rhel9@sha256:0b50ad5b1266b9d9a011e147de814689ce2669e841f2c6b5a115753a0d36fcbc + value: registry.redhat.io/openshift4/ose-sriov-network-metrics-exporter-rhel9@sha256:4f1992770e52f296b576c03e628ddee9d9667534d505f87720ebbe34ee01a52c - op: add path: /spec/template/spec/containers/0/env/- value: name: METRICS_EXPORTER_KUBE_RBAC_PROXY_IMAGE - value: registry.redhat.io/openshift4/ose-kube-rbac-proxy-rhel9@sha256:a5f3823b6edc4bb9e59bd082c14c33aec5cab28e176323a9f09bb441918ae5ff + value: registry.redhat.io/openshift4/ose-kube-rbac-proxy-rhel9@sha256:6d9055e8da2fb72bddfdc1cd15ca070459afb476bff70712d0cf1a6593f981d8 target: kind: Deployment name: sriov-network-operator diff --git a/assets/optional/sriov/kustomization.x86_64.yaml b/assets/optional/sriov/kustomization.x86_64.yaml index 1e471963c2..253a5a4c95 100644 --- a/assets/optional/sriov/kustomization.x86_64.yaml +++ b/assets/optional/sriov/kustomization.x86_64.yaml @@ -1,7 +1,7 @@ images: - name: quay.io/openshift/sriov-network-operator newName: registry.redhat.io/openshift4/ose-sriov-network-rhel9-operator - digest: sha256:7143db3f7791d13267219a2a1afa280df6f3f7183a111a694951b36845d014a0 + digest: sha256:f086958acd271a3c9c094e670f5dd8179a4e044acebb719497248e51f8eb8325 patches: - patch: |- @@ -9,47 +9,47 @@ patches: path: /spec/template/spec/containers/0/env/- value: name: SRIOV_CNI_IMAGE - value: registry.redhat.io/openshift4/sriov-cni-rhel9@sha256:4a234b98290ae7ad2f8a0ea3495515f8aab0fb0cd4769f4f7850938a1ae8e2ca + value: registry.redhat.io/openshift4/sriov-cni-rhel9@sha256:f640774752ab197447d9b399f8928e01088cba741f9f56bef887954e974552f3 - op: add path: /spec/template/spec/containers/0/env/- value: name: SRIOV_DEVICE_PLUGIN_IMAGE - value: registry.redhat.io/openshift4/ose-sriov-network-device-plugin-rhel9@sha256:8d1e3610e50f758f64f65f461dfb90d1558f51ccc548804698ec376712d44664 + value: registry.redhat.io/openshift4/ose-sriov-network-device-plugin-rhel9@sha256:ab1b3e26134284dcddfc6b6661856c88b6e90349760fd20b5d6cc00788cb673b - op: add path: /spec/template/spec/containers/0/env/- value: name: NETWORK_RESOURCES_INJECTOR_IMAGE - value: registry.redhat.io/openshift4/ose-sriov-dp-admission-controller-rhel9@sha256:fb456c01f647eec885aed01a5595e8e3a11442c8ac36c20ab231ce5a4189bd30 + value: registry.redhat.io/openshift4/ose-sriov-dp-admission-controller-rhel9@sha256:c04210bf4444c4234016a6cafbe11a7feb23444a68b9e313784cf2b0b1bacd0b - op: add path: /spec/template/spec/containers/0/env/- value: name: SRIOV_NETWORK_CONFIG_DAEMON_IMAGE - value: registry.redhat.io/openshift4/ose-sriov-network-config-daemon-rhel9@sha256:186fe96959ff4837642c647a33d6b55497fcf96936015230d67004817e2fb687 + value: registry.redhat.io/openshift4/ose-sriov-network-config-daemon-rhel9@sha256:52a0e9a3b3a301b61b191ba8b2b7181baa54ceb01e52228ad5fbc48cab477728 - op: add path: /spec/template/spec/containers/0/env/- value: name: SRIOV_NETWORK_WEBHOOK_IMAGE - value: registry.redhat.io/openshift4/ose-sriov-network-webhook-rhel9@sha256:7464a136fabbd311f7946d4d4c33f4dfabc360a2f021ee7c9ccd4216907ad858 + value: registry.redhat.io/openshift4/ose-sriov-network-webhook-rhel9@sha256:347dd64f2d55e7da0ae5190cfdcc076e607de363f47b672212b9d220cef9f4dc - op: add path: /spec/template/spec/containers/0/env/- value: name: SRIOV_INFINIBAND_CNI_IMAGE - value: registry.redhat.io/openshift4/ose-sriov-infiniband-cni-rhel9@sha256:733c3bbfa5e09d455434bc68badd5a32f605b9379e39b1d0f5a5518a34135df5 + value: registry.redhat.io/openshift4/ose-sriov-infiniband-cni-rhel9@sha256:eced3ac58cab27cc99f8d90344ff6cd80264a0c4f5b66e701ccb5a77c8e64b7a - op: add path: /spec/template/spec/containers/0/env/- value: name: RDMA_CNI_IMAGE - value: registry.redhat.io/openshift4/ose-sriov-rdma-cni-rhel9@sha256:4a2ea6d8684dcf77b2f4231a326a13d228f90ea5ea64f6c763cbc271494444b9 + value: registry.redhat.io/openshift4/ose-sriov-rdma-cni-rhel9@sha256:9d56f0ca4ff9c75d27fbf30b93b03b993191c5749baa2edef32219c9b6b4aa67 - op: add path: /spec/template/spec/containers/0/env/- value: name: METRICS_EXPORTER_IMAGE - value: registry.redhat.io/openshift4/ose-sriov-network-metrics-exporter-rhel9@sha256:6edcc7ebe4199334d3177bf079e2ef84764f378af084ae827925d98a4eea727c + value: registry.redhat.io/openshift4/ose-sriov-network-metrics-exporter-rhel9@sha256:bffed5c6f66fe984ef3a49220973ed01c2280dc3a9b01d5d49a583f587bce2a0 - op: add path: /spec/template/spec/containers/0/env/- value: name: METRICS_EXPORTER_KUBE_RBAC_PROXY_IMAGE - value: registry.redhat.io/openshift4/ose-kube-rbac-proxy-rhel9@sha256:8ed83b8250364f976ff1e3615e5319db83151410018c789e76eed958e77e57c0 + value: registry.redhat.io/openshift4/ose-kube-rbac-proxy-rhel9@sha256:a8cffee2e5522fe4bb17e80c8d9746f59aace8d5cabfff978fdae1f550f5c815 target: kind: Deployment name: sriov-network-operator diff --git a/assets/optional/sriov/release-sriov-aarch64.json b/assets/optional/sriov/release-sriov-aarch64.json index a7e844ef6e..234594aca3 100644 --- a/assets/optional/sriov/release-sriov-aarch64.json +++ b/assets/optional/sriov/release-sriov-aarch64.json @@ -1,17 +1,17 @@ { "release": { - "base": "4.21.0-202604140043" + "base": "4.21.0-202604200818" }, "images": { - "metrics-exporter-image": "registry.redhat.io/openshift4/ose-sriov-network-metrics-exporter-rhel9@sha256:0b50ad5b1266b9d9a011e147de814689ce2669e841f2c6b5a115753a0d36fcbc", - "metrics-exporter-kube-rbac-proxy-image": "registry.redhat.io/openshift4/ose-kube-rbac-proxy-rhel9@sha256:a5f3823b6edc4bb9e59bd082c14c33aec5cab28e176323a9f09bb441918ae5ff", - "network-resources-injector-image": "registry.redhat.io/openshift4/ose-sriov-dp-admission-controller-rhel9@sha256:271277a2666224160b4bbcdd0b7f03cc7b99a348f8b7f0249d12c7c8ce004cd0", - "rdma-cni-image": "registry.redhat.io/openshift4/ose-sriov-rdma-cni-rhel9@sha256:50dd61c1627f734cfa61fb7fa43eefab8aea40e2ff53dad2650d57afe04f6fdd", - "sriov-cni-image": "registry.redhat.io/openshift4/sriov-cni-rhel9@sha256:16048bef3f808160dfa94fd34b041a4f84ffcb75eb9ded2908a9e71e98d0e548", - "sriov-device-plugin-image": "registry.redhat.io/openshift4/ose-sriov-network-device-plugin-rhel9@sha256:4b324d2e418962ac47806a0bd1c94541c5c43501b89fe4d125dd13c2bdb513b4", - "sriov-infiniband-cni-image": "registry.redhat.io/openshift4/ose-sriov-infiniband-cni-rhel9@sha256:3a504d033b3c364901840f5d3f1cc96d060785b0f8008abdb9e95b6ee1f33120", - "sriov-network-config-daemon-image": "registry.redhat.io/openshift4/ose-sriov-network-config-daemon-rhel9@sha256:ec55190ec419eb318f332199a1bcebfcb0688c593a046ff55b550c1775238df7", - "sriov-network-operator": "registry.redhat.io/openshift4/ose-sriov-network-rhel9-operator@sha256:5eeb860af6d45b1f3240ac4cb5c8b9cb22622fc51519e477cbc593c9a0171ec6", - "sriov-network-webhook-image": "registry.redhat.io/openshift4/ose-sriov-network-webhook-rhel9@sha256:52f166d47cc5d07c032323c9ced13c19a620ed555398669b8fed0d13027631e1" + "metrics-exporter-image": "registry.redhat.io/openshift4/ose-sriov-network-metrics-exporter-rhel9@sha256:4f1992770e52f296b576c03e628ddee9d9667534d505f87720ebbe34ee01a52c", + "metrics-exporter-kube-rbac-proxy-image": "registry.redhat.io/openshift4/ose-kube-rbac-proxy-rhel9@sha256:6d9055e8da2fb72bddfdc1cd15ca070459afb476bff70712d0cf1a6593f981d8", + "network-resources-injector-image": "registry.redhat.io/openshift4/ose-sriov-dp-admission-controller-rhel9@sha256:5e4b6c894007b41b4c16bccda566fec7a374bfa00a6b501196c5a5f3fb1040bd", + "rdma-cni-image": "registry.redhat.io/openshift4/ose-sriov-rdma-cni-rhel9@sha256:48ef884aa59ebb56a30d94ba412b5d7e0766d0735c5c9789896c0ae5512fb764", + "sriov-cni-image": "registry.redhat.io/openshift4/sriov-cni-rhel9@sha256:976c5d4287fe5c46c999bdbad3505d6a655e2f0ef36a1257e7573d540ba1c89b", + "sriov-device-plugin-image": "registry.redhat.io/openshift4/ose-sriov-network-device-plugin-rhel9@sha256:4f58b37aebf7848490658c8d72d05d58d06e81f3eb9294bf2f316822d6a9aadb", + "sriov-infiniband-cni-image": "registry.redhat.io/openshift4/ose-sriov-infiniband-cni-rhel9@sha256:7dbfa84c1952f10e6750ffb7d1353cc72d84f654c6da8ed3fec8561653721a8e", + "sriov-network-config-daemon-image": "registry.redhat.io/openshift4/ose-sriov-network-config-daemon-rhel9@sha256:07dc6cb29c0fee69abf75b81a5de3e4a1a8ec65a68c7c2e6b540ff35cde70b80", + "sriov-network-operator": "registry.redhat.io/openshift4/ose-sriov-network-rhel9-operator@sha256:56c1a4eafecd9d84639062fcd22a114c84c70fcc0abff6a471b2ebad64d1c510", + "sriov-network-webhook-image": "registry.redhat.io/openshift4/ose-sriov-network-webhook-rhel9@sha256:435eb24e9d12c802966d438fd26ca13b45a05aade4e5f407299727958c36071f" } } diff --git a/assets/optional/sriov/release-sriov-x86_64.json b/assets/optional/sriov/release-sriov-x86_64.json index 4efe0e0a65..265758fb10 100644 --- a/assets/optional/sriov/release-sriov-x86_64.json +++ b/assets/optional/sriov/release-sriov-x86_64.json @@ -1,17 +1,17 @@ { "release": { - "base": "4.21.0-202604140043" + "base": "4.21.0-202604200818" }, "images": { - "metrics-exporter-image": "registry.redhat.io/openshift4/ose-sriov-network-metrics-exporter-rhel9@sha256:6edcc7ebe4199334d3177bf079e2ef84764f378af084ae827925d98a4eea727c", - "metrics-exporter-kube-rbac-proxy-image": "registry.redhat.io/openshift4/ose-kube-rbac-proxy-rhel9@sha256:8ed83b8250364f976ff1e3615e5319db83151410018c789e76eed958e77e57c0", - "network-resources-injector-image": "registry.redhat.io/openshift4/ose-sriov-dp-admission-controller-rhel9@sha256:fb456c01f647eec885aed01a5595e8e3a11442c8ac36c20ab231ce5a4189bd30", - "rdma-cni-image": "registry.redhat.io/openshift4/ose-sriov-rdma-cni-rhel9@sha256:4a2ea6d8684dcf77b2f4231a326a13d228f90ea5ea64f6c763cbc271494444b9", - "sriov-cni-image": "registry.redhat.io/openshift4/sriov-cni-rhel9@sha256:4a234b98290ae7ad2f8a0ea3495515f8aab0fb0cd4769f4f7850938a1ae8e2ca", - "sriov-device-plugin-image": "registry.redhat.io/openshift4/ose-sriov-network-device-plugin-rhel9@sha256:8d1e3610e50f758f64f65f461dfb90d1558f51ccc548804698ec376712d44664", - "sriov-infiniband-cni-image": "registry.redhat.io/openshift4/ose-sriov-infiniband-cni-rhel9@sha256:733c3bbfa5e09d455434bc68badd5a32f605b9379e39b1d0f5a5518a34135df5", - "sriov-network-config-daemon-image": "registry.redhat.io/openshift4/ose-sriov-network-config-daemon-rhel9@sha256:186fe96959ff4837642c647a33d6b55497fcf96936015230d67004817e2fb687", - "sriov-network-operator": "registry.redhat.io/openshift4/ose-sriov-network-rhel9-operator@sha256:7143db3f7791d13267219a2a1afa280df6f3f7183a111a694951b36845d014a0", - "sriov-network-webhook-image": "registry.redhat.io/openshift4/ose-sriov-network-webhook-rhel9@sha256:7464a136fabbd311f7946d4d4c33f4dfabc360a2f021ee7c9ccd4216907ad858" + "metrics-exporter-image": "registry.redhat.io/openshift4/ose-sriov-network-metrics-exporter-rhel9@sha256:bffed5c6f66fe984ef3a49220973ed01c2280dc3a9b01d5d49a583f587bce2a0", + "metrics-exporter-kube-rbac-proxy-image": "registry.redhat.io/openshift4/ose-kube-rbac-proxy-rhel9@sha256:a8cffee2e5522fe4bb17e80c8d9746f59aace8d5cabfff978fdae1f550f5c815", + "network-resources-injector-image": "registry.redhat.io/openshift4/ose-sriov-dp-admission-controller-rhel9@sha256:c04210bf4444c4234016a6cafbe11a7feb23444a68b9e313784cf2b0b1bacd0b", + "rdma-cni-image": "registry.redhat.io/openshift4/ose-sriov-rdma-cni-rhel9@sha256:9d56f0ca4ff9c75d27fbf30b93b03b993191c5749baa2edef32219c9b6b4aa67", + "sriov-cni-image": "registry.redhat.io/openshift4/sriov-cni-rhel9@sha256:f640774752ab197447d9b399f8928e01088cba741f9f56bef887954e974552f3", + "sriov-device-plugin-image": "registry.redhat.io/openshift4/ose-sriov-network-device-plugin-rhel9@sha256:ab1b3e26134284dcddfc6b6661856c88b6e90349760fd20b5d6cc00788cb673b", + "sriov-infiniband-cni-image": "registry.redhat.io/openshift4/ose-sriov-infiniband-cni-rhel9@sha256:eced3ac58cab27cc99f8d90344ff6cd80264a0c4f5b66e701ccb5a77c8e64b7a", + "sriov-network-config-daemon-image": "registry.redhat.io/openshift4/ose-sriov-network-config-daemon-rhel9@sha256:52a0e9a3b3a301b61b191ba8b2b7181baa54ceb01e52228ad5fbc48cab477728", + "sriov-network-operator": "registry.redhat.io/openshift4/ose-sriov-network-rhel9-operator@sha256:f086958acd271a3c9c094e670f5dd8179a4e044acebb719497248e51f8eb8325", + "sriov-network-webhook-image": "registry.redhat.io/openshift4/ose-sriov-network-webhook-rhel9@sha256:347dd64f2d55e7da0ae5190cfdcc076e607de363f47b672212b9d220cef9f4dc" } } diff --git a/assets/release/release-aarch64.json b/assets/release/release-aarch64.json index 02ea55713a..91b721a7b3 100644 --- a/assets/release/release-aarch64.json +++ b/assets/release/release-aarch64.json @@ -1,16 +1,16 @@ { "release": { - "base": "5.0.0-0.nightly-arm64-2026-04-28-233705" + "base": "5.0.0-0.nightly-arm64-2026-04-29-233705" }, "images": { - "cli": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:20abfa12212c9f9dd0325a8b0151011743e1e7cdc35d821ca6bb697ecf2bfb76", - "coredns": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:5a3b80c36e17b250d1af8c14892a3335714ecf82db75d069a5daa4a1b99464ed", - "haproxy-router": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:68dbd10a0844352b10ffd8f806e1f601df3a1b9902ba4d7822c614613a511645", - "kube-rbac-proxy": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:613bb10734418c7e80b2913c49705fff5846e3beb8ac1a3871509e38a3a2fb8f", - "ovn-kubernetes-microshift": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:301bd3b3da542ada92d563a9bcc0ca64bb0ad446ec0a65b743bf8bd1bbfa8f9f", - "pod": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:17d238add9f701323815480d278c4fa5e857fffd582289ba73ca49708fb19480", - "service-ca-operator": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:44d4715d6e5275c659419f3717b926c2e323ea8661d95b754b14b1ad9dd70ed9", + "cli": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:a93d03e172f471dda3c64d350a330778f719e4bca21c3439ec96824d6f91ab12", + "coredns": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:e9864b5d80dfd8f55aabae4b59c1589d5c5632085def754a3857a34b8a371f73", + "haproxy-router": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:fe7e26fb3b484504fd6c116c2b3df63e3fccc3f2c37aafa76fa78de547077b1d", + "kube-rbac-proxy": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:0446463c285378b96336a9bcfdc1560181ceb3c2c2c9d0e1274c4978d043a10e", + "ovn-kubernetes-microshift": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:f571b5d5727dd2f1ab6093338bf12d9fad21d6672a2fa3f3a5db0997ebc76d25", + "pod": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:9782b8c28667d76e2eb6d105590425e7e8cdbdcc835f7195846f5356cb12879b", + "service-ca-operator": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:2a7b8edd2d425e191e63d8254255f6f8458c178bd5f7a90a8c8f3fd3db7c5b91", "lvms_operator": "registry.redhat.io/lvms4/lvms-rhel9-operator@sha256:3766640b19c336b443619ecdb35f36b479c79ea71b21de97febf024a5eaf6c84", - "csi-snapshot-controller": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:b3909056067d61252190b978b5e816008bf9a0f8b112c536e6226f0d57c24b83" + "csi-snapshot-controller": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:be54a457dae13f577c883e08fcfe37219b75d41c1a44f72763c41486a9208af3" } } diff --git a/assets/release/release-x86_64.json b/assets/release/release-x86_64.json index 007cf8d57d..0515e3bbfe 100644 --- a/assets/release/release-x86_64.json +++ b/assets/release/release-x86_64.json @@ -1,16 +1,16 @@ { "release": { - "base": "5.0.0-0.nightly-2026-04-26-064718" + "base": "5.0.0-0.nightly-2026-04-29-210124" }, "images": { - "cli": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:c0a99e7ce0c77a177a080c98aaec65cb82ae271ea4361af95d482c35146941e0", - "coredns": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:16945dcf0fcb6fd973d86d652ce07508664b6f05f97d93815bc23a9428113167", - "haproxy-router": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:9e0561ec6ce2c97f052462a35a6db4c9c9fe46353303dbd25e571e81e7002bbc", - "kube-rbac-proxy": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:63f598debd51e32a3af22d3830d903ebcd78a8887265c09f04c71e2ad7470b3d", - "ovn-kubernetes-microshift": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:1312092b993a8e7fe8571fdd075041cb00bf51084740b2230ac499ee7b09d3eb", - "pod": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:088275e7747673d89ea45429f8d360c2e9ddc056107cd92e64377ea7ad3c62c0", - "service-ca-operator": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:ebaa67c44356ad9b899f04b675772d0f59c4b78e141257816522f2ecf591808b", + "cli": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:847382ad19616e1ac72ddc02d249b41082a485301c361b5d40335625fe732d19", + "coredns": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:304935bdd611c30672df711b3a2ef97166a103adbf8b001cdf5e4f4522da5271", + "haproxy-router": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:0c4e07ac6991dc2a181f9d145b69901544bef228436bab5bdf90d0bc60c8408b", + "kube-rbac-proxy": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:3482ea3d2b8dce334f07b89086fdb06543d1a1680b4e71f937fbd13a171c42cf", + "ovn-kubernetes-microshift": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:a1665452c9943ca04b084e2f6b5016690ac820212687a3767ff1c89bdeb1a6f6", + "pod": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:d6dda1ab9b44b8fef40f2f609b2a8ab94c8a3d2927bd829ded4dcf7ff36f5191", + "service-ca-operator": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:2f2f46288231a6ec6d1aa498ba9cfec26b830af3b4a1fbbeeae4860980e66099", "lvms_operator": "registry.redhat.io/lvms4/lvms-rhel9-operator@sha256:58804d8baf922927b66cec9424d431a3bdb341d207024ce40cc8f0123bac03ee", - "csi-snapshot-controller": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:c0db5cd9a538815edcb434e47977ec131cd8057c7626185e5cd595a6c20566e8" + "csi-snapshot-controller": "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:2fb9d63f94d6f17f4ddd326d2dd8f78b041b8001747117919eb87e30a6a150f4" } } diff --git a/deps/github.com/openshift/kubernetes/pkg/kubelet/cm/devicemanager/topology_hints.go b/deps/github.com/openshift/kubernetes/pkg/kubelet/cm/devicemanager/topology_hints.go index 8846122a3d..267aedf877 100644 --- a/deps/github.com/openshift/kubernetes/pkg/kubelet/cm/devicemanager/topology_hints.go +++ b/deps/github.com/openshift/kubernetes/pkg/kubelet/cm/devicemanager/topology_hints.go @@ -152,12 +152,27 @@ func (m *ManagerImpl) getAvailableDevices(resource string) sets.Set[string] { } func (m *ManagerImpl) generateDeviceTopologyHints(resource string, available sets.Set[string], reusable sets.Set[string], request int) []topologymanager.TopologyHint { - // Initialize minAffinitySize to include all NUMA Nodes - minAffinitySize := len(m.numaNodes) + // Narrow the bitmask iteration to NUMA nodes that actually host + // devices for this resource. On platforms where the OS exposes many + // NUMA nodes that carry no devices (e.g. NVIDIA GB200 with 36 NUMA + // nodes, most hosting only GPU HBM), iterating all machine NUMA + // nodes would enumerate O(2^n) subsets. Restricting to device- + // bearing nodes reduces n to the number of nodes that matter. + // Because device-less nodes never contribute to devicesInMask, + // excluding them does not change minAffinitySize or Preferred + // flag computation. + numaNodes := m.deviceNUMANodes(resource) + if len(numaNodes) == 0 { + numaNodes = m.numaNodes + } + + // Initialize minAffinitySize to the number of NUMA nodes under + // consideration; it will be narrowed as satisfying masks are found. + minAffinitySize := len(numaNodes) // Iterate through all combinations of NUMA Nodes and build hints from them. hints := []topologymanager.TopologyHint{} - bitmask.IterateBitMasks(m.numaNodes, func(mask bitmask.BitMask) { + bitmask.IterateBitMasks(numaNodes, func(mask bitmask.BitMask) { // First, update minAffinitySize for the current request size. devicesInMask := 0 for _, device := range m.allDevices[resource] { @@ -218,6 +233,28 @@ func (m *ManagerImpl) generateDeviceTopologyHints(resource string, available set return hints } +// deviceNUMANodes returns the sorted list of NUMA node IDs that host at least +// one device for the given resource. The returned set is guaranteed to be a +// subset of m.numaNodes: any NUMA IDs reported by device plugins that are not +// known to cadvisor are logged and dropped. +// The caller must hold m.mutex. +func (m *ManagerImpl) deviceNUMANodes(resource string) []int { + nodesWithDevices := sets.New[int]() + for _, device := range m.allDevices[resource] { + nodesWithDevices.Insert(m.getNUMANodeIds(device.Topology)...) + } + + knownNodes := sets.New[int](m.numaNodes...) + unknown := nodesWithDevices.Difference(knownNodes) + if unknown.Len() > 0 { + klog.TODO().Info("Ignoring NUMA node IDs reported by device plugin that are unknown to cadvisor", + "resource", resource, "unknownNodes", sets.List(unknown), "knownNodes", m.numaNodes) + nodesWithDevices = nodesWithDevices.Intersection(knownNodes) + } + + return sets.List(nodesWithDevices) +} + func (m *ManagerImpl) getNUMANodeIds(topology *pluginapi.TopologyInfo) []int { if topology == nil { return nil diff --git a/deps/github.com/openshift/kubernetes/pkg/kubelet/cm/devicemanager/topology_hints_test.go b/deps/github.com/openshift/kubernetes/pkg/kubelet/cm/devicemanager/topology_hints_test.go index 53ea645a3a..17e7751c0c 100644 --- a/deps/github.com/openshift/kubernetes/pkg/kubelet/cm/devicemanager/topology_hints_test.go +++ b/deps/github.com/openshift/kubernetes/pkg/kubelet/cm/devicemanager/topology_hints_test.go @@ -976,6 +976,367 @@ func TestGetPodTopologyHints(t *testing.T) { } } +func TestDeviceNUMANodes(t *testing.T) { + resource := "testdevice" + deviceOnNode := func(id string, node int) *pluginapi.Device { + return &pluginapi.Device{ + ID: id, + Topology: &pluginapi.TopologyInfo{Nodes: []*pluginapi.NUMANode{{ID: int64(node)}}}, + } + } + + t.Run("collects NUMA nodes from all devices", func(t *testing.T) { + m := ManagerImpl{ + allDevices: NewResourceDeviceInstances(), + numaNodes: []int{0, 3, 5, 7}, + } + m.allDevices[resource] = DeviceInstances{ + "a": deviceOnNode("a", 3), + "b": deviceOnNode("b", 5), + } + + nodes := m.deviceNUMANodes(resource) + expected := []int{3, 5} + if !reflect.DeepEqual(nodes, expected) { + t.Fatalf("expected nodes %v, got %v", expected, nodes) + } + }) + + t.Run("device without topology is ignored", func(t *testing.T) { + m := ManagerImpl{ + allDevices: NewResourceDeviceInstances(), + numaNodes: []int{0, 4}, + } + m.allDevices[resource] = DeviceInstances{ + "a": deviceOnNode("a", 4), + "b": {ID: "b", Topology: nil}, + } + + nodes := m.deviceNUMANodes(resource) + expected := []int{4} + if !reflect.DeepEqual(nodes, expected) { + t.Fatalf("expected nodes %v, got %v", expected, nodes) + } + }) + + t.Run("returns empty when no device has topology", func(t *testing.T) { + m := ManagerImpl{ + allDevices: NewResourceDeviceInstances(), + } + m.allDevices[resource] = DeviceInstances{ + "a": {ID: "a", Topology: nil}, + "b": {ID: "b", Topology: nil}, + } + + nodes := m.deviceNUMANodes(resource) + if len(nodes) != 0 { + t.Fatalf("expected empty nodes, got %v", nodes) + } + }) + + t.Run("unknown NUMA IDs from device plugin are dropped", func(t *testing.T) { + m := ManagerImpl{ + allDevices: NewResourceDeviceInstances(), + numaNodes: []int{0, 1}, + } + m.allDevices[resource] = DeviceInstances{ + "a": deviceOnNode("a", 0), + "b": deviceOnNode("b", 99), + } + + nodes := m.deviceNUMANodes(resource) + expected := []int{0} + if !reflect.DeepEqual(nodes, expected) { + t.Fatalf("expected nodes %v (node 99 should be dropped), got %v", expected, nodes) + } + }) +} + +func TestGenerateDeviceTopologyHintsFiltersNUMANodes(t *testing.T) { + resource := "gpu" + + t.Run("two node machine, device on one node", func(t *testing.T) { + m := ManagerImpl{ + allDevices: NewResourceDeviceInstances(), + numaNodes: []int{0, 1}, + } + m.allDevices[resource] = DeviceInstances{ + "a": { + ID: "a", + Topology: &pluginapi.TopologyInfo{Nodes: []*pluginapi.NUMANode{{ID: 0}}}, + }, + } + + hints := m.generateDeviceTopologyHints(resource, sets.New[string]("a"), nil, 1) + + maskNode0, _ := bitmask.NewBitMask(0) + expected := []topologymanager.TopologyHint{ + {NUMANodeAffinity: maskNode0, Preferred: true}, + } + + if !reflect.DeepEqual(hints, expected) { + t.Fatalf("expected hints %v, got %v", expected, hints) + } + }) + + t.Run("large NUMA machine with devices on small subset", func(t *testing.T) { + allNUMA := make([]int, 34) + for i := range allNUMA { + allNUMA[i] = i + } + + m := ManagerImpl{ + allDevices: NewResourceDeviceInstances(), + numaNodes: allNUMA, + } + m.allDevices[resource] = DeviceInstances{ + "gpu0": { + ID: "gpu0", + Topology: &pluginapi.TopologyInfo{Nodes: []*pluginapi.NUMANode{{ID: 0}}}, + }, + "gpu1": { + ID: "gpu1", + Topology: &pluginapi.TopologyInfo{Nodes: []*pluginapi.NUMANode{{ID: 1}}}, + }, + } + + hints := m.generateDeviceTopologyHints(resource, sets.New[string]("gpu0", "gpu1"), nil, 1) + sort.SliceStable(hints, func(i, j int) bool { return hints[i].LessThan(hints[j]) }) + + maskNode0, _ := bitmask.NewBitMask(0) + maskNode1, _ := bitmask.NewBitMask(1) + maskBoth, _ := bitmask.NewBitMask(0, 1) + expected := []topologymanager.TopologyHint{ + {NUMANodeAffinity: maskNode0, Preferred: true}, + {NUMANodeAffinity: maskNode1, Preferred: true}, + {NUMANodeAffinity: maskBoth, Preferred: false}, + } + sort.SliceStable(expected, func(i, j int) bool { return expected[i].LessThan(expected[j]) }) + + if !reflect.DeepEqual(hints, expected) { + t.Fatalf("expected hints %v, got %v", expected, hints) + } + }) + + t.Run("devices span all NUMA nodes", func(t *testing.T) { + m := ManagerImpl{ + allDevices: NewResourceDeviceInstances(), + numaNodes: []int{0, 1}, + } + m.allDevices[resource] = DeviceInstances{ + "a": { + ID: "a", + Topology: &pluginapi.TopologyInfo{Nodes: []*pluginapi.NUMANode{{ID: 0}}}, + }, + "b": { + ID: "b", + Topology: &pluginapi.TopologyInfo{Nodes: []*pluginapi.NUMANode{{ID: 1}}}, + }, + } + + hints := m.generateDeviceTopologyHints(resource, sets.New[string]("a", "b"), nil, 1) + + fullMask, _ := bitmask.NewBitMask(0, 1) + fullMaskCount := 0 + for _, h := range hints { + if h.NUMANodeAffinity.IsEqual(fullMask) { + fullMaskCount++ + } + } + if fullMaskCount != 1 { + t.Fatalf("expected exactly one full-machine mask, got %d in hints: %v", fullMaskCount, hints) + } + }) + + t.Run("reusable device on filtered node", func(t *testing.T) { + m := ManagerImpl{ + allDevices: NewResourceDeviceInstances(), + numaNodes: []int{0, 1, 2, 3}, + } + m.allDevices[resource] = DeviceInstances{ + "a": { + ID: "a", + Topology: &pluginapi.TopologyInfo{Nodes: []*pluginapi.NUMANode{{ID: 0}}}, + }, + } + + hints := m.generateDeviceTopologyHints(resource, nil, sets.New[string]("a"), 1) + + expected := []topologymanager.TopologyHint{ + {NUMANodeAffinity: makeSocketMask(0), Preferred: true}, + } + if !reflect.DeepEqual(hints, expected) { + t.Fatalf("expected hints %v, got %v", expected, hints) + } + }) + + t.Run("reusable and available on different nodes", func(t *testing.T) { + m := ManagerImpl{ + allDevices: NewResourceDeviceInstances(), + numaNodes: []int{0, 1, 2, 3}, + } + m.allDevices[resource] = DeviceInstances{ + "a": { + ID: "a", + Topology: &pluginapi.TopologyInfo{Nodes: []*pluginapi.NUMANode{{ID: 0}}}, + }, + "b": { + ID: "b", + Topology: &pluginapi.TopologyInfo{Nodes: []*pluginapi.NUMANode{{ID: 1}}}, + }, + } + + hints := m.generateDeviceTopologyHints(resource, sets.New[string]("b"), sets.New[string]("a"), 2) + + expected := []topologymanager.TopologyHint{ + {NUMANodeAffinity: makeSocketMask(0, 1), Preferred: true}, + } + if !reflect.DeepEqual(hints, expected) { + t.Fatalf("expected hints %v, got %v", expected, hints) + } + }) +} + +// TestFilteredDeviceHintsMergeWithOtherProviders exercises policy.Merge with +// the device hints produced by our changed code, without needing to wire up +// real CPU/memory managers. +func TestFilteredDeviceHintsMergeWithOtherProviders(t *testing.T) { + t.Run("device on node 0", func(t *testing.T) { + numaNodes := []int{0, 1} + numaInfo := &topologymanager.NUMAInfo{ + Nodes: numaNodes, + NUMADistances: topologymanager.NUMADistances{}, + } + + m := ManagerImpl{ + allDevices: NewResourceDeviceInstances(), + numaNodes: numaNodes, + } + m.allDevices["gpu"] = DeviceInstances{ + "gpu0": { + ID: "gpu0", + Topology: &pluginapi.TopologyInfo{Nodes: []*pluginapi.NUMANode{{ID: 0}}}, + }, + } + + deviceHints := m.generateDeviceTopologyHints("gpu", sets.New[string]("gpu0"), nil, 1) + + providersHints := []map[string][]topologymanager.TopologyHint{ + {"gpu": deviceHints}, + {"cpu": { + {NUMANodeAffinity: makeSocketMask(0), Preferred: true}, + {NUMANodeAffinity: makeSocketMask(0, 1), Preferred: false}, + }}, + {"memory": { + {NUMANodeAffinity: makeSocketMask(0), Preferred: true}, + {NUMANodeAffinity: makeSocketMask(0, 1), Preferred: false}, + }}, + } + + assertMergePreferred(t, numaInfo, providersHints, makeSocketMask(0)) + }) + + t.Run("device on non-zero node only", func(t *testing.T) { + numaNodes := []int{0, 1} + numaInfo := &topologymanager.NUMAInfo{ + Nodes: numaNodes, + NUMADistances: topologymanager.NUMADistances{}, + } + + m := ManagerImpl{ + allDevices: NewResourceDeviceInstances(), + numaNodes: numaNodes, + } + m.allDevices["gpu"] = DeviceInstances{ + "gpu0": { + ID: "gpu0", + Topology: &pluginapi.TopologyInfo{Nodes: []*pluginapi.NUMANode{{ID: 1}}}, + }, + } + + deviceHints := m.generateDeviceTopologyHints("gpu", sets.New[string]("gpu0"), nil, 1) + + providersHints := []map[string][]topologymanager.TopologyHint{ + {"gpu": deviceHints}, + {"cpu": { + {NUMANodeAffinity: makeSocketMask(1), Preferred: true}, + {NUMANodeAffinity: makeSocketMask(0, 1), Preferred: false}, + }}, + {"memory": { + {NUMANodeAffinity: makeSocketMask(1), Preferred: true}, + {NUMANodeAffinity: makeSocketMask(0, 1), Preferred: false}, + }}, + } + + assertMergePreferred(t, numaInfo, providersHints, makeSocketMask(1)) + }) + + t.Run("high NUMA node IDs without node 0", func(t *testing.T) { + numaNodes := []int{3, 7} + numaInfo := &topologymanager.NUMAInfo{ + Nodes: numaNodes, + NUMADistances: topologymanager.NUMADistances{}, + } + + m := ManagerImpl{ + allDevices: NewResourceDeviceInstances(), + numaNodes: numaNodes, + } + m.allDevices["gpu"] = DeviceInstances{ + "gpu0": { + ID: "gpu0", + Topology: &pluginapi.TopologyInfo{Nodes: []*pluginapi.NUMANode{{ID: 7}}}, + }, + } + + deviceHints := m.generateDeviceTopologyHints("gpu", sets.New[string]("gpu0"), nil, 1) + + providersHints := []map[string][]topologymanager.TopologyHint{ + {"gpu": deviceHints}, + {"cpu": { + {NUMANodeAffinity: makeSocketMask(7), Preferred: true}, + {NUMANodeAffinity: makeSocketMask(3, 7), Preferred: false}, + }}, + {"memory": { + {NUMANodeAffinity: makeSocketMask(7), Preferred: true}, + {NUMANodeAffinity: makeSocketMask(3, 7), Preferred: false}, + }}, + } + + assertMergePreferred(t, numaInfo, providersHints, makeSocketMask(7)) + }) +} + +func assertMergePreferred(t *testing.T, numaInfo *topologymanager.NUMAInfo, providersHints []map[string][]topologymanager.TopologyHint, expectedMask bitmask.BitMask) { + t.Helper() + tCtx := ktesting.Init(t) + for _, policyName := range []string{"best-effort", "restricted"} { + t.Run(policyName, func(t *testing.T) { + var policy topologymanager.Policy + switch policyName { + case "best-effort": + policy = topologymanager.NewBestEffortPolicy(numaInfo, topologymanager.PolicyOptions{}) + case "restricted": + policy = topologymanager.NewRestrictedPolicy(numaInfo, topologymanager.PolicyOptions{}) + } + + bestHint, admit := policy.Merge(tCtx.Logger(), providersHints) + if !admit { + t.Fatalf("expected pod to be admitted under %s policy", policyName) + } + if bestHint.NUMANodeAffinity == nil { + t.Fatalf("expected non-nil NUMANodeAffinity") + } + if !bestHint.NUMANodeAffinity.IsEqual(expectedMask) { + t.Fatalf("expected best hint %v, got %v", expectedMask, bestHint.NUMANodeAffinity) + } + if !bestHint.Preferred { + t.Fatalf("expected best hint to be preferred") + } + }) + } +} + type topologyHintTestCase struct { description string pod *v1.Pod @@ -1048,10 +1409,6 @@ func getCommonTestCases() []topologyHintTestCase { NUMANodeAffinity: makeSocketMask(1), Preferred: true, }, - { - NUMANodeAffinity: makeSocketMask(0, 1), - Preferred: false, - }, }, }, }, @@ -1269,10 +1626,6 @@ func getCommonTestCases() []topologyHintTestCase { NUMANodeAffinity: makeSocketMask(0), Preferred: true, }, - { - NUMANodeAffinity: makeSocketMask(0, 1), - Preferred: false, - }, }, }, }, @@ -1345,10 +1698,6 @@ func getCommonTestCases() []topologyHintTestCase { NUMANodeAffinity: makeSocketMask(0), Preferred: true, }, - { - NUMANodeAffinity: makeSocketMask(0, 1), - Preferred: false, - }, }, }, }, diff --git a/packaging/crio.conf.d/10-microshift_amd64.conf b/packaging/crio.conf.d/10-microshift_amd64.conf index 5a035a2e9b..4abd4657ef 100644 --- a/packaging/crio.conf.d/10-microshift_amd64.conf +++ b/packaging/crio.conf.d/10-microshift_amd64.conf @@ -2,6 +2,6 @@ # for community builds on top of OKD, this setting has no effect [crio.image] global_auth_file="/etc/crio/openshift-pull-secret" -pause_image = "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:088275e7747673d89ea45429f8d360c2e9ddc056107cd92e64377ea7ad3c62c0" +pause_image = "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:d6dda1ab9b44b8fef40f2f609b2a8ab94c8a3d2927bd829ded4dcf7ff36f5191" pause_image_auth_file = "/etc/crio/openshift-pull-secret" pause_command = "/usr/bin/pod" diff --git a/packaging/crio.conf.d/10-microshift_arm64.conf b/packaging/crio.conf.d/10-microshift_arm64.conf index eb48491605..f3eca834b3 100644 --- a/packaging/crio.conf.d/10-microshift_arm64.conf +++ b/packaging/crio.conf.d/10-microshift_arm64.conf @@ -2,6 +2,6 @@ # for community builds on top of OKD, this setting has no effect [crio.image] global_auth_file="/etc/crio/openshift-pull-secret" -pause_image = "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:17d238add9f701323815480d278c4fa5e857fffd582289ba73ca49708fb19480" +pause_image = "quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:9782b8c28667d76e2eb6d105590425e7e8cdbdcc835f7195846f5356cb12879b" pause_image_auth_file = "/etc/crio/openshift-pull-secret" pause_command = "/usr/bin/pod" diff --git a/scripts/auto-rebase/changelog.txt b/scripts/auto-rebase/changelog.txt index 93d4497a3c..06068b1c38 100644 --- a/scripts/auto-rebase/changelog.txt +++ b/scripts/auto-rebase/changelog.txt @@ -1,6 +1,175 @@ -- ovn-kubernetes image-arm64 aaa4085f32001c72a7f02557aae8ded035deb341 to ab5bb67189c6626e5a55ab341a7cfb689d50d88f +- api embedded-component 4f63a40a2970d8bcc2f3767bc6b57e09880544fb to 1180c0f5c3e91ef67dbef9b002256d2fb98cd7bd + - 78e7fb33 2026-04-28T13:52:51+02:00 integration test vault kms plugin api + - 9b710e84 2026-04-28T13:52:48+02:00 regenerate files + - e3770171 2026-04-28T13:41:17+02:00 add config api for vault kms plugin + - f65015d5 2026-04-23T16:11:52+02:00 tombstone aws kms fields + - 9da0538c 2026-04-15T16:06:22+02:00 remove KMSEncryptionProvider feature flag + - 015b757c 2026-04-15T16:03:09+02:00 regenerate openapi + +- cluster-kube-apiserver-operator embedded-component df4cff15fcd9cb3eb6643dc52309f5b93230b3ce to 7c44d03516fc5a2d013fed07b1cc5a03d474bd4c + - 534231b 2026-04-27T14:47:14+05:30 CNTRLPLANE-3326: Skip unstable TestBoundTokenOperatorSecretDeletion + - 83d6805 2026-04-17T12:39:09-04:00 Add control-plane-approvers to OWNERS + +- cluster-kube-controller-manager-operator embedded-component f66ec606970c59461a174d789a5cccbe231c9b32 to ca150c42a7982509b8bba34080308cff00c09310 + - c55a0be 2026-04-27T17:04:36+05:30 go mod vendor + - 48f4fd2 2026-04-27T15:29:55+05:30 Add NetworkPolicy test cases for kube-controller-manager operator + +- kubernetes embedded-component 757ccdfcf9a1f89059acaba311c3625c495a6732 to 2447118a5cf501f71c2da4b2f4ff14f3492aec10 + - e03164970 2026-04-16T15:24:44-04:00 UPSTREAM: 138244: devicemanager: constrain topology hints to device NUMA nodes + +- machine-config-operator embedded-component b5d168576877cda02f8c8764b49a98fda23df825 to 89245a09d586bdbf8fb3a7adf3f0db7c2940a13b + - ff1f510a 2026-04-24T08:05:38-04:00 Remove monolithic e2e-ocl test suite + - ba997b1c 2026-04-24T19:53:11+08:00 AGENT-1449: Gate IRI informers on feature flag in template controller + - 544412ac 2026-04-24T14:45:49+05:30 Improve /migrate-tests skill: default labels and ordering verification + - 96aa0d87 2026-04-22T23:34:14+08:00 AGENT-1449: Remove duplicate IRI controller test + - 52db12c0 2026-04-22T12:26:46+02:00 OCPBUGS-83859: Fix encapsulated IGN version + - d8102e64 2026-04-20T21:50:47+08:00 AGENT-1449: Implement IRISecretMerger as mini-controller + - 5c231025 2026-04-20T16:06:41+08:00 AGENT-1449: Refactor IRI credential merging into IRISecretMerger type + - 8d0b6a5b 2026-04-20T16:06:41+08:00 AGENT-1449: Address review feedback + - bd2aa13d 2026-04-20T16:06:41+08:00 AGENT-1449: Authenticate MCD IRI registry queries from kubelet auth file + - 9523efe8 2026-04-20T16:06:41+08:00 AGENT-1449: Merge IRI credentials in template controller at render time + - c2ea799a 2026-04-20T16:06:41+08:00 AGENT-1449: Address review feedback on IRI auth changes (round 3) + - 4c399cef 2026-04-16T07:59:47+08:00 AGENT-1449: Add localhost:22625 credentials to pull secret for master nodes + - d4cb8a29 2026-04-16T07:59:47+08:00 AGENT-1449: Embed IRI credentials in MachineConfig instead of global pull secret + - 6f10841f 2026-04-16T07:58:42+08:00 AGENT-1449: Add IRI registry auth e2e tests + - 14bdbe9a 2026-04-16T07:58:42+08:00 AGENT-1449: Address review feedback on IRI auth changes (round 2) + - b4a5e167 2026-04-16T07:58:42+08:00 AGENT-1449: Address review feedback on IRI auth changes + - 2f21cb28 2026-04-16T07:58:42+08:00 AGENT-1449: Fix bootstrap/in-cluster rendered MC hash mismatch + - 6eca49e8 2026-04-16T07:58:42+08:00 AGENT-1449: Add IRI registry authentication support to MCO + +- openshift-controller-manager embedded-component 26d20feae8892f648f5b06ed3f5492fe6ffb4532 to 731d7429a788e0d70e3556e40f82c1ba9d55abe7 + - 96d6462 2026-04-17T13:45:54-04:00 Add control-plane-approvers to OWNERS + +- service-ca-operator embedded-component 95674f775bcff10cfec79a61a0e3451e4c48eb71 to 2aa88ace39a1abe7647bc5b03e6a599985b31605 + - d88fd6f 2026-04-27T10:34:13-04:00 Add control-plane-approvers to OWNERS + +- ovn-kubernetes image-amd64 aaa4085f32001c72a7f02557aae8ded035deb341 to 952886fd8af2ca3ecf1717a2cb69311a32f25c06 + - 78db8485 2026-04-27T19:04:00+05:30 Sync test annotations with upstream changes + - ef4338f1 2026-04-23T17:38:57-07:00 Fix minor coreabbit bug findings + - 208b4f9b 2026-04-23T15:48:18-07:00 Add missing gtw opt for isolated, fix comma escape + - 944ff5a3 2026-04-23T13:50:25-04:00 Fixes panic due to chassis delete with nil predicate value + - f503a50a 2026-04-23T10:12:00-07:00 Skip event recording for suppressed errors in node reconciliation + - 7965632a 2026-04-23T15:25:21+02:00 Fix inverted error check for ANP unsupported priority + - 85c28ccb 2026-04-22T11:14:50-07:00 Remove ./daemonset.sh script + - 80be988d 2026-04-22T11:08:17-07:00 Deprecate kind.sh, symlink it to kind-helm.sh + - 2cc1ad3d 2026-04-22T11:08:17-07:00 Update upgrade-ovn.sh script + - ec8d9811 2026-04-22T11:08:17-07:00 Add missing metrics configuration + - 29b190d8 2026-04-22T11:08:17-07:00 Remove USE_HELM flag and default to always use helm + - 79e3c44b 2026-04-22T11:08:15-07:00 Move old crds j2 files into helm crds + - eaa8ee76 2026-04-22T10:55:45-07:00 Migrate remaining features from kind to kind-helm.sh + - 33dce5ba 2026-04-22T10:55:45-07:00 Remove the extra -helm suffix from CI test targets + - 44c2f83d 2026-04-21T13:06:03-04:00 Bump frr to 10.5.3 to pick up more coredump fixes + - b0426d09 2026-04-21T12:44:18-04:00 e2e: preload frr image + - 998d0d90 2026-04-21T12:35:21-04:00 contrib: Allow to override FRR image version for metallb + - f5e9b820 2026-04-21T12:33:47-04:00 Fail job if sed -i is ineffective + - 99fee87e 2026-04-21T12:32:53-04:00 e2e: retry MetalLB LB wget checks under ETP local + - 20e9e0c0 2026-04-21T12:32:53-04:00 metallb: make ip pool reflect job ip family mode + - 9af7b326 2026-04-21T12:32:53-04:00 e2e: collect info about ip6 routes for bgp speakers + - 982f5db8 2026-04-21T12:32:53-04:00 e2e: wait for bgp route installed in external container + - 752cd3ad 2026-04-21T12:32:53-04:00 e2e: do not skip frr service coredumps + - be63c277 2026-04-21T12:32:53-04:00 Upgrade MetalLB from v0.14.9 to v0.15.3 + - 2a571a00 2026-04-21T15:05:29+02:00 RegisterNADReconciler never returns an error, remove. + - b0b70ae0 2026-04-21T15:05:29+02:00 CNC: update to use RegisterNADReconciler to avoid races + - b562ed3b 2026-04-21T11:58:44+02:00 Add e2e tests for CNC annotation ValidatingAdmissionPolicy + - e426fae9 2026-04-21T11:58:44+02:00 Add ValidatingAdmissionPolicy for CNC annotations - ce1390ec 2026-04-21T11:46:36+02:00 OTE: run few EVPN tests which use random VTEP subnet + - 0318088a 2026-04-20T21:01:04Z e2e, kubevirt: Fix ipamless localnet iperf flake by adding connectivity pre-check + - 6b2bbc72 2026-04-20T12:28:36-04:00 Address review: merge CUDN condition into UpdateSubsystemCondition and add e2e test + - 579b3143 2026-04-20T12:28:36-04:00 Report NetworkAllocationSucceeded status condition for CUDNs + - d656ea7f 2026-04-20T07:13:17-07:00 Fix add_dns_hostnames for ipv4, and other minor bug + - 328d097c 2026-04-17T05:35:15-07:00 Migrate all CI tests to helm + - 9b2be298 2026-04-16T10:02:27-07:00 Add SPDX license headers and CI enforcement + - 702e28ae 2026-04-16T10:02:50+02:00 E2E: Replace GetNetwork("kind") with PrimaryNetwork() + - 52ee5110 2026-04-16T12:23:17+05:30 Adding meta-descriptions plugin for SEO 1 + - 9b392c3e 2026-04-16T12:14:15+05:30 Adding meta-descriptions plugin for SEO + - 6d526acc 2026-04-15T18:31:26+02:00 Cluster manager shouldn't error out on localnets with no subnet + - 626c58c1 2026-04-14T19:08:30+02:00 Add blog for kubecon demo on debugging network policies with netobserv + - ea282804 2026-04-14T20:34:47+05:30 Add node IP to HostNetworkNamespace address_set + - 2f18b02a 2026-04-14T14:44:08+02:00 Use Add instead of AddRateLimited in UDN svc controller event handlers + - f26c6811 2026-04-13T19:27:18+02:00 Improve EndpointSlice mirror controller scale bottlenecks + - 545e61fa 2026-04-13T12:19:39-04:00 Adds gateway annotation parsing to cache + - fe27ce9e 2026-04-13T16:44:01+05:30 Website UI Revamp + - 39e34326 2026-04-13T11:45:21+02:00 Fix subnet IP allocator to reject out-of-range IPs + - d5278136 2026-04-11T17:19:48-07:00 Fix IPv6/dualstack support in kind-helm.sh and migrate CI tests + - e3f43f00 2026-04-10T11:55:41-04:00 Fix reconciling updates for hostNetworkNamespace Addr set + - 35d53c41 2026-04-10T11:55:41-04:00 Node controller: fallback to latest informer object + - c8e5a58d 2026-04-10T11:55:41-04:00 cluster manager: fix checks for node-subnet allocation + - 1d60b690 2026-04-10T11:55:41-04:00 node: guard gateway reconcile during partial-init cleanup + - 97982888 2026-04-10T11:55:41-04:00 Move CDN to node-level driven controller + - 6f6d3567 2026-04-10T08:29:39-07:00 Support nodeSelector in AddressSetManager + - 8d14570b 2026-04-09T18:03:26-07:00 Fix node tracker missing node-subnets annotation transitions + - 11e77a28 2026-04-09T14:31:48+02:00 Fix shared AddressSetManager stale cache on UDN controller recreation + - 13e9373c 2026-04-09T13:53:58+02:00 github actions: update actions version due to deprecation of nodejs 20 + - fcc61cc8 2026-04-08T15:47:28-07:00 Add optional VF resources fields for UDN in helm charts and daemonsets + - 8d712716 2026-04-07T14:42:40-04:00 adopters: add KubeStellar Console + - 373e2c86 2026-03-30T20:35:13-04:00 Fix DPU healthcheck by propagating namespace configuration to ovnkube + +- kubernetes image-amd64 757ccdfcf9a1f89059acaba311c3625c495a6732 to 2447118a5cf501f71c2da4b2f4ff14f3492aec10 + - e03164970 2026-04-16T15:24:44-04:00 UPSTREAM: 138244: devicemanager: constrain topology hints to device NUMA nodes -- service-ca-operator image-arm64 95674f775bcff10cfec79a61a0e3451e4c48eb71 to 2aa88ace39a1abe7647bc5b03e6a599985b31605 +- service-ca-operator image-amd64 95674f775bcff10cfec79a61a0e3451e4c48eb71 to 2aa88ace39a1abe7647bc5b03e6a599985b31605 - d88fd6f 2026-04-27T10:34:13-04:00 Add control-plane-approvers to OWNERS +- ovn-kubernetes image-arm64 ab5bb67189c6626e5a55ab341a7cfb689d50d88f to 952886fd8af2ca3ecf1717a2cb69311a32f25c06 + - 78db8485 2026-04-27T19:04:00+05:30 Sync test annotations with upstream changes + - ef4338f1 2026-04-23T17:38:57-07:00 Fix minor coreabbit bug findings + - 208b4f9b 2026-04-23T15:48:18-07:00 Add missing gtw opt for isolated, fix comma escape + - 944ff5a3 2026-04-23T13:50:25-04:00 Fixes panic due to chassis delete with nil predicate value + - f503a50a 2026-04-23T10:12:00-07:00 Skip event recording for suppressed errors in node reconciliation + - 7965632a 2026-04-23T15:25:21+02:00 Fix inverted error check for ANP unsupported priority + - 85c28ccb 2026-04-22T11:14:50-07:00 Remove ./daemonset.sh script + - 80be988d 2026-04-22T11:08:17-07:00 Deprecate kind.sh, symlink it to kind-helm.sh + - 2cc1ad3d 2026-04-22T11:08:17-07:00 Update upgrade-ovn.sh script + - ec8d9811 2026-04-22T11:08:17-07:00 Add missing metrics configuration + - 29b190d8 2026-04-22T11:08:17-07:00 Remove USE_HELM flag and default to always use helm + - 79e3c44b 2026-04-22T11:08:15-07:00 Move old crds j2 files into helm crds + - eaa8ee76 2026-04-22T10:55:45-07:00 Migrate remaining features from kind to kind-helm.sh + - 33dce5ba 2026-04-22T10:55:45-07:00 Remove the extra -helm suffix from CI test targets + - 44c2f83d 2026-04-21T13:06:03-04:00 Bump frr to 10.5.3 to pick up more coredump fixes + - b0426d09 2026-04-21T12:44:18-04:00 e2e: preload frr image + - 998d0d90 2026-04-21T12:35:21-04:00 contrib: Allow to override FRR image version for metallb + - f5e9b820 2026-04-21T12:33:47-04:00 Fail job if sed -i is ineffective + - 99fee87e 2026-04-21T12:32:53-04:00 e2e: retry MetalLB LB wget checks under ETP local + - 20e9e0c0 2026-04-21T12:32:53-04:00 metallb: make ip pool reflect job ip family mode + - 9af7b326 2026-04-21T12:32:53-04:00 e2e: collect info about ip6 routes for bgp speakers + - 982f5db8 2026-04-21T12:32:53-04:00 e2e: wait for bgp route installed in external container + - 752cd3ad 2026-04-21T12:32:53-04:00 e2e: do not skip frr service coredumps + - be63c277 2026-04-21T12:32:53-04:00 Upgrade MetalLB from v0.14.9 to v0.15.3 + - 2a571a00 2026-04-21T15:05:29+02:00 RegisterNADReconciler never returns an error, remove. + - b0b70ae0 2026-04-21T15:05:29+02:00 CNC: update to use RegisterNADReconciler to avoid races + - b562ed3b 2026-04-21T11:58:44+02:00 Add e2e tests for CNC annotation ValidatingAdmissionPolicy + - e426fae9 2026-04-21T11:58:44+02:00 Add ValidatingAdmissionPolicy for CNC annotations + - 0318088a 2026-04-20T21:01:04Z e2e, kubevirt: Fix ipamless localnet iperf flake by adding connectivity pre-check + - 6b2bbc72 2026-04-20T12:28:36-04:00 Address review: merge CUDN condition into UpdateSubsystemCondition and add e2e test + - 579b3143 2026-04-20T12:28:36-04:00 Report NetworkAllocationSucceeded status condition for CUDNs + - d656ea7f 2026-04-20T07:13:17-07:00 Fix add_dns_hostnames for ipv4, and other minor bug + - 328d097c 2026-04-17T05:35:15-07:00 Migrate all CI tests to helm + - 9b2be298 2026-04-16T10:02:27-07:00 Add SPDX license headers and CI enforcement + - 702e28ae 2026-04-16T10:02:50+02:00 E2E: Replace GetNetwork("kind") with PrimaryNetwork() + - 52ee5110 2026-04-16T12:23:17+05:30 Adding meta-descriptions plugin for SEO 1 + - 9b392c3e 2026-04-16T12:14:15+05:30 Adding meta-descriptions plugin for SEO + - 6d526acc 2026-04-15T18:31:26+02:00 Cluster manager shouldn't error out on localnets with no subnet + - 626c58c1 2026-04-14T19:08:30+02:00 Add blog for kubecon demo on debugging network policies with netobserv + - ea282804 2026-04-14T20:34:47+05:30 Add node IP to HostNetworkNamespace address_set + - 2f18b02a 2026-04-14T14:44:08+02:00 Use Add instead of AddRateLimited in UDN svc controller event handlers + - f26c6811 2026-04-13T19:27:18+02:00 Improve EndpointSlice mirror controller scale bottlenecks + - 545e61fa 2026-04-13T12:19:39-04:00 Adds gateway annotation parsing to cache + - fe27ce9e 2026-04-13T16:44:01+05:30 Website UI Revamp + - 39e34326 2026-04-13T11:45:21+02:00 Fix subnet IP allocator to reject out-of-range IPs + - d5278136 2026-04-11T17:19:48-07:00 Fix IPv6/dualstack support in kind-helm.sh and migrate CI tests + - e3f43f00 2026-04-10T11:55:41-04:00 Fix reconciling updates for hostNetworkNamespace Addr set + - 35d53c41 2026-04-10T11:55:41-04:00 Node controller: fallback to latest informer object + - c8e5a58d 2026-04-10T11:55:41-04:00 cluster manager: fix checks for node-subnet allocation + - 1d60b690 2026-04-10T11:55:41-04:00 node: guard gateway reconcile during partial-init cleanup + - 97982888 2026-04-10T11:55:41-04:00 Move CDN to node-level driven controller + - 6f6d3567 2026-04-10T08:29:39-07:00 Support nodeSelector in AddressSetManager + - 8d14570b 2026-04-09T18:03:26-07:00 Fix node tracker missing node-subnets annotation transitions + - 11e77a28 2026-04-09T14:31:48+02:00 Fix shared AddressSetManager stale cache on UDN controller recreation + - 13e9373c 2026-04-09T13:53:58+02:00 github actions: update actions version due to deprecation of nodejs 20 + - fcc61cc8 2026-04-08T15:47:28-07:00 Add optional VF resources fields for UDN in helm charts and daemonsets + - 8d712716 2026-04-07T14:42:40-04:00 adopters: add KubeStellar Console + - 373e2c86 2026-03-30T20:35:13-04:00 Fix DPU healthcheck by propagating namespace configuration to ovnkube + +- kubernetes image-arm64 757ccdfcf9a1f89059acaba311c3625c495a6732 to 2447118a5cf501f71c2da4b2f4ff14f3492aec10 + - e03164970 2026-04-16T15:24:44-04:00 UPSTREAM: 138244: devicemanager: constrain topology hints to device NUMA nodes + diff --git a/scripts/auto-rebase/commits.txt b/scripts/auto-rebase/commits.txt index 0cbb87fd50..b113415ed4 100644 --- a/scripts/auto-rebase/commits.txt +++ b/scripts/auto-rebase/commits.txt @@ -1,35 +1,35 @@ -https://github.com/openshift/api embedded-component 4f63a40a2970d8bcc2f3767bc6b57e09880544fb +https://github.com/openshift/api embedded-component 1180c0f5c3e91ef67dbef9b002256d2fb98cd7bd https://github.com/openshift/cluster-csi-snapshot-controller-operator embedded-component 108f37f0e378accc322cbeb68136ec500ec35b94 https://github.com/openshift/cluster-dns-operator embedded-component 3d2141182243cde1ec6417bd005c76d29aa88a01 https://github.com/openshift/cluster-ingress-operator embedded-component 961ac218364fb5f6de970ade1161ece3b8195aed -https://github.com/openshift/cluster-kube-apiserver-operator embedded-component df4cff15fcd9cb3eb6643dc52309f5b93230b3ce -https://github.com/openshift/cluster-kube-controller-manager-operator embedded-component f66ec606970c59461a174d789a5cccbe231c9b32 +https://github.com/openshift/cluster-kube-apiserver-operator embedded-component 7c44d03516fc5a2d013fed07b1cc5a03d474bd4c +https://github.com/openshift/cluster-kube-controller-manager-operator embedded-component ca150c42a7982509b8bba34080308cff00c09310 https://github.com/openshift/cluster-kube-scheduler-operator embedded-component a0495853f80d38e19d07b98a225e1aa0e7972ac9 https://github.com/openshift/cluster-network-operator embedded-component 142432afacfb9cd11a9bd4e5e333bd6a4cdcd555 https://github.com/openshift/cluster-openshift-controller-manager-operator embedded-component c941a99dd2b9200c0de23606c4372d33d656a756 https://github.com/openshift/cluster-policy-controller embedded-component bb429f5b2a7d77791110b06d8ec5c017183e3ab9 https://github.com/openshift/csi-external-snapshotter embedded-component d1bc3ffaa9759c13a06c2ec61c541342e71bd109 https://github.com/openshift/etcd embedded-component d8d67b8ce849f816d6d23c904098336632e2348f -https://github.com/openshift/kubernetes embedded-component 757ccdfcf9a1f89059acaba311c3625c495a6732 +https://github.com/openshift/kubernetes embedded-component 2447118a5cf501f71c2da4b2f4ff14f3492aec10 https://github.com/openshift/kubernetes-kube-storage-version-migrator embedded-component 72835e43c7754356645e41031f3a99926b4d42e6 -https://github.com/openshift/machine-config-operator embedded-component b5d168576877cda02f8c8764b49a98fda23df825 -https://github.com/openshift/openshift-controller-manager embedded-component 26d20feae8892f648f5b06ed3f5492fe6ffb4532 +https://github.com/openshift/machine-config-operator embedded-component 89245a09d586bdbf8fb3a7adf3f0db7c2940a13b +https://github.com/openshift/openshift-controller-manager embedded-component 731d7429a788e0d70e3556e40f82c1ba9d55abe7 https://github.com/openshift/operator-framework-olm embedded-component 122728c856e9436ea5ab763bf57977047691bb90 https://github.com/openshift/route-controller-manager embedded-component 624742d93f3a7885cf7f70985f1e23ff60da580d -https://github.com/openshift/service-ca-operator embedded-component 95674f775bcff10cfec79a61a0e3451e4c48eb71 +https://github.com/openshift/service-ca-operator embedded-component 2aa88ace39a1abe7647bc5b03e6a599985b31605 https://github.com/openshift/oc image-amd64 6b8e30c5b39aa742147846341a203905e04834f3 https://github.com/openshift/coredns image-amd64 0dded2d232dab43c107b1dab9d0d9fdfd8259622 https://github.com/openshift/csi-external-snapshotter image-amd64 d1bc3ffaa9759c13a06c2ec61c541342e71bd109 https://github.com/openshift/router image-amd64 896390778ebe15f57f87e6ca78f11c96e64c2652 https://github.com/openshift/kube-rbac-proxy image-amd64 d12e274605248f6c59373240a7eae7a7a357dcb3 -https://github.com/openshift/ovn-kubernetes image-amd64 aaa4085f32001c72a7f02557aae8ded035deb341 -https://github.com/openshift/kubernetes image-amd64 757ccdfcf9a1f89059acaba311c3625c495a6732 -https://github.com/openshift/service-ca-operator image-amd64 95674f775bcff10cfec79a61a0e3451e4c48eb71 +https://github.com/openshift/ovn-kubernetes image-amd64 952886fd8af2ca3ecf1717a2cb69311a32f25c06 +https://github.com/openshift/kubernetes image-amd64 2447118a5cf501f71c2da4b2f4ff14f3492aec10 +https://github.com/openshift/service-ca-operator image-amd64 2aa88ace39a1abe7647bc5b03e6a599985b31605 https://github.com/openshift/oc image-arm64 6b8e30c5b39aa742147846341a203905e04834f3 https://github.com/openshift/coredns image-arm64 0dded2d232dab43c107b1dab9d0d9fdfd8259622 https://github.com/openshift/csi-external-snapshotter image-arm64 d1bc3ffaa9759c13a06c2ec61c541342e71bd109 https://github.com/openshift/router image-arm64 896390778ebe15f57f87e6ca78f11c96e64c2652 https://github.com/openshift/kube-rbac-proxy image-arm64 d12e274605248f6c59373240a7eae7a7a357dcb3 -https://github.com/openshift/ovn-kubernetes image-arm64 ab5bb67189c6626e5a55ab341a7cfb689d50d88f -https://github.com/openshift/kubernetes image-arm64 757ccdfcf9a1f89059acaba311c3625c495a6732 +https://github.com/openshift/ovn-kubernetes image-arm64 952886fd8af2ca3ecf1717a2cb69311a32f25c06 +https://github.com/openshift/kubernetes image-arm64 2447118a5cf501f71c2da4b2f4ff14f3492aec10 https://github.com/openshift/service-ca-operator image-arm64 2aa88ace39a1abe7647bc5b03e6a599985b31605 diff --git a/scripts/auto-rebase/last_rebase.sh b/scripts/auto-rebase/last_rebase.sh index a65b2a0605..eee242cc30 100755 --- a/scripts/auto-rebase/last_rebase.sh +++ b/scripts/auto-rebase/last_rebase.sh @@ -1,2 +1,2 @@ #!/bin/bash -x -./scripts/auto-rebase/rebase.sh to "registry.ci.openshift.org/ocp/release-5:5.0.0-0.nightly-2026-04-26-064718" "registry.ci.openshift.org/ocp-arm64/release-5-arm64:5.0.0-0.nightly-arm64-2026-04-28-233705" +./scripts/auto-rebase/rebase.sh to "registry.ci.openshift.org/ocp/release-5:5.0.0-0.nightly-2026-04-29-210124" "registry.ci.openshift.org/ocp-arm64/release-5-arm64:5.0.0-0.nightly-arm64-2026-04-29-233705" diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/topology_hints.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/topology_hints.go index 8846122a3d..267aedf877 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/topology_hints.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/topology_hints.go @@ -152,12 +152,27 @@ func (m *ManagerImpl) getAvailableDevices(resource string) sets.Set[string] { } func (m *ManagerImpl) generateDeviceTopologyHints(resource string, available sets.Set[string], reusable sets.Set[string], request int) []topologymanager.TopologyHint { - // Initialize minAffinitySize to include all NUMA Nodes - minAffinitySize := len(m.numaNodes) + // Narrow the bitmask iteration to NUMA nodes that actually host + // devices for this resource. On platforms where the OS exposes many + // NUMA nodes that carry no devices (e.g. NVIDIA GB200 with 36 NUMA + // nodes, most hosting only GPU HBM), iterating all machine NUMA + // nodes would enumerate O(2^n) subsets. Restricting to device- + // bearing nodes reduces n to the number of nodes that matter. + // Because device-less nodes never contribute to devicesInMask, + // excluding them does not change minAffinitySize or Preferred + // flag computation. + numaNodes := m.deviceNUMANodes(resource) + if len(numaNodes) == 0 { + numaNodes = m.numaNodes + } + + // Initialize minAffinitySize to the number of NUMA nodes under + // consideration; it will be narrowed as satisfying masks are found. + minAffinitySize := len(numaNodes) // Iterate through all combinations of NUMA Nodes and build hints from them. hints := []topologymanager.TopologyHint{} - bitmask.IterateBitMasks(m.numaNodes, func(mask bitmask.BitMask) { + bitmask.IterateBitMasks(numaNodes, func(mask bitmask.BitMask) { // First, update minAffinitySize for the current request size. devicesInMask := 0 for _, device := range m.allDevices[resource] { @@ -218,6 +233,28 @@ func (m *ManagerImpl) generateDeviceTopologyHints(resource string, available set return hints } +// deviceNUMANodes returns the sorted list of NUMA node IDs that host at least +// one device for the given resource. The returned set is guaranteed to be a +// subset of m.numaNodes: any NUMA IDs reported by device plugins that are not +// known to cadvisor are logged and dropped. +// The caller must hold m.mutex. +func (m *ManagerImpl) deviceNUMANodes(resource string) []int { + nodesWithDevices := sets.New[int]() + for _, device := range m.allDevices[resource] { + nodesWithDevices.Insert(m.getNUMANodeIds(device.Topology)...) + } + + knownNodes := sets.New[int](m.numaNodes...) + unknown := nodesWithDevices.Difference(knownNodes) + if unknown.Len() > 0 { + klog.TODO().Info("Ignoring NUMA node IDs reported by device plugin that are unknown to cadvisor", + "resource", resource, "unknownNodes", sets.List(unknown), "knownNodes", m.numaNodes) + nodesWithDevices = nodesWithDevices.Intersection(knownNodes) + } + + return sets.List(nodesWithDevices) +} + func (m *ManagerImpl) getNUMANodeIds(topology *pluginapi.TopologyInfo) []int { if topology == nil { return nil