Skip to main content
Redhat Developers  Logo
  • AI

    Get started with AI

    • Red Hat AI
      Accelerate the development and deployment of enterprise AI solutions.
    • AI learning hub
      Explore learning materials and tools, organized by task.
    • AI interactive demos
      Click through scenarios with Red Hat AI, including training LLMs and more.
    • AI/ML learning paths
      Expand your OpenShift AI knowledge using these learning resources.
    • AI quickstarts
      Focused AI use cases designed for fast deployment on Red Hat AI platforms.
    • No-cost AI training
      Foundational Red Hat AI training.

    Featured resources

    • OpenShift AI learning
    • Open source AI for developers
    • AI product application development
    • Open source-powered AI/ML for hybrid cloud
    • AI and Node.js cheat sheet

    Red Hat AI Factory with NVIDIA

    • Red Hat AI Factory with NVIDIA is a co-engineered, enterprise-grade AI solution for building, deploying, and managing AI at scale across hybrid cloud environments.
    • Explore the solution
  • Learn

    Self-guided

    • Documentation
      Find answers, get step-by-step guidance, and learn how to use Red Hat products.
    • Learning paths
      Explore curated walkthroughs for common development tasks.
    • Guided learning
      Receive custom learning paths powered by our AI assistant.
    • See all learning

    Hands-on

    • Developer Sandbox
      Spin up Red Hat's products and technologies without setup or configuration.
    • Interactive labs
      Learn by doing in these hands-on, browser-based experiences.
    • Interactive demos
      Click through product features in these guided tours.

    Browse by topic

    • AI/ML
    • Automation
    • Java
    • Kubernetes
    • Linux
    • See all topics

    Training & certifications

    • Courses and exams
    • Certifications
    • Skills assessments
    • Red Hat Academy
    • Learning subscription
    • Explore training
  • Build

    Get started

    • Red Hat build of Podman Desktop
      A downloadable, local development hub to experiment with our products and builds.
    • Developer Sandbox
      Spin up Red Hat's products and technologies without setup or configuration.

    Download products

    • Access product downloads to start building and testing right away.
    • Red Hat Enterprise Linux
    • Red Hat AI
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform
    • See all products

    Featured

    • Red Hat build of OpenJDK
    • Red Hat JBoss Enterprise Application Platform
    • Red Hat OpenShift Dev Spaces
    • Red Hat Developer Toolset

    References

    • E-books
    • Documentation
    • Cheat sheets
    • Architecture center
  • Community

    Get involved

    • Events
    • Live AI events
    • Red Hat Summit
    • Red Hat Accelerators
    • Community discussions

    Follow along

    • Articles & blogs
    • Developer newsletter
    • Videos
    • Github

    Get help

    • Customer service
    • Customer support
    • Regional contacts
    • Find a partner

    Join the Red Hat Developer program

    • Download Red Hat products and project builds, access support documentation, learning content, and more.
    • Explore the benefits

How to manage a fleet of heterogeneous OpenShift clusters

March 18, 2024
Sabbir Hasan Ian Miller
Related topics:
ContainersGitOpsKubernetes
Related products:
Red Hat Advanced Cluster Management for KubernetesRed Hat OpenShiftRed Hat OpenShift Container Platform

    Maintaining a fleet of thousands of Red Hat OpenShift clusters, as is typical in network far edge deployments, requires a disciplined and consistent approach to managing configuration. In an ideal world all of the clusters would be running the same versions of software from the OpenShift Container Platform through application workload. In reality, however, the fleet of clusters will contain a mix of software versions due to phased rollouts, regional differences, or other operational requirements that may pin a set of clusters to an older release.

    Addressing the complexity of multiple versions can be achieved by building on top of a couple of very powerful tools. Red Hat’s GitOps (Argo CD) operator allows for single-source of truth definitions of clusters and their configuration and Red Hat Advanced Cluster Management’s Policy/GRC functionality allows the user to define a configuration once and apply it to large sets of clusters.

    With the fleet of clusters running different Red Hat OpenShift versions, there are also multiple versions of configuration which need to be defined and managed. In the Red Hat far edge use cases, the customized platform configuration for specific use cases, e.g., 5G RAN Distributed Units (DU) is captured in Git. The automated tooling combines this configuration with a versioned reference configuration to build the Policy CRs that are applied to clusters by ACM. With each new release comes an updated baseline reference configuration which is then adapted to the production network and wrapped in Policies.

    In prior OpenShift releases (4.13 and before), the GitOps ZTP infrastructure provided a single version of the reference configuration as the baseline for the generated configuration of all managed clusters via a ZTP plugin container. This reference configuration comes in two pieces. First, a single version-specific set of install-time manifests (CRs) to apply during DU cluster installation and second, a version-specific set of configuration CRs which provide cluster tuning, networking, storage configuration, etc. The install manifests are referenced by the user’s SiteConfig CRs and included in the generated installation CRs, and the configuration CRs are referenced by the user’s PolicyGenTemplate CRs.

    Both the SiteConfig and the PolicyGenTemplate are CRs, which the user defines in Git. This single fixed version of the reference configuration made ongoing management of older clusters difficult as the new deployments moved to newer releases.

    Requirements and solution

    The complexities of simultaneously managing multiple OpenShift versions within a fleet of clusters at large scale places additional requirements on the management solution, including:

    • Clusters must be able to easily move through the upgrade process
    • Ongoing management of clusters on older versions must be maintained

    In the 4.14 release, we have extended the ZTP plugin to allow users to add the versioned reference configuration to the Git repository alongside their customized configuration. The reference configuration can be easily extracted from the version specific ZTP plugin container and directly placed into Git. In order to allow users to associate a specific versioned reference configuration with their clusters and policies, both the SiteConfig and PolicyGenTemplate CRs have been extended to provide an explicit linkage to the desired copy in Git. In the SiteConfig CR users can select the correct version of install manifests through the searchPaths parameter. This cluster level parameter accepts multiple entries supporting both reference configuration and additional user provided installation manifests. These resources are combined to form the basis of site specific configuration passed to the installer.

    In a similar way the PolicyGenTemplate CR has been extended to provide an explicit linkage to the desired reference configuration in Git. In the PolicyGenTemplate the user can select the correct source CRS (reference configuration) from which their custom content is added. In addition to the reference configuration extracted from the ZTP plug-in container, users can add their own content which will be bound into policies and applied to the managed clusters. As a result, users can rely on their Git repository as the single-source-of-truth by including specific reference configuration versions along with their adaptations and policy specifications.

    How to use it

    To deploy and manage multiple OpenShift versions simultaneously, users must extract version specific reference configuration from ztp-site-generate containers and prepare their Git repository. We will walk through this preparation for both parts of the reference configuration: the installation portion, used by SiteConfig, and the configuration portion used by PolicyGenTemplate (PGT).

    The user needs to keep a copy of the reference configuration “extra manifests” for each deployed OpenShift version that will be used during cluster installation. To deploy multiple versions, a user must create a version specific folder to hold the extracted content. We recommend users to keep reference CRs and custom CRs in separate directories. For simultaneously deploying multiple versions, as a best practice, we suggest organizing the siteconfig directory grouped by cluster versions and to keep reference configurations at the same directory level of the cluster definition. The example below shows our recommendation on organizing version specific directory structure for allowing a multiple version deployment: 

    siteconfig    
        ├── kustomization.yaml
        ├── version_4.13
        │   ├── sno-1.yaml
        │   ├── kustomization.yaml
        │   ├── extra-manifest/      <-- reference manifests extracted from ZTP container   
        │   └── custom-manifest/     <-- user's custom manifests
        └── version_4.14    
            ├── sno-2.yaml
            ├── kustomization.yaml
            ├── extra-manifest/           
            └── custom-manifest/ 
    
    

    The ZTP plugin can build version specific install configuration from the directory locations provided in the searchPaths parameter of the SiteConfig CR and pass it to the installer for deployment as shown below:

    ---
    apiVersion: ran.openshift.io/v1
    kind: SiteConfig
    metadata:
      name: "sno-1"
    Spec:
      clusters:
      - clusterName: "example-sno"
        extraManifests:
          searchPaths:
          - extra-manifest/ 
          - custom-manifest/ 
    
    

    Managing multiple versions of configuration in Git follows a similar pattern. To apply advanced configuration in a managed cluster by wrapping around policies, users need to keep reference source CRs alongside with policy definitions at the same directory level. Similar to SiteConfig, policy definitions can be grouped by cluster version as shown below:

    policygentemplates
    │   ├── kustomization.yaml 
    │   ├── version_4.13 
    │   │   ├── common-pgt.yaml
    │   │   ├── group-pgt.yaml
    │   │   ├── site-pgt.yaml
    │   │   ├── kustomization.yaml 
    │   │   ├── namespaces.yaml
    │   │   └── source-crs/         
    |   |      └── reference-crs/    <-- reference policy CRs extracted from ZTP container
    |   |      └── custom-crs/       <-- user’s custom CRs
    │   └── version_4.14 
    │       ├── common-pgt.yaml
    │       ├── group-pgt.yaml
    │       ├── site-pgt.yaml
    │       ├── kustomization.yaml 
    │       ├── namespaces.yaml
    │       └── source-crs/ 
    |          └── reference-crs/    <-- reference policy CRs extracted from ZTP container
    |          └── custom-crs/       <-- user’s custom CRs
    
    

    Apart from allowing version independence, our recommended directory structure also provides several benefits to move through z-stream and y-stream upgrade processes. Those are as follows:

    • z-stream version updates: Users can directly copy new patches and/or bug fixes included in the updated z-stream version to the reference configuration in the Git repository to provide the fixes. 
    • y-stream version upgrades: Users can simply create a new directory and populate version specific content as shown in the above example. 

    Therefore, the ongoing management of clusters on older versions can be maintained easily and any new configuration changes are only bound to the clusters which are upgraded to a newer version. In both cases, the GitOps operator will generate the needed Policy and ACM will apply the new changes to the specific managed clusters.

    Installation and ongoing configuration management of OpenShift clusters is made significantly easier with GitOps ZTP-driven solutions. OpenShift 4.14 introduces features supporting simultaneous installation and management of heterogeneous versions within a single Git hierarchy. These features reduce the friction, risk, and challenge of adopting new z-stream and y-stream releases resulting in improved maintainability and directly reducing the risk of exposure to security vulnerabilities.

    Last updated: March 27, 2024

    Related Posts

    • What's new in Red Hat OpenShift 4.14

    • How OpenShift cert-manager simplifies cluster certificates

    • How to connect Kubernetes clusters with Service Interconnect

    • Deploy and test Kubernetes containers using Podman Desktop

    • 5 global environment variables provided by OpenShift GitOps

    • Manage namespaces in multitenant clusters with Argo CD, Kustomize, and Helm

    Recent Posts

    • SQL Server HA on RHEL: Meet Pacemaker HA Agent v2 (tech preview)

    • Deploy with confidence: Continuous integration and continuous delivery for agentic AI

    • Every layer counts: Defense in depth for AI agents with Red Hat AI

    • Fun in the RUN instruction: Why container builds with distroless images can surprise you

    • Trusted software factory: Building trust in the agentic AI era

    What’s up next?

    Path to GitOps cover card

    Read The Path to GitOps for a comprehensive look at the tools, workflows, and structures teams need to have in place in order to enable a complete GitOps workflow.

    Get the e-book
    Red Hat Developers logo LinkedIn YouTube Twitter Facebook

    Platforms

    • Red Hat AI
    • Red Hat Enterprise Linux
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform
    • See all products

    Build

    • Developer Sandbox
    • Developer tools
    • Interactive tutorials
    • API catalog

    Quicklinks

    • Learning resources
    • E-books
    • Cheat sheets
    • Blog
    • Events
    • Newsletter

    Communicate

    • About us
    • Contact sales
    • Find a partner
    • Report a website issue
    • Site status dashboard
    • Report a security problem

    RED HAT DEVELOPER

    Build here. Go anywhere.

    We serve the builders. The problem solvers who create careers with code.

    Join us if you’re a developer, software engineer, web designer, front-end designer, UX designer, computer scientist, architect, tester, product manager, project manager or team lead.

    Sign me up

    Red Hat legal and privacy links

    • About Red Hat
    • Jobs
    • Events
    • Locations
    • Contact Red Hat
    • Red Hat Blog
    • Inclusion at Red Hat
    • Cool Stuff Store
    • Red Hat Summit
    © 2026 Red Hat

    Red Hat legal and privacy links

    • Privacy statement
    • Terms of use
    • All policies and guidelines
    • Digital accessibility

    Chat Support

    Please log in with your Red Hat account to access chat support.