From 9ac413fa3037a05c3b322047d0e7deb60007b2bd Mon Sep 17 00:00:00 2001 From: Yuva Shankar <11082310+yuva29@users.noreply.github.com> Date: Fri, 28 Aug 2026 21:58:59 +0000 Subject: [PATCH] =?UTF-8?q?chore:=20v1.2.1=20release=20prep=20=E2=80=94=20?= =?UTF-8?q?version=20bump,=20docs=20update,=20and=20Makefile=20automation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cherry-pick from pensando/network-operator#358. - Bump version to v1.2.1 across Go code, CI, Helm charts, OLM bundle/catalog - Add AINIC_VERSIONS, update-docs-version, and release-prep Makefile targets - Bump docs image tags and helm version refs from v1.1.0 to v1.2.1 - Add v1.2.1 compat matrix row and OpenShift 4.21 to OS support matrix - Fix update-version-in-ci sed pattern to preserve shell variable refs - Fix cni-plugins image name typo in networkconfig.md Co-Authored-By: Claude Opus 4 --- Makefile | 80 +- ...-operator-manager-config_v1_configmap.yaml | 15 + ...etwork-operator.clusterserviceversion.yaml | 1373 ++++++++++++++ bundle/manifests/amd.com_networkconfigs.yaml | 1655 +++++++++++++++++ bundle/manifests/device-plugin-configmap.yaml | 36 + bundle/metadata/annotations.yaml | 14 + bundle/tests/scorecard/config.yaml | 70 + ...etwork-operator.clusterserviceversion.yaml | 8 +- config/samples/amd.com_networkconfigs.yaml | 8 +- docs/_static/cluster-validation-job.yaml | 4 +- docs/device_plugin/deviceplugin.md | 8 +- docs/index.md | 10 +- .../installation/kubernetes-helm-operators.md | 2 +- docs/installation/kubernetes-helm.md | 6 +- docs/installation/networkconfig-full.md | 10 +- docs/installation/networkconfig.md | 14 +- docs/metrics/exporter.md | 2 +- docs/upgrades/componentupgrades.md | 8 +- docs/upgrades/upgrade.md | 6 +- example/networkconfig.yaml | 16 +- hack/device-plugin-configmap.yaml | 36 + hack/k8s-patch/metadata-patch/Chart.yaml | 2 +- .../openshift-patch/metadata-patch/Chart.yaml | 2 +- helm-charts-k8s/Chart.lock | 2 +- helm-charts-k8s/Chart.yaml | 9 +- helm-charts-k8s/README.md | 2 +- helm-charts-k8s/crds/networkconfig-crd.yaml | 2 +- helm-charts-openshift/values.yaml | 74 + internal/controllers/upgrademgr.go | 2 +- internal/deviceplugin/deviceplugin.go | 2 +- internal/metricsexporter/exporter.go | 2 +- internal/nodelabeller/nodelabeller.go | 2 +- internal/secondarynetwork/cniplugins.go | 2 +- internal/utils.go | 2 +- 34 files changed, 3417 insertions(+), 69 deletions(-) create mode 100644 bundle/manifests/amd-network-operator-manager-config_v1_configmap.yaml create mode 100644 bundle/manifests/amd-network-operator.clusterserviceversion.yaml create mode 100644 bundle/manifests/amd.com_networkconfigs.yaml create mode 100644 bundle/manifests/device-plugin-configmap.yaml create mode 100644 bundle/metadata/annotations.yaml create mode 100644 bundle/tests/scorecard/config.yaml create mode 100644 hack/device-plugin-configmap.yaml create mode 100644 helm-charts-openshift/values.yaml diff --git a/Makefile b/Makefile index f0842162..ec22c00e 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,11 @@ endif # PROJECT_VERSION defines the project version. # Update this value when you upgrade the version of your project. -PROJECT_VERSION ?= v1.2.0 +PROJECT_VERSION ?= v1.2.1 + +# AINIC_VERSIONS lists the supported AINIC firmware versions for this release (comma-separated). +# Used by update-docs-version to populate the compatibility matrix in docs/index.md. +AINIC_VERSIONS ?= 1.117.5-a-77,1.117.5-a-147 #################################### # Network Operator Image Build variables @@ -48,7 +52,7 @@ KMM_OPERATOR_IMG_NAME ?= $(DOCKER_REGISTRY)/kernel-module-management-operator # by default, helm charts version is same as project version # unless in the hourly build where we may put hourly build tag in the helm charts version HELM_CHARTS_VERSION ?= $(PROJECT_VERSION) -YAML_FILES=config/samples/amd.com_networkconfigs.yaml config/manifests/bases/amd-network-operator.clusterserviceversion.yaml example/networkconfig.yaml config/default/kustomization.yaml +YAML_FILES=bundle/manifests/amd-network-operator-node-metrics_rbac.authorization.k8s.io_v1_rolebinding.yaml bundle/manifests/amd-network-operator.clusterserviceversion.yaml bundle/manifests/amd-network-operator-node-labeller_rbac.authorization.k8s.io_v1_clusterrolebinding.yaml bundle/manifests/amd-network-operator-node-metrics_monitoring.coreos.com_v1_servicemonitor.yaml config/samples/amd.com_networkconfigs.yaml config/manifests/bases/amd-network-operator.clusterserviceversion.yaml example/networkconfig.yaml config/default/kustomization.yaml CRD_YAML_FILES = networkconfig-crd.yaml K8S_KMM_CRD_YAML_FILES=module-crd.yaml nodemodulesconfig-crd.yaml OPENSHIFT_KMM_CRD_YAML_FILES=module-crd.yaml nodemodulesconfig-crd.yaml @@ -128,7 +132,7 @@ SHELL = /usr/bin/env bash -o pipefail DOCKER_GID := $(shell stat -c '%g' /var/run/docker.sock) USER_UID := $(shell id -u) USER_GID := $(shell id -g) -DOCKER_BUILDER_TAG := v1.4 +DOCKER_BUILDER_TAG := v1.5 DOCKER_BUILDER_IMAGE := $(DOCKER_REGISTRY)/network-operator-build:$(DOCKER_BUILDER_TAG) CONTAINER_WORKDIR := /network-operator BUILD_BASE_IMG ?= ubuntu:22.04 @@ -160,6 +164,13 @@ all: vendor generate manager manifests helm-k8s docker-build .PHONY: skip-vendor skip-vendor: generate manager manifests helm-k8s docker-build +.PHONY: release-prep +release-prep: IMAGE_TAG=$(PROJECT_VERSION) +release-prep: update-version-in-ci update-docs-version helm-k8s bundle-build catalog ## Prepare release: bump versions in code, CI, docs, helm charts, and OLM bundle/catalog + @printf -- "---\n# Required by Auto Cherry Picker automation\n# Defines the list of branches into which the changes would need cherry-picking\ncherry_pick_branches:\n - main\n" > branch_policy.yml + @echo "" + @echo "Release prep complete for ${PROJECT_VERSION}." + ##@ General # The help target prints out all targets with their descriptions organized @@ -182,6 +193,7 @@ help: ## Display this help. .PHONY: update-registry update-registry: ## Update all image URLs based on the image variables # updating registry information in yaml files + sed -i -e 's|image:.*$$|image: ${IMG}|' bundle/manifests/amd-network-operator.clusterserviceversion.yaml sed -i -e 's|repository:.*$$|repository: ${IMAGE_TAG_BASE}|' \ hack/k8s-patch/metadata-patch/values.yaml \ hack/openshift-patch/metadata-patch/values.yaml @@ -189,7 +201,7 @@ update-registry: ## Update all image URLs based on the image variables -e 's|newName:.*$$|newName: ${IMAGE_TAG_BASE}|' \ config/manager-base/kustomization.yaml config/manager/kustomization.yaml \ hack/k8s-patch/metadata-patch/values.yaml helm-charts-k8s/values.yaml \ - hack/openshift-patch/metadata-patch/values.yaml \ + hack/openshift-patch/metadata-patch/values.yaml helm-charts-openshift/values.yaml \ example/networkconfig.yaml sed -i -e 's|tag:.*$$|tag: ${KMM_IMAGE_TAG}|' \ -e 's|repository:.*operator.*$$|repository: ${KMM_OPERATOR_IMG_NAME}|' \ @@ -212,6 +224,60 @@ update-version: ## Update the Project version in helm charts based on ${PROJECT_ sed -i 's|network-operator-utils:v[^ "]*|network-operator-utils:${PROJECT_VERSION}|' internal/controllers/upgrademgr.go internal/utils.go sed -i 's|k8s-network-device-plugin:v[^ "]*|k8s-network-device-plugin:${PROJECT_VERSION}|' internal/deviceplugin/deviceplugin.go sed -i 's|device-metrics-exporter:nic-v[^ "]*|device-metrics-exporter:nic-${PROJECT_VERSION}|' internal/metricsexporter/exporter.go + # updating image tags in OLM CSV base (flows into bundle via make bundle) + sed -i 's|k8s-network-device-plugin:v[^ "]*|k8s-network-device-plugin:${PROJECT_VERSION}|' config/manifests/bases/amd-network-operator.clusterserviceversion.yaml + sed -i 's|k8s-network-node-labeller:v[^ "]*|k8s-network-node-labeller:${PROJECT_VERSION}|' config/manifests/bases/amd-network-operator.clusterserviceversion.yaml + sed -i 's|device-metrics-exporter:nic-v[^ "]*|device-metrics-exporter:nic-${PROJECT_VERSION}|' config/manifests/bases/amd-network-operator.clusterserviceversion.yaml + # updating image tags in sample and example CRs + sed -i 's|k8s-network-device-plugin:v[^ "]*|k8s-network-device-plugin:${PROJECT_VERSION}|' config/samples/amd.com_networkconfigs.yaml + sed -i 's|k8s-network-node-labeller:v[^ "]*|k8s-network-node-labeller:${PROJECT_VERSION}|' config/samples/amd.com_networkconfigs.yaml + +DOCS_IMAGE_VERSION_FILES = \ + docs/installation/networkconfig.md \ + docs/installation/networkconfig-full.md \ + docs/device_plugin/deviceplugin.md \ + docs/metrics/exporter.md \ + docs/upgrades/componentupgrades.md \ + docs/_static/cluster-validation-job.yaml \ + example/networkconfig.yaml + +DOCS_HELM_VERSION_FILES = \ + docs/installation/kubernetes-helm.md \ + docs/upgrades/upgrade.md + +.PHONY: update-docs-version +update-docs-version: ## Update image tags, helm versions, and compat matrix in docs and examples + # updating image tags in docs and examples + sed -i 's|k8s-network-device-plugin:v[^ "`()]*|k8s-network-device-plugin:${PROJECT_VERSION}|' $(DOCS_IMAGE_VERSION_FILES) + sed -i 's|k8s-network-node-labeller:v[^ "`()]*|k8s-network-node-labeller:${PROJECT_VERSION}|' $(DOCS_IMAGE_VERSION_FILES) + sed -i 's|device-metrics-exporter:nic-v[^ "`()]*|device-metrics-exporter:nic-${PROJECT_VERSION}|' $(DOCS_IMAGE_VERSION_FILES) + sed -i 's|k8s-cni-plugins:v[^ "`()]*|k8s-cni-plugins:${PROJECT_VERSION}|' $(DOCS_IMAGE_VERSION_FILES) + sed -i 's|network-operator-utils:v[^ "`()]*|network-operator-utils:${PROJECT_VERSION}|' $(DOCS_IMAGE_VERSION_FILES) + # updating helm version references in docs + sed -i 's|--version=v[0-9][^ ]*|--version=${PROJECT_VERSION}|' $(DOCS_HELM_VERSION_FILES) + sed -i 's|image\.tag=v[0-9][^ ]*|image.tag=${PROJECT_VERSION}|' $(DOCS_HELM_VERSION_FILES) + sed -i '/controllerManager\.manager\.image\.tag/s|`"v[0-9][^"]*"`|`"${PROJECT_VERSION}"`|' $(DOCS_HELM_VERSION_FILES) + # updating network operator helm version in co-install guide (skip GPU operator commands) + sed -i '/network-operator-charts/,+5 s|--version=v[0-9][^ ]*|--version=${PROJECT_VERSION}|' docs/installation/kubernetes-helm-operators.md + # updating compatibility matrix in docs/index.md + @AINIC_FW=$$(echo '${AINIC_VERSIONS}' | sed 's/,/
/g'); \ + ROW=$$(printf "| %-16s | %-30s | %-14s |" "${PROJECT_VERSION}" "$${AINIC_FW}" "Pollara 400"); \ + sed -i '/^| ${PROJECT_VERSION} /d' docs/index.md; \ + LAST_LINE=$$(grep -n 'Pollara 400' docs/index.md | tail -1 | cut -d: -f1); \ + if [ -n "$$LAST_LINE" ]; then \ + sed -i "$${LAST_LINE} a $$ROW" docs/index.md; \ + else \ + echo "WARNING: Could not find compat matrix. Add manually: $$ROW"; \ + fi + +.PHONY: update-version-in-ci +update-version-in-ci: ## Update project version and helm chart references in CI job config (.job.yml) and asset-push script + sed -i -e 's|PROJECT_VERSION=v[^ ]*|PROJECT_VERSION=${PROJECT_VERSION}|' .job.yml + sed -i '0,/HELM_CHARTS_VERSION=/s|HELM_CHARTS_VERSION=[^ ]*|HELM_CHARTS_VERSION=$${RELEASE:-${PROJECT_VERSION}-dev}|' .job.yml + sed -i '0,/BUNDLE_VERSION=/s|BUNDLE_VERSION=[^ ]*|BUNDLE_VERSION=$${RELEASE:-${PROJECT_VERSION}-dev}|' .job.yml + sed -i 's|network-operator-helm-k8s-[^$$].*\.tgz|network-operator-helm-k8s-${HELM_CHARTS_VERSION}.tgz|' .job.yml + sed -i 's|network-operator-helm-openshift-.*\.tgz|network-operator-helm-openshift-${HELM_CHARTS_VERSION}.tgz|' .job.yml + sed -i 's|PROJECT_VERSION:-.*$$|PROJECT_VERSION:-${PROJECT_VERSION}\}|' asset-build/networkoperator-asset-push.sh .PHONY: manifests manifests: controller-gen update-registry update-version ## Generate ClusterRole and CustomResourceDefinition objects. @@ -296,6 +362,11 @@ lint: golangci-lint ## Run golangci-lint against code. fi $(GOLANGCI_LINT) run -v --timeout 5m0s +.PHONY: docs-lint +docs-lint: ## Run docs Markdown lint + spelling. + markdownlint-cli2 "**/*.md" --config docs/.markdownlint-cli2.yaml + pyspelling -c .spellcheck.yaml + ##@ Build manager: $(shell find -name "*.go") go.mod go.sum ## Build manager binary. @@ -448,6 +519,7 @@ bundle-build: operator-sdk manifests kustomize PKG=amd-network-operator \ SOURCE_DIR=$(dir $(realpath $(lastword $(MAKEFILE_LIST)))) \ KUBECTL_CMD=${KUBECTL_CMD} ./hack/generate-bundle + cp hack/device-plugin-configmap.yaml bundle/manifests/ ${OPERATOR_SDK} bundle validate ./bundle $(CONTAINER_ENGINE) build -f bundle.Dockerfile -t $(BUNDLE_IMG) . diff --git a/bundle/manifests/amd-network-operator-manager-config_v1_configmap.yaml b/bundle/manifests/amd-network-operator-manager-config_v1_configmap.yaml new file mode 100644 index 00000000..28a01234 --- /dev/null +++ b/bundle/manifests/amd-network-operator-manager-config_v1_configmap.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +data: + controller_manager_config.yaml: | + healthProbeBindAddress: :8081 + metricsBindAddress: 127.0.0.1:8080 + leaderElection: + enabled: true + resourceID: network.amd.com +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: amd-network + app.kubernetes.io/name: amd-network + app.kubernetes.io/part-of: amd-network + name: amd-network-operator-manager-config diff --git a/bundle/manifests/amd-network-operator.clusterserviceversion.yaml b/bundle/manifests/amd-network-operator.clusterserviceversion.yaml new file mode 100644 index 00000000..49daf723 --- /dev/null +++ b/bundle/manifests/amd-network-operator.clusterserviceversion.yaml @@ -0,0 +1,1373 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "amd.com/v1alpha1", + "kind": "NetworkConfig", + "metadata": { + "name": "test-NetworkConfig", + "namespace": "kube-amd-network" + }, + "spec": { + "devicePlugin": { + "devicePluginImage": "rocm/k8s-network-device-plugin:v1.2.1", + "nodeLabellerImage": "rocm/k8s-network-node-labeller:v1.2.1" + }, + "driver": { + "image": "my.registry.io/myUserName/myRepo", + "imageRegistrySecret": { + "name": "docker-auth" + }, + "version": "6.2.2" + }, + "selector": { + "feature.node.kubernetes.io/amd-nic": "true" + } + } + } + ] + capabilities: Seamless Upgrades + categories: AI/Machine Learning,Networking,Monitoring + containerImage: docker.io/rocm/amd-network-operator:v1.2.1 + createdAt: "2026-08-28T04:46:37Z" + description: |- + Operator responsible for deploying AMD Network kernel drivers, device plugin, node labeller and device metrics exporter + For more information, visit [documentation](https://instinct.docs.amd.com/projects/network-operator/en/latest/) + devicePluginImage: docker.io/rocm/k8s-network-device-plugin:v1.2.1 + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "false" + features.operators.openshift.io/proxy-aware: "true" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + metricsExporterImage: docker.io/rocm/device-metrics-exporter:nic-v1.2.1 + nodelabellerImage: docker.io/rocm/k8s-network-node-labeller:v1.2.1 + operatorframework.io/cluster-monitoring: "true" + operatorframework.io/suggested-namespace: openshift-amd-network + operators.openshift.io/valid-subscription: '[]' + operators.operatorframework.io/builder: operator-sdk-v1.32.0 + operators.operatorframework.io/project_layout: go.kubebuilder.io/v3 + repository: https://github.com/ROCm/network-operator + support: Advanced Micro Devices, Inc. + name: amd-network-operator.v1.2.1 + namespace: placeholder +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - description: NetworkConfig describes how to enable AMD Network device + displayName: NetworkConfig + kind: NetworkConfig + name: networkconfigs.amd.com + resources: + - kind: Daemonset + name: apps + version: v1 + - kind: Pod + name: core + version: v1 + - kind: services + name: core + version: v1 + - kind: Module + name: modules.kmm.sigs.x-k8s.io + version: v1beta1 + specDescriptors: + - description: common config + displayName: CommonConfig + path: commonConfig + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:commonConfig + - description: InitContainerImage is being used for the operands pods, i.e. + metrics exporter, test runner, device plugin and node labeller + displayName: InitContainerImage + path: commonConfig.initContainerImage + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:initContainerImage + - description: UtilsContainer contains parameters to configure operator's utils + container + displayName: UtilsContainer + path: commonConfig.utilsContainer + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:utilsContainer + - description: Image is the image of utils container + displayName: Image + path: commonConfig.utilsContainer.image + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:image + - description: image pull policy for utils container + displayName: ImagePullPolicy + path: commonConfig.utilsContainer.imagePullPolicy + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:imagePullPolicy + - description: secret used for pull utils container image + displayName: ImageRegistrySecret + path: commonConfig.utilsContainer.imageRegistrySecret + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:imageRegistrySecret + - description: config manager + displayName: ConfigManager + path: configManager + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:configManager + - description: config map to customize the config for config manager, if not + specified default config will be applied + displayName: Config + path: configManager.config + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:configmap + - description: tolerations for the network config manager DaemonSet + displayName: ConfigManagerTolerations + path: configManager.configManagerTolerations + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:configManagerTolerations + - description: enable config manager, disabled by default + displayName: Enable + path: configManager.enable + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:enable + - description: config manager image + displayName: Image + path: configManager.image + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:image + - description: image pull policy for config manager + displayName: ImagePullPolicy + path: configManager.imagePullPolicy + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:imagePullPolicy + - description: config manager image registry secret used to pull/push images + displayName: ImageRegistrySecret + path: configManager.imageRegistrySecret + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:imageRegistrySecret + - description: Selector describes on which nodes to enable config manager + displayName: Selector + path: configManager.selector + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:selector + - description: upgrade policy for config manager daemonset + displayName: UpgradePolicy + path: configManager.upgradePolicy + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:upgradePolicy + - description: MaxUnavailable specifies the maximum number of Pods that can + be unavailable during the update process. Applicable for RollingUpdate only. + Default value is 1. + displayName: MaxUnavailable + path: configManager.upgradePolicy.maxUnavailable + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:maxUnavailable + - description: UpgradeStrategy specifies the type of the DaemonSet update. Valid + values are "RollingUpdate" (default) or "OnDelete". + displayName: UpgradeStrategy + path: configManager.upgradePolicy.upgradeStrategy + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:upgradeStrategy + - description: device plugin + displayName: DevicePlugin + path: devicePlugin + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:devicePlugin + - description: 'device plugin arguments is used to pass supported flags and + their values while starting device plugin daemonset supported flag values: + {"resource_naming_strategy": {"single", "mixed"}}' + displayName: DevicePluginArguments + path: devicePlugin.devicePluginArguments + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:devicePluginArguments + - description: device plugin image + displayName: DevicePluginImage + path: devicePlugin.devicePluginImage + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:devicePluginImage + - description: image pull policy for device plugin + displayName: DevicePluginImagePullPolicy + path: devicePlugin.devicePluginImagePullPolicy + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:DevicePluginImagePullPolicy + - description: tolerations for the device plugin DaemonSet + displayName: DevicePluginTolerations + path: devicePlugin.devicePluginTolerations + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:devicePluginTolerations + - description: enable or disable the node labeller + displayName: EnableNodeLabeller + path: devicePlugin.enableNodeLabeller + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:enableNodeLabeller + - description: node labeller image registry secret used to pull/push images + displayName: ImageRegistrySecret + path: devicePlugin.imageRegistrySecret + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:imageRegistrySecret + - description: node labeller image + displayName: NodeLabellerImage + path: devicePlugin.nodeLabellerImage + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:nodeLabellerImage + - description: image pull policy for node labeller + displayName: NodeLabellerImagePullPolicy + path: devicePlugin.nodeLabellerImagePullPolicy + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:NodeLabellerImagePullPolicy + - description: tolerations for the node labeller DaemonSet + displayName: NodeLabellerTolerations + path: devicePlugin.nodeLabellerTolerations + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:nodeLabellerTolerations + - description: upgrade policy for device plugin and node labeller daemons + displayName: UpgradePolicy + path: devicePlugin.upgradePolicy + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:upgradePolicy + - description: MaxUnavailable specifies the maximum number of Pods that can + be unavailable during the update process. Applicable for RollingUpdate only. + Default value is 1. + displayName: MaxUnavailable + path: devicePlugin.upgradePolicy.maxUnavailable + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:maxUnavailable + - description: UpgradeStrategy specifies the type of the DaemonSet update. Valid + values are "RollingUpdate" (default) or "OnDelete". + displayName: UpgradeStrategy + path: devicePlugin.upgradePolicy.upgradeStrategy + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:upgradeStrategy + - description: driver + displayName: Driver + path: driver + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:driver + - description: radeon repo URL for fetching amdnetwork installer if building + driver image on the fly installer URL is https://repo.radeon.com by default + displayName: AMDNetworkInstallerRepoURL + path: driver.AMDNetworkInstallerRepoURL + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:AMDNetworkInstallerRepoURL + - description: blacklist amdnetwork drivers on the host. Node reboot is required + to apply the blacklist on the worker nodes. Require spec.devicePlugin.enableNodeLabeller=true + to take effect. Not working for OpenShift cluster. OpenShift users please + use the Machine Config Operator (MCO) resource to configure ionic blacklist. + Example MCO resource is available at https://instinct.docs.amd.com/projects/network-operator/en/latest/installation/openshift-olm.html#create-blacklist-for-installing-out-of-tree-kernel-module + displayName: BlacklistDrivers + path: driver.blacklist + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:blacklistDrivers + - description: enable driver install. default value is true. disable is for + skipping driver install/uninstall for dryrun or using in-tree ionic and + rdma related kernel modules + displayName: Enable + path: driver.enable + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:enable + - description: 'defines image that includes drivers and firmware blobs, don''t + include tag since it will be fully managed by operator for vanilla k8s the + default value is image-registry:5000/$MOD_NAMESPACE/amdnetwork_kmod for + OpenShift the default value is image-registry.openshift-image-registry.svc:5000/$MOD_NAMESPACE/amdnetwork_kmod + image tag will be in the format of --- example tag is coreos-416.94-5.14.0-427.28.1.el9_4.x86_64-6.2.2 + and ubuntu-22.04-5.15.0-94-generic-6.1.3 NOTE: Updating the driver image + repository is not supported. Please delete the existing NetworkConfig and + create a new one with the updated image repository' + displayName: Image + path: driver.image + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:image + - description: image build configs + displayName: ImageBuild + path: driver.imageBuild + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:imageBuild + - description: 'image registry to fetch base image for building driver image, + default value is docker.io, the builder will search for corresponding OS + base image from given registry e.g. if your worker node is using Ubuntu + 22.04, by default the base image would be docker.io/ubuntu:22.04 Use spec.driver.imageRegistrySecret + for authentication with private registries. NOTE: this field won''t apply + for OpenShift since OpenShift is using its own DriverToolKit image to build + driver image' + displayName: BaseImageRegistry + path: driver.imageBuild.baseImageRegistry + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:baseImageRegistry + - description: TLS settings for fetching base image this field will be applied + to SourceImageRepo as well + displayName: BaseImageRegistryTLS + path: driver.imageBuild.baseImageRegistryTLS + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:baseImageRegistryTLS + - description: If true, check if the container image already exists using plain + HTTP. + displayName: Insecure + path: driver.imageBuild.baseImageRegistryTLS.insecure + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:insecure + - description: If true, skip any TLS server certificate validation + displayName: InsecureSkipTLSVerify + path: driver.imageBuild.baseImageRegistryTLS.insecureSkipTLSVerify + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:insecureSkipTLSVerify + - description: 'SourceImageRepo specifies the image repository for the driver + source code (OpenShift only). Used when spec.driver.useSourceImage is true. + The operator automatically determines the image tag based on cluster RHEL + version and spec.driver.version (format: coreos--). + Default: docker.io/rocm/amdainic-driver Use spec.driver.imageRegistrySecret + for authentication with private registries.' + displayName: SourceImageRepo + path: driver.imageBuild.sourceImageRepo + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:sourceImageRepo + - description: secrets used for pull/push images from/to private registry specified + in driversImage + displayName: ImageRegistrySecret + path: driver.imageRegistrySecret + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:imageRegistrySecret + - description: driver image registry TLS setting for the container image + displayName: ImageRegistryTLS + path: driver.imageRegistryTLS + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:imageRegistryTLS + - description: If true, check if the container image already exists using plain + HTTP. + displayName: Insecure + path: driver.imageRegistryTLS.insecure + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:insecure + - description: If true, skip any TLS server certificate validation + displayName: InsecureSkipTLSVerify + path: driver.imageRegistryTLS.insecureSkipTLSVerify + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:insecureSkipTLSVerify + - description: image signing config to sign the driver image when building driver + image on the fly image signing is required for installing driver on secure + boot enabled system + displayName: ImageSign + path: driver.imageSign + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:imageSign + - description: ImageSignCertSecret the public key used to sign kernel modules + within image necessary for secure boot enabled system + displayName: ImageSignCertSecret + path: driver.imageSign.certSecret + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:imageSignCertSecret + - description: ImageSignKeySecret the private key used to sign kernel modules + within image necessary for secure boot enabled system + displayName: ImageSignKeySecret + path: driver.imageSign.keySecret + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:imageSignKeySecret + - description: tolerations for kmm module object + displayName: Tolerations + path: driver.tolerations + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:tolerations + - description: policy to upgrade the drivers + displayName: UpgradePolicy + path: driver.upgradePolicy + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:upgradePolicy + - description: enable upgrade policy, disabled by default If disabled, user + has to manually upgrade all the nodes. + displayName: Enable + path: driver.upgradePolicy.enable + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:enable + - description: MaxParallelUpgrades indicates how many nodes can be upgraded + in parallel 0 means no limit, all nodes will be upgraded in parallel + displayName: MaxParallelUpgrades + path: driver.upgradePolicy.maxParallelUpgrades + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:maxParallelUpgrades + - description: 'MaxUnavailableNodes indicates maximum number of nodes that can + be in a failed upgrade state beyond which upgrades will stop to keep cluster + at a minimal healthy state Value can be an integer (ex: 2) which would mean + atmost 2 nodes can be in failed state after which new upgrades will not + start. Or it can be a percentage string(ex: "50%") from which absolute number + will be calculated and round up' + displayName: MaxUnavailableNodes + path: driver.upgradePolicy.maxUnavailableNodes + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:maxUnavailableNodes + - description: Node draining policy + displayName: NodeDrainPolicy + path: driver.upgradePolicy.nodeDrainPolicy + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:nodeDrainPolicy + - description: Pod Deletion policy. If both NodeDrainPolicy and PodDeletionPolicy + config is available, NodeDrainPolicy(if enabled) will take precedence. + displayName: PodDeletionPolicy + path: driver.upgradePolicy.podDeletionPolicy + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:podDeletionPolicy + - description: reboot between driver upgrades, enabled by default, if enabled + spec.commonConfig.utilsContainer will be used to perform reboot on worker + nodes + displayName: RebootRequired + path: driver.upgradePolicy.rebootRequired + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:rebootRequired + - description: 'NOTE: currently only for OpenShift cluster set to true to use + source image to build driver image on the fly otherwise use installer debian/rpm + packages from radeon repo to build driver image' + displayName: UseSourceImage + path: driver.useSourceImage + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:useSourceImage + - description: 'version of the drivers source code, can be used as part of image + of dockerfile source image default value for different OS is: ubuntu: 1.117.1-a-42, + coreOS: 1.117.1-a-42' + displayName: Version + path: driver.version + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:version + - description: metrics exporter + displayName: MetricsExporter + path: metricsExporter + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:metricsExporter + - description: optional configuration for metrics + displayName: Config + path: metricsExporter.config + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:config + - description: Name of the configMap that defines the list of metrics default + list:[] + displayName: Name + path: metricsExporter.config.name + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:name + - description: enable metrics exporter, disabled by default + displayName: Enable + path: metricsExporter.enable + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:enable + - description: HostNetwork enables metrics exporter to use host networking, + enabled by default + displayName: HostNetwork + path: metricsExporter.hostNetwork + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:hostNetwork + - description: metrics exporter image + displayName: Image + path: metricsExporter.image + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:image + - description: image pull policy for metrics exporter + displayName: ImagePullPolicy + path: metricsExporter.imagePullPolicy + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:imagePullPolicy + - description: metrics exporter image registry secret used to pull/push images + displayName: ImageRegistrySecret + path: metricsExporter.imageRegistrySecret + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:imageRegistrySecret + - description: NodePort is the external port for pulling metrics from outside + the cluster, in the range 30000-32767 (assigned automatically by default) + displayName: NodePort + path: metricsExporter.nodePort + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:nodePort + - description: Port is the internal port used for in-cluster and node access + to pull metrics from the metrics-exporter (default 5001). + displayName: Port + path: metricsExporter.port + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:port + - description: Prometheus configuration for metrics exporter + displayName: Prometheus + path: metricsExporter.prometheus + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:prometheus + - description: ServiceMonitor configuration for Prometheus integration + displayName: ServiceMonitor + path: metricsExporter.prometheus.serviceMonitor + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:serviceMonitor + - description: AttachMetadata defines if Prometheus should attach node metadata + to the target + displayName: AttachMetadata + path: metricsExporter.prometheus.serviceMonitor.attachMetadata + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:attachMetadata + - description: Optional Prometheus authorization configuration for accessing + the endpoint + displayName: Authorization + path: metricsExporter.prometheus.serviceMonitor.authorization + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:authorization + - description: 'Path to bearer token file to be used by Prometheus (e.g., service + account token path) Deprecated: Use Authorization instead. This field is + kept for backward compatibility.' + displayName: BearerTokenFile + path: metricsExporter.prometheus.serviceMonitor.bearerTokenFile + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:bearerTokenFile + - description: Enable or disable ServiceMonitor creation (default false) + displayName: Enable + path: metricsExporter.prometheus.serviceMonitor.enable + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:enable + - description: HonorLabels chooses the metric's labels on collisions with target + labels (default true) + displayName: HonorLabels + path: metricsExporter.prometheus.serviceMonitor.honorLabels + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:honorLabels + - description: HonorTimestamps controls whether the scrape endpoints honor timestamps + (default false) + displayName: HonorTimestamps + path: metricsExporter.prometheus.serviceMonitor.honorTimestamps + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:honorTimestamps + - description: 'How frequently to scrape metrics. Accepts values with time unit + suffix: "30s", "1m", "2h", "500ms"' + displayName: Interval + path: metricsExporter.prometheus.serviceMonitor.interval + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:interval + - description: 'Additional labels to add to the ServiceMonitor (default release: + prometheus)' + displayName: Labels + path: metricsExporter.prometheus.serviceMonitor.labels + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:labels + - description: Relabeling rules applied to individual scraped metrics + displayName: MetricRelabelings + path: metricsExporter.prometheus.serviceMonitor.metricRelabelings + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:metricRelabelings + - description: RelabelConfigs to apply to samples before ingestion + displayName: Relabelings + path: metricsExporter.prometheus.serviceMonitor.relabelings + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:relabelings + - description: TLS settings used by Prometheus to connect to the metrics endpoint + displayName: TLSConfig + path: metricsExporter.prometheus.serviceMonitor.tlsConfig + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:tlsConfig + - description: optional kube-rbac-proxy config to provide rbac services + displayName: RbacConfig + path: metricsExporter.rbacConfig + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:rbacConfig + - description: 'Reference to a configmap containing the client CA (key: ca.crt) + for mTLS client validation' + displayName: ClientCAConfigMap + path: metricsExporter.rbacConfig.clientCAConfigMap + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:clientCAConfigMap + - description: disable https protecting the proxy endpoint + displayName: DisableHttps + path: metricsExporter.rbacConfig.disableHttps + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:disableHttps + - description: enable kube-rbac-proxy, disabled by default + displayName: Enable + path: metricsExporter.rbacConfig.enable + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:enable + - description: kube-rbac-proxy image + displayName: Image + path: metricsExporter.rbacConfig.image + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:image + - description: certificate secret to mount in kube-rbac container for TLS, self + signed certificates will be generated by default + displayName: Secret + path: metricsExporter.rbacConfig.secret + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:secret + - description: Optional static RBAC rules based on client certificate Common + Name (CN) + displayName: StaticAuthorization + path: metricsExporter.rbacConfig.staticAuthorization + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:staticAuthorization + - description: Expected CN (Common Name) from client cert (e.g., Prometheus + SA identity) + displayName: ClientName + path: metricsExporter.rbacConfig.staticAuthorization.clientName + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:clientName + - description: Enables static authorization using client certificate CN + displayName: Enable + path: metricsExporter.rbacConfig.staticAuthorization.enable + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:enable + - description: Selector describes on which nodes to enable metrics exporter + displayName: Selector + path: metricsExporter.selector + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:selector + - description: ServiceType service type for metrics, clusterIP/NodePort, clusterIP + by default + displayName: ServiceType + path: metricsExporter.serviceType + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:serviceType + - description: tolerations for metrics exporter + displayName: Tolerations + path: metricsExporter.tolerations + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:tolerations + - description: upgrade policy for metrics exporter daemons + displayName: UpgradePolicy + path: metricsExporter.upgradePolicy + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:upgradePolicy + - description: MaxUnavailable specifies the maximum number of Pods that can + be unavailable during the update process. Applicable for RollingUpdate only. + Default value is 1. + displayName: MaxUnavailable + path: metricsExporter.upgradePolicy.maxUnavailable + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:maxUnavailable + - description: UpgradeStrategy specifies the type of the DaemonSet update. Valid + values are "RollingUpdate" (default) or "OnDelete". + displayName: UpgradeStrategy + path: metricsExporter.upgradePolicy.upgradeStrategy + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:upgradeStrategy + - description: 'SecondaryNetworkSpec contains the spec for secondary network: + CNI plugins and IPAM' + displayName: SecondaryNetwork + path: secondaryNetwork + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:secondaryNetwork + - description: enable CNI plugins, disabled by default + displayName: Enable + path: secondaryNetwork.cniPlugins.enable + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:enable + - description: image information for CNI plugins + displayName: Image + path: secondaryNetwork.cniPlugins.image + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:image + - description: image pull policy + displayName: ImagePullPolicy + path: secondaryNetwork.cniPlugins.imagePullPolicy + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:imagePullPolicy + - description: image registry secret used to pull/push images + displayName: ImageRegistrySecret + path: secondaryNetwork.cniPlugins.imageRegistrySecret + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:imageRegistrySecret + - description: tolerations + displayName: Tolerations + path: secondaryNetwork.cniPlugins.tolerations + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:tolerations + - description: upgrade policy for CNI plugins daemonset + displayName: UpgradePolicy + path: secondaryNetwork.cniPlugins.upgradePolicy + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:upgradePolicy + - description: MaxUnavailable specifies the maximum number of Pods that can + be unavailable during the update process. Applicable for RollingUpdate only. + Default value is 1. + displayName: MaxUnavailable + path: secondaryNetwork.cniPlugins.upgradePolicy.maxUnavailable + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:maxUnavailable + - description: UpgradeStrategy specifies the type of the DaemonSet update. Valid + values are "RollingUpdate" (default) or "OnDelete". + displayName: UpgradeStrategy + path: secondaryNetwork.cniPlugins.upgradePolicy.upgradeStrategy + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:upgradeStrategy + - description: Selector describes on which nodes the Network Operator should + enable the Network device. + displayName: Selector + path: selector + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:selector + - description: test runner + displayName: TestRunner + path: testRunner + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:testRunner + - description: config map to customize the config for test runner, if not specified + default test config will be aplied + displayName: Secret + path: testRunner.config + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:configmap + - description: enable test runner, disabled by default + displayName: Enable + path: testRunner.enable + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:enable + - description: test runner image + displayName: Image + path: testRunner.image + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:image + - description: image pull policy for test runner + displayName: ImagePullPolicy + path: testRunner.imagePullPolicy + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:imagePullPolicy + - description: test runner image registry secret used to pull/push images + displayName: ImageRegistrySecret + path: testRunner.imageRegistrySecret + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:imageRegistrySecret + - description: captures logs location and export config for test runner logs + displayName: LogsLocation + path: testRunner.logsLocation + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:logsLocation + - description: host path to store test runner internal status db in order to + persist test running status + displayName: HostPath + path: testRunner.logsLocation.hostPath + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:hostPath + - description: LogsExportSecrets is a list of secrets that contain connectivity + info to multiple cloud providers + displayName: LogsExportSecrets + path: testRunner.logsLocation.logsExportSecrets + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:logsExportSecrets + - description: volume mount destination within test runner container + displayName: MountPath + path: testRunner.logsLocation.mountPath + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:mountPath + - description: Selector describes on which nodes to enable test runner + displayName: Selector + path: testRunner.selector + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:selector + - description: tolerations for test runner + displayName: Tolerations + path: testRunner.tolerations + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:tolerations + - description: upgrade policy for test runner daemonset + displayName: UpgradePolicy + path: testRunner.upgradePolicy + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:upgradePolicy + - description: MaxUnavailable specifies the maximum number of Pods that can + be unavailable during the update process. Applicable for RollingUpdate only. + Default value is 1. + displayName: MaxUnavailable + path: testRunner.upgradePolicy.maxUnavailable + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:maxUnavailable + - description: UpgradeStrategy specifies the type of the DaemonSet update. Valid + values are "RollingUpdate" (default) or "OnDelete". + displayName: UpgradeStrategy + path: testRunner.upgradePolicy.upgradeStrategy + x-descriptors: + - urn:alm:descriptor:com.amd.networkconfigs:upgradeStrategy + statusDescriptors: + - description: number of the actually deployed and running pods + displayName: AvailableNumber + path: configManager.availableNumber + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:availableNumber + - description: number of the pods that should be deployed for daemonset + displayName: DesiredNumber + path: configManager.desiredNumber + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:desiredNumber + - description: number of nodes that are targeted by the NetworkConfig selector + displayName: NodesMatchingSelectorNumber + path: configManager.nodesMatchingSelectorNumber + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:nodesMatchingSelectorNumber + - description: number of the actually deployed and running pods + displayName: AvailableNumber + path: devicePlugin.availableNumber + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:availableNumber + - description: number of the pods that should be deployed for daemonset + displayName: DesiredNumber + path: devicePlugin.desiredNumber + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:desiredNumber + - description: number of nodes that are targeted by the NetworkConfig selector + displayName: NodesMatchingSelectorNumber + path: devicePlugin.nodesMatchingSelectorNumber + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:nodesMatchingSelectorNumber + - description: number of the actually deployed and running pods + displayName: AvailableNumber + path: driver.availableNumber + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:availableNumber + - description: number of the pods that should be deployed for daemonset + displayName: DesiredNumber + path: driver.desiredNumber + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:desiredNumber + - description: number of nodes that are targeted by the NetworkConfig selector + displayName: NodesMatchingSelectorNumber + path: driver.nodesMatchingSelectorNumber + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:nodesMatchingSelectorNumber + - description: number of the actually deployed and running pods + displayName: AvailableNumber + path: metricsExporter.availableNumber + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:availableNumber + - description: number of the pods that should be deployed for daemonset + displayName: DesiredNumber + path: metricsExporter.desiredNumber + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:desiredNumber + - description: number of nodes that are targeted by the NetworkConfig selector + displayName: NodesMatchingSelectorNumber + path: metricsExporter.nodesMatchingSelectorNumber + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:nodesMatchingSelectorNumber + - description: NodeModuleStatus contains per node status of driver module installation + displayName: NodeModuleStatus + path: nodeModuleStatus + x-descriptors: + - urn:alm:descriptor:com.amd.NetworkConfigs:nodeModuleStatus + version: v1alpha1 + description: |- + Operator responsible for deploying AMD Network kernel drivers, device plugin, device test runner and device metrics exporter + For more information, visit [documentation](https://instinct.docs.amd.com/projects/network-operator/en/latest/) + displayName: amd-network-operator + icon: + - base64data: PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MDAiIGhlaWdodD0iMTkwLjgwMyIgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBkPSJNMTg3Ljg4OCAxNzguMTIySDE0My41MmwtMTMuNTczLTMyLjczOEg1Ni4wMDNsLTEyLjM2NiAzMi43MzhIMEw2Ni42NjcgMTIuNzc2aDQ3Ljc2MXpNOTEuMTU1IDUyLjI4Nkw2Ni45MTIgMTE2LjUzaDUwLjkxM3ptMjU3LjkwMS0zOS41MWgzNS44OHYxNjUuMzQ2aC00MS4yMTlWNzQuODQybC00NC42MDggNTEuODc3aC02LjMwMWwtNDQuNjA1LTUxLjg3N1YxNzguMTJoLTQxLjIxOVYxMi43NzZoMzUuODhsNTMuMDkyIDYxLjMzNnptMTQwLjMxOSAwYzYwLjM2NCAwIDkxLjM5MSAzNy41NzMgOTEuMzkxIDgyLjkwOSAwIDQ3LjUxNy0zMC4wNTggODIuNDM3LTk2IDgyLjQzN2gtNjguMzY5VjEyLjc3NnptLTMxLjc2MiAxMzUuMDQxaDI2LjkwNmM0MS40NTcgMCA1My44MjMtMjguMTI5IDUzLjgyMy01Mi4zNzcgMC0yOC4zNjgtMTUuMjc2LTUyLjM2My01NC4zMDgtNTIuMzYzaC0yNi40MjJ2MTA0Ljc0em0yMDUuMTU2LTk1LjgzNkw2MTAuNzk3IDBIODAwdjE4OS4yMWwtNTEuOTcyLTUxLjk3NVY1MS45ODF6bS0uMDYxIDEwLjQxNkw2MDkuMiAxMTUuOTAzdjc0Ljg5OWg3NC44ODlsNTMuNTA1LTUzLjUwNmgtNzQuODg2eiIvPjwvc3ZnPg== + mediatype: image/svg+xml + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - security.openshift.io + resourceNames: + - privileged + resources: + - securitycontextconstraints + verbs: + - use + serviceAccountName: amd-network-operator-cni-plugins + - rules: + - apiGroups: + - "" + resources: + - events + verbs: + - create + - list + - get + - update + - watch + - apiGroups: + - "" + resources: + - nodes + verbs: + - get + - list + - watch + - apiGroups: + - apps + resources: + - daemonsets + verbs: + - get + - list + - watch + - delete + - create + - update + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch + - delete + - create + - update + serviceAccountName: amd-network-operator-config-manager + - rules: + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + - apiGroups: + - "" + resources: + - configmaps + - secrets + - services + verbs: + - create + - delete + - get + - list + - patch + - watch + - apiGroups: + - "" + resources: + - nodes + verbs: + - get + - list + - patch + - watch + - apiGroups: + - "" + resources: + - nodes/finalizers + - nodes/status + verbs: + - get + - update + - watch + - apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - watch + - apiGroups: + - "" + resources: + - pods/eviction + verbs: + - create + - delete + - get + - list + - apiGroups: + - "" + resources: + - pods/finalizers + - pods/status + verbs: + - delete + - get + - list + - watch + - apiGroups: + - "" + resources: + - services/finalizers + verbs: + - create + - get + - update + - watch + - apiGroups: + - amd.com + resources: + - networkconfigs + verbs: + - create + - get + - list + - patch + - update + - watch + - apiGroups: + - amd.com + resources: + - networkconfigs/finalizers + verbs: + - update + - apiGroups: + - amd.com + resources: + - networkconfigs/status + verbs: + - get + - patch + - update + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - delete + - get + - list + - watch + - apiGroups: + - apps + resources: + - daemonsets + - daemonsets/status + verbs: + - create + - delete + - get + - list + - patch + - watch + - apiGroups: + - apps + resources: + - daemonsets/finalizers + verbs: + - create + - get + - update + - watch + - apiGroups: + - kmm.sigs.x-k8s.io + resources: + - modules + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - kmm.sigs.x-k8s.io + resources: + - modules/finalizers + - nodemodulesconfigs/finalizers + verbs: + - get + - update + - watch + - apiGroups: + - kmm.sigs.x-k8s.io + resources: + - modules/status + verbs: + - get + - patch + - update + - apiGroups: + - kmm.sigs.x-k8s.io + resources: + - nodemodulesconfigs + - nodemodulesconfigs/status + verbs: + - get + - list + - watch + - apiGroups: + - monitoring.coreos.com + resources: + - servicemonitors + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + serviceAccountName: amd-network-operator-controller-manager + - rules: + - apiGroups: + - security.openshift.io + resourceNames: + - privileged + resources: + - securitycontextconstraints + verbs: + - use + serviceAccountName: amd-network-operator-device-plugin + - rules: + - apiGroups: + - security.openshift.io + resourceNames: + - privileged + resources: + - securitycontextconstraints + verbs: + - use + serviceAccountName: amd-network-operator-kmm-module-loader + - rules: + - apiGroups: + - "" + resources: + - nodes + - pods + verbs: + - watch + - get + - list + - update + - apiGroups: + - security.openshift.io + resourceNames: + - privileged + resources: + - securitycontextconstraints + verbs: + - use + serviceAccountName: amd-network-operator-metrics-exporter + - rules: + - apiGroups: + - security.openshift.io + resourceNames: + - privileged + resources: + - securitycontextconstraints + verbs: + - use + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create + - apiGroups: + - "" + resources: + - nodes + verbs: + - watch + - get + - list + - update + - apiGroups: + - "" + resources: + - pods + verbs: + - watch + - get + - list + serviceAccountName: amd-network-operator-metrics-exporter-rbac-proxy + - rules: + - apiGroups: + - "" + resources: + - nodes + verbs: + - watch + - get + - list + - update + - apiGroups: + - security.openshift.io + resourceNames: + - privileged + resources: + - securitycontextconstraints + verbs: + - use + serviceAccountName: amd-network-operator-node-labeller + - rules: + - apiGroups: + - "" + resources: + - events + verbs: + - create + - list + - get + - update + - watch + - apiGroups: + - "" + resources: + - nodes + verbs: + - patch + - apiGroups: + - security.openshift.io + resourceNames: + - privileged + resources: + - securitycontextconstraints + verbs: + - use + serviceAccountName: amd-network-operator-test-runner + - rules: + - apiGroups: + - security.openshift.io + resourceNames: + - privileged + resources: + - securitycontextconstraints + verbs: + - use + serviceAccountName: amd-network-operator-utils-container + deployments: + - label: + app.kubernetes.io/component: amd-network + app.kubernetes.io/name: amd-network + app.kubernetes.io/part-of: amd-network + control-plane: controller-manager + name: amd-network-operator-controller-manager + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: amd-network + app.kubernetes.io/name: amd-network + app.kubernetes.io/part-of: amd-network + control-plane: controller-manager + strategy: {} + template: + metadata: + annotations: + kubectl.kubernetes.io/default-container: manager + labels: + app.kubernetes.io/component: amd-network + app.kubernetes.io/name: amd-network + app.kubernetes.io/part-of: amd-network + control-plane: controller-manager + spec: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: node-role.kubernetes.io/control-plane + operator: Exists + weight: 1 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/master + operator: Exists + weight: 1 + containers: + - args: + - --config=controller_manager_config.yaml + env: + - name: OPERATOR_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: docker.io/rocm/amd-network-operator:v1.2.1 + imagePullPolicy: Always + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 384Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + volumeMounts: + - mountPath: /controller_manager_config.yaml + name: manager-config + subPath: controller_manager_config.yaml + securityContext: + runAsNonRoot: true + serviceAccountName: amd-network-operator-controller-manager + terminationGracePeriodSeconds: 10 + tolerations: + - effect: NoSchedule + key: node-role.kubernetes.io/master + operator: Equal + - effect: NoSchedule + key: node-role.kubernetes.io/control-plane + operator: Equal + volumes: + - configMap: + name: amd-network-operator-manager-config + name: manager-config + permissions: + - rules: + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + serviceAccountName: amd-network-operator-controller-manager + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - AMD + - Network + - NIC + - AINIC + - RDMA + - SR-IOV + - CNI + - Driver + - Monitoring + links: + - name: AMD Network Operator + url: https://github.com/ROCm/network-operator + maintainers: + - email: Sundaramurthy.Gurunathan@amd.com + name: Sundaramurthy Gurunathan + - email: Yuvarani.Shankar@amd.com + name: Yuvarani Shankar + - email: shrey.ajmera@amd.com + name: Shrey Ajmera + - email: Yan.Sun3@amd.com + name: Yan Sun + maturity: stable + provider: + name: Advanced Micro Devices, Inc. + version: 1.2.1 diff --git a/bundle/manifests/amd.com_networkconfigs.yaml b/bundle/manifests/amd.com_networkconfigs.yaml new file mode 100644 index 00000000..940d6c44 --- /dev/null +++ b/bundle/manifests/amd.com_networkconfigs.yaml @@ -0,0 +1,1655 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.17.0 + creationTimestamp: null + labels: + app.kubernetes.io/component: amd-network + app.kubernetes.io/name: amd-network + app.kubernetes.io/part-of: amd-network + name: networkconfigs.amd.com +spec: + group: amd.com + names: + kind: NetworkConfig + listKind: NetworkConfigList + plural: networkconfigs + shortNames: + - nwcfg + singular: networkconfig + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: NetworkConfig describes how to enable AMD Network device + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: NetworkConfigSpec describes how the AMD Network operator + should enable AMD Network device for customer's use. + properties: + commonConfig: + description: common config + properties: + initContainerImage: + description: InitContainerImage is being used for the operands + pods, i.e. metrics exporter, test runner, device plugin and + node labeller + type: string + utilsContainer: + description: UtilsContainer contains parameters to configure operator's + utils container + properties: + image: + description: Image is the image of utils container + pattern: ^([a-z0-9]+(?:[._-][a-z0-9]+)*(:[0-9]+)?)(/[a-z0-9]+(?:[._-][a-z0-9]+)*)*(?::[a-z0-9._-]+)?(?:@[a-zA-Z0-9]+:[a-f0-9]+)?$ + type: string + imagePullPolicy: + description: image pull policy for utils container + enum: + - Always + - IfNotPresent + - Never + type: string + imageRegistrySecret: + description: secret used for pull utils container image + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + type: object + type: object + configManager: + description: config manager + properties: + config: + description: config map to customize the config for config manager, + if not specified default config will be applied + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + configManagerTolerations: + description: tolerations for the network config manager DaemonSet + items: + description: |- + The pod this Toleration is attached to tolerates any taint that matches + the triple using the matching operator . + properties: + effect: + description: |- + Effect indicates the taint effect to match. Empty means match all taint effects. + When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: |- + Key is the taint key that the toleration applies to. Empty means match all taint keys. + If the key is empty, operator must be Exists; this combination means to match all values and all keys. + type: string + operator: + description: |- + Operator represents a key's relationship to the value. + Valid operators are Exists and Equal. Defaults to Equal. + Exists is equivalent to wildcard for value, so that a pod can + tolerate all taints of a particular category. + type: string + tolerationSeconds: + description: |- + TolerationSeconds represents the period of time the toleration (which must be + of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + it is not set, which means tolerate the taint forever (do not evict). Zero and + negative values will be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: |- + Value is the taint value the toleration matches to. + If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + enable: + description: enable config manager, disabled by default + type: boolean + image: + description: config manager image + pattern: ^([a-z0-9]+(?:[._-][a-z0-9]+)*(:[0-9]+)?)(/[a-z0-9]+(?:[._-][a-z0-9]+)*)*(?::[a-z0-9._-]+)?(?:@[a-zA-Z0-9]+:[a-f0-9]+)?$ + type: string + imagePullPolicy: + description: image pull policy for config manager + enum: + - Always + - IfNotPresent + - Never + type: string + imageRegistrySecret: + description: config manager image registry secret used to pull/push + images + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + selector: + additionalProperties: + type: string + description: Selector describes on which nodes to enable config + manager + type: object + upgradePolicy: + description: upgrade policy for config manager daemonset + properties: + maxUnavailable: + default: 1 + description: MaxUnavailable specifies the maximum number of + Pods that can be unavailable during the update process. + Applicable for RollingUpdate only. Default value is 1. + format: int32 + type: integer + upgradeStrategy: + description: UpgradeStrategy specifies the type of the DaemonSet + update. Valid values are "RollingUpdate" (default) or "OnDelete". + enum: + - RollingUpdate + - OnDelete + type: string + type: object + type: object + devicePlugin: + description: device plugin + properties: + devicePluginArguments: + additionalProperties: + type: string + description: |- + device plugin arguments is used to pass supported flags and their values while starting device plugin daemonset + supported flag values: {"resource_naming_strategy": {"single", "mixed"}} + type: object + devicePluginImage: + description: device plugin image + pattern: ^([a-z0-9]+(?:[._-][a-z0-9]+)*(:[0-9]+)?)(/[a-z0-9]+(?:[._-][a-z0-9]+)*)*(?::[a-z0-9._-]+)?(?:@[a-zA-Z0-9]+:[a-f0-9]+)?$ + type: string + devicePluginImagePullPolicy: + description: image pull policy for device plugin + enum: + - Always + - IfNotPresent + - Never + type: string + devicePluginTolerations: + description: tolerations for the device plugin DaemonSet + items: + description: |- + The pod this Toleration is attached to tolerates any taint that matches + the triple using the matching operator . + properties: + effect: + description: |- + Effect indicates the taint effect to match. Empty means match all taint effects. + When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: |- + Key is the taint key that the toleration applies to. Empty means match all taint keys. + If the key is empty, operator must be Exists; this combination means to match all values and all keys. + type: string + operator: + description: |- + Operator represents a key's relationship to the value. + Valid operators are Exists and Equal. Defaults to Equal. + Exists is equivalent to wildcard for value, so that a pod can + tolerate all taints of a particular category. + type: string + tolerationSeconds: + description: |- + TolerationSeconds represents the period of time the toleration (which must be + of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + it is not set, which means tolerate the taint forever (do not evict). Zero and + negative values will be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: |- + Value is the taint value the toleration matches to. + If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + enableNodeLabeller: + default: true + description: enable or disable the node labeller + type: boolean + imageRegistrySecret: + description: node labeller image registry secret used to pull/push + images + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + nodeLabellerImage: + description: node labeller image + pattern: ^([a-z0-9]+(?:[._-][a-z0-9]+)*(:[0-9]+)?)(/[a-z0-9]+(?:[._-][a-z0-9]+)*)*(?::[a-z0-9._-]+)?(?:@[a-zA-Z0-9]+:[a-f0-9]+)?$ + type: string + nodeLabellerImagePullPolicy: + description: image pull policy for node labeller + enum: + - Always + - IfNotPresent + - Never + type: string + nodeLabellerTolerations: + description: tolerations for the node labeller DaemonSet + items: + description: |- + The pod this Toleration is attached to tolerates any taint that matches + the triple using the matching operator . + properties: + effect: + description: |- + Effect indicates the taint effect to match. Empty means match all taint effects. + When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: |- + Key is the taint key that the toleration applies to. Empty means match all taint keys. + If the key is empty, operator must be Exists; this combination means to match all values and all keys. + type: string + operator: + description: |- + Operator represents a key's relationship to the value. + Valid operators are Exists and Equal. Defaults to Equal. + Exists is equivalent to wildcard for value, so that a pod can + tolerate all taints of a particular category. + type: string + tolerationSeconds: + description: |- + TolerationSeconds represents the period of time the toleration (which must be + of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + it is not set, which means tolerate the taint forever (do not evict). Zero and + negative values will be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: |- + Value is the taint value the toleration matches to. + If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + upgradePolicy: + description: upgrade policy for device plugin and node labeller + daemons + properties: + maxUnavailable: + default: 1 + description: MaxUnavailable specifies the maximum number of + Pods that can be unavailable during the update process. + Applicable for RollingUpdate only. Default value is 1. + format: int32 + type: integer + upgradeStrategy: + description: UpgradeStrategy specifies the type of the DaemonSet + update. Valid values are "RollingUpdate" (default) or "OnDelete". + enum: + - RollingUpdate + - OnDelete + type: string + type: object + type: object + driver: + description: driver + properties: + AMDNetworkInstallerRepoURL: + description: |- + radeon repo URL for fetching amdnetwork installer if building driver image on the fly + installer URL is https://repo.radeon.com by default + type: string + blacklist: + description: |- + blacklist amdnetwork drivers on the host. Node reboot is required to apply the blacklist on the worker nodes. + Require spec.devicePlugin.enableNodeLabeller=true to take effect. + Not working for OpenShift cluster. OpenShift users please use the Machine Config Operator (MCO) resource to configure ionic blacklist. + Example MCO resource is available at https://instinct.docs.amd.com/projects/network-operator/en/latest/installation/openshift-olm.html#create-blacklist-for-installing-out-of-tree-kernel-module + type: boolean + enable: + default: true + description: |- + enable driver install. default value is true. + disable is for skipping driver install/uninstall for dryrun or using in-tree ionic and rdma related kernel modules + type: boolean + image: + description: |- + defines image that includes drivers and firmware blobs, don't include tag since it will be fully managed by operator + for vanilla k8s the default value is image-registry:5000/$MOD_NAMESPACE/amdnetwork_kmod + for OpenShift the default value is image-registry.openshift-image-registry.svc:5000/$MOD_NAMESPACE/amdnetwork_kmod + image tag will be in the format of --- + example tag is coreos-416.94-5.14.0-427.28.1.el9_4.x86_64-6.2.2 and ubuntu-22.04-5.15.0-94-generic-6.1.3 + NOTE: Updating the driver image repository is not supported. Please delete the existing NetworkConfig and create a new one with the updated image repository + pattern: ^([a-z0-9]+(?:[._-][a-z0-9]+)*(:[0-9]+)?)(/[$a-zA-Z0-9_]+(?:[._-][$a-zA-Z0-9_]+)*)*(?::[a-z0-9._-]+)?(?:@[a-zA-Z0-9]+:[a-f0-9]+)?$ + type: string + imageBuild: + description: image build configs + properties: + baseImageRegistry: + default: docker.io + description: |- + image registry to fetch base image for building driver image, default value is docker.io, the builder will search for corresponding OS base image from given registry + e.g. if your worker node is using Ubuntu 22.04, by default the base image would be docker.io/ubuntu:22.04 + Use spec.driver.imageRegistrySecret for authentication with private registries. + NOTE: this field won't apply for OpenShift since OpenShift is using its own DriverToolKit image to build driver image + type: string + baseImageRegistryTLS: + description: |- + TLS settings for fetching base image + this field will be applied to SourceImageRepo as well + properties: + insecure: + description: If true, check if the container image already + exists using plain HTTP. + type: boolean + insecureSkipTLSVerify: + description: If true, skip any TLS server certificate + validation + type: boolean + type: object + sourceImageRepo: + description: |- + SourceImageRepo specifies the image repository for the driver source code (OpenShift only). + Used when spec.driver.useSourceImage is true. The operator automatically determines the image tag + based on cluster RHEL version and spec.driver.version (format: coreos--). + Default: docker.io/rocm/amdainic-driver + Use spec.driver.imageRegistrySecret for authentication with private registries. + type: string + type: object + imageRegistrySecret: + description: secrets used for pull/push images from/to private + registry specified in driversImage + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + imageRegistryTLS: + description: driver image registry TLS setting for the container + image + properties: + insecure: + description: If true, check if the container image already + exists using plain HTTP. + type: boolean + insecureSkipTLSVerify: + description: If true, skip any TLS server certificate validation + type: boolean + type: object + imageSign: + description: |- + image signing config to sign the driver image when building driver image on the fly + image signing is required for installing driver on secure boot enabled system + properties: + certSecret: + description: |- + ImageSignCertSecret the public key used to sign kernel modules within image + necessary for secure boot enabled system + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + keySecret: + description: |- + ImageSignKeySecret the private key used to sign kernel modules within image + necessary for secure boot enabled system + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + type: object + tolerations: + description: tolerations for kmm module object + items: + description: |- + The pod this Toleration is attached to tolerates any taint that matches + the triple using the matching operator . + properties: + effect: + description: |- + Effect indicates the taint effect to match. Empty means match all taint effects. + When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: |- + Key is the taint key that the toleration applies to. Empty means match all taint keys. + If the key is empty, operator must be Exists; this combination means to match all values and all keys. + type: string + operator: + description: |- + Operator represents a key's relationship to the value. + Valid operators are Exists and Equal. Defaults to Equal. + Exists is equivalent to wildcard for value, so that a pod can + tolerate all taints of a particular category. + type: string + tolerationSeconds: + description: |- + TolerationSeconds represents the period of time the toleration (which must be + of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + it is not set, which means tolerate the taint forever (do not evict). Zero and + negative values will be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: |- + Value is the taint value the toleration matches to. + If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + upgradePolicy: + description: policy to upgrade the drivers + properties: + enable: + description: |- + enable upgrade policy, disabled by default + If disabled, user has to manually upgrade all the nodes. + type: boolean + maxParallelUpgrades: + default: 1 + description: |- + MaxParallelUpgrades indicates how many nodes can be upgraded in parallel + 0 means no limit, all nodes will be upgraded in parallel + minimum: 0 + type: integer + maxUnavailableNodes: + anyOf: + - type: integer + - type: string + default: 25% + description: |- + MaxUnavailableNodes indicates maximum number of nodes that can be in a failed upgrade state beyond which upgrades will stop to keep cluster at a minimal healthy state + Value can be an integer (ex: 2) which would mean atmost 2 nodes can be in failed state after which new upgrades will not start. Or it can be a percentage string(ex: "50%") from which absolute number will be calculated and round up + x-kubernetes-int-or-string: true + nodeDrainPolicy: + description: Node draining policy + properties: + force: + default: false + description: Force indicates if force draining is allowed + type: boolean + gracePeriodSeconds: + default: -1 + description: GracePeriodSeconds indicates the time kubernetes + waits for a pod to shut down gracefully after receiving + a termination signal + type: integer + timeoutSeconds: + default: 300 + description: TimeoutSecond specifies the length of time + in seconds to wait before giving up drain, zero means + infinite + minimum: 0 + type: integer + type: object + podDeletionPolicy: + description: Pod Deletion policy. If both NodeDrainPolicy + and PodDeletionPolicy config is available, NodeDrainPolicy(if + enabled) will take precedence. + properties: + force: + default: false + description: Force indicates if force deletion is allowed + type: boolean + gracePeriodSeconds: + default: -1 + description: GracePeriodSeconds indicates the time kubernetes + waits for a pod to shut down gracefully after receiving + a termination signal + type: integer + timeoutSeconds: + default: 300 + description: TimeoutSecond specifies the length of time + in seconds to wait before giving up on pod deletion, + zero means infinite + minimum: 0 + type: integer + type: object + rebootRequired: + default: true + description: reboot between driver upgrades, enabled by default, + if enabled spec.commonConfig.utilsContainer will be used + to perform reboot on worker nodes + type: boolean + type: object + useSourceImage: + description: |- + NOTE: currently only for OpenShift cluster + set to true to use source image to build driver image on the fly + otherwise use installer debian/rpm packages from radeon repo to build driver image + type: boolean + version: + description: |- + version of the drivers source code, can be used as part of image of dockerfile source image + default value for different OS is: ubuntu: 1.117.1-a-42, coreOS: 1.117.1-a-42 + type: string + type: object + metricsExporter: + description: metrics exporter + properties: + config: + description: optional configuration for metrics + properties: + name: + description: |- + Name of the configMap that defines the list of metrics + default list:[] + type: string + type: object + enable: + description: enable metrics exporter, disabled by default + type: boolean + hostNetwork: + default: true + description: HostNetwork enables metrics exporter to use host + networking, enabled by default + type: boolean + image: + description: metrics exporter image + pattern: ^([a-z0-9]+(?:[._-][a-z0-9]+)*(:[0-9]+)?)(/[a-z0-9]+(?:[._-][a-z0-9]+)*)*(?::[a-z0-9._-]+)?(?:@[a-zA-Z0-9]+:[a-f0-9]+)?$ + type: string + imagePullPolicy: + description: image pull policy for metrics exporter + enum: + - Always + - IfNotPresent + - Never + type: string + imageRegistrySecret: + description: metrics exporter image registry secret used to pull/push + images + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + nodePort: + description: NodePort is the external port for pulling metrics + from outside the cluster, in the range 30000-32767 (assigned + automatically by default) + format: int32 + maximum: 32767 + minimum: 30000 + type: integer + port: + default: 5001 + description: Port is the internal port used for in-cluster and + node access to pull metrics from the metrics-exporter (default + 5001). + format: int32 + type: integer + prometheus: + description: Prometheus configuration for metrics exporter + properties: + serviceMonitor: + description: ServiceMonitor configuration for Prometheus integration + properties: + attachMetadata: + description: AttachMetadata defines if Prometheus should + attach node metadata to the target + properties: + node: + description: |- + When set to true, Prometheus attaches node metadata to the discovered + targets. + + The Prometheus service account must have the `list` and `watch` + permissions on the `Nodes` objects. + type: boolean + type: object + authorization: + description: Optional Prometheus authorization configuration + for accessing the endpoint + properties: + credentials: + description: Selects a key of a Secret in the namespace + that contains the credentials for authentication. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: + description: |- + Defines the authentication type. The value is case-insensitive. + + "Basic" is not a supported value. + + Default: "Bearer" + type: string + type: object + bearerTokenFile: + description: |- + Path to bearer token file to be used by Prometheus (e.g., service account token path) + Deprecated: Use Authorization instead. This field is kept for backward compatibility. + type: string + enable: + description: Enable or disable ServiceMonitor creation + (default false) + type: boolean + honorLabels: + default: true + description: HonorLabels chooses the metric's labels on + collisions with target labels (default true) + type: boolean + honorTimestamps: + description: HonorTimestamps controls whether the scrape + endpoints honor timestamps (default false) + type: boolean + interval: + description: 'How frequently to scrape metrics. Accepts + values with time unit suffix: "30s", "1m", "2h", "500ms"' + pattern: ^([0-9]+)(ms|s|m|h)$ + type: string + labels: + additionalProperties: + type: string + description: 'Additional labels to add to the ServiceMonitor + (default release: prometheus)' + type: object + metricRelabelings: + description: Relabeling rules applied to individual scraped + metrics + items: + description: |- + RelabelConfig allows dynamic rewriting of the label set for targets, alerts, + scraped samples and remote write samples. + + More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config + properties: + action: + default: replace + description: |- + Action to perform based on the regex matching. + + `Uppercase` and `Lowercase` actions require Prometheus >= v2.36.0. + `DropEqual` and `KeepEqual` actions require Prometheus >= v2.41.0. + + Default: "Replace" + enum: + - replace + - Replace + - keep + - Keep + - drop + - Drop + - hashmod + - HashMod + - labelmap + - LabelMap + - labeldrop + - LabelDrop + - labelkeep + - LabelKeep + - lowercase + - Lowercase + - uppercase + - Uppercase + - keepequal + - KeepEqual + - dropequal + - DropEqual + type: string + modulus: + description: |- + Modulus to take of the hash of the source label values. + + Only applicable when the action is `HashMod`. + format: int64 + type: integer + regex: + description: Regular expression against which the + extracted value is matched. + type: string + replacement: + description: |- + Replacement value against which a Replace action is performed if the + regular expression matches. + + Regex capture groups are available. + type: string + separator: + description: Separator is the string between concatenated + SourceLabels. + type: string + sourceLabels: + description: |- + The source labels select values from existing labels. Their content is + concatenated using the configured Separator and matched against the + configured regular expression. + items: + description: |- + LabelName is a valid Prometheus label name which may only contain ASCII + letters, numbers, as well as underscores. + pattern: ^[a-zA-Z_][a-zA-Z0-9_]*$ + type: string + type: array + targetLabel: + description: |- + Label to which the resulting string is written in a replacement. + + It is mandatory for `Replace`, `HashMod`, `Lowercase`, `Uppercase`, + `KeepEqual` and `DropEqual` actions. + + Regex capture groups are available. + type: string + type: object + type: array + relabelings: + description: RelabelConfigs to apply to samples before + ingestion + items: + description: |- + RelabelConfig allows dynamic rewriting of the label set for targets, alerts, + scraped samples and remote write samples. + + More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config + properties: + action: + default: replace + description: |- + Action to perform based on the regex matching. + + `Uppercase` and `Lowercase` actions require Prometheus >= v2.36.0. + `DropEqual` and `KeepEqual` actions require Prometheus >= v2.41.0. + + Default: "Replace" + enum: + - replace + - Replace + - keep + - Keep + - drop + - Drop + - hashmod + - HashMod + - labelmap + - LabelMap + - labeldrop + - LabelDrop + - labelkeep + - LabelKeep + - lowercase + - Lowercase + - uppercase + - Uppercase + - keepequal + - KeepEqual + - dropequal + - DropEqual + type: string + modulus: + description: |- + Modulus to take of the hash of the source label values. + + Only applicable when the action is `HashMod`. + format: int64 + type: integer + regex: + description: Regular expression against which the + extracted value is matched. + type: string + replacement: + description: |- + Replacement value against which a Replace action is performed if the + regular expression matches. + + Regex capture groups are available. + type: string + separator: + description: Separator is the string between concatenated + SourceLabels. + type: string + sourceLabels: + description: |- + The source labels select values from existing labels. Their content is + concatenated using the configured Separator and matched against the + configured regular expression. + items: + description: |- + LabelName is a valid Prometheus label name which may only contain ASCII + letters, numbers, as well as underscores. + pattern: ^[a-zA-Z_][a-zA-Z0-9_]*$ + type: string + type: array + targetLabel: + description: |- + Label to which the resulting string is written in a replacement. + + It is mandatory for `Replace`, `HashMod`, `Lowercase`, `Uppercase`, + `KeepEqual` and `DropEqual` actions. + + Regex capture groups are available. + type: string + type: object + type: array + tlsConfig: + description: TLS settings used by Prometheus to connect + to the metrics endpoint + properties: + ca: + description: Certificate authority used when verifying + server certificates. + properties: + configMap: + description: ConfigMap containing data to use + for the targets. + properties: + key: + description: The key to select. + type: string + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + secret: + description: Secret containing data to use for + the targets. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + optional: + description: Specify whether the Secret or + its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + caFile: + description: Path to the CA cert in the Prometheus + container to use for the targets. + type: string + cert: + description: Client certificate to present when doing + client-authentication. + properties: + configMap: + description: ConfigMap containing data to use + for the targets. + properties: + key: + description: The key to select. + type: string + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + secret: + description: Secret containing data to use for + the targets. + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + optional: + description: Specify whether the Secret or + its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + certFile: + description: Path to the client cert file in the Prometheus + container for the targets. + type: string + insecureSkipVerify: + description: Disable target certificate validation. + type: boolean + keyFile: + description: Path to the client key file in the Prometheus + container for the targets. + type: string + keySecret: + description: Secret containing the client key file + for the targets. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + maxVersion: + description: |- + Maximum acceptable TLS version. + + It requires Prometheus >= v2.41.0. + enum: + - TLS10 + - TLS11 + - TLS12 + - TLS13 + type: string + minVersion: + description: |- + Minimum acceptable TLS version. + + It requires Prometheus >= v2.35.0. + enum: + - TLS10 + - TLS11 + - TLS12 + - TLS13 + type: string + serverName: + description: Used to verify the hostname for the targets. + type: string + type: object + type: object + type: object + rbacConfig: + description: optional kube-rbac-proxy config to provide rbac services + properties: + clientCAConfigMap: + description: 'Reference to a configmap containing the client + CA (key: ca.crt) for mTLS client validation' + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + disableHttps: + description: disable https protecting the proxy endpoint + type: boolean + enable: + description: enable kube-rbac-proxy, disabled by default + type: boolean + image: + description: kube-rbac-proxy image + pattern: ^([a-z0-9]+(?:[._-][a-z0-9]+)*(:[0-9]+)?)(/[a-z0-9]+(?:[._-][a-z0-9]+)*)*(?::[a-z0-9._-]+)?(?:@[a-zA-Z0-9]+:[a-f0-9]+)?$ + type: string + secret: + description: certificate secret to mount in kube-rbac container + for TLS, self signed certificates will be generated by default + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + staticAuthorization: + description: Optional static RBAC rules based on client certificate + Common Name (CN) + properties: + clientName: + description: Expected CN (Common Name) from client cert + (e.g., Prometheus SA identity) + type: string + enable: + description: Enables static authorization using client + certificate CN + type: boolean + type: object + type: object + selector: + additionalProperties: + type: string + description: Selector describes on which nodes to enable metrics + exporter + type: object + serviceType: + default: ClusterIP + description: ServiceType service type for metrics, clusterIP/NodePort, + clusterIP by default + enum: + - ClusterIP + - NodePort + type: string + tolerations: + description: tolerations for metrics exporter + items: + description: |- + The pod this Toleration is attached to tolerates any taint that matches + the triple using the matching operator . + properties: + effect: + description: |- + Effect indicates the taint effect to match. Empty means match all taint effects. + When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: |- + Key is the taint key that the toleration applies to. Empty means match all taint keys. + If the key is empty, operator must be Exists; this combination means to match all values and all keys. + type: string + operator: + description: |- + Operator represents a key's relationship to the value. + Valid operators are Exists and Equal. Defaults to Equal. + Exists is equivalent to wildcard for value, so that a pod can + tolerate all taints of a particular category. + type: string + tolerationSeconds: + description: |- + TolerationSeconds represents the period of time the toleration (which must be + of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + it is not set, which means tolerate the taint forever (do not evict). Zero and + negative values will be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: |- + Value is the taint value the toleration matches to. + If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + upgradePolicy: + description: upgrade policy for metrics exporter daemons + properties: + maxUnavailable: + default: 1 + description: MaxUnavailable specifies the maximum number of + Pods that can be unavailable during the update process. + Applicable for RollingUpdate only. Default value is 1. + format: int32 + type: integer + upgradeStrategy: + description: UpgradeStrategy specifies the type of the DaemonSet + update. Valid values are "RollingUpdate" (default) or "OnDelete". + enum: + - RollingUpdate + - OnDelete + type: string + type: object + type: object + secondaryNetwork: + description: 'SecondaryNetworkSpec contains the spec for secondary + network: CNI plugins and IPAM' + properties: + cniPlugins: + description: Image information for CNI plugins + properties: + enable: + description: enable CNI plugins, disabled by default + type: boolean + image: + description: image information for CNI plugins + pattern: ^([a-z0-9]+(?:[._-][a-z0-9]+)*(:[0-9]+)?)(/[a-z0-9]+(?:[._-][a-z0-9]+)*)*(?::[a-z0-9._-]+)?(?:@[a-zA-Z0-9]+:[a-f0-9]+)?$ + type: string + imagePullPolicy: + description: image pull policy + enum: + - Always + - IfNotPresent + - Never + type: string + imageRegistrySecret: + description: image registry secret used to pull/push images + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + tolerations: + description: tolerations + items: + description: |- + The pod this Toleration is attached to tolerates any taint that matches + the triple using the matching operator . + properties: + effect: + description: |- + Effect indicates the taint effect to match. Empty means match all taint effects. + When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: |- + Key is the taint key that the toleration applies to. Empty means match all taint keys. + If the key is empty, operator must be Exists; this combination means to match all values and all keys. + type: string + operator: + description: |- + Operator represents a key's relationship to the value. + Valid operators are Exists and Equal. Defaults to Equal. + Exists is equivalent to wildcard for value, so that a pod can + tolerate all taints of a particular category. + type: string + tolerationSeconds: + description: |- + TolerationSeconds represents the period of time the toleration (which must be + of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + it is not set, which means tolerate the taint forever (do not evict). Zero and + negative values will be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: |- + Value is the taint value the toleration matches to. + If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + upgradePolicy: + description: upgrade policy for CNI plugins daemonset + properties: + maxUnavailable: + default: 1 + description: MaxUnavailable specifies the maximum number + of Pods that can be unavailable during the update process. + Applicable for RollingUpdate only. Default value is + 1. + format: int32 + type: integer + upgradeStrategy: + description: UpgradeStrategy specifies the type of the + DaemonSet update. Valid values are "RollingUpdate" (default) + or "OnDelete". + enum: + - RollingUpdate + - OnDelete + type: string + type: object + type: object + type: object + selector: + additionalProperties: + type: string + description: Selector describes on which nodes the Network Operator + should enable the Network device. + type: object + testRunner: + description: test runner + properties: + config: + description: config map to customize the config for test runner, + if not specified default test config will be aplied + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + enable: + description: enable test runner, disabled by default + type: boolean + image: + description: test runner image + pattern: ^([a-z0-9]+(?:[._-][a-z0-9]+)*(:[0-9]+)?)(/[a-z0-9]+(?:[._-][a-z0-9]+)*)*(?::[a-z0-9._-]+)?(?:@[a-zA-Z0-9]+:[a-f0-9]+)?$ + type: string + imagePullPolicy: + description: image pull policy for test runner + enum: + - Always + - IfNotPresent + - Never + type: string + imageRegistrySecret: + description: test runner image registry secret used to pull/push + images + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + logsLocation: + description: captures logs location and export config for test + runner logs + properties: + hostPath: + default: /var/log/amd-test-runner + description: host path to store test runner internal status + db in order to persist test running status + type: string + logsExportSecrets: + description: LogsExportSecrets is a list of secrets that contain + connectivity info to multiple cloud providers + items: + description: |- + LocalObjectReference contains enough information to let you locate the + referenced object inside the same namespace. + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + type: array + mountPath: + default: /var/log/amd-test-runner + description: volume mount destination within test runner container + type: string + type: object + selector: + additionalProperties: + type: string + description: Selector describes on which nodes to enable test + runner + type: object + tolerations: + description: tolerations for test runner + items: + description: |- + The pod this Toleration is attached to tolerates any taint that matches + the triple using the matching operator . + properties: + effect: + description: |- + Effect indicates the taint effect to match. Empty means match all taint effects. + When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: |- + Key is the taint key that the toleration applies to. Empty means match all taint keys. + If the key is empty, operator must be Exists; this combination means to match all values and all keys. + type: string + operator: + description: |- + Operator represents a key's relationship to the value. + Valid operators are Exists and Equal. Defaults to Equal. + Exists is equivalent to wildcard for value, so that a pod can + tolerate all taints of a particular category. + type: string + tolerationSeconds: + description: |- + TolerationSeconds represents the period of time the toleration (which must be + of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + it is not set, which means tolerate the taint forever (do not evict). Zero and + negative values will be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: |- + Value is the taint value the toleration matches to. + If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + upgradePolicy: + description: upgrade policy for test runner daemonset + properties: + maxUnavailable: + default: 1 + description: MaxUnavailable specifies the maximum number of + Pods that can be unavailable during the update process. + Applicable for RollingUpdate only. Default value is 1. + format: int32 + type: integer + upgradeStrategy: + description: UpgradeStrategy specifies the type of the DaemonSet + update. Valid values are "RollingUpdate" (default) or "OnDelete". + enum: + - RollingUpdate + - OnDelete + type: string + type: object + type: object + type: object + status: + description: NetworkConfigStatus defines the observed state of Module. + properties: + conditions: + description: Conditions list the current status of the NetworkConfig + object + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + configManager: + description: ConfigManager contains the status of the ConfigManager + deployment + properties: + availableNumber: + description: number of the actually deployed and running pods + format: int32 + type: integer + desiredNumber: + description: number of the pods that should be deployed for daemonset + format: int32 + type: integer + nodesMatchingSelectorNumber: + description: number of nodes that are targeted by the NetworkConfig + selector + format: int32 + type: integer + type: object + devicePlugin: + description: DevicePlugin contains the status of the Device Plugin + deployment + properties: + availableNumber: + description: number of the actually deployed and running pods + format: int32 + type: integer + desiredNumber: + description: number of the pods that should be deployed for daemonset + format: int32 + type: integer + nodesMatchingSelectorNumber: + description: number of nodes that are targeted by the NetworkConfig + selector + format: int32 + type: integer + type: object + driver: + description: Driver contains the status of the Drivers deployment + properties: + availableNumber: + description: number of the actually deployed and running pods + format: int32 + type: integer + desiredNumber: + description: number of the pods that should be deployed for daemonset + format: int32 + type: integer + nodesMatchingSelectorNumber: + description: number of nodes that are targeted by the NetworkConfig + selector + format: int32 + type: integer + type: object + metricsExporter: + description: MetricsExporter contains the status of the MetricsExporter + deployment + properties: + availableNumber: + description: number of the actually deployed and running pods + format: int32 + type: integer + desiredNumber: + description: number of the pods that should be deployed for daemonset + format: int32 + type: integer + nodesMatchingSelectorNumber: + description: number of nodes that are targeted by the NetworkConfig + selector + format: int32 + type: integer + type: object + nodeModuleStatus: + additionalProperties: + description: ModuleStatus contains the status of driver module installed + by operator on the node + properties: + bootId: + type: string + containerImage: + type: string + kernelVersion: + type: string + lastTransitionTime: + type: string + status: + description: UpgradeState captures the state of the upgrade + process on a node + type: string + upgradeStartTime: + type: string + type: object + description: NodeModuleStatus contains per node status of driver module + installation + type: object + observedGeneration: + description: ObservedGeneration is the latest spec generation successfully + processed by the controller + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundle/manifests/device-plugin-configmap.yaml b/bundle/manifests/device-plugin-configmap.yaml new file mode 100644 index 00000000..f9d3d880 --- /dev/null +++ b/bundle/manifests/device-plugin-configmap.yaml @@ -0,0 +1,36 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: amd-network-operator-device-plugin-config + labels: + app.kubernetes.io/component: amd-network + app.kubernetes.io/part-of: amd-network +data: + # The config.json content for the SR-IOV device plugin + config.json: | + { + "resourceList": [{ + "resourceName": "nic", + "resourcePrefix": "amd.com", + "enableExporterHealthCheck": true, + "selectors": { + "vendors": ["1dd8"], + "devices": ["1002"], + "drivers": ["ionic"], + "isRdma": true + }, + "excludeTopology": false + }, + { + "resourceName": "vnic", + "resourcePrefix": "amd.com", + "enableExporterHealthCheck": true, + "selectors": { + "vendors": ["1dd8"], + "devices": ["1003"], + "drivers": ["ionic"], + "isRdma": true + }, + "excludeTopology": false + }] + } diff --git a/bundle/metadata/annotations.yaml b/bundle/metadata/annotations.yaml new file mode 100644 index 00000000..99b51b00 --- /dev/null +++ b/bundle/metadata/annotations.yaml @@ -0,0 +1,14 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: amd-network-operator + operators.operatorframework.io.bundle.channels.v1: alpha + operators.operatorframework.io.metrics.builder: operator-sdk-v1.32.0 + operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 + operators.operatorframework.io.metrics.project_layout: go.kubebuilder.io/v3 + + # Annotations for testing. + operators.operatorframework.io.test.mediatype.v1: scorecard+v1 + operators.operatorframework.io.test.config.v1: tests/scorecard/ diff --git a/bundle/tests/scorecard/config.yaml b/bundle/tests/scorecard/config.yaml new file mode 100644 index 00000000..9769772a --- /dev/null +++ b/bundle/tests/scorecard/config.yaml @@ -0,0 +1,70 @@ +apiVersion: scorecard.operatorframework.io/v1alpha3 +kind: Configuration +metadata: + name: config +stages: +- parallel: true + tests: + - entrypoint: + - scorecard-test + - basic-check-spec + image: quay.io/operator-framework/scorecard-test:v1.32.0 + labels: + suite: basic + test: basic-check-spec-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-bundle-validation + image: quay.io/operator-framework/scorecard-test:v1.32.0 + labels: + suite: olm + test: olm-bundle-validation-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-crds-have-validation + image: quay.io/operator-framework/scorecard-test:v1.32.0 + labels: + suite: olm + test: olm-crds-have-validation-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-crds-have-resources + image: quay.io/operator-framework/scorecard-test:v1.32.0 + labels: + suite: olm + test: olm-crds-have-resources-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-spec-descriptors + image: quay.io/operator-framework/scorecard-test:v1.32.0 + labels: + suite: olm + test: olm-spec-descriptors-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-status-descriptors + image: quay.io/operator-framework/scorecard-test:v1.32.0 + labels: + suite: olm + test: olm-status-descriptors-test + storage: + spec: + mountPath: {} +storage: + spec: + mountPath: {} diff --git a/config/manifests/bases/amd-network-operator.clusterserviceversion.yaml b/config/manifests/bases/amd-network-operator.clusterserviceversion.yaml index 45e00374..c93eea91 100644 --- a/config/manifests/bases/amd-network-operator.clusterserviceversion.yaml +++ b/config/manifests/bases/amd-network-operator.clusterserviceversion.yaml @@ -5,11 +5,11 @@ metadata: alm-examples: '[]' capabilities: Seamless Upgrades categories: AI/Machine Learning,Networking,Monitoring - containerImage: registry.test.pensando.io:5000/amd-network-operator:dev + containerImage: docker.io/rocm/amd-network-operator:v1.2.1 description: |- Operator responsible for deploying AMD Network kernel drivers, device plugin, node labeller and device metrics exporter For more information, visit [documentation](https://instinct.docs.amd.com/projects/network-operator/en/latest/) - devicePluginImage: docker.io/rocm/k8s-network-device-plugin:v0.0.1 + devicePluginImage: docker.io/rocm/k8s-network-device-plugin:v1.2.1 features.operators.openshift.io/disconnected: "true" features.operators.openshift.io/fips-compliant: "false" features.operators.openshift.io/proxy-aware: "true" @@ -17,8 +17,8 @@ metadata: features.operators.openshift.io/token-auth-aws: "false" features.operators.openshift.io/token-auth-azure: "false" features.operators.openshift.io/token-auth-gcp: "false" - metricsExporterImage: docker.io/rocm/device-metrics-exporter:nic-v0.0.1 - nodelabellerImage: docker.io/rocm/k8s-network-node-labeller:v0.0.1 + metricsExporterImage: docker.io/rocm/device-metrics-exporter:nic-v1.2.1 + nodelabellerImage: docker.io/rocm/k8s-network-node-labeller:v1.2.1 operatorframework.io/cluster-monitoring: "true" operatorframework.io/suggested-namespace: openshift-amd-network operators.openshift.io/valid-subscription: '[]' diff --git a/config/samples/amd.com_networkconfigs.yaml b/config/samples/amd.com_networkconfigs.yaml index cc41cfe4..73439ba9 100644 --- a/config/samples/amd.com_networkconfigs.yaml +++ b/config/samples/amd.com_networkconfigs.yaml @@ -44,12 +44,12 @@ spec: devicePlugin: # Specify the device plugin image - # default value is rocm/k8s-network-device-plugin:v0.0.1 - devicePluginImage: rocm/k8s-network-device-plugin:v0.0.1 + # default value is rocm/k8s-network-device-plugin:v1.2.1 + devicePluginImage: rocm/k8s-network-device-plugin:v1.2.1 # Specify the node labeller image - # default value is rocm/k8s-network-node-labeller:v0.0.1 - nodeLabellerImage: rocm/k8s-network-node-labeller:v0.0.1 + # default value is rocm/k8s-network-node-labeller:v1.2.1 + nodeLabellerImage: rocm/k8s-network-node-labeller:v1.2.1 # Specifythe node to be managed by this NetworkConfig Custom Resource selector: diff --git a/docs/_static/cluster-validation-job.yaml b/docs/_static/cluster-validation-job.yaml index 0a79d7b1..6f978a98 100644 --- a/docs/_static/cluster-validation-job.yaml +++ b/docs/_static/cluster-validation-job.yaml @@ -32,7 +32,7 @@ data: emptyDir: {} initContainers: - name: wait-for-worker-pods - image: docker.io/rocm/network-operator-utils:v1.2.0 + image: docker.io/rocm/network-operator-utils:v1.2.1 imagePullPolicy: Always envFrom: - configMapRef: @@ -365,7 +365,7 @@ spec: args: ['-c', '/fluent-bit/etc/fluent-bit.conf'] containers: - name: submit-mpijob - image: docker.io/rocm/network-operator-utils:v1.2.0 + image: docker.io/rocm/network-operator-utils:v1.2.1 imagePullPolicy: Always command: ["/bin/bash", "-c"] envFrom: diff --git a/docs/device_plugin/deviceplugin.md b/docs/device_plugin/deviceplugin.md index 4a7c6d2a..1d971d09 100644 --- a/docs/device_plugin/deviceplugin.md +++ b/docs/device_plugin/deviceplugin.md @@ -16,14 +16,14 @@ spec: # Enable the Node Labeller component (default: true) enableNodeLabeller: true - # Specify the Node Labeller image (default: docker.io/rocm/k8s-network-node-labeller:v1.2.0) - nodeLabellerImage: "docker.io/rocm/k8s-network-node-labeller:v1.2.0" + # Specify the Node Labeller image (default: docker.io/rocm/k8s-network-node-labeller:v1.2.1) + nodeLabellerImage: "docker.io/rocm/k8s-network-node-labeller:v1.2.1" # Node labeller image pull policy nodeLabellerImagePullPolicy: Always - # Specify the Device Plugin image (default: docker.io/rocm/k8s-network-device-plugin:v1.2.0) - devicePluginImage: "docker.io/rocm/k8s-network-device-plugin:v1.2.0" + # Specify the Device Plugin image (default: docker.io/rocm/k8s-network-device-plugin:v1.2.1) + devicePluginImage: "docker.io/rocm/k8s-network-device-plugin:v1.2.1" # Device plugin image pull policy devicePluginImagePullPolicy: Always diff --git a/docs/index.md b/docs/index.md index 1f8c4e0c..ef1ee228 100644 --- a/docs/index.md +++ b/docs/index.md @@ -24,10 +24,11 @@ AMD Network Operator simplifies the use of AMD AINICs in Kubernetes environments Below is a list of operating systems and Kubernetes versions validated with the AMD Network Operator and Metrics Exporter. Additional versions will be added in future releases. -| Operating System | Kubernetes Versions | -| ---------------- | ------------------- | -| Ubuntu 22.04 LTS | 1.29 – 1.34 | -| Ubuntu 24.04 LTS | 1.29 – 1.34 | +| Operating System | Kubernetes | Red Hat OpenShift | +| ---------------- | ---------- | ----------------- | +| Ubuntu 22.04 LTS | 1.29–1.36 | | +| Ubuntu 24.04 LTS | 1.29–1.36 | | +| Red Hat CoreOS (RHCOS) | | 4.21 | ### Software Version Compatibility Matrix @@ -37,6 +38,7 @@ Additional versions will be added in future releases. | v1.0.1 | 1.117.1-a-63 | Pollara 400 | | v1.1.0 | 1.117.5-a-56 | Pollara 400 | | v1.2.0 | 1.117.5-a-56
1.117.5-a-77 | Pollara 400 | +| v1.2.1 | 1.117.5-a-77
1.117.5-a-147 | Pollara 400 | ## Prerequisites diff --git a/docs/installation/kubernetes-helm-operators.md b/docs/installation/kubernetes-helm-operators.md index bfb815f6..4b2761b6 100644 --- a/docs/installation/kubernetes-helm-operators.md +++ b/docs/installation/kubernetes-helm-operators.md @@ -180,7 +180,7 @@ helm install amd-network-operator rocm-network/network-operator-charts \ --create-namespace \ --set kmm.enabled=false \ --set node-feature-discovery.enabled=false \ - --version=v1.2.0 + --version=v1.2.1 ``` Then during this step only the network operator and multus CNI pods would be brought up in the new namespace `kube-amd-network`: diff --git a/docs/installation/kubernetes-helm.md b/docs/installation/kubernetes-helm.md index 8991ad47..22229570 100644 --- a/docs/installation/kubernetes-helm.md +++ b/docs/installation/kubernetes-helm.md @@ -111,7 +111,7 @@ Basic installation: helm install amd-network-operator rocm-network/network-operator-charts \ --namespace kube-amd-network \ --create-namespace \ - --version=v1.2.0 + --version=v1.2.1 ``` ```{note} @@ -143,7 +143,7 @@ helm show values rocm/network-operator-charts | Key | Type | Default | Description | | ----- | ------ | --------- | ------------- | | controllerManager.manager.image.repository | string | `"docker.io/rocm/network-operator"` | AMD Network operator controller manager image repository | -| controllerManager.manager.image.tag | string | `"v1.2.0"` | AMD Network operator controller manager image tag | +| controllerManager.manager.image.tag | string | `"v1.2.1"` | AMD Network operator controller manager image tag | | controllerManager.manager.imagePullPolicy | string | `"Always"` | Image pull policy for AMD Network operator controller manager pod | | controllerManager.manager.imagePullSecrets | string | `""` | Image pull secret name for pulling AMD Network operator controller manager image if registry needs credential to pull image | | controllerManager.manager.resources.limits.cpu | string | `"1000m"` | CPU limits for the controller manager. Consider increasing for large clusters | @@ -235,7 +235,7 @@ You can apply resource changes by updating your values.yaml file and upgrading t helm upgrade amd-network-operator rocm/network-operator-charts \ --debug \ --namespace kube-amd-network \ - --version=v1.2.0 + --version=v1.2.1 -f values.yaml ``` diff --git a/docs/installation/networkconfig-full.md b/docs/installation/networkconfig-full.md index 05667bf0..a39262f2 100644 --- a/docs/installation/networkconfig-full.md +++ b/docs/installation/networkconfig-full.md @@ -63,7 +63,7 @@ spec: gracePeriodSeconds: -2 # Device plugin and Node labeller config devicePlugin: - devicePluginImage: docker.io/rocm/k8s-network-device-plugin:v1.2.0 + devicePluginImage: docker.io/rocm/k8s-network-device-plugin:v1.2.1 devicePluginImagePullPolicy: "Always" devicePluginTolerations: - key: "example-key" @@ -75,7 +75,7 @@ spec: value: "example-value2" effect: "NoExecute" enableNodeLabeller: True - nodeLabellerImage: docker.io/rocm/k8s-network-node-labeller:v1.2.0 + nodeLabellerImage: docker.io/rocm/k8s-network-node-labeller:v1.2.1 nodeLabellerImagePullPolicy: "Always" nodeLabellerTolerations: - key: "example-key" @@ -95,7 +95,7 @@ spec: port: 5001 serviceType: "NodePort" nodePort: 32501 - image: docker.io/rocm/device-metrics-exporter:nic-v1.2.0 + image: docker.io/rocm/device-metrics-exporter:nic-v1.2.1 imagePullPolicy: "Always" imageRegistrySecret: name: my-secret @@ -129,7 +129,7 @@ spec: secondaryNetwork: cniPlugins: enable: True - image: docker.io/rocm/k8s-cni-plugins:v1.2.0 + image: docker.io/rocm/k8s-cni-plugins:v1.2.1 imagePullPolicy: "Always" imageRegistrySecret: name: my-secret @@ -147,7 +147,7 @@ spec: initContainerImage: busybox:1.36 utilsContainer: # -- network operator utility container image used for driver upgrade - image: docker.io/rocm/network-operator-utils:v1.2.0 + image: docker.io/rocm/network-operator-utils:v1.2.1 # -- utility container image pull policy imagePullPolicy: IfNotPresent # -- utility container image pull secret, e.g. {"name": "mySecretName"} diff --git a/docs/installation/networkconfig.md b/docs/installation/networkconfig.md index bf324e03..d423ab10 100644 --- a/docs/installation/networkconfig.md +++ b/docs/installation/networkconfig.md @@ -27,8 +27,8 @@ spec: # Device plugin and Node labeller config devicePlugin: enableNodeLabeller: True - nodeLabellerImage: docker.io/rocm/k8s-network-node-labeller:v1.2.0 - devicePluginImage: docker.io/rocm/k8s-network-device-plugin:v1.2.0 + nodeLabellerImage: docker.io/rocm/k8s-network-node-labeller:v1.2.1 + devicePluginImage: docker.io/rocm/k8s-network-device-plugin:v1.2.1 # Metrics exporter config metricsExporter: @@ -37,13 +37,13 @@ spec: serviceType: "NodePort" nodePort: 32501 hostNetwork: true - image: docker.io/rocm/device-metrics-exporter:nic-v1.2.0 + image: docker.io/rocm/device-metrics-exporter:nic-v1.2.1 # Secondary network config secondaryNetwork: cniPlugins: enable: True - image: docker.io/rocm/k8s-cni-plugins:v1.2.0 + image: docker.io/rocm/k8s-cni-plugins:v1.2.1 # Specify the node to be managed by this NetworkConfig Custom Resource selector: @@ -80,8 +80,8 @@ To check the full spec of `NetworkConfig` definition, run `kubectl get crds netw | Parameter | Description | Default | | --------- | ----------- | ------- | -| `devicePluginImage` | AMD Network device plugin image | `docker.io/rocm/k8s-network-device-plugin:v1.2.0` | -| `nodeLabellerImage` | Node labeller image | `docker.io/rocm/k8s-network-node-labeller:v1.2.0` | +| `devicePluginImage` | AMD Network device plugin image | `docker.io/rocm/k8s-network-device-plugin:v1.2.1` | +| `nodeLabellerImage` | Node labeller image | `docker.io/rocm/k8s-network-node-labeller:v1.2.1` | | `imageRegistrySecret.name` | Name of registry credentials secret
to pull device plugin / node labeller image | | | `enableNodeLabeller` | enable / disable node labeller | `true` | @@ -101,7 +101,7 @@ To check the full spec of `NetworkConfig` definition, run `kubectl get crds netw | Parameter | Description | Default | | --------- | ----------- | ------- | | `cniPlugins.enable` | Enable/disable CNI plugins | `false` | -| `cniPlugins.image` | CNI plugins image | `docker.io/rocm/cni-plugins:v1.2.0` | +| `cniPlugins.image` | CNI plugins image | `docker.io/rocm/k8s-cni-plugins:v1.2.1` | | `cniPlugins.imageRegistrySecret.name` | Name of registry credentials secret
to pull metrics exporter image | | #### `spec.selector` Parameters diff --git a/docs/metrics/exporter.md b/docs/metrics/exporter.md index 08a873a0..a665ee41 100644 --- a/docs/metrics/exporter.md +++ b/docs/metrics/exporter.md @@ -16,7 +16,7 @@ spec: enable: true # Specify the Metrics Exporter image - image: "docker.io/rocm/device-metrics-exporter:nic-v1.2.0" + image: "docker.io/rocm/device-metrics-exporter:nic-v1.2.1" # Image pull policy (default: IfNotPresent, or Always if tag is :latest) imagePullPolicy: "IfNotPresent" diff --git a/docs/upgrades/componentupgrades.md b/docs/upgrades/componentupgrades.md index 5981cca6..34353f4a 100644 --- a/docs/upgrades/componentupgrades.md +++ b/docs/upgrades/componentupgrades.md @@ -56,7 +56,7 @@ The current image the Device Plugin Daemonset is using can be checked by using ` ```yaml device-plugin: Container ID: containerd://b1aaa67ebdd87d4ef0f2a32b76b428068d24c28ced3e86c3c5caba39bb5689a4 - Image: rocm/k8s-network-device-plugin:v1.2.0 + Image: rocm/k8s-network-device-plugin:v1.2.1 ``` ### 3. Upgrade the Image of Device Plugin Daemonset @@ -71,7 +71,7 @@ Old CR: ```yaml devicePlugin: - devicePluginImage: rocm/k8s-network-device-plugin:v1.2.0 + devicePluginImage: rocm/k8s-network-device-plugin:v1.2.1 ``` Updated CR: @@ -109,7 +109,7 @@ Old CR: enable: True serviceType: "ClusterIP" port: 5001 - image: rocm/device-metrics-exporter:nic-v1.2.0 + image: rocm/device-metrics-exporter:nic-v1.2.1 ``` Updated CR: @@ -119,7 +119,7 @@ Updated CR: enable: True serviceType: "ClusterIP" port: 5001 - image: rocm/device-metrics-exporter:nic-v1.2.0 + image: rocm/device-metrics-exporter:nic-v1.2.1 upgradePolicy: upgradeStrategy: OnDelete ``` diff --git a/docs/upgrades/upgrade.md b/docs/upgrades/upgrade.md index c1c57c21..69c46db4 100644 --- a/docs/upgrades/upgrade.md +++ b/docs/upgrades/upgrade.md @@ -42,7 +42,7 @@ Upgrade the operator using the following command: ```bash helm upgrade amd-network-operator rocm/network-operator-charts \ -n kube-amd-network \ - --version=v1.2.0 \ + --version=v1.2.1 \ --recreate-pods \ --debug ``` @@ -54,10 +54,10 @@ helm upgrade amd-network-operator rocm/network-operator-charts \ # Perform helm upgrade helm upgrade amd-network-operator rocm/network-operator-charts \ -n kube-amd-network \ - --version=v1.2.0 \ + --version=v1.2.1 \ --debug \ --set controllerManager.manager.image.repository=docker.io/rocm/network-operator \ - --set controllerManager.manager.image.tag=v1.2.0 + --set controllerManager.manager.image.tag=v1.2.1 ``` ```{note} diff --git a/example/networkconfig.yaml b/example/networkconfig.yaml index abea4a42..5160ad6f 100644 --- a/example/networkconfig.yaml +++ b/example/networkconfig.yaml @@ -42,12 +42,12 @@ spec: enableNodeLabeller: True # node labeller image - # default value is rocm/k8s-network-node-labeller:v1.2.0 - nodeLabellerImage: docker.io/rocm/k8s-network-node-labeller:v1.2.0 + # default value is rocm/k8s-network-node-labeller:v1.2.1 + nodeLabellerImage: docker.io/rocm/k8s-network-node-labeller:v1.2.1 # Specify the device plugin image - # default value is rocm/k8s-network-device-plugin:v1.2.0 - devicePluginImage: docker.io/rocm/k8s-network-device-plugin:v1.2.0 + # default value is rocm/k8s-network-device-plugin:v1.2.1 + devicePluginImage: docker.io/rocm/k8s-network-device-plugin:v1.2.1 # Specify Device Plugin image pull policy # default value is IfNotPresent for valid tags, Always for no tag or "latest" tag @@ -77,8 +77,8 @@ spec: nodePort: 32501 # exporter image - # default value is docker.io/rocm/device-metrics-exporter:nic-v1.2.0 - image: docker.io/rocm/device-metrics-exporter:nic-v1.2.0 + # default value is docker.io/rocm/device-metrics-exporter:nic-v1.2.1 + image: docker.io/rocm/device-metrics-exporter:nic-v1.2.1 # image pull policy for metrics exporter # default value is IfNotPresent for valid tags, Always for no tag or "latest" tag @@ -101,7 +101,7 @@ spec: # CNI plugin configuration cniPlugins: enable: True - image: docker.io/rocm/k8s-cni-plugins:v1.2.0 + image: docker.io/rocm/k8s-cni-plugins:v1.2.1 imagePullPolicy: "Always" # image registry secret used to pull/push images imageRegistrySecret: @@ -112,7 +112,7 @@ spec: initContainerImage: busybox:1.36 utilsContainer: # -- network operator utility container image used for driver upgrade - image: docker.io/rocm/network-operator-utils:v1.2.0 + image: docker.io/rocm/network-operator-utils:v1.2.1 # -- utility container image pull policy imagePullPolicy: IfNotPresent # -- utility container image pull secret, e.g. {"name": "mySecretName"} diff --git a/hack/device-plugin-configmap.yaml b/hack/device-plugin-configmap.yaml new file mode 100644 index 00000000..f9d3d880 --- /dev/null +++ b/hack/device-plugin-configmap.yaml @@ -0,0 +1,36 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: amd-network-operator-device-plugin-config + labels: + app.kubernetes.io/component: amd-network + app.kubernetes.io/part-of: amd-network +data: + # The config.json content for the SR-IOV device plugin + config.json: | + { + "resourceList": [{ + "resourceName": "nic", + "resourcePrefix": "amd.com", + "enableExporterHealthCheck": true, + "selectors": { + "vendors": ["1dd8"], + "devices": ["1002"], + "drivers": ["ionic"], + "isRdma": true + }, + "excludeTopology": false + }, + { + "resourceName": "vnic", + "resourcePrefix": "amd.com", + "enableExporterHealthCheck": true, + "selectors": { + "vendors": ["1dd8"], + "devices": ["1003"], + "drivers": ["ionic"], + "isRdma": true + }, + "excludeTopology": false + }] + } diff --git a/hack/k8s-patch/metadata-patch/Chart.yaml b/hack/k8s-patch/metadata-patch/Chart.yaml index 99e0eb95..6791ee37 100644 --- a/hack/k8s-patch/metadata-patch/Chart.yaml +++ b/hack/k8s-patch/metadata-patch/Chart.yaml @@ -22,7 +22,7 @@ keywords: - monitoring kubeVersion: ">= 1.29.0-0" -version: v1.2.0 +version: v1.2.1 appVersion: dev dependencies: diff --git a/hack/openshift-patch/metadata-patch/Chart.yaml b/hack/openshift-patch/metadata-patch/Chart.yaml index 3489c27f..a0a28bf4 100644 --- a/hack/openshift-patch/metadata-patch/Chart.yaml +++ b/hack/openshift-patch/metadata-patch/Chart.yaml @@ -21,7 +21,7 @@ keywords: - monitoring kubeVersion: ">= 1.29.0-0" -version: v1.2.0 +version: v1.2.1 appVersion: dev dependencies: diff --git a/helm-charts-k8s/Chart.lock b/helm-charts-k8s/Chart.lock index 85c875a5..c44c5af4 100644 --- a/helm-charts-k8s/Chart.lock +++ b/helm-charts-k8s/Chart.lock @@ -9,4 +9,4 @@ dependencies: repository: file://./charts/multus version: 1.0.0 digest: sha256:04b5697c8fd25d5cb6cac27cf0248a255fd8a31e9cd3c9b7b8f114eedf788eab -generated: "2026-04-22T19:21:21.895580993Z" +generated: "2026-08-28T04:46:34.298915134Z" diff --git a/helm-charts-k8s/Chart.yaml b/helm-charts-k8s/Chart.yaml index 19c4995a..6791ee37 100644 --- a/helm-charts-k8s/Chart.yaml +++ b/helm-charts-k8s/Chart.yaml @@ -5,7 +5,7 @@ type: application home: https://github.com/ROCm/network-operator sources: - https://github.com/ROCm/network-operator -icon: https://raw.githubusercontent.com/ROCm/k8s-device-plugin/master/helm/logo.png +icon: https://raw.githubusercontent.com/ROCm/network-operator/main/docs/_static/amd-network-operator-diagram.jpg maintainers: - name: Sundara Gurunathan - name: Yuvarani Shankar @@ -16,12 +16,13 @@ keywords: - hardware - amd - network - - ai - - deep learning + - nic + - ainic + - rdma - monitoring kubeVersion: ">= 1.29.0-0" -version: v1.2.0 +version: v1.2.1 appVersion: dev dependencies: diff --git a/helm-charts-k8s/README.md b/helm-charts-k8s/README.md index caf443cd..511bee4e 100644 --- a/helm-charts-k8s/README.md +++ b/helm-charts-k8s/README.md @@ -17,7 +17,7 @@ For detailed component information, see [Component Overview](docs/overview.md). The AMD Network Operator is licensed under the [Apache License 2.0](LICENSE). # network-operator-charts -![Version: v1.2.0](https://img.shields.io/badge/Version-v1.2.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: dev](https://img.shields.io/badge/AppVersion-dev-informational?style=flat-square) +![Version: v1.2.1](https://img.shields.io/badge/Version-v1.2.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: dev](https://img.shields.io/badge/AppVersion-dev-informational?style=flat-square) AMD Network Operator simplifies the deployment and management of AMD AINICs within Kubernetes clusters. diff --git a/helm-charts-k8s/crds/networkconfig-crd.yaml b/helm-charts-k8s/crds/networkconfig-crd.yaml index e48090ec..c656e924 100644 --- a/helm-charts-k8s/crds/networkconfig-crd.yaml +++ b/helm-charts-k8s/crds/networkconfig-crd.yaml @@ -9,7 +9,7 @@ metadata: labels: app.kubernetes.io/component: amd-network app.kubernetes.io/part-of: amd-network - helm.sh/chart: network-operator-charts-v1.2.0 + helm.sh/chart: network-operator-charts-v1.2.1 app.kubernetes.io/name: network-operator-charts app.kubernetes.io/instance: amd-network app.kubernetes.io/version: "dev" diff --git a/helm-charts-openshift/values.yaml b/helm-charts-openshift/values.yaml new file mode 100644 index 00000000..de506c37 --- /dev/null +++ b/helm-charts-openshift/values.yaml @@ -0,0 +1,74 @@ +nfd: + enabled: true # Set to false to disable nfd +kmm: + enabled: true # Set to false to disable kmm +installdefaultNFDRule: true # default NFD rule will detect amd network based on pci vendor ID +upgradeCRD: true # CRD will be patched as pre-upgrade hook when doing helm upgrade to current helm chart +controllerManager: + manager: + args: + - --config=controller_manager_config.yaml + containerSecurityContext: + allowPrivilegeEscalation: false + image: + repository: docker.io/rocm/amd-network-operator + tag: v1.2.1 + imagePullPolicy: Always + imagePullSecrets: "" + tolerations: + - key: "node-role.kubernetes.io/master" + operator: "Equal" + value: "" + effect: "NoSchedule" + - key: "node-role.kubernetes.io/control-plane" + operator: "Equal" + value: "" + effect: "NoSchedule" + resources: + limits: + cpu: 1000m + memory: 1Gi + requests: + cpu: 100m + memory: 256Mi + nodeSelector: {} + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 1 + preference: + matchExpressions: + - key: node-role.kubernetes.io/control-plane + operator: Exists + replicas: 1 + serviceAccount: + annotations: {} + env: + simEnable: false +devicePlugin: + serviceAccount: + annotations: {} +kmmModuleLoader: + serviceAccount: + annotations: {} +kubernetesClusterDomain: cluster.local +managerConfig: + controllerManagerConfigYaml: |- + healthProbeBindAddress: :8081 + metricsBindAddress: 127.0.0.1:8080 + leaderElection: + enabled: true + resourceID: network.amd.com +metricsService: + ports: + - name: https + port: 8443 + protocol: TCP + targetPort: https + type: ClusterIP +nodeLabeller: + serviceAccount: + annotations: {} +metricsExporter: + serviceAccount: + annotations: {} diff --git a/internal/controllers/upgrademgr.go b/internal/controllers/upgrademgr.go index e2618e54..538fee0f 100644 --- a/internal/controllers/upgrademgr.go +++ b/internal/controllers/upgrademgr.go @@ -64,7 +64,7 @@ import ( ) const ( - defaultUtilsImage = "docker.io/rocm/network-operator-utils:v1.2.0" + defaultUtilsImage = "docker.io/rocm/network-operator-utils:v1.2.1" defaultOcUtilsImage = "docker.io/rocm/network-operator-utils:rhubi-latest" defaultSAName = "amd-network-operator-utils-container" driverUpgradeStateLabelKey = "operator.amd.com/network-driver-upgrade-state" diff --git a/internal/deviceplugin/deviceplugin.go b/internal/deviceplugin/deviceplugin.go index 78778d82..eeb9258e 100644 --- a/internal/deviceplugin/deviceplugin.go +++ b/internal/deviceplugin/deviceplugin.go @@ -30,7 +30,7 @@ import ( const ( defaultInitContainerImage = "busybox:1.36" - defaultDevicePluginImage = "docker.io/rocm/k8s-network-device-plugin:v1.2.0" + defaultDevicePluginImage = "docker.io/rocm/k8s-network-device-plugin:v1.2.1" defaultDevicePluginConfigMap = "amd-network-operator-device-plugin-config" devicePluginSAName = "amd-network-operator-device-plugin" DevicePluginName = "device-plugin" diff --git a/internal/metricsexporter/exporter.go b/internal/metricsexporter/exporter.go index 9bef57e6..675aa00f 100644 --- a/internal/metricsexporter/exporter.go +++ b/internal/metricsexporter/exporter.go @@ -34,7 +34,7 @@ const ( exporterSAName = "amd-network-operator-metrics-exporter" kubeRBACSAName = "amd-network-operator-metrics-exporter-rbac-proxy" StaticAuthSecretName = ExporterName + "-static-auth-config" - defaultMetricsExporterImage = "docker.io/rocm/device-metrics-exporter:nic-v1.2.0" + defaultMetricsExporterImage = "docker.io/rocm/device-metrics-exporter:nic-v1.2.1" defaultInitContainerImage = "busybox:1.36" svcLabel = "app.kubernetes.io/service" ) diff --git a/internal/nodelabeller/nodelabeller.go b/internal/nodelabeller/nodelabeller.go index efbd958a..b748eedd 100644 --- a/internal/nodelabeller/nodelabeller.go +++ b/internal/nodelabeller/nodelabeller.go @@ -28,7 +28,7 @@ import ( ) const ( - defaultNodeLabellerUbiImage = "docker.io/rocm/k8s-network-node-labeller:v1.2.0" + defaultNodeLabellerUbiImage = "docker.io/rocm/k8s-network-node-labeller:v1.2.1" defaultInitContainerImage = "busybox:1.36" defaultBlacklistFileName = "blacklist-ionic-netop.conf" nodeLabellerSAName = "amd-network-operator-node-labeller" diff --git a/internal/secondarynetwork/cniplugins.go b/internal/secondarynetwork/cniplugins.go index 3b9f7370..87917313 100644 --- a/internal/secondarynetwork/cniplugins.go +++ b/internal/secondarynetwork/cniplugins.go @@ -28,7 +28,7 @@ import ( ) const ( - defaultCNIPluginsImage = "docker.io/rocm/k8s-cni-plugins:v1.2.0" + defaultCNIPluginsImage = "docker.io/rocm/k8s-cni-plugins:v1.2.1" CNIPluginsName = "cni-plugins" cniPluginsSAName = "amd-network-operator-cni-plugins" ) diff --git a/internal/utils.go b/internal/utils.go index 870c244d..aa139da9 100644 --- a/internal/utils.go +++ b/internal/utils.go @@ -40,7 +40,7 @@ const ( ResourceNamingStrategyFlag = "resource_naming_strategy" SingleStrategy = "single" MixedStrategy = "mixed" - DefaultUtilsImage = "docker.io/rocm/network-operator-utils:v1.2.0" + DefaultUtilsImage = "docker.io/rocm/network-operator-utils:v1.2.1" // worker pod related constants KindNetworkConfig = "NetworkConfig"