From f6a790218992f2de6ed413f146359969c06e8f93 Mon Sep 17 00:00:00 2001 From: Kevin Quinn Date: Mon, 19 May 2025 12:11:24 +0100 Subject: [PATCH] TELCODOCS-2247-core updating modules from gitlab 419 core --- .../openshift-telco-core-rds-networking.png | Bin 83846 -> 108594 bytes ...cluster-worker-latency-profiles-about.adoc | 2 - ...bout-the-telco-core-cluster-use-model.adoc | 12 +- ...lco-core-additional-storage-solutions.adoc | 1 + modules/telco-core-agent-based-installer.adoc | 22 ++-- modules/telco-core-application-workloads.adoc | 7 +- ...-use-model-engineering-considerations.adoc | 16 +-- .../telco-core-cluster-network-operator.adoc | 2 + modules/telco-core-common-baseline-model.adoc | 3 +- ...u-partitioning-and-performance-tuning.adoc | 10 +- ...telco-core-crs-cluster-infrastructure.adoc | 25 ++++ modules/telco-core-crs-networking.adoc | 3 +- .../telco-core-crs-node-configuration.adoc | 4 + modules/telco-core-crs-resource-tuning.adoc | 2 +- modules/telco-core-crs-scheduling.adoc | 4 + modules/telco-core-crs-storage.adoc | 3 +- modules/telco-core-deployment-planning.adoc | 43 +++++++ modules/telco-core-deployment.adoc | 8 ++ .../telco-core-disconnected-environment.adoc | 3 +- ...-core-gitops-operator-and-ztp-plugins.adoc | 20 ++-- ...irmware-and-boot-loader-configuration.adoc | 3 +- modules/telco-core-installation.adoc | 8 ++ modules/telco-core-load-balancer.adoc | 6 +- modules/telco-core-logging.adoc | 4 +- modules/telco-core-monitoring.adoc | 14 ++- modules/telco-core-networking.adoc | 19 +-- modules/telco-core-nmstate-operator.adoc | 1 + modules/telco-core-node-configuration.adoc | 4 +- .../telco-core-openshift-data-foundation.adoc | 25 +++- modules/telco-core-power-management.adoc | 3 +- modules/telco-core-rds-container.adoc | 108 +++++++++++++----- ...ds-product-version-use-model-overview.adoc | 6 +- ...e-red-hat-advanced-cluster-management.adoc | 12 +- ...ion-for-product-title-product-version.adoc | 11 ++ modules/telco-core-scalability.adoc | 6 +- modules/telco-core-scheduling.adoc | 19 +-- modules/telco-core-security.adoc | 31 +++-- modules/telco-core-service-mesh.adoc | 1 + modules/telco-core-signaling-workloads.adoc | 2 +- modules/telco-core-software-stack.adoc | 25 ++-- modules/telco-core-sr-iov.adoc | 11 +- modules/telco-core-storage.adoc | 4 +- ...core-topology-aware-lifecycle-manager.adoc | 7 +- modules/using-cluster-compare-telco-core.adoc | 39 ++++--- .../telco-core-rds.adoc | 17 ++- 45 files changed, 390 insertions(+), 186 deletions(-) create mode 100644 modules/telco-core-crs-cluster-infrastructure.adoc create mode 100644 modules/telco-core-deployment-planning.adoc create mode 100644 modules/telco-core-deployment.adoc create mode 100644 modules/telco-core-installation.adoc create mode 100644 modules/telco-core-reference-design-specification-for-product-title-product-version.adoc diff --git a/images/openshift-telco-core-rds-networking.png b/images/openshift-telco-core-rds-networking.png index c01e38f34898832e1545c03b3cf11c41781dd019..8c8124a3a0c4e61cfa7e2e767fd11be3cb2720d6 100644 GIT binary patch literal 108594 zcmeFZWn5JK7d<+Fii&_mNGc#IDM&YpAl+RL-QA5riGY&Q-6i0NG>S-fH%d21=iEKU z?|<*R`|7^Be0&~s7|uEKJ^Q=&T5GR;g5+exa4(ZwMj#Nl;?G1B5Qy`e2*kOo7camo zg_qog;oBwKXX*|J1bG1ZKa8-sEhBjGmg7@3M@1WBM;ASNBZP~K3zM0(g@b{ftr3%r zy-EB!9|;0+8zC+ttmK-oI^p7~WOR16<#9xl5fCo-^mf|qKrg4K@;6If_TH2)L1{IL zmK3h#rvz5LE-F~RoR6t6h?$mhKjp=31;ZuAS8=bx-#!jETi6dUHhh0+sh!5HuBdHA zzmso)J6VsDrlQM1Agtx#l_zjnzrSv$y>HO|_YcHHQD6MO{}4JyRgeAm@3%3pO=JE2 z`_<A>}k*8%2(O(0eHwLXzoydgNEd_rIg$?jn4?zPe;z zH6h$&Q!z()_wHR~*QA012I*u0{>9G|)lbUNhvagyqPzb_1lwij=P|Nk0)0(Q%l1A>TQSzsI@g{MdcEN{fjAet>eQ&^kIh-e5QD&A8kp zPqIVF8>UB$RO9~pUc`@UpQJ4(tjm+!mmd`B*3~|qp|4b+{C7o1w=FShX>R$a@~(fT zPRW!~zqtADEV$xoSf0g0`TQPxi^V>t78M4U{+~ZPouov)#24ruuW$(C4MqGrX7}4y z{PjZ{g^m=i(-=m^#?jp0EsI7Jwzs#P7Q0g~BR7KBbc$62@W>Uct(oEvF#lYN5Wf+w z3&s(DJu?&2Apib&dY8a4gQ1%41i=9;cpSGwmT_l7?m)h3{)Z3UC>?wIQl`(-n7CwI za&UbGy-4(Z%vH=b?@4<)T4oaFDUci<5#iMHlqlB+b;h$l?vSsHTA!$5cl%}Nb#}NQ zAuAg*v=T+5UZ|3pnVBn_EI`8N`T>3=---P1+6WmwyoIcORpqoYct^EDvrxs2FUi+{ zBVIaPG^7_kH!+)cUzT*`Vp{NvP_d^^A5c@zd}jCD8!>VJ8FWucPVRP08-e{mWuyMP z7DI*Oy|vvzO`BZF7$$-vPi}5*5^nnp`7R&zQrsFMVMF^-><;+I+Qm#pQ{`!r_rZ`E%%yVu6(1_Ze>N)za*q% zSu@8EIjzTYaG0y*biEHVJq2{-Ty>9PVIgZ#XU8d5;5bU!K8c*%Qk;3ydFJxAj72V�CMPx+84c5vJ_VmzjE;NmsZ)Z3F$>kS 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�VJHhTPXz59k`>fV!)2U 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 diff --git a/modules/nodes-cluster-worker-latency-profiles-about.adoc b/modules/nodes-cluster-worker-latency-profiles-about.adoc index 6cc2b0ec91..6c06865a52 100644 --- a/modules/nodes-cluster-worker-latency-profiles-about.adoc +++ b/modules/nodes-cluster-worker-latency-profiles-about.adoc @@ -15,12 +15,10 @@ Setting these parameters manually is not supported. Incorrect parameter settings All worker latency profiles configure the following parameters: --- node-status-update-frequency:: Specifies how often the kubelet posts node status to the API server. node-monitor-grace-period:: Specifies the amount of time in seconds that the Kubernetes Controller Manager waits for an update from a kubelet before marking the node unhealthy and adding the `node.kubernetes.io/not-ready` or `node.kubernetes.io/unreachable` taint to the node. default-not-ready-toleration-seconds:: Specifies the amount of time in seconds after marking a node unhealthy that the Kube API Server Operator waits before evicting pods from that node. default-unreachable-toleration-seconds:: Specifies the amount of time in seconds after marking a node unreachable that the Kube API Server Operator waits before evicting pods from that node. --- The following Operators monitor the changes to the worker latency profiles and respond accordingly: diff --git a/modules/telco-core-about-the-telco-core-cluster-use-model.adoc b/modules/telco-core-about-the-telco-core-cluster-use-model.adoc index aeaa5b37b1..0164f253dd 100644 --- a/modules/telco-core-about-the-telco-core-cluster-use-model.adoc +++ b/modules/telco-core-about-the-telco-core-cluster-use-model.adoc @@ -7,17 +7,19 @@ = About the telco core cluster use model The telco core cluster use model is designed for clusters that run on commodity hardware. -Telco core clusters support large scale telco applications including control plane functions such as signaling, aggregation, and session border controller (SBC); and centralized data plane functions such as 5G user plane functions (UPF). +Telco core clusters support large scale telco applications including control plane functions like signaling, aggregation, session border controller (SBC), and centralized data plane functions such as 5G user plane functions (UPF). Telco core cluster functions require scalability, complex networking support, resilient software-defined storage, and support performance requirements that are less stringent and constrained than far-edge RAN deployments. -.Telco core RDS cluster service-based architecture and networking topology -image::openshift-5g-core-cluster-architecture-networking.png[5G core cluster showing a service-based architecture with overlaid networking topology] - Networking requirements for telco core functions vary widely across a range of networking features and performance points. IPv6 is a requirement and dual-stack is common. Some functions need maximum throughput and transaction rate and require support for user-plane DPDK networking. Other functions use more typical cloud-native patterns and can rely on OVN-Kubernetes, kernel networking, and load balancing. -Telco core clusters are configured as standard with three control plane and two or more worker nodes configured with the stock (non-RT) kernel. +Telco core clusters are configured as standard with three control plane and one or more worker nodes configured with the stock (non-RT) kernel. In support of workloads with varying networking and performance requirements, you can segment worker nodes by using `MachineConfigPool` custom resources (CR), for example, for non-user data plane or high-throughput use cases. In support of required telco operational features, core clusters have a standard set of Day 2 OLM-managed Operators installed. + + +.Telco core RDS cluster service-based architecture and networking topology +image::openshift-5g-core-cluster-architecture-networking.png[5G core cluster showing a service-based architecture with overlaid networking topology] + diff --git a/modules/telco-core-additional-storage-solutions.adoc b/modules/telco-core-additional-storage-solutions.adoc index e60e982315..2cd3aa02a0 100644 --- a/modules/telco-core-additional-storage-solutions.adoc +++ b/modules/telco-core-additional-storage-solutions.adoc @@ -9,3 +9,4 @@ You can use other storage solutions to provide persistent storage for telco core The configuration and integration of these solutions is outside the scope of the reference design specifications (RDS). Integration of the storage solution into the telco core cluster must include proper sizing and performance analysis to ensure the storage meets overall performance and resource usage requirements. + diff --git a/modules/telco-core-agent-based-installer.adoc b/modules/telco-core-agent-based-installer.adoc index 3ddf02fe6e..633a954f36 100644 --- a/modules/telco-core-agent-based-installer.adoc +++ b/modules/telco-core-agent-based-installer.adoc @@ -7,27 +7,27 @@ = Agent-based Installer New in this release:: -* No reference design updates in this release +* No reference design updates in this release. Description:: + -- -Telco core clusters can be installed by using the Agent-based Installer. -This method allows you to install OpenShift on bare-metal servers without requiring additional servers or VMs for managing the installation. +Telco core clusters can be installed using the Agent-based Installer. +This method allows you to install {product-title} on bare-metal servers without requiring additional servers or VMs for managing the installation. The Agent-based Installer can be run on any system (for example, from a laptop) to generate an ISO installation image. The ISO is used as the installation media for the cluster supervisor nodes. -Installation progress can be monitored using the ABI tool from any system with network connectivity to the supervisor node's API interfaces. +Progress can be monitored using the Agent-based Installer from any system with network connectivity to the supervisor node's API interfaces. -ABI supports the following: +Agent-based Installer supports the following: -* Installation from declarative CRs -* Installation in disconnected environments -* Installation with no additional supporting install or bastion servers required to complete the installation +* Installation from declarative CRs. +* Installation in disconnected environments. +* Installation without the use of additional servers to support installation, for example, the bastion node. -- Limits and requirements:: -* Disconnected installation requires a registry that is reachable from the installed host, with all required content mirrored in that registry. +* Disconnected installation requires a registry with all required content mirrored and reachable from the installed host. Engineering considerations:: -* Networking configuration should be applied as NMState configuration during installation. -Day 2 networking configuration using the NMState Operator is not supported. +* Networking configuration should be applied as NMState configuration during installation. Day 2 networking configuration using the NMState Operator is not supported. + diff --git a/modules/telco-core-application-workloads.adoc b/modules/telco-core-application-workloads.adoc index c2cd737718..a2bbfd301a 100644 --- a/modules/telco-core-application-workloads.adoc +++ b/modules/telco-core-application-workloads.adoc @@ -20,8 +20,7 @@ Engineering considerations:: -- Use the following information to plan telco core workloads and cluster resources: -include::snippets/nodes-cgroup-vi-removed.adoc[] - +* As of {product-title} 4.19, cgroup v1 is no longer supported and has been removed. All workloads must now be compatible with cgroup v2. For more information, see link:https://www.redhat.com/en/blog/rhel-9-changes-context-red-hat-openshift-workloads[Red Hat Enterprise Linux 9 changes in the context of Red Hat OpenShift workloads]. * CNF applications should conform to the latest version of https://redhat-best-practices-for-k8s.github.io/guide/[Red Hat Best Practices for Kubernetes]. * Use a mix of best-effort and burstable QoS pods as required by your applications. ** Use guaranteed QoS pods with proper configuration of reserved or isolated CPUs in the `PerformanceProfile` CR that configures the node. @@ -34,6 +33,6 @@ Use other probe implementations, for example, `httpGet` or `tcpSocket`. ** When you need to use exec probes, limit the exec probe frequency and quantity. The maximum number of exec probes must be kept below 10, and the frequency must not be set to less than 10 seconds. ** You can use startup probes, because they do not use significant resources at steady-state operation. -This limitation on exec probes applies primarily to liveness and readiness probes. +The limitation on exec probes applies primarily to liveness and readiness probes. Exec probes cause much higher CPU usage on management cores compared to other probe types because they require process forking. --- +-- \ No newline at end of file diff --git a/modules/telco-core-cluster-common-use-model-engineering-considerations.adoc b/modules/telco-core-cluster-common-use-model-engineering-considerations.adoc index 28a4fe93d8..02b8c1e533 100644 --- a/modules/telco-core-cluster-common-use-model-engineering-considerations.adoc +++ b/modules/telco-core-cluster-common-use-model-engineering-considerations.adoc @@ -8,16 +8,11 @@ * Cluster workloads are detailed in "Application workloads". * Worker nodes should run on either of the following CPUs: -** Intel 3rd Generation Xeon (IceLake) CPUs or better when supported by {product-title}, or CPUs with the silicon security bug (Spectre and similar) mitigations turned off. -Skylake and older CPUs can experience 40% transaction performance drops when Spectre and similar mitigations are enabled. -** AMD EPYC Zen 4 CPUs (Genoa, Bergamo, or newer) or better when supported by {product-title}. -+ -[NOTE] -==== -Currently, per-pod power management is not available for AMD CPUs. -==== +** Intel 3rd Generation Xeon (IceLake) CPUs or newer when supported by {product-title}, or CPUs with the silicon security bug (Spectre and similar) mitigations turned off. +Skylake and older CPUs can experience 40% transaction performance drops when Spectre and similar mitigations are enabled. When Skylake and older CPUs change power states, this can cause latency. +** AMD EPYC Zen 4 CPUs (Genoa, Bergamo). ** IRQ balancing is enabled on worker nodes. -The `PerformanceProfile` CR sets `globallyDisableIrqLoadBalancing` to false. +The `PerformanceProfile` CR sets the `globallyDisableIrqLoadBalancing` parameter to a value of `false`. Guaranteed QoS pods are annotated to ensure isolation as described in "CPU partitioning and performance tuning". * All cluster nodes should have the following features: @@ -37,7 +32,7 @@ See "CPU partitioning and performance tuning" for additional considerations. * CPU requirements for {product-title} depend on the configured feature set and application workload characteristics. For a cluster configured according to the reference configuration running a simulated workload of 3000 pods as created by the kube-burner node-density test, the following CPU requirements are validated: ** The minimum number of reserved CPUs for control plane and worker nodes is 2 CPUs (4 hyper-threads) per NUMA node. -** The NICs used for non-DPDK network traffic should be configured to use at least 16 RX/TX queues. +** The NICs used for non-DPDK network traffic should be configured to use at most 32 RX/TX queues. ** Nodes with large numbers of pods or other resources might require additional reserved CPUs. The remaining CPUs are available for user workloads. @@ -46,3 +41,4 @@ The remaining CPUs are available for user workloads. ==== Variations in {product-title} configuration, workload size, and workload characteristics require additional analysis to determine the effect on the number of required CPUs for the OpenShift platform. ==== + diff --git a/modules/telco-core-cluster-network-operator.adoc b/modules/telco-core-cluster-network-operator.adoc index e03ebc26a5..c99d0460a6 100644 --- a/modules/telco-core-cluster-network-operator.adoc +++ b/modules/telco-core-cluster-network-operator.adoc @@ -38,7 +38,9 @@ Review the source code for more details: * Clusters with single-stack IP configuration are not validated. * The `reachabilityTotalTimeoutSeconds` parameter in the `Network` CR configures the `EgressIP` node reachability check total timeout in seconds. The recommended value is `1` second. +* Pod-level SR-IOV bonding mode must be set to `active-backup` and a value in `miimon` must be set (`100` is recommended). Engineering considerations:: * Pod egress traffic is handled by kernel routing table using the `routingViaHost` option. Appropriate static routes must be configured in the host. + diff --git a/modules/telco-core-common-baseline-model.adoc b/modules/telco-core-common-baseline-model.adoc index d5cc07d39a..21480d1d69 100644 --- a/modules/telco-core-common-baseline-model.adoc +++ b/modules/telco-core-common-baseline-model.adoc @@ -17,7 +17,7 @@ Telco core clusters conform to the following requirements: * Multiple machine config pools Storage:: -Telco core use cases require persistent storage as provided by {rh-storage-first}. +Telco core use cases require persistent storage as provided by {rh-storage}. Networking:: Telco core cluster networking conforms to the following requirements: @@ -45,3 +45,4 @@ Service Mesh:: Telco CNFs can use Service Mesh. All telco core clusters require a Service Mesh implementation. The choice of implementation and configuration is outside the scope of this specification. + diff --git a/modules/telco-core-cpu-partitioning-and-performance-tuning.adoc b/modules/telco-core-cpu-partitioning-and-performance-tuning.adoc index 08453ddfad..b9eda4b6a7 100644 --- a/modules/telco-core-cpu-partitioning-and-performance-tuning.adoc +++ b/modules/telco-core-cpu-partitioning-and-performance-tuning.adoc @@ -7,7 +7,7 @@ = CPU partitioning and performance tuning New in this release:: -* No reference design updates in this release +* No reference design updates in this release. Description:: CPU partitioning improves performance and reduces latency by separating sensitive workloads from general-purpose tasks, interrupts, and driver work queues. @@ -24,10 +24,8 @@ Limits and requirements:: For more information, see "Creating a performance profile". Engineering considerations:: - -include::snippets/nodes-cgroup-vi-removed.adoc[] - -* The minimum reserved capacity (`systemReserved`) required can be found by following the guidance in the link:https://access.redhat.com/solutions/5843241[Which amount of CPU and memory are recommended to reserve for the system in OpenShift 4 nodes?] Knowledgebase article. +* As of {product-title} 4.19, `cgroup v1` is no longer supported and has been removed. All workloads must now be compatible with `cgroup v2`. For more information, see link:https://www.redhat.com/en/blog/rhel-9-changes-context-red-hat-openshift-workloads[Red Hat Enterprise Linux 9 changes in the context of Red Hat OpenShift workloads](Red Hat Knowledgebase). +* The minimum reserved capacity (`systemReserved`) required can be found by following the guidance in the Red Hat Knowledgebase solution link:https://access.redhat.com/solutions/5843241[Which amount of CPU and memory are recommended to reserve for the system in OCP 4 nodes?] * The actual required reserved CPU capacity depends on the cluster configuration and workload attributes. * The reserved CPU value must be rounded up to a full core (2 hyper-threads) alignment. * Changes to CPU partitioning cause the nodes contained in the relevant machine config pool to be drained and rebooted. @@ -44,8 +42,10 @@ You do not need to reserve an additional CPU for handling high network throughpu * If workloads running on the cluster use kernel level networking, the RX/TX queue count for the participating NICs should be set to 16 or 32 queues if the hardware permits it. Be aware of the default queue count. With no configuration, the default queue count is one RX/TX queue per online CPU; which can result in too many interrupts being allocated. +* The irdma kernel module may result in the allocation of too many interrupt vectors on systems with high core counts. To prevent this condition the reference configuration excludes this kernel module from loading through a kernel commandline argument in the `PerformanceProfile`. Typically core workloads do not require this kernel module. + [NOTE] ==== Some drivers do not deallocate the interrupts even after reducing the queue count. ==== + diff --git a/modules/telco-core-crs-cluster-infrastructure.adoc b/modules/telco-core-crs-cluster-infrastructure.adoc new file mode 100644 index 0000000000..2803307991 --- /dev/null +++ b/modules/telco-core-crs-cluster-infrastructure.adoc @@ -0,0 +1,25 @@ +// Module included in the following assemblies: +// +// * scalability_and_performance/telco_core_ref_design_specs/telco-core-rds.adoc + +:_mod-docs-content-type: REFERENCE +[id="cluster-infrastructure-crs_{context}"] += Cluster infrastructure reference CRs + +.Cluster infrastructure CRs +[cols="4*", options="header", format=csv] +|==== +Component,Reference CR,Description,Optional +Cluster logging,`ClusterLogForwarder.yaml`,Configures a log forwarding instance with the specified service account and verifies that the configuration is valid.,Yes +Cluster logging,`ClusterLogNS.yaml`,Configures the cluster logging namespace.,Yes +Cluster logging,`ClusterLogOperGroup.yaml`,"Creates the Operator group in the openshift-logging namespace, allowing the Cluster Logging Operator to watch and manage resources.",Yes +Cluster logging,`ClusterLogServiceAccount.yaml`,Configures the cluster logging service account.,Yes +Cluster logging,`ClusterLogServiceAccountAuditBinding.yaml`,Grants the collect-audit-logs cluster role to the logs collector service account.,Yes +Cluster logging,`ClusterLogServiceAccountInfrastructureBinding.yaml`,Allows the collector service account to collect logs from infrastructure resources.,Yes +Cluster logging,`ClusterLogSubscription.yaml`,Creates a subscription resource for the Cluster Logging Operator with manual approval for install plans.,Yes +Disconnected configuration,`catalog-source.yaml`,Defines a disconnected Red Hat Operators catalog.,No +Disconnected configuration,`idms.yaml`,Defines a list of mirrored repository digests for the disconnected registry.,No +Disconnected configuration,`operator-hub.yaml`,Defines an OperatorHub configuration which disables all default sources.,No +Monitoring and observability,`monitoring-config-cm.yaml`,Configuring storage and retention for Prometheus and Alertmanager.,Yes +Power management,`PerformanceProfile.yaml`,"Defines a performance profile resource, specifying CPU isolation, hugepages configuration, and workload hints for performance optimization on selected nodes.",No +|==== diff --git a/modules/telco-core-crs-networking.adoc b/modules/telco-core-crs-networking.adoc index c6bc9e3e5d..f0c3d18dae 100644 --- a/modules/telco-core-crs-networking.adoc +++ b/modules/telco-core-crs-networking.adoc @@ -2,6 +2,7 @@ // // * scalability_and_performance/telco_core_ref_design_specs/telco-core-rds.adoc + :_mod-docs-content-type: REFERENCE [id="networking-crs_{context}"] = Networking reference CRs @@ -20,7 +21,7 @@ Load Balancer,`community.yaml`,"Defines a MetalLB community, which groups one or Load Balancer,`metallb.yaml`,Defines the MetalLB resource in the cluster.,No Load Balancer,`metallbNS.yaml`,Defines the metallb-system namespace in the cluster.,No Load Balancer,`metallbOperGroup.yaml`,Defines the Operator group for the MetalLB Operator.,No -Load Balancer,`metallbSubscription.yaml`,Creates a subscription resource for the metallb Operator with manual approval for install plans.,No +Load Balancer,`metallbSubscription.yaml`,Creates a subscription resource for the MetalLB Operator with manual approval for install plans.,No Multus - Tap CNI for rootless DPDK pods,`mc_rootless_pods_selinux.yaml`,Configures a MachineConfig resource which sets an SELinux boolean for the tap CNI plugin on worker nodes.,Yes NMState Operator,`NMState.yaml`,Defines an NMState resource that is used by the NMState Operator to manage node network configurations.,No NMState Operator,`NMStateNS.yaml`,Creates the NMState Operator namespace.,No diff --git a/modules/telco-core-crs-node-configuration.adoc b/modules/telco-core-crs-node-configuration.adoc index c104a9df98..c3a0fee4fa 100644 --- a/modules/telco-core-crs-node-configuration.adoc +++ b/modules/telco-core-crs-node-configuration.adoc @@ -2,6 +2,10 @@ // // * scalability_and_performance/telco_core_ref_design_specs/telco-core-rds.adoc +// Module included in the following assemblies: +// +// * + :_mod-docs-content-type: REFERENCE [id="node-configuration-crs_{context}"] = Node configuration reference CRs diff --git a/modules/telco-core-crs-resource-tuning.adoc b/modules/telco-core-crs-resource-tuning.adoc index 0131759f5c..7e3b030e7f 100644 --- a/modules/telco-core-crs-resource-tuning.adoc +++ b/modules/telco-core-crs-resource-tuning.adoc @@ -10,5 +10,5 @@ [cols="4*", options="header", format=csv] |==== Component,Reference CR,Description,Optional -System reserved capacity,`control-plane-system-reserved.yaml`,"Optional. Configures kubelet, enabling auto-sizing reserved resources for the control plane node pool.",No +System reserved capacity,`control-plane-system-reserved.yaml`,"Optional. Configures kubelet, enabling auto-sizing reserved resources for the control plane node pool.",Yes |==== diff --git a/modules/telco-core-crs-scheduling.adoc b/modules/telco-core-crs-scheduling.adoc index 2793905bad..eb089bb28a 100644 --- a/modules/telco-core-crs-scheduling.adoc +++ b/modules/telco-core-crs-scheduling.adoc @@ -2,6 +2,10 @@ // // * scalability_and_performance/telco_core_ref_design_specs/telco-core-rds.adoc +// Module included in the following assemblies: +// +// * + :_mod-docs-content-type: REFERENCE [id="scheduling-crs_{context}"] = Scheduling reference CRs diff --git a/modules/telco-core-crs-storage.adoc b/modules/telco-core-crs-storage.adoc index 7ae3f05311..41cb4f046d 100644 --- a/modules/telco-core-crs-storage.adoc +++ b/modules/telco-core-crs-storage.adoc @@ -13,6 +13,5 @@ Component,Reference CR,Description,Optional External ODF configuration,`01-rook-ceph-external-cluster-details.secret.yaml`,Defines a Secret resource containing base64-encoded configuration data for an external Ceph cluster in the openshift-storage namespace.,No External ODF configuration,`02-ocs-external-storagecluster.yaml`,Defines an OpenShift Container Storage (OCS) storage resource which configures the cluster to use an external storage back end.,No External ODF configuration,`odfNS.yaml`,Creates the monitored openshift-storage namespace for the OpenShift Data Foundation Operator.,No -External ODF configuration,`odfOperGroup.yaml`,"Creates the Operator group in the openshift-storage namespace, allowing the OpenShift Data Foundation Operator to watch and manage resources.",No -External ODF configuration,`odfSubscription.yaml`,"Creates the subscription for the OpenShift Data Foundation Operator in the openshift-storage namespace.",No +External ODF configuration,`odfOperGroup.yaml`,"Creates the Operator group in the openshift-storage namespace, allowing the {rh-storage} Operator to watch and manage resources.",No |==== diff --git a/modules/telco-core-deployment-planning.adoc b/modules/telco-core-deployment-planning.adoc new file mode 100644 index 0000000000..e7c196f4ca --- /dev/null +++ b/modules/telco-core-deployment-planning.adoc @@ -0,0 +1,43 @@ +// Module included in the following assemblies: +// +// * scalability_and_performance/telco_core_ref_design_specs/telco-core-rds.adoc + +:_mod-docs-content-type: REFERENCE +[id="telco-core-deployment-planning_{context}"] += Deployment planning + +*Worker nodes and machine config pools* + +`MachineConfigPools` (MCPs) custom resource (CR) enable the subdivision of worker nodes in telco core clusters into different node groups based on customer planning parameters. +Careful deployment planning using MCPs is crucial to minimize deployment and upgrade time and, more importantly, to minimize interruption of telco-grade services during cluster upgrades. + +*Description* + +Telco core clusters can use MCPs to split worker nodes into additional separate roles, for example, due to different hardware profiles. This allows custom tuning for each role and also plays a critical function in speeding up a telco core cluster deployment or upgrade. More importantly, multiple MCPs allow you to properly plan cluster upgrades across one or many maintenance windows. This is crucial because telco-grade services may otherwise be affected if careful planning is not considered. + +During cluster upgrades, you can pause MCPs while you upgrade the control plane. See "Performing a canary rollout update" for more information. This ensures that worker nodes are not rebooted and running workloads remain unaffected until the MCP is unpaused. + +Using careful MCP planning, you can control the timing and order of which set of nodes are upgraded at any time. For more information on how to use MCPs to plan telco upgrades, see "Applying MachineConfigPool labels to nodes before the update". + +Before beginning the initial deployment, keep the following engineering considerations in mind regarding MCPs: + +When using `PerformanceProfile` definitions, remember that each MCP must be linked to exactly one `PerformanceProfile` definition or tuned profile definition. +Consequently, even if the desired configuration is identical for multiple MCPs, each MCP still requires its own dedicated `PerformanceProfile` definition. + +Plan your MCP labeling with an appropriate strategy to split your worker nodes depending on considerations such as: + +* The worker node type: identifying a group of nodes with equivalent hardware profile, for example, workers for control plane Network Functions (NFs) and workers for user data plane NFs. +* The number of worker nodes per worker node type. +* The minimum number of MCPs required for an equivalent hardware profile is 1, but could be larger for larger clusters. + For example, you may design for more MCPs per hardware profile to support a more granular upgrade where a smaller percentage of the cluster capacity is affected with each step. +* The strategy for performing updates on nodes within an MCP is shaped by upgrade requirements and the chosen `maxUnavailable` value: +** Number of maintenance windows allowed. +** Duration of a maintenance window. +** Total number of worker nodes. +** Desired `maxUnavailable` (number of nodes updated concurrently) for the MCP. +* CNF requirements for worker nodes, in terms of: +** Minimum availability per Pod required during an upgrade, configured with a pod disruption budget (PDB). PDBs are crucial to maintain telco service level Agreements (SLAs) during upgrades. For more information about PDB, see "Understanding how to use pod disruption budgets to specify the number of pods that must be up". +** Minimum true high availability required per Pod, such that each replica runs on separate hardware. +** Pod affinity and anti-affinity link: For more information about how to use pod affinity and anti-affinity, see "Placing pods relative to other pods using affinity and anti-affinity rules". +* Duration and frequency of upgrade maintenance windows during which telco-grade services may be affected. + diff --git a/modules/telco-core-deployment.adoc b/modules/telco-core-deployment.adoc new file mode 100644 index 0000000000..999724c0c7 --- /dev/null +++ b/modules/telco-core-deployment.adoc @@ -0,0 +1,8 @@ +// Module included in the following assemblies: +// +// * scalability_and_performance/telco_core_ref_design_specs/telco-core-rds.adoc + +:_mod-docs-content-type: REFERENCE +[id="telco-core-deployment_{context}"] += Deployment + diff --git a/modules/telco-core-disconnected-environment.adoc b/modules/telco-core-disconnected-environment.adoc index 6f4a7e3c81..b362bee849 100644 --- a/modules/telco-core-disconnected-environment.adoc +++ b/modules/telco-core-disconnected-environment.adoc @@ -7,7 +7,7 @@ = Disconnected environment New in this release:: -* No reference design updates in this release +* No reference design updates in this release. Descrption:: Telco core clusters are expected to be installed in networks without direct access to the internet. @@ -24,3 +24,4 @@ Do not reuse the default catalog names. Engineering considerations:: * A valid time source must be configured as part of cluster installation + diff --git a/modules/telco-core-gitops-operator-and-ztp-plugins.adoc b/modules/telco-core-gitops-operator-and-ztp-plugins.adoc index 2a4e7ff4d9..fdfffd7d7b 100644 --- a/modules/telco-core-gitops-operator-and-ztp-plugins.adoc +++ b/modules/telco-core-gitops-operator-and-ztp-plugins.adoc @@ -4,10 +4,10 @@ :_mod-docs-content-type: REFERENCE [id="telco-core-gitops-operator-and-ztp-plugins_{context}"] -= GitOps Operator and GitOps ZTP plugins += GitOps Operator and ZTP plugins New in this release:: -* No reference design updates in this release +* No reference design updates in this release. Description:: + @@ -21,19 +21,20 @@ The SiteConfig Operator provides improved support for generation of `Installatio [IMPORTANT] ==== -Where possible, use `ClusterInstance` CRs for cluster installation instead of the `SiteConfig` with {ztp} plugin method. +Using `ClusterInstance` CRs for cluster installation is preferred over the `SiteConfig` custom resource with ZTP plugin method. ==== You should structure the Git repository according to release version, with all necessary artifacts (`SiteConfig`, `ClusterInstance`, `PolicyGenerator`, and `PolicyGenTemplate`, and supporting reference CRs) included. -This enables deploying and managing multiple versions of the OpenShift platform and configuration versions to clusters simultaneously and through upgrades. +This enables deploying and managing multiple versions of the {product-title} and configuration versions to clusters simultaneously and through upgrades. The recommended Git structure keeps reference CRs in a directory separate from customer or partner provided content. This means that you can import reference updates by simply overwriting existing content. -Customer or partner-supplied CRs can be provided in a parallel directory to the reference CRs for easy inclusion in the generated configuration policies. +Customer or partner supplied CRs can be provided in a parallel directory to the reference CRs for easy inclusion in the generated configuration policies. -- Limits and requirements:: -* Each ArgoCD application supports up to 300 nodes. +// Scale results ACM-17868 +* Each ArgoCD application supports up to 800 nodes. Multiple ArgoCD applications can be used to achieve the maximum number of clusters supported by a single hub cluster. * The `SiteConfig` CR must use the `extraManifests.searchPaths` field to reference the reference manifests. + @@ -43,15 +44,16 @@ Since {product-title} 4.15, the `spec.extraManifestPath` field is deprecated. ==== Engineering considerations:: -* Set the `MachineConfigPool` (`mcp`) CR `paused` field to true during a cluster upgrade maintenance window and set the `maxUnavailable` field to the maximum tolerable value. +* Set the `MachineConfigPool` (`MCP`) CR `paused` field to true during a cluster upgrade maintenance window and set the `maxUnavailable` field to the maximum tolerable value. This prevents multiple cluster node reboots during upgrade, which results in a shorter overall upgrade. When you unpause the `mcp` CR, all the configuration changes are applied with a single reboot. + [NOTE] ==== -During installation, custom `mcp` CRs can be paused along with setting `maxUnavailable` to 100% to improve installation times. +During installation, custom `MCP` CRs can be paused along with setting `maxUnavailable` to 100% to improve installation times. ==== -* To avoid confusion or unintentional overwriting when updating content, you should use unique and distinguishable names for custom CRs in the `reference-crs/` directory under core-overlay and extra manifests in Git. +* To avoid confusion or unintentional overwriting when updating content, you should use unique and distinguishable names for custom CRs in the `reference-crs/` directory under core-overlay and extra manifests in git. * The `SiteConfig` CR allows multiple extra-manifest paths. When file names overlap in multiple directory paths, the last file found in the directory order list takes precedence. + diff --git a/modules/telco-core-host-firmware-and-boot-loader-configuration.adoc b/modules/telco-core-host-firmware-and-boot-loader-configuration.adoc index 57d262789d..c37a9dc892 100644 --- a/modules/telco-core-host-firmware-and-boot-loader-configuration.adoc +++ b/modules/telco-core-host-firmware-and-boot-loader-configuration.adoc @@ -7,7 +7,7 @@ = Host firmware and boot loader configuration New in this release:: -* No reference design updates in this release +* No reference design updates in this release. Engineering considerations:: // https://issues.redhat.com/browse/CNF-11806 @@ -18,3 +18,4 @@ Engineering considerations:: When secure boot is enabled, only signed kernel modules are loaded by the kernel. Out-of-tree drivers are not supported. ==== + diff --git a/modules/telco-core-installation.adoc b/modules/telco-core-installation.adoc new file mode 100644 index 0000000000..a979c5abe8 --- /dev/null +++ b/modules/telco-core-installation.adoc @@ -0,0 +1,8 @@ +// Module included in the following assemblies: +// +// * scalability_and_performance/telco_core_ref_design_specs/telco-core-rds.adoc + +:_mod-docs-content-type: REFERENCE +[id="telco-core-installation_{context}"] += Installation + diff --git a/modules/telco-core-load-balancer.adoc b/modules/telco-core-load-balancer.adoc index 50d50c0097..a7897b8b07 100644 --- a/modules/telco-core-load-balancer.adoc +++ b/modules/telco-core-load-balancer.adoc @@ -7,9 +7,8 @@ = Load balancer New in this release:: -// https://issues.redhat.com/browse/CNF-14150 -* FRR-K8s is now available under the Cluster Network Operator. -+ +* No reference design updates in this release. + [IMPORTANT] ==== If you have custom `FRRConfiguration` CRs in the `metallb-system` namespace, you must move them under the `openshift-network-operator` namespace. @@ -38,3 +37,4 @@ See `routingViaHost` in "Cluster Network Operator". ** MetalLB uses BGP for announcing routes only. Only the `transmitInterval` and `minimumTtl` parameters are relevant in this mode. Other parameters in the BFD profile should remain close to the defaults as shorter values can lead to false negatives and affect performance. + diff --git a/modules/telco-core-logging.adoc b/modules/telco-core-logging.adoc index 2f4a763060..df043be1f9 100644 --- a/modules/telco-core-logging.adoc +++ b/modules/telco-core-logging.adoc @@ -10,8 +10,7 @@ New in this release:: * No reference design updates in this release Description:: -The Cluster Logging Operator enables collection and shipping of logs off the node for remote archival and analysis. -The reference configuration uses Kafka to ship audit and infrastructure logs to a remote archive. +The Cluster Logging Operator enables collection and shipping of logs off the node for remote archival and analysis. The reference configuration uses Kafka to ship audit and infrastructure logs to a remote archive. Limits and requirements:: Not applicable @@ -20,3 +19,4 @@ Engineering considerations:: * The impact of cluster CPU use is based on the number or size of logs generated and the amount of log filtering configured. * The reference configuration does not include shipping of application logs. The inclusion of application logs in the configuration requires you to evaluate the application logging rate and have sufficient additional CPU resources allocated to the reserved set. + diff --git a/modules/telco-core-monitoring.adoc b/modules/telco-core-monitoring.adoc index 716965ef46..ebe320a558 100644 --- a/modules/telco-core-monitoring.adoc +++ b/modules/telco-core-monitoring.adoc @@ -7,17 +7,20 @@ = Monitoring New in this release:: -* No reference design updates in this release +* No reference design updates in this release. Description:: + -- The Cluster Monitoring Operator (CMO) is included by default in {product-title} and provides monitoring (metrics, dashboards, and alerting) for the platform components and optionally user projects. + You can customize the default log retention period, custom alert rules, and so on. + The default handling of pod CPU and memory metrics, based on upstream Kubernetes and cAdvisor, makes a tradeoff favoring stale data over metric accuracy. This leads to spikes in reporting, which can create false alerts, depending on the user-specified thresholds. -{product-title} supports an opt-in Dedicated Service Monitor feature that creates an additional set of pod CPU and memory metrics that do not suffer from this behavior. -For more information, see link:https://access.redhat.com/solutions/7012719[Dedicated Service Monitors - Questions and Answers (Red Hat Knowledgebase)]. + +{product-title} supports an opt-in Dedicated Service Monitor feature that creates an additional set of pod CPU and memory metrics which do not suffer from this behavior. +For more information, see the Red Hat Knowledgebase solution link:https://access.redhat.com/solutions/7012719[Dedicated Service Monitors - Questions and Answers]. In addition to the default configuration, the following metrics are expected to be configured for telco core clusters: @@ -25,9 +28,10 @@ In addition to the default configuration, the following metrics are expected to -- Limits and requirements:: -* You must enable the Dedicated Service Monitor feature to represent pod metrics accurately. +* You must enable the Dedicated Service Monitor feature for accurate representation of pod metrics. Engineering considerations:: * The Prometheus retention period is specified by the user. The value used is a tradeoff between operational requirements for maintaining historical data on the cluster against CPU and storage resources. -Longer retention periods increase the need for storage and require additional CPU to manage data indexing. +Longer retention periods increase the need for storage and require additional CPU to manage the indexing of data. + diff --git a/modules/telco-core-networking.adoc b/modules/telco-core-networking.adoc index f3a7224ef2..acb603f8eb 100644 --- a/modules/telco-core-networking.adoc +++ b/modules/telco-core-networking.adoc @@ -11,26 +11,15 @@ The following diagram describes the telco core reference design networking confi .Telco core reference design networking configuration image::openshift-telco-core-rds-networking.png[Overview of the telco core reference design networking configuration] + New in this release:: -+ --- -// https://issues.redhat.com/browse/CNF-12678 -* Support for disabling vendor plugins in the SR-IOV Operator +* Extend telco core validation with pod-level bonding. +* Support moving failed policy in resource injector to failed for SR-IOV operator. -// https://issues.redhat.com/browse/CNF-13768 -* link:https://access.redhat.com/articles/7090422[New knowledge base article on creating custom node firewall rules] - -// https://issues.redhat.com/browse/CNF-13981 -* Extended telco core RDS validation with MetalLB and EgressIP telco QE validation - -// https://issues.redhat.com/browse/CNF-14150 -* FRR-K8s is now available under the Cluster Network Operator. -+ [NOTE] ==== If you have custom `FRRConfiguration` CRs in the `metallb-system` namespace, you must move them under the `openshift-network-operator` namespace. ==== --- Description:: + @@ -52,10 +41,10 @@ For more information, see "Cluster Network Operator". .. Configure VLAN interfaces and specific kernel IP routes on the nodes using `NodeNetworkConfigurationPolicy` CRs. .. Create a MetalLB `BGPPeer` CR for each VLAN to establish peering with the remote BGP router. .. Define a MetalLB `BGPAdvertisement` CR to specify which IP address pools should be advertised to a selected list of `BGPPeer` resources. -+ The following diagram illustrates how specific service IP addresses are advertised to the outside via specific VLAN interfaces. Services routes are defined in `BGPAdvertisement` CRs and configured with values for `IPAddressPool1` and `BGPPeer1` fields. -- .Telco core reference design MetalLB service separation image::openshift-telco-core-rds-metallb-service-separation.png[Telco core reference design MetalLB service separation] + diff --git a/modules/telco-core-nmstate-operator.adoc b/modules/telco-core-nmstate-operator.adoc index b9dad0a1a2..168bdeb1a6 100644 --- a/modules/telco-core-nmstate-operator.adoc +++ b/modules/telco-core-nmstate-operator.adoc @@ -21,3 +21,4 @@ Engineering considerations:: * Initial networking configuration is applied using `NMStateConfig` content in the installation CRs. The NMState Operator is used only when required for network updates. * When SR-IOV virtual functions are used for host networking, the NMState Operator (via `nodeNetworkConfigurationPolicy` CRs) is used to configure VF interfaces, such as VLANs and MTU. + diff --git a/modules/telco-core-node-configuration.adoc b/modules/telco-core-node-configuration.adoc index fa365f2433..3e4e66fe66 100644 --- a/modules/telco-core-node-configuration.adoc +++ b/modules/telco-core-node-configuration.adoc @@ -7,12 +7,11 @@ = Node Configuration New in this release:: -* No reference design updates in this release +* No reference design updates in this release. Limits and requirements:: * Analyze additional kernel modules to determine impact on CPU load, system performance, and ability to meet KPIs. + --- .Additional kernel modules |==== |Feature|Description @@ -39,4 +38,3 @@ a|Install the following kernel modules by using `MachineConfig` CRs to provide e Creates a container mount namespace, visible to kubelet/CRI-O, to reduce system mount scanning overhead. |Kdump enable|Optional configuration (enabled by default) |==== --- diff --git a/modules/telco-core-openshift-data-foundation.adoc b/modules/telco-core-openshift-data-foundation.adoc index 3424c3612c..121aae4c96 100644 --- a/modules/telco-core-openshift-data-foundation.adoc +++ b/modules/telco-core-openshift-data-foundation.adoc @@ -4,19 +4,34 @@ :_mod-docs-content-type: REFERENCE [id="telco-core-openshift-data-foundation_{context}"] -= Red Hat OpenShift Data Foundation += {rh-storage} New in this release:: -* No reference design updates in this release +* Clarification on internal compared to external mode and RDS recommendations. Description:: -{rh-storage-first} is a software-defined storage service for containers. -For telco core clusters, storage support is provided by {rh-storage} storage services running externally to the application workload cluster. ++ +-- +{rh-storage} is a software-defined storage service for containers. +{rh-storage} can be deployed in one of two modes: +* Internal mode, where {rh-storage} software components are deployed as software containers directly on the {product-title} cluster nodes, together with other containerized applications. +* External mode, where {rh-storage} is deployed on a dedicated storage cluster, which is usually a separate Red Hat Ceph Storage cluster running on {op-system-base-full}. +These storage services are running externally to the application workload cluster. + +For telco core clusters, storage support is provided by {rh-storage} storage services running in external mode, for several reasons: + +* Separating dependencies between {product-title} and Ceph operations allows for independent {product-title} and {rh-storage} updates. +* Separation of operations functions for the Storage and {product-title} infrastructure layers, is a typical customer requirement for telco core use cases. +* External Red Hat Ceph Storage clusters can be re-used by multiple {product-title} clusters deployed in the same region. + {rh-storage} supports separation of storage traffic using secondary CNI networks. +-- Limits and requirements:: * In an IPv4/IPv6 dual-stack networking environment, {rh-storage} uses IPv4 addressing. -For more information, see link:https://docs.redhat.com/en/documentation/red_hat_openshift_data_foundation/4.17/html/planning_your_deployment/network-requirements_rhodf#network-requirements_rhodf[Network requirements]. +For more information, see link:https://docs.redhat.com/en/documentation/red_hat_openshift_data_foundation/4.19/html/planning_your_deployment/network-requirements_rhodf#ipv6-support_rhodf[IPv6 support]. Engineering considerations:: * {rh-storage} network traffic should be isolated from other traffic on a dedicated network, for example, by using VLAN isolation. +* Workload requirements must be scoped before attaching multiple {product-title} clusters to an external {rh-storage} cluster to ensure sufficient throughput, bandwidth, and performance KPIs. + diff --git a/modules/telco-core-power-management.adoc b/modules/telco-core-power-management.adoc index ca1a5f0bd4..6a0db90f52 100644 --- a/modules/telco-core-power-management.adoc +++ b/modules/telco-core-power-management.adoc @@ -10,7 +10,7 @@ New in this release:: * No reference design updates in this release Description:: -Use the Performance Profile to configure clusters with high power mode, low power mode, or mixed mode. +Use the Performance profile to configure clusters with high power mode, low power mode, or mixed mode. The choice of power mode depends on the characteristics of the workloads running on the cluster, particularly how sensitive they are to latency. Configure the maximum latency for a low-latency pod by using the per-pod power management C-states feature. @@ -21,3 +21,4 @@ Configuration varies between hardware vendors. Engineering considerations:: * Latency: To ensure that latency-sensitive workloads meet requirements, you require a high-power or a per-pod power management configuration. Per-pod power management is only available for Guaranteed QoS pods with dedicated pinned CPUs. + diff --git a/modules/telco-core-rds-container.adoc b/modules/telco-core-rds-container.adoc index 070cebc36c..2eb927e779 100644 --- a/modules/telco-core-rds-container.adoc +++ b/modules/telco-core-rds-container.adoc @@ -1,6 +1,6 @@ // Module included in the following assemblies: // -// * scalability_and_performance/telco_ref_design_specs/core/telco-core-ref-crs.adoc +// * scalability_and_performance/telco_core_ref_design_specs/telco-core-rds.adoc :_mod-docs-content-type: PROCEDURE [id="telco-core-rds-container_{context}"] @@ -15,7 +15,14 @@ The container image has both the required CRs, and the optional CRs, for the tel .Procedure -* Extract the content from the `telco-core-rds-rhel9` container image by running the following commands: +. Log on to the container image registry with your credentials by running the following command: ++ +[source,terminal] +---- +$ podman login registry.redhat.io +---- + +. Extract the content from the `telco-core-rds-rhel9` container image by running the following commands: + [source,terminal] ---- @@ -24,36 +31,85 @@ $ mkdir -p ./out + [source,terminal] ---- -$ podman run -it registry.redhat.io/openshift4/openshift-telco-core-rds-rhel9:v4.18 | base64 -d | tar xv -C out +$ podman run -it registry.redhat.io/openshift4/openshift-telco-core-rds-rhel9:v4.19 | base64 -d | tar xv -C out ---- .Verification -* The `out` directory has the following directory structure. You can view the telco core CRs in the `out/telco-core-rds/` directory. +* The `out` directory has the following directory structure. You can view the telco core CRs in the `out/telco-core-rds/` directory by running the following command: ++ +[source,terminal] +---- +$ tree -L 4 +---- + .Example output [source,text] ---- -out/ -└── telco-core-rds - ├── configuration - │ └── reference-crs - │ ├── optional - │ │ ├── logging - │ │ ├── networking - │ │ │ └── multus - │ │ │ └── tap_cni - │ │ ├── other - │ │ └── tuning - │ └── required - │ ├── networking - │ │ ├── metallb - │ │ ├── multinetworkpolicy - │ │ └── sriov - │ ├── other - │ ├── performance - │ ├── scheduling - │ └── storage - │ └── odf-external - └── install +. +├── configuration +│   ├── compare.sh +│   ├── core-baseline.yaml +│   ├── core-finish.yaml +│   ├── core-overlay.yaml +│   ├── core-upgrade.yaml +│   ├── kustomization.yaml +│   ├── Makefile +│   ├── ns.yaml +│   ├── README.md +│   ├── reference-crs +│   │   ├── custom-manifests +│   │   │   ├── mcp-worker-1.yaml +│   │   │   ├── mcp-worker-2.yaml +│   │   │   ├── mcp-worker-3.yaml +│   │   │   └── README.md +│   │   ├── optional +│   │   │   ├── logging +│   │   │   ├── networking +│   │   │   ├── other +│   │   │   └── tuning +│   │   └── required +│   │   ├── networking +│   │   ├── other +│   │   ├── performance +│   │   ├── scheduling +│   │   └── storage +│   ├── reference-crs-kube-compare +│   │   ├── compare_ignore +│   │   ├── comparison-overrides.yaml +│   │   ├── metadata.yaml +│   │   ├── optional +│   │   │   ├── logging +│   │   │   ├── networking +│   │   │   ├── other +│   │   │   └── tuning +│   │   ├── ReferenceVersionCheck.yaml +│   │   ├── required +│   │   │   ├── networking +│   │   │   ├── other +│   │   │   ├── performance +│   │   │   ├── scheduling +│   │   │   └── storage +│   │   ├── unordered_list.tmpl +│   │   └── version_match.tmpl +│   └── template-values +│   ├── hw-types.yaml +│   └── regional.yaml +├── install +│   ├── custom-manifests +│   │   ├── mcp-worker-1.yaml +│   │   ├── mcp-worker-2.yaml +│   │   └── mcp-worker-3.yaml +│   ├── example-standard.yaml +│   ├── extra-manifests +│   │   ├── control-plane-load-kernel-modules.yaml +│   │   ├── kdump-master.yaml +│   │   ├── kdump-worker.yaml +│   │   ├── mc_rootless_pods_selinux.yaml +│   │   ├── mount_namespace_config_master.yaml +│   │   ├── mount_namespace_config_worker.yaml +│   │   ├── sctp_module_mc.yaml +│   │   └── worker-load-kernel-modules.yaml +│   └── README.md +└── README.md ---- diff --git a/modules/telco-core-rds-product-version-use-model-overview.adoc b/modules/telco-core-rds-product-version-use-model-overview.adoc index a04bb1982c..cb4ae50083 100644 --- a/modules/telco-core-rds-product-version-use-model-overview.adoc +++ b/modules/telco-core-rds-product-version-use-model-overview.adoc @@ -6,6 +6,6 @@ [id="telco-core-rds-product-version-use-model-overview_{context}"] = Telco core RDS {product-version} use model overview -The telco core reference design specifications (RDS) describes a platform that supports large-scale telco applications, including control plane functions such as signaling and aggregation. -It also includes some centralized data plane functions, such as user plane functions (UPF). -These functions generally require scalability, complex networking support, resilient software-defined storage, and support performance requirements that are less stringent and constrained than far-edge deployments such as RAN. +The Telco core reference design specification (RDS) describes a platform that supports large-scale telco applications including control plane functions such as signaling and aggregation. +It also includes some centralized data plane functions, for example, user plane functions (UPF). +These functions generally require scalability, complex networking support, resilient software-defined storage, and support performance requirements that are less stringent and constrained than far-edge deployments such as RAN. \ No newline at end of file diff --git a/modules/telco-core-red-hat-advanced-cluster-management.adoc b/modules/telco-core-red-hat-advanced-cluster-management.adoc index 31126047bc..bf430bb751 100644 --- a/modules/telco-core-red-hat-advanced-cluster-management.adoc +++ b/modules/telco-core-red-hat-advanced-cluster-management.adoc @@ -7,15 +7,16 @@ = Red Hat Advanced Cluster Management New in this release:: -* Image-based installation for {sno} clusters is the recommended install methodology. +* Using {rh-rhacm} and PolicyGenerator CRs is the recommended approach for managing and deploying policies to managed clusters. +This replaces the use of PolicyGenTemplate CRs for this purpose. Description:: + -- -{rh-rhacm-first} provides Multi Cluster Engine (MCE) installation and ongoing {ztp} lifecycle management for deployed clusters. +{rh-rhacm} provides Multi Cluster Engine (MCE) installation and ongoing {ztp} lifecycle management for deployed clusters. You manage cluster configuration and upgrades declaratively by applying `Policy` custom resources (CRs) to clusters during maintenance windows. -You apply policies with the {rh-rhacm} policy controller as managed by {cgu-operator-full}. +You apply policies with the {rh-rhacm} policy controller as managed by {cgu-operator}. Configuration, upgrades, and cluster status are managed through the policy controller. When installing managed clusters, {rh-rhacm} applies labels and initial ignition configuration to individual nodes in support of custom disk partitioning, allocation of roles, and allocation to machine config pools. @@ -24,10 +25,11 @@ You define these configurations with `SiteConfig` or `ClusterInstance` CRs. Limits and requirements:: -* Hub cluster sizing is discussed in link:https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_management_for_kubernetes/2.11/html-single/install/index#sizing-your-cluster[Sizing your cluster]. +* Hub cluster sizing is discussed in link:https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_management_for_kubernetes/2.13/html-single/install/index#sizing-your-cluster[Sizing your cluster]. -* {rh-rhacm} scaling limits are described in link:https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_management_for_kubernetes/2.11/html-single/install/index#performance-and-scalability[Performance and Scalability]. +* {rh-rhacm} scaling limits are described in link:https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_management_for_kubernetes/2.13/html-single/install/index#performance-and-scalability[Performance and Scalability]. Engineering considerations:: * When managing multiple clusters with unique content per installation, site, or deployment, using {rh-rhacm} hub templating is strongly recommended. {rh-rhacm} hub templating allows you to apply a consistent set of policies to clusters while providing for unique values per installation. + diff --git a/modules/telco-core-reference-design-specification-for-product-title-product-version.adoc b/modules/telco-core-reference-design-specification-for-product-title-product-version.adoc new file mode 100644 index 0000000000..e90bd5fb04 --- /dev/null +++ b/modules/telco-core-reference-design-specification-for-product-title-product-version.adoc @@ -0,0 +1,11 @@ +// Module included in the following assemblies: +// +// * scalability_and_performance/telco_core_ref_design_specs/telco-core-rds.adoc + +:_mod-docs-content-type: REFERENCE +[id="telco-core-reference-design-specification-for-product-title-product-version_{context}"] += Telco core reference design specifications + +The telco core reference design specification (RDS) configures an {product-title} cluster running on commodity hardware to host telco core workloads. + + diff --git a/modules/telco-core-scalability.adoc b/modules/telco-core-scalability.adoc index 0d9bf84ea0..27b158633b 100644 --- a/modules/telco-core-scalability.adoc +++ b/modules/telco-core-scalability.adoc @@ -7,10 +7,14 @@ = Scalability New in this release:: -* No reference design updates in this release +* No reference design updates in this release. Description:: +Scale clusters as described in "Limits and requirements". Scaling of workloads is described in "Application workloads". Limits and requirements:: * Cluster can scale to at least 120 nodes. + + +:leveloffset!: diff --git a/modules/telco-core-scheduling.adoc b/modules/telco-core-scheduling.adoc index fe8bfe7c05..3795707c70 100644 --- a/modules/telco-core-scheduling.adoc +++ b/modules/telco-core-scheduling.adoc @@ -7,14 +7,14 @@ = Scheduling New in this release:: -* No reference design updates in this release +* No reference design updates in this release. Description:: + -- -The scheduler is a cluster-wide component responsible for selecting the correct node for a given workload. +The scheduler is a cluster-wide component responsible for selecting the right node for a given workload. It is a core part of the platform and does not require any specific configuration in the common deployment scenarios. -However, a few specific use cases are described in the following section. +However, there are few specific use cases described in the following section. NUMA-aware scheduling can be enabled through the NUMA Resources Operator. For more information, see "Scheduling NUMA-aware workloads". @@ -23,13 +23,13 @@ For more information, see "Scheduling NUMA-aware workloads". Limits and requirements:: * The default scheduler does not understand the NUMA locality of workloads. It only knows about the sum of all free resources on a worker node. -This might cause workloads to be rejected when scheduled to a node with the topology manager policy set to `single-numa-node` or `restricted`. -For more information, see "Topology Manager policies". -** For example, consider a pod requesting 6 CPUs that is scheduled to an empty node that has 4 CPUs per NUMA node. +This might cause workloads to be rejected when scheduled to a node with the topology manager policy set to single-numa-node or restricted. For more information, see "Topology Manager policies". ++ +For example, consider a pod requesting 6 CPUs and being scheduled to an empty node that has 4 CPUs per NUMA node. The total allocatable capacity of the node is 8 CPUs. The scheduler places the pod on the empty node. The node local admission fails, as there are only 4 CPUs available in each of the NUMA nodes. -* All clusters with multi-NUMA nodes are required to use the NUMA Resources Operator. -See "Installing the NUMA Resources Operator" for more information. + +* All clusters with multi-NUMA nodes are required to use the NUMA Resources Operator. See "Installing the NUMA Resources Operator" for more information. Use the `machineConfigPoolSelector` field in the `KubeletConfig` CR to select all nodes where NUMA aligned scheduling is required. * All machine config pools must have consistent hardware configuration. For example, all nodes are expected to have the same NUMA zone count. @@ -37,4 +37,5 @@ For example, all nodes are expected to have the same NUMA zone count. Engineering considerations:: * Pods might require annotations for correct scheduling and isolation. For more information about annotations, see "CPU partitioning and performance tuning". -* You can configure SR-IOV virtual function NUMA affinity to be ignored during scheduling by using the `excludeTopology` field in `SriovNetworkNodePolicy` CR. +* You can configure SR-IOV virtual function NUMA affinity to be ignored during scheduling by using the excludeTopology field in `SriovNetworkNodePolicy` CR. + diff --git a/modules/telco-core-security.adoc b/modules/telco-core-security.adoc index 548d7773bf..0afbcb873b 100644 --- a/modules/telco-core-security.adoc +++ b/modules/telco-core-security.adoc @@ -7,54 +7,48 @@ = Security New in this release:: -// https://issues.redhat.com/browse/CNF-13768 -* link:https://access.redhat.com/articles/7090422[New knowledgebase article on creating custom node firewall rules] +* No reference design updates in this release. Description:: + -- Telco customers are security conscious and require clusters to be hardened against multiple attack vectors. In {product-title}, there is no single component or feature responsible for securing a cluster. -Use the following security-oriented features and configurations to secure your clusters: +Described below are various security oriented features and configurations for the use models covered in the telco core RDS. * **SecurityContextConstraints (SCC)**: All workload pods should be run with `restricted-v2` or `restricted` SCC. * **Seccomp**: All pods should run with the `RuntimeDefault` (or stronger) seccomp profile. * **Rootless DPDK pods**: Many user-plane networking (DPDK) CNFs require pods to run with root privileges. -With this feature, a conformant DPDK pod can run without requiring root privileges. +With this feature, a conformant DPDK pod can be run without requiring root privileges. Rootless DPDK pods create a tap device in a rootless pod that injects traffic from a DPDK application to the kernel. * **Storage**: The storage network should be isolated and non-routable to other cluster networks. See the "Storage" section for additional details. -Refer to link:https://access.redhat.com/articles/7090422[Custom nftable firewall rules in OpenShift] for a supported method of implementing custom nftables firewall rules in OpenShift cluster nodes. -This article is intended for cluster administrators who are responsible for managing network security policies in OpenShift environments. +See the Red Hat Knowledgebase solution article link:https://access.redhat.com/articles/7090422[Custom nftable firewall rules in OpenShift] for a supported method for implementing custom nftables firewall rules in {product-title} cluster nodes. This article is intended for cluster administrators who are responsible for managing network security policies in {product-title} environments. + It is crucial to carefully consider the operational implications before deploying this method, including: * **Early application**: The rules are applied at boot time, before the network is fully operational. Ensure the rules don't inadvertently block essential services required during the boot process. - * **Risk of misconfiguration**: Errors in your custom rules can lead to unintended consequences, potentially leading to performance impact or blocking legitimate traffic or isolating nodes. Thoroughly test your rules in a non-production environment before deploying them to your main cluster. - -* **External endpoints**: OpenShift requires access to external endpoints to function. -For more information about the firewall allowlist, see "Configuring your firewall for {product-title}". -Ensure that cluster nodes are permitted access to those endpoints. - +* **External endpoints**: {product-title} requires access to external endpoints to function. +For more information about the firewall allowlist, see "Configuring your firewall for {product-title}". Ensure that cluster nodes are permitted access to those endpoints. * **Node reboot**: Unless node disruption policies are configured, applying the `MachineConfig` CR with the required firewall settings causes a node reboot. -Be aware of this impact and schedule a maintenance window accordingly. -For more information, see "Using node disruption policies to minimize disruption from machine config changes". +Be aware of this impact and schedule a maintenance window accordingly. For more information, see "Using node disruption policies to minimize disruption from machine config changes". + [NOTE] ==== Node disruption policies are available in {product-title} 4.17 and later. ==== -* **Network flow matrix**: For more information about managing ingress traffic, see "{product-title} network flow matrix". +* **Network flow matrix**: For more information about managing ingress traffic, see {product-title} network flow matrix. You can restrict ingress traffic to essential flows to improve network security. The matrix provides insights into base cluster services but excludes traffic generated by Day-2 Operators. -* **Cluster version updates and upgrades**: Exercise caution when updating or upgrading OpenShift clusters. +* **Cluster version updates and upgrades**: Exercise caution when updating or upgrading {product-title} clusters. Recent changes to the platform's firewall requirements might require adjustments to network port permissions. -Although the documentation provides guidelines, note that these requirements can evolve over time. +While the documentation provides guidelines, note that these requirements can evolve over time. To minimize disruptions, you should test any updates or upgrades in a staging environment before applying them in production. This helps you to identify and address potential compatibility issues related to firewall configuration changes. -- @@ -62,8 +56,9 @@ This helps you to identify and address potential compatibility issues related to Limits and requirements:: * Rootless DPDK pods requires the following additional configuration: ** Configure the `container_t` SELinux context for the tap plugin. -** Enable the `container_use_devices` SELinux boolean for the cluster host. +** Enable the `container_use_devices` SELinux boolean for the cluster host Engineering considerations:: * For rootless DPDK pod support, enable the SELinux `container_use_devices` boolean on the host to allow the tap device to be created. This introduces an acceptable security risk. + diff --git a/modules/telco-core-service-mesh.adoc b/modules/telco-core-service-mesh.adoc index 315bbb3a36..8a8cc2e12c 100644 --- a/modules/telco-core-service-mesh.adoc +++ b/modules/telco-core-service-mesh.adoc @@ -11,3 +11,4 @@ Telco core cloud-native functions (CNFs) typically require a service mesh implem Specific service mesh features and performance requirements are dependent on the application. The selection of service mesh implementation and configuration is outside the scope of this documentation. You must account for the impact of service mesh on cluster resource usage and performance, including additional latency introduced in pod networking, in your implementation. + diff --git a/modules/telco-core-signaling-workloads.adoc b/modules/telco-core-signaling-workloads.adoc index c9042e6b5a..13f286b227 100644 --- a/modules/telco-core-signaling-workloads.adoc +++ b/modules/telco-core-signaling-workloads.adoc @@ -8,4 +8,4 @@ Signaling workloads typically use SCTP, REST, gRPC or similar TCP or UDP protocols. Signaling workloads support hundreds of thousands of transactions per second (TPS) by using a secondary multus CNI configured as MACVLAN or SR-IOV interface. -These workloads can run in pods with either guaranteed or burstable QoS. +These workloads can run in pods with either guaranteed or burstable QoS. \ No newline at end of file diff --git a/modules/telco-core-software-stack.adoc b/modules/telco-core-software-stack.adoc index 528fad6feb..1b45c525f9 100644 --- a/modules/telco-core-software-stack.adoc +++ b/modules/telco-core-software-stack.adoc @@ -3,7 +3,12 @@ // * scalability_and_performance/telco_core_ref_design_specs/telco-core-rds.adoc :_mod-docs-content-type: REFERENCE -[id="telco-core-software-stack_{context}"] +// Module included in the following assemblies: +// +// * scalability_and_performance/telco_core_ref_design_specs/telco-core-rds.adoc + +:_mod-docs-content-type: REFERENCE +[id="telco-core-software-stack_{context}_{context}"] = Telco core reference configuration software specifications The Red{nbsp}Hat telco core {product-version} solution has been validated using the following Red{nbsp}Hat software products for {product-title} clusters. @@ -14,26 +19,26 @@ The Red{nbsp}Hat telco core {product-version} solution has been validated using |Component |Software version |{rh-rhacm-first} -|2.12^1^ +|2.13^1^ |Cluster Logging Operator -|6.1^2^ +|6.2^2^ |{rh-storage} -|4.18 +|4.19 |SR-IOV Network Operator -|4.18 +|4.19 |MetalLB -|4.18 +|4.19 |NMState Operator -|4.18 +|4.19 |NUMA-aware scheduler -|4.18 +|4.19 |==== -[1] This table will be updated when the aligned {rh-rhacm} version 2.13 is released. +[1] This table will be updated when the aligned {rh-rhacm} version 2.14 is released. -[2] This table will be updated when the aligned Cluster Logging Operator 6.2 is released. +[2] This table will be updated when the aligned Cluster Logging Operator 6.3 is released. diff --git a/modules/telco-core-sr-iov.adoc b/modules/telco-core-sr-iov.adoc index f26bc44961..f66e7c2db3 100644 --- a/modules/telco-core-sr-iov.adoc +++ b/modules/telco-core-sr-iov.adoc @@ -7,9 +7,7 @@ = SR-IOV New in this release:: -// https://issues.redhat.com/browse/CNF-12678 -* You can now create virtual functions for Mellanox NICs with the SR-IOV Network Operator when secure boot is enabled in the cluster host. -Before you can create the virtual functions, you must first skip the firmware configuration for the Mellanox NIC and manually allocate the number of virtual functions in the firmware before switching the system to secure boot. +* Support moving failed policy in resource injector to failed for SR-IOV operator Description:: SR-IOV enables physical functions (PFs) to be divided into multiple virtual functions (VFs). @@ -17,8 +15,7 @@ VFs can then be assigned to multiple pods to achieve higher throughput performan The SR-IOV Network Operator provisions and manages SR-IOV CNI, network device plugin, and other components of the SR-IOV stack. Limits and requirements:: -* Only certain network interfaces are supported. -See "Supported devices" for more information. +* Only certain network interfaces are supported. See "Supported devices" for more information. * Enabling SR-IOV and IOMMU: the SR-IOV Network Operator automatically enables IOMMU on the kernel command line. @@ -33,7 +30,7 @@ Engineering considerations:: * The `SriovOperatorConfig` CR must be explicitly created. This CR is included in the reference configuration policies, which causes it to be created during initial deployment. * NICs that do not support firmware updates with UEFI secure boot or kernel lockdown must be preconfigured with sufficient virtual functions (VFs) enabled to support the number of VFs required by the application workload. -For Mellanox NICs, you must disable the Mellanox vendor plugin in the SR-IOV Network Operator. -See "Configuring an SR-IOV network device" for more information. +For Mellanox NICs, you must disable the Mellanox vendor plugin in the SR-IOV Network Operator. For more information see, "Configuring an SR-IOV network device". * To change the MTU value of a VF after the pod has started, do not configure the `SriovNetworkNodePolicy` MTU field. Instead, use the Kubernetes NMState Operator to set the MTU of the related PF. + diff --git a/modules/telco-core-storage.adoc b/modules/telco-core-storage.adoc index 6f72cb429a..af85f6d2a4 100644 --- a/modules/telco-core-storage.adoc +++ b/modules/telco-core-storage.adoc @@ -12,9 +12,9 @@ New in this release:: Description:: + -- -Cloud native storage services can be provided by {rh-storage-first} or other third-party solutions. +Cloud native storage services can be provided by {rh-storage} or other third-party solutions. -{rh-storage} is a Ceph-based software-defined storage solution for containers. +{rh-storage} is a Red Hat Ceph Storage based software-defined storage solution for containers. It provides block storage, file system storage, and on-premise object storage, which can be dynamically provisioned for both persistent and non-persistent data requirements. Telco core applications require persistent storage. diff --git a/modules/telco-core-topology-aware-lifecycle-manager.adoc b/modules/telco-core-topology-aware-lifecycle-manager.adoc index 8361c5debf..0cc62899a8 100644 --- a/modules/telco-core-topology-aware-lifecycle-manager.adoc +++ b/modules/telco-core-topology-aware-lifecycle-manager.adoc @@ -7,10 +7,10 @@ = Topology Aware Lifecycle Manager New in this release:: -No reference design updates in this release. +* No reference design updates in this release. Description:: -{cgu-operator-full} is an Operator which runs only on the hub cluster. +{cgu-operator} is an Operator which runs only on the hub cluster. {cgu-operator} manages how changes including cluster and Operator upgrades, configurations, and so on, are rolled out to managed clusters in the network. {cgu-operator} has the following core features: * Provides sequenced updates of cluster configurations and upgrades ({product-title} and Operators) as defined by cluster policies. @@ -19,8 +19,9 @@ Description:: * Allows for per-cluster actions by adding `ztp-done` or similar user-defined labels to clusters. Limits and requirements:: -* Supports concurrent cluster deployments in batches of 400. +* Supports concurrent cluster deployments in batches of 400 Engineering considerations:: * Only policies with the `ran.openshift.io/ztp-deploy-wave` annotation are applied by {cgu-operator} during initial cluster installation. * Any policy can be remediated by {cgu-operator} under control of a user created `ClusterGroupUpgrade` CR. + diff --git a/modules/using-cluster-compare-telco-core.adoc b/modules/using-cluster-compare-telco-core.adoc index 2eec787173..d79b7a1bbb 100644 --- a/modules/using-cluster-compare-telco-core.adoc +++ b/modules/using-cluster-compare-telco-core.adoc @@ -39,26 +39,39 @@ $ mkdir -p ./out + [source,terminal] ---- -$ podman run -it registry.redhat.io/openshift4/openshift-telco-core-rds-rhel9:v4.18 | base64 -d | tar xv -C out +$ podman run -it registry.redhat.io/openshift4/openshift-telco-core-rds-rhel9:v4.19 | base64 -d | tar xv -C out ---- + -You can view the reference configuration in the `reference-crs-kube-compare/` directory. +You can view the reference configuration in the `out/telco-core-rds/configuration/reference-crs-kube-compare` directory by running the following command: ++ +[source,terminal] +---- +$ tree -L 2 +---- ++ +. Example output + [source,text] ---- -out/telco-core-rds/configuration/reference-crs-kube-compare/ +. +├── compare_ignore +├── comparison-overrides.yaml ├── metadata.yaml <1> ├── optional <2> -│ ├── logging -│ ├── networking -│ ├── other -│ └── tuning -└── required <3> - ├── networking - ├── other - ├── performance - ├── scheduling - └── storage +│   ├── logging +│   ├── networking +│   ├── other +│   └── tuning +├── ReferenceVersionCheck.yaml +├── required <3> +│   ├── networking +│   ├── other +│   ├── performance +│   ├── scheduling +│   └── storage +├── unordered_list.tmpl +└── version_match.tmpl + ---- <1> Configuration file for the reference configuration. <2> Directory for optional templates. diff --git a/scalability_and_performance/telco-core-rds.adoc b/scalability_and_performance/telco-core-rds.adoc index e6b84d8800..8ba6264ff6 100644 --- a/scalability_and_performance/telco-core-rds.adoc +++ b/scalability_and_performance/telco-core-rds.adoc @@ -19,6 +19,19 @@ include::modules/telco-deviations-from-the-ref-design.adoc[leveloffset=+1] include::modules/telco-core-common-baseline-model.adoc[leveloffset=+1] +include::modules/telco-core-deployment-planning.adoc[leveloffset=+1] + +[role="_additional-resources"] +.Additional resources + +* xref:../updating/updating_a_cluster/update-using-custom-machine-config-pools.adoc#update-using-custom-machine-config-pools[Performing a canary rollout update] + +* xref:../updating/updating_a_cluster/update-using-custom-machine-config-pools.adoc#update-using-custom-machine-config-pools[Applying MachineConfigPool labels to nodes before the update] + +* xref:../nodes/pods/nodes-pods-configuring.adoc#nodes-pods-pod-distruption-about_nodes-pods-configuring[Understanding how to use pod disruption budgets to specify the number of pods that must be up] + +* xref:../nodes/scheduling/nodes-scheduler-pod-affinity.adoc#nodes-scheduler-pod-affinity[Placing pods relative to other pods using affinity and anti-affinity rules] + include::modules/telco-core-cluster-common-use-model-engineering-considerations.adoc[leveloffset=+1] include::modules/telco-core-application-workloads.adoc[leveloffset=+2] @@ -161,7 +174,7 @@ include::modules/telco-core-scheduling.adoc[leveloffset=+2] * xref:../scalability_and_performance/cnf-numa-aware-scheduling.adoc#cnf-numa-aware-scheduling[Scheduling NUMA-aware workloads] -xref:../scalability_and_performance/using-cpu-manager.adoc#topology_manager_policies_using-cpu-manager-and-topology_manager[Topology Manager policies] +* xref:../scalability_and_performance/using-cpu-manager.adoc#topology_manager_policies_using-cpu-manager-and-topology_manager[Topology Manager policies] include::modules/telco-core-node-configuration.adoc[leveloffset=+2] @@ -220,6 +233,8 @@ include::modules/using-cluster-compare-telco-core.adoc[leveloffset=+2] include::modules/telco-core-crs-node-configuration.adoc[leveloffset=+2] +include::modules/telco-core-crs-cluster-infrastructure.adoc[leveloffset=+2] + include::modules/telco-core-crs-resource-tuning.adoc[leveloffset=+2] include::modules/telco-core-crs-networking.adoc[leveloffset=+2]