diff --git a/assets/active/metadata.yaml b/assets/active/metadata.yaml index 4002b4b..1604054 100644 --- a/assets/active/metadata.yaml +++ b/assets/active/metadata.yaml @@ -122,16 +122,6 @@ assets: - type: feature-gate value: CPUManager - # Phase 1: Tuned - Default profiles - # https://docs.redhat.com/en/documentation/openshift_container_platform/4.21/html/scalability_and_performance/using-node-tuning-operator#custom-tuning-default-profiles-set_node-tuning-operator - - name: tuned-default - path: active/tuned/tuned_default.yaml - phase: 1 - install: always - component: Tuned - reconcile_order: 1 - conditions: [] - # Phase 2: InflightOperations OperationRuleSet assets (opt-in, gated on IFO CRD) - name: ifo-datavolume-rules group: inflightoperations diff --git a/assets/active/tuned/tuned_default.yaml b/assets/active/tuned/tuned_default.yaml deleted file mode 100644 index dac9e88..0000000 --- a/assets/active/tuned/tuned_default.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: tuned.openshift.io/v1 -kind: Tuned -metadata: - name: default - namespace: openshift-cluster-node-tuning-operator -spec: - profile: - - data: | - [main] - summary=Optimize systems running OpenShift (provider specific parent profile) - include=-provider-${f:exec:cat:/var/lib/ocp-tuned/provider},openshift - name: openshift - recommend: - - profile: openshift-control-plane - priority: 30 - match: - - label: node-role.kubernetes.io/master - - label: node-role.kubernetes.io/infra - - profile: openshift-node - priority: 40 diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index 52677f0..3c96127 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -179,14 +179,3 @@ rules: - patch - update - watch - - apiGroups: - - tuned.openshift.io - resources: - - tuneds - verbs: - - create - - get - - list - - patch - - update - - watch diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index f42f8c3..91abab8 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -86,7 +86,6 @@ Asset names correspond to the `name` field in `assets/active/metadata.yaml`. The | `kubelet-cpu-manager` | | KubeletConfig | Opt-in: CPUManager feature gate | | `node-health-check` | | NodeHealthCheck | Always-on baseline | | `descheduler-loadaware` | | KubeDescheduler | Soft dependency on KubeDescheduler CRD | -| `tuned-default` | | Tuned | Always-on baseline; soft dependency on Tuned CRD | | `mtv-operator` | | ForkliftController | Opt-in: annotation condition | | `metallb-operator` | | MetalLB | Opt-in: annotation condition | | `observability-operator` | | UIPlugin | Opt-in: annotation condition | diff --git a/docs/debug-endpoints.md b/docs/debug-endpoints.md index efd53fe..068588a 100644 --- a/docs/debug-endpoints.md +++ b/docs/debug-endpoints.md @@ -328,14 +328,13 @@ pci-passthrough EXCLUDED MachineConfig Conditions n numa-topology EXCLUDED MachineConfig Conditions not met kubelet-perf-settings INCLUDED KubeletConfig - node-health-check INCLUDED NodeHealthCheck - -tuned-default INCLUDED Tuned - mtv-operator EXCLUDED ForkliftController Conditions not met metallb-operator EXCLUDED MetalLB Conditions not met observability-operator EXCLUDED UIPlugin Conditions not met descheduler-loadaware FILTERED KubeDescheduler Root exclusion kubelet-cpu-manager EXCLUDED KubeletConfig Conditions not met ---------------------------------------------------------------------------------------------------- -Summary: 4 included, 7 excluded, 1 filtered, 0 errors +Summary: 3 included, 7 excluded, 1 filtered, 0 errors ``` ## Use Cases diff --git a/hack/update-crds.sh b/hack/update-crds.sh index bcbf88f..f706e1d 100755 --- a/hack/update-crds.sh +++ b/hack/update-crds.sh @@ -117,11 +117,6 @@ declare -a CRD_METADATA=( "Medik8s Remediation|Self Node Remediation|medik8s/self-node-remediation|main|config/crd/bases/self-node-remediation.medik8s.io_selfnoderemediations.yaml|remediation/selfnoderemediations.self-node-remediation.medik8s.io.yaml" "Medik8s Remediation|Fence Agents Remediation|medik8s/fence-agents-remediation|main|config/crd/bases/fence-agents-remediation.medik8s.io_fenceagentsremediations.yaml|remediation/fenceagentsremediations.fence-agents-remediation.medik8s.io.yaml" - # Node Tuning Operator - "Node Tuning Operator|PerformanceProfile|openshift/cluster-node-tuning-operator|main|manifests/20-performance-profile.crd.yaml|tuned/20-performance-profile.crd.yaml" - "Node Tuning Operator|Profile|openshift/cluster-node-tuning-operator|main|manifests/20-profile.crd.yaml|tuned/20-profile.crd.yaml" - "Node Tuning Operator|Tuned|openshift/cluster-node-tuning-operator|main|manifests/20-tuned.crd.yaml|tuned/20-tuned.crd.yaml" - # Third-Party Operators "Third-Party Operators|MTV (Forklift)|kubev2v/forklift|main|operator/config/crd/bases/forklift.konveyor.io_forkliftcontrollers.yaml|operators/forklift.konveyor.io_forkliftcontrollers.yaml" "Third-Party Operators|MetalLB|metallb/metallb-operator|main|config/crd/bases/metallb.io_metallbs.yaml|operators/metallb.io_metallbs.yaml" diff --git a/test/crd_helpers.go b/test/crd_helpers.go index 8c74eff..ceb5c48 100644 --- a/test/crd_helpers.go +++ b/test/crd_helpers.go @@ -26,7 +26,6 @@ const ( CRDSetOperators CRDSet = "operators" // MTV, MetalLB CRDs CRDSetObservability CRDSet = "observability" // Cluster Monitoring Operator CRDs CRDSetPrometheus CRDSet = "prometheus" // Prometheus CRDs - CRDSetTuned CRDSet = "tuned" // PerformanceProfile, Profile, Tuned CRDs CRDSetIFO CRDSet = "inflightoperations" // OperationRuleSet ) diff --git a/test/crd_test.go b/test/crd_test.go index 7d94b09..77b773f 100644 --- a/test/crd_test.go +++ b/test/crd_test.go @@ -78,7 +78,6 @@ func TestCRDsCanBeLoaded(t *testing.T) { filepath.Join(crdsDir, "operators"), filepath.Join(crdsDir, "observability"), filepath.Join(crdsDir, "oadp"), - filepath.Join(crdsDir, "tuned"), filepath.Join(crdsDir, "inflightoperations"), } diff --git a/test/crds/README.md b/test/crds/README.md index 18b00ad..ce1abab 100644 --- a/test/crds/README.md +++ b/test/crds/README.md @@ -95,27 +95,6 @@ test/crds/ - Local: `remediation/fenceagentsremediations.fence-agents-remediation.medik8s.io.yaml` -### Node Tuning Operator - -**PerformanceProfile** -- Repository: https://github.com/openshift/cluster-node-tuning-operator -- Branch: `main` -- Path: `manifests/20-performance-profile.crd.yaml` -- Local: `tuned/20-performance-profile.crd.yaml` - -**Profile** -- Repository: https://github.com/openshift/cluster-node-tuning-operator -- Branch: `main` -- Path: `manifests/20-profile.crd.yaml` -- Local: `tuned/20-profile.crd.yaml` - -**Tuned** -- Repository: https://github.com/openshift/cluster-node-tuning-operator -- Branch: `main` -- Path: `manifests/20-tuned.crd.yaml` -- Local: `tuned/20-tuned.crd.yaml` - - ### Third-Party Operators **MTV (Forklift)** diff --git a/test/crds/tuned/20-performance-profile.crd.yaml b/test/crds/tuned/20-performance-profile.crd.yaml deleted file mode 100644 index 9bed853..0000000 --- a/test/crds/tuned/20-performance-profile.crd.yaml +++ /dev/null @@ -1,728 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - capability.openshift.io/name: NodeTuning - include.release.openshift.io/hypershift: "true" - include.release.openshift.io/ibm-cloud-managed: "true" - include.release.openshift.io/self-managed-high-availability: "true" - include.release.openshift.io/single-node-developer: "true" - service.beta.openshift.io/inject-cabundle: "true" - name: performanceprofiles.performance.openshift.io -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - service: - name: performance-addon-operator-service - namespace: openshift-cluster-node-tuning-operator - path: /convert - port: 443 - conversionReviewVersions: - - v1 - - v1alpha1 - group: performance.openshift.io - names: - kind: PerformanceProfile - listKind: PerformanceProfileList - plural: performanceprofiles - singular: performanceprofile - scope: Cluster - versions: - - deprecated: true - deprecationWarning: v1 is deprecated and should be removed in next three releases, use v2 instead - name: v1 - schema: - openAPIV3Schema: - description: PerformanceProfile is the Schema for the performanceprofiles API - type: object - 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: PerformanceProfileSpec defines the desired state of PerformanceProfile. - type: object - required: - - cpu - - nodeSelector - properties: - additionalKernelArgs: - description: Additional kernel arguments. - type: array - items: - type: string - cpu: - description: CPU defines a set of CPU related parameters. - type: object - required: - - isolated - properties: - balanceIsolated: - description: |- - BalanceIsolated toggles whether or not the Isolated CPU set is eligible for load balancing work loads. - When this option is set to "false", the Isolated CPU set will be static, meaning workloads have to - explicitly assign each thread to a specific cpu in order to work across multiple CPUs. - Setting this to "true" allows workloads to be balanced across CPUs. - Setting this to "false" offers the most predictable performance for guaranteed workloads, but it - offloads the complexity of cpu load balancing to the application. - Defaults to "true" - type: boolean - isolated: - description: |- - Isolated defines a set of CPUs that will be used to give to application threads the most execution time possible, - which means removing as many extraneous tasks off a CPU as possible. - It is important to notice the CPU manager can choose any CPU to run the workload - except the reserved CPUs. In order to guarantee that your workload will run on the isolated CPU: - 1. The union of reserved CPUs and isolated CPUs should include all online CPUs - 2. The isolated CPUs field should be the complementary to reserved CPUs field - type: string - offlined: - description: Offline defines a set of CPUs that will be unused and set offline - type: string - reserved: - description: Reserved defines a set of CPUs that will not be used for any container workloads initiated by kubelet. - type: string - globallyDisableIrqLoadBalancing: - description: |- - GloballyDisableIrqLoadBalancing toggles whether IRQ load balancing will be disabled for the Isolated CPU set. - When the option is set to "true" it disables IRQs load balancing for the Isolated CPU set. - Setting the option to "false" allows the IRQs to be balanced across all CPUs, however the IRQs load balancing - can be disabled per pod CPUs when using irq-load-balancing.crio.io/cpu-quota.crio.io annotations. - Defaults to "false" - type: boolean - hardwareTuning: - description: |- - HardwareTuning defines a set of CPU frequencies for isolated and reserved cpus. - It is an optional parameter and requires vendor recommendation to find suitable frequencies. - The intention is to set higher frequency for reserved cpus where - platform application is running while setting isolated cpus frequency to match - vendor recommendation. - type: object - properties: - isolatedCpuFreq: - description: IsolatedCpuFreq defines a minimum frequency to be set across isolated cpus - type: integer - reservedCpuFreq: - description: ReservedCpuFreq defines a maximum frequency to be set across reserved cpus - type: integer - hugepages: - description: |- - HugePages defines a set of huge pages related parameters. - It is possible to set huge pages with multiple size values at the same time. - For example, hugepages can be set with 1G and 2M, both values will be set on the node by the performance-addon-operator. - It is important to notice that setting hugepages default size to 1G will remove all 2M related - folders from the node and it will be impossible to configure 2M hugepages under the node. - type: object - properties: - defaultHugepagesSize: - description: DefaultHugePagesSize defines huge pages default size under kernel boot parameters. - type: string - pages: - description: Pages defines huge pages that we want to allocate at boot time. - type: array - items: - description: HugePage defines the number of allocated huge pages of the specific size. - type: object - properties: - count: - description: Count defines amount of huge pages, maps to the 'hugepages' kernel boot parameter. - type: integer - format: int32 - node: - description: |- - Node defines the NUMA node where hugepages will be allocated, - if not specified, pages will be allocated equally between NUMA nodes - type: integer - format: int32 - size: - description: Size defines huge page size, maps to the 'hugepagesz' kernel boot parameter. - type: string - machineConfigLabel: - description: |- - MachineConfigLabel defines the label to add to the MachineConfigs the operator creates. It has to be - used in the MachineConfigSelector of the MachineConfigPool which targets this performance profile. - Defaults to "machineconfiguration.openshift.io/role=" - type: object - additionalProperties: - type: string - machineConfigPoolSelector: - description: |- - MachineConfigPoolSelector defines the MachineConfigPool label to use in the MachineConfigPoolSelector - of resources like KubeletConfigs created by the operator. - Defaults to "machineconfiguration.openshift.io/role=" - type: object - additionalProperties: - type: string - net: - description: Net defines a set of network related features - type: object - properties: - devices: - description: |- - Devices contains a list of network device representations that will be - set with a netqueue count equal to CPU.Reserved . - If no devices are specified then the default is all devices. - type: array - items: - description: |- - Device defines a way to represent a network device in several options: - device name, vendor ID, model ID, PCI path and MAC address - type: object - properties: - deviceID: - description: Network device ID (model) represnted as a 16 bit hexmadecimal number. - type: string - interfaceName: - description: Network device name to be matched. It uses a syntax of shell-style wildcards which are either positive or negative. - type: string - vendorID: - description: Network device vendor ID represnted as a 16 bit Hexmadecimal number. - type: string - userLevelNetworking: - description: UserLevelNetworking when enabled - sets either all or specified network devices queue size to the amount of reserved CPUs. Defaults to "false". - type: boolean - nodeSelector: - description: |- - NodeSelector defines the Node label to use in the NodeSelectors of resources like Tuned created by the operator. - It most likely should, but does not have to match the node label in the NodeSelector of the MachineConfigPool - which targets this performance profile. - In the case when machineConfigLabels or machineConfigPoolSelector are not set, we are expecting a certain NodeSelector format - /: "" in order to be able to calculate the default values for the former mentioned fields. - type: object - additionalProperties: - type: string - numa: - description: NUMA defines options related to topology aware affinities - type: object - properties: - topologyPolicy: - description: |- - Name of the policy applied when TopologyManager is enabled - Operator defaults to "best-effort" - type: string - realTimeKernel: - description: RealTimeKernel defines a set of real time kernel related parameters. RT kernel won't be installed when not set. - type: object - properties: - enabled: - description: Enabled defines if the real time kernel packages should be installed. Defaults to "false" - type: boolean - workloadHints: - description: |- - WorkloadHints defines hints for different types of workloads. It will allow defining exact set of tuned and - kernel arguments that should be applied on top of the node. - type: object - properties: - highPowerConsumption: - description: |- - HighPowerConsumption defines if the node should be configured in high power consumption mode. - The flag will affect the power consumption but will improve the CPUs latency. - type: boolean - perPodPowerManagement: - description: |- - PerPodPowerManagement defines if the node should be configured in per pod power management. - PerPodPowerManagement and HighPowerConsumption hints can not be enabled together. - type: boolean - realTime: - description: RealTime defines if the node should be configured for the real time workload. Defaults to true. - type: boolean - default: true - status: - description: PerformanceProfileStatus defines the observed state of PerformanceProfile. - type: object - properties: - conditions: - description: Conditions represents the latest available observations of current state. - type: array - items: - description: |- - Condition represents the state of the operator's - reconciliation functionality. - type: object - required: - - status - - type - properties: - lastHeartbeatTime: - type: string - format: date-time - lastTransitionTime: - type: string - format: date-time - message: - type: string - reason: - type: string - status: - type: string - type: - description: ConditionType is the state of the operator's reconciliation functionality. - type: string - runtimeClass: - description: RuntimeClass contains the name of the RuntimeClass resource created by the operator. - type: string - tuned: - description: Tuned points to the Tuned custom resource object that contains the tuning values generated by this operator. - type: string - served: true - storage: false - subresources: - status: {} - - deprecated: true - deprecationWarning: v1alpha1 is deprecated and should be removed in the next release, use v2 instead - name: v1alpha1 - schema: - openAPIV3Schema: - description: PerformanceProfile is the Schema for the performanceprofiles API - type: object - 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: PerformanceProfileSpec defines the desired state of PerformanceProfile. - type: object - properties: - additionalKernelArgs: - description: Additional kernel arguments. - type: array - items: - type: string - cpu: - description: CPU defines a set of CPU related parameters. - type: object - properties: - balanceIsolated: - description: |- - BalanceIsolated toggles whether or not the Isolated CPU set is eligible for load balancing work loads. - When this option is set to "false", the Isolated CPU set will be static, meaning workloads have to - explicitly assign each thread to a specific cpu in order to work across multiple CPUs. - Setting this to "true" allows workloads to be balanced across CPUs. - Setting this to "false" offers the most predictable performance for guaranteed workloads, but it - offloads the complexity of cpu load balancing to the application. - Defaults to "true" - type: boolean - isolated: - description: |- - Isolated defines a set of CPUs that will be used to give to application threads the most execution time possible, - which means removing as many extraneous tasks off a CPU as possible. - It is important to notice the CPU manager can choose any CPU to run the workload - except the reserved CPUs. In order to guarantee that your workload will run on the isolated CPU: - 1. The union of reserved CPUs and isolated CPUs should include all online CPUs - 2. The isolated CPUs field should be the complementary to reserved CPUs field - type: string - reserved: - description: Reserved defines a set of CPUs that will not be used for any container workloads initiated by kubelet. - type: string - hugepages: - description: |- - HugePages defines a set of huge pages related parameters. - It is possible to set huge pages with multiple size values at the same time. - For example, hugepages can be set with 1G and 2M, both values will be set on the node by the performance-addon-operator. - It is important to notice that setting hugepages default size to 1G will remove all 2M related - folders from the node and it will be impossible to configure 2M hugepages under the node. - type: object - properties: - defaultHugepagesSize: - description: DefaultHugePagesSize defines huge pages default size under kernel boot parameters. - type: string - pages: - description: Pages defines huge pages that we want to allocate at boot time. - type: array - items: - description: HugePage defines the number of allocated huge pages of the specific size. - type: object - properties: - count: - description: Count defines amount of huge pages, maps to the 'hugepages' kernel boot parameter. - type: integer - format: int32 - node: - description: |- - Node defines the NUMA node where hugepages will be allocated, - if not specified, pages will be allocated equally between NUMA nodes - type: integer - format: int32 - size: - description: Size defines huge page size, maps to the 'hugepagesz' kernel boot parameter. - type: string - machineConfigLabel: - description: |- - MachineConfigLabel defines the label to add to the MachineConfigs the operator creates. It has to be - used in the MachineConfigSelector of the MachineConfigPool which targets this performance profile. - Defaults to "machineconfiguration.openshift.io/role=" - type: object - additionalProperties: - type: string - machineConfigPoolSelector: - description: |- - MachineConfigPoolSelector defines the MachineConfigPool label to use in the MachineConfigPoolSelector - of resources like KubeletConfigs created by the operator. - Defaults to "machineconfiguration.openshift.io/role=" - type: object - additionalProperties: - type: string - nodeSelector: - description: |- - NodeSelector defines the Node label to use in the NodeSelectors of resources like Tuned created by the operator. - It most likely should, but does not have to match the node label in the NodeSelector of the MachineConfigPool - which targets this performance profile. - type: object - additionalProperties: - type: string - numa: - description: NUMA defines options related to topology aware affinities - type: object - properties: - topologyPolicy: - description: |- - Name of the policy applied when TopologyManager is enabled - Operator defaults to "best-effort" - type: string - realTimeKernel: - description: RealTimeKernel defines a set of real time kernel related parameters. RT kernel won't be installed when not set. - type: object - properties: - enabled: - description: Enabled defines if the real time kernel packages should be installed. Defaults to "false" - type: boolean - status: - description: PerformanceProfileStatus defines the observed state of PerformanceProfile. - type: object - properties: - conditions: - description: Conditions represents the latest available observations of current state. - type: array - items: - description: |- - Condition represents the state of the operator's - reconciliation functionality. - type: object - required: - - status - - type - properties: - lastHeartbeatTime: - type: string - format: date-time - lastTransitionTime: - type: string - format: date-time - message: - type: string - reason: - type: string - status: - type: string - type: - description: ConditionType is the state of the operator's reconciliation functionality. - type: string - runtimeClass: - description: RuntimeClass contains the name of the RuntimeClass resource created by the operator. - type: string - tuned: - description: Tuned points to the Tuned custom resource object that contains the tuning values generated by this operator. - type: string - served: true - storage: false - subresources: - status: {} - - name: v2 - schema: - openAPIV3Schema: - description: PerformanceProfile is the Schema for the performanceprofiles API - type: object - 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: PerformanceProfileSpec defines the desired state of PerformanceProfile. - type: object - required: - - cpu - - nodeSelector - properties: - additionalKernelArgs: - description: Additional kernel arguments. - type: array - items: - type: string - cpu: - description: CPU defines a set of CPU related parameters. - type: object - required: - - isolated - - reserved - properties: - balanceIsolated: - description: |- - BalanceIsolated toggles whether or not the Isolated CPU set is eligible for load balancing work loads. - When this option is set to "false", the Isolated CPU set will be static, meaning workloads have to - explicitly assign each thread to a specific cpu in order to work across multiple CPUs. - Setting this to "true" allows workloads to be balanced across CPUs. - Setting this to "false" offers the most predictable performance for guaranteed workloads, but it - offloads the complexity of cpu load balancing to the application. - Defaults to "true" - type: boolean - isolated: - description: |- - Isolated defines a set of CPUs that will be used to give to application threads the most execution time possible, - which means removing as many extraneous tasks off a CPU as possible. - It is important to notice the CPU manager can choose any CPU to run the workload - except the reserved CPUs. In order to guarantee that your workload will run on the isolated CPU: - 1. The union of reserved CPUs and isolated CPUs should include all online CPUs - 2. The isolated CPUs field should be the complementary to reserved CPUs field - type: string - offlined: - description: Offline defines a set of CPUs that will be unused and set offline - type: string - reserved: - description: Reserved defines a set of CPUs that will not be used for any container workloads initiated by kubelet. - type: string - shared: - description: |- - Shared defines a set of CPUs that will be shared among guaranteed workloads - that needs additional cpus which are not exclusive, - alongside the isolated, exclusive resources that are being used already by those workloads. - type: string - globallyDisableIrqLoadBalancing: - description: |- - GloballyDisableIrqLoadBalancing toggles whether IRQ load balancing will be disabled for the Isolated CPU set. - When the option is set to "true" it disables IRQs load balancing for the Isolated CPU set. - Setting the option to "false" allows the IRQs to be balanced across all CPUs, however the IRQs load balancing - can be disabled per pod CPUs when using irq-load-balancing.crio.io/cpu-quota.crio.io annotations. - Defaults to "false" - type: boolean - hardwareTuning: - description: HardwareTuning defines a set of CPU frequencies for isolated and reserved cpus. - type: object - properties: - isolatedCpuFreq: - description: IsolatedCpuFreq defines a minimum frequency to be set across isolated cpus - type: integer - reservedCpuFreq: - description: ReservedCpuFreq defines a maximum frequency to be set across reserved cpus - type: integer - hugepages: - description: |- - HugePages defines a set of huge pages related parameters. - It is possible to set huge pages with multiple size values at the same time. - For example, hugepages can be set with 1G and 2M, both values will be set on the node by the Performance Profile Controller. - It is important to notice that setting hugepages default size to 1G will remove all 2M related - folders from the node and it will be impossible to configure 2M hugepages under the node. - type: object - properties: - defaultHugepagesSize: - description: DefaultHugePagesSize defines huge pages default size under kernel boot parameters. - type: string - pages: - description: Pages defines huge pages that we want to allocate at boot time. - type: array - items: - description: HugePage defines the number of allocated huge pages of the specific size. - type: object - properties: - count: - description: Count defines amount of huge pages, maps to the 'hugepages' kernel boot parameter. - type: integer - format: int32 - node: - description: |- - Node defines the NUMA node where hugepages will be allocated, - if not specified, pages will be allocated equally between NUMA nodes - type: integer - format: int32 - size: - description: Size defines huge page size, maps to the 'hugepagesz' kernel boot parameter. - type: string - kernelPageSize: - description: KernelPageSize defines the kernel page size. 4k is the default, 64k is only supported on aarch64 - type: string - default: 4k - machineConfigLabel: - description: |- - MachineConfigLabel defines the label to add to the MachineConfigs the operator creates. It has to be - used in the MachineConfigSelector of the MachineConfigPool which targets this performance profile. - Defaults to "machineconfiguration.openshift.io/role=" - type: object - additionalProperties: - type: string - machineConfigPoolSelector: - description: |- - MachineConfigPoolSelector defines the MachineConfigPool label to use in the MachineConfigPoolSelector - of resources like KubeletConfigs created by the operator. - Defaults to "machineconfiguration.openshift.io/role=" - type: object - additionalProperties: - type: string - net: - description: Net defines a set of network related features - type: object - properties: - devices: - description: |- - Devices contains a list of network device representations that will be - set with a netqueue count equal to CPU.Reserved . - If no devices are specified then the default is all devices. - type: array - items: - description: |- - Device defines a way to represent a network device in several options: - device name, vendor ID, model ID, PCI path and MAC address - type: object - properties: - deviceID: - description: Network device ID (model) represnted as a 16 bit hexmadecimal number. - type: string - interfaceName: - description: Network device name to be matched. It uses a syntax of shell-style wildcards which are either positive or negative. - type: string - vendorID: - description: Network device vendor ID represnted as a 16 bit Hexmadecimal number. - type: string - userLevelNetworking: - description: UserLevelNetworking when enabled - sets either all or specified network devices queue size to the amount of reserved CPUs. Defaults to "false". - type: boolean - nodeSelector: - description: |- - NodeSelector defines the Node label to use in the NodeSelectors of resources like Tuned created by the operator. - It most likely should, but does not have to match the node label in the NodeSelector of the MachineConfigPool - which targets this performance profile. - In the case when machineConfigLabels or machineConfigPoolSelector are not set, we are expecting a certain NodeSelector format - /: "" in order to be able to calculate the default values for the former mentioned fields. - type: object - additionalProperties: - type: string - numa: - description: NUMA defines options related to topology aware affinities - type: object - properties: - topologyPolicy: - description: |- - Name of the policy applied when TopologyManager is enabled - Operator defaults to "best-effort" - type: string - realTimeKernel: - description: RealTimeKernel defines a set of real time kernel related parameters. RT kernel won't be installed when not set. - type: object - properties: - enabled: - description: Enabled defines if the real time kernel packages should be installed. Defaults to "false" - type: boolean - workloadHints: - description: |- - WorkloadHints defines hints for different types of workloads. It will allow defining exact set of tuned and - kernel arguments that should be applied on top of the node. - type: object - properties: - highPowerConsumption: - description: |- - HighPowerConsumption defines if the node should be configured in high power consumption mode. - The flag will affect the power consumption but will improve the CPUs latency. Defaults to false. - type: boolean - mixedCpus: - description: |- - MixedCpus enables the mixed-cpu-node-plugin on the node. - Defaults to false. - type: boolean - perPodPowerManagement: - description: |- - PerPodPowerManagement defines if the node should be configured in per pod power management. - PerPodPowerManagement and HighPowerConsumption hints can not be enabled together. Defaults to false. - type: boolean - realTime: - description: RealTime defines if the node should be configured for the real time workload. Defaults to true. - type: boolean - default: true - status: - description: PerformanceProfileStatus defines the observed state of PerformanceProfile. - type: object - properties: - conditions: - description: Conditions represents the latest available observations of current state. - type: array - items: - description: |- - Condition represents the state of the operator's - reconciliation functionality. - type: object - required: - - status - - type - properties: - lastHeartbeatTime: - type: string - format: date-time - lastTransitionTime: - type: string - format: date-time - message: - type: string - reason: - type: string - status: - type: string - type: - description: ConditionType is the state of the operator's reconciliation functionality. - type: string - runtimeClass: - description: RuntimeClass contains the name of the RuntimeClass resource created by the operator. - type: string - tuned: - description: Tuned points to the Tuned custom resource object that contains the tuning values generated by this operator. - type: string - served: true - storage: true - subresources: - status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/test/crds/tuned/20-profile.crd.yaml b/test/crds/tuned/20-profile.crd.yaml deleted file mode 100644 index 8dbad67..0000000 --- a/test/crds/tuned/20-profile.crd.yaml +++ /dev/null @@ -1,153 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - capability.openshift.io/name: NodeTuning - include.release.openshift.io/hypershift: "true" - include.release.openshift.io/ibm-cloud-managed: "true" - include.release.openshift.io/self-managed-high-availability: "true" - include.release.openshift.io/single-node-developer: "true" - name: profiles.tuned.openshift.io -spec: - group: tuned.openshift.io - names: - kind: Profile - listKind: ProfileList - plural: profiles - singular: profile - preserveUnknownFields: false - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .spec.config.tunedProfile - name: Tuned - type: string - - jsonPath: .status.conditions[?(@.type=="Applied")].status - name: Applied - type: string - - jsonPath: .status.conditions[?(@.type=="Degraded")].status - name: Degraded - type: string - - jsonPath: .status.conditions[?(@.type=="Applied")].message - name: Message - type: string - - jsonPath: .metadata.creationTimestamp - name: Age - type: date - name: v1 - schema: - openAPIV3Schema: - description: Profile is a specification for a Profile resource. - type: object - 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: - type: object - required: - - config - properties: - config: - type: object - required: - - tunedProfile - properties: - debug: - description: option to debug TuneD daemon execution - type: boolean - providerName: - description: 'Name of the cloud provider as taken from the Node providerID: ://' - type: string - tunedConfig: - description: Global configuration for the TuneD daemon as defined in tuned-main.conf - type: object - properties: - reapply_sysctl: - description: 'turn reapply_sysctl functionality on/off for the TuneD daemon: true/false' - type: boolean - tunedProfile: - description: TuneD profile to apply - type: string - verbosity: - description: klog logging verbosity - type: integer - profile: - description: Tuned profiles. - type: array - items: - description: A Tuned profile. - type: object - required: - - data - - name - properties: - data: - description: Specification of the Tuned profile to be consumed by the Tuned daemon. - type: string - name: - description: Name of the Tuned profile to be used in the recommend section. - type: string - minLength: 1 - status: - description: |- - ProfileStatus is the status for a Profile resource; the status is for internal use only - and its fields may be changed/removed in the future. - type: object - required: - - tunedProfile - properties: - conditions: - description: conditions represents the state of the per-node Profile application - type: array - items: - description: StatusCondition represents a partial state of the per-node Profile application. - type: object - required: - - lastTransitionTime - - status - - type - properties: - lastTransitionTime: - description: lastTransitionTime is the time of the last update to the current status property. - type: string - format: date-time - message: - description: |- - message provides additional information about the current condition. - This is only to be consumed by humans. - type: string - reason: - description: reason is the CamelCase reason for the condition's current status. - type: string - status: - description: status of the condition, one of True, False, Unknown. - type: string - type: - description: type specifies the aspect reported by this condition. - type: string - observedGeneration: - description: If set, this represents the .metadata.generation that the conditions were set based upon. - type: integer - format: int64 - tunedProfile: - description: the current profile in use by the Tuned daemon - type: string - served: true - storage: true - subresources: - status: {} diff --git a/test/crds/tuned/20-tuned.crd.yaml b/test/crds/tuned/20-tuned.crd.yaml deleted file mode 100644 index 071bf90..0000000 --- a/test/crds/tuned/20-tuned.crd.yaml +++ /dev/null @@ -1,209 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - capability.openshift.io/name: NodeTuning - include.release.openshift.io/hypershift: "true" - include.release.openshift.io/ibm-cloud-managed: "true" - include.release.openshift.io/self-managed-high-availability: "true" - include.release.openshift.io/single-node-developer: "true" - name: tuneds.tuned.openshift.io -spec: - group: tuned.openshift.io - names: - kind: Tuned - listKind: TunedList - plural: tuneds - singular: tuned - preserveUnknownFields: false - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.conditions[?(@.type=="Valid")].status - name: Valid - type: string - - jsonPath: .metadata.creationTimestamp - name: Age - type: date - name: v1 - schema: - openAPIV3Schema: - description: |- - Tuned is a collection of rules that allows cluster-wide deployment - of node-level sysctls and more flexibility to add custom tuning - specified by user needs. These rules are translated and passed to all - containerized Tuned daemons running in the cluster in the format that - the daemons understand. The responsibility for applying the node-level - tuning then lies with the containerized Tuned daemons. More info: - https://github.com/openshift/cluster-node-tuning-operator - 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: |- - spec is the specification of the desired behavior of Tuned. More info: - https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status - properties: - managementState: - description: |- - managementState indicates whether the registry instance represented - by this config instance is under operator management or not. Valid - values are Force, Managed, Unmanaged, and Removed. - pattern: ^(Managed|Unmanaged|Force|Removed)$ - type: string - profile: - description: Tuned profiles. - items: - description: A Tuned profile. - properties: - data: - description: Specification of the Tuned profile to be consumed - by the Tuned daemon. - type: string - name: - description: Name of the Tuned profile to be used in the recommend - section. - minLength: 1 - type: string - required: - - data - - name - type: object - type: array - recommend: - description: Selection logic for all Tuned profiles. - items: - description: Selection logic for a single Tuned profile. - properties: - machineConfigLabels: - additionalProperties: - type: string - description: |- - MachineConfigLabels specifies the labels for a MachineConfig. The MachineConfig is created - automatically to apply additional host settings (e.g. kernel boot parameters) profile 'Profile' - needs and can only be applied by creating a MachineConfig. This involves finding all - MachineConfigPools with machineConfigSelector matching the MachineConfigLabels and setting the - profile 'Profile' on all nodes that match the MachineConfigPools' nodeSelectors. - type: object - match: - description: Rules governing application of a Tuned profile - connected by logical OR operator. - items: - description: Rules governing application of a Tuned profile. - properties: - label: - description: Node or Pod label name. - type: string - match: - description: Additional rules governing application of - the tuned profile connected by logical AND operator. - items: - type: object - x-kubernetes-preserve-unknown-fields: true - type: array - type: - description: 'Match type: [node/pod]. If omitted, "node" - is assumed.' - enum: - - node - - pod - type: string - value: - description: Node or Pod label value. If omitted, the - presence of label name is enough to match. - type: string - required: - - label - type: object - type: array - operand: - description: Optional operand configuration. - properties: - debug: - description: 'turn debugging on/off for the TuneD daemon: - true/false (default is false)' - type: boolean - tunedConfig: - description: Global configuration for the TuneD daemon as - defined in tuned-main.conf - properties: - reapply_sysctl: - description: 'turn reapply_sysctl functionality on/off - for the TuneD daemon: true/false' - type: boolean - type: object - verbosity: - description: klog logging verbosity - type: integer - type: object - priority: - description: Tuned profile priority. Highest priority is 0. - format: int64 - minimum: 0 - type: integer - profile: - description: Name of the Tuned profile to recommend. - minLength: 1 - type: string - required: - - priority - - profile - type: object - type: array - type: object - status: - description: TunedStatus is the status for a Tuned resource. - properties: - conditions: - description: conditions represents the state of the Tuned profile - items: - description: StatusCondition represents a partial state of the per-node - Profile application. - properties: - lastTransitionTime: - description: lastTransitionTime is the time of the last update - to the current status property. - format: date-time - type: string - message: - description: |- - message provides additional information about the current condition. - This is only to be consumed by humans. - type: string - reason: - description: reason is the CamelCase reason for the condition's - current status. - type: string - status: - description: status of the condition, one of True, False, Unknown. - type: string - type: - description: type specifies the aspect reported by this condition. - type: string - required: - - lastTransitionTime - - status - - type - type: object - type: array - type: object - type: object - served: true - storage: true - subresources: - status: {}