Deploying hosted control planes on non-bare-metal agent machines
To maintain infrastructure flexibility while using existing virtualization layers, you can deploy hosted control planes on non-bare-metal Agent machines. You can use the management benefits of the Agent platform when running on virtualized environments or other cloud-based virtual machines.
Hosted control planes on non-bare-metal agent machines is a Technology Preview feature only. Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process.
For more information about the support scope of Red Hat Technology Preview features, see Technology Preview Features Support Scope.
You can deploy hosted control planes by configuring a cluster to function as a hosting cluster. The hosting cluster is an OpenShift Container Platform cluster where the control planes are hosted. The hosting cluster is also known as the management cluster.
The management cluster is not the same thing as the managed cluster. A managed cluster is a cluster that the hub cluster manages.
The hosted control planes feature is enabled by default.
The multicluster engine Operator supports only the default local-cluster managed hub cluster. On Red Hat Advanced Cluster Management (RHACM) 2.10, you can use the local-cluster managed hub cluster as the hosting cluster.
A hosted cluster is an OpenShift Container Platform cluster with its API endpoint and control plane that are hosted on the hosting cluster. The hosted cluster includes the control plane and its corresponding data plane. You can use the multicluster engine Operator console or the hcp command-line interface (CLI) to create a hosted cluster.
The hosted cluster is automatically imported as a managed cluster. If you want to disable this automatic import feature, see "Disabling the automatic import of hosted clusters into multicluster engine Operator".
Additional resources
Preparing to deploy hosted control planes on non-bare-metal agent machines
Before you deploy hosted control planes on non-bare-metal agent machines, ensure that you understand requirements for the deployment.
- You can add agent machines as a worker node to a hosted cluster by using the Agent platform. Agent machine represents a host booted with a Discovery Image and ready to be provisioned as an OpenShift Container Platform node. The Agent platform is part of the central infrastructure management service. For more information, see "Enabling the central infrastructure management service".
- All hosts that are not bare metal require a manual boot with a Discovery Image ISO that the central infrastructure management provides.
- When you scale up the node pool, a machine is created for every replica. For every machine, the Cluster API provider finds and installs an Agent that is approved, is passing validations, is not currently in use, and meets the requirements that are specified in the node pool specification. You can monitor the installation of an Agent by checking its status and conditions.
- When you scale down a node pool, Agents are unbound from the corresponding cluster. Before you can reuse the Agents, you must restart them by using the Discovery image.
- When you configure storage for hosted control planes, consider the recommended etcd practices. To ensure that you meet the latency requirements, dedicate a fast storage device to all hosted control planes etcd instances that run on each control-plane node. You can use LVM storage to configure a local storage class for hosted etcd pods. For more information, see "Recommended etcd practices" and "Persistent storage using logical volume manager storage" in the OpenShift Container Platform documentation.
Additional resources
- Enabling the central infrastructure management service (Red Hat Advanced Cluster Management documentation)
- Recommended etcd practices
- Persistent storage using logical volume manager storage
Prerequisites for deploying hosted control planes on non-bare-metal agent machines
Before you deploy hosted control planes on non-bare-metal agent machines, ensure you meet the prerequisites.
- You must have multicluster engine for Kubernetes Operator 2.5 or later installed on an OpenShift Container Platform cluster. You can install the multicluster engine Operator as an Operator from the OpenShift Container Platform software catalog.
- You must have at least one managed OpenShift Container Platform cluster for the multicluster engine Operator. The
local-clustermanagement cluster is automatically imported. For more information about thelocal-cluster, see "Advanced configuration" in the Red Hat Advanced Cluster Management documentation. You can check the status of your management cluster by running the following command:$ oc get managedclusters local-cluster - You have enabled central infrastructure management. For more information, see "Enabling the central infrastructure management service" in the Red Hat Advanced Cluster Management documentation.
- You have installed the
hcpcommand-line interface. - Your hosted cluster has a cluster-wide unique name.
- You are running the management cluster and workers on the same infrastructure.
Additional resources
- Advanced configuration (Red Hat Advanced Cluster Management documentation)
- Enabling the central infrastructure management service (Red Hat Advanced Cluster Management documentation)
Firewall, port, and service requirements for non-bare-metal agent machines
You must meet the firewall and port requirements so that ports can communicate between the management cluster, the control plane, and hosted clusters.
Services run on their default ports. However, if you use the NodePort publishing strategy, services run on the port that is assigned by the NodePort service.
Use firewall rules, security groups, or other access controls to restrict access to only required sources. Avoid exposing ports publicly unless necessary. For production deployments, use a load balancer to simplify access through a single IP address.
A hosted control plane exposes the following services on non-bare-metal agent machines:
APIServer- The
APIServerservice runs on port 6443 by default and requires ingress access for communication between the control plane components. - If you use MetalLB load balancing, allow ingress access to the IP range that is used for load balancer IP addresses.
- The
OAuthServer- The
OAuthServerservice runs on port 443 by default when you use the route and ingress to expose the service. - If you use the
NodePortpublishing strategy, use a firewall rule for theOAuthServerservice.
- The
Konnectivity- The
Konnectivityservice runs on port 443 by default when you use the route and ingress to expose the service. - The
Konnectivityagent establishes a reverse tunnel to allow the control plane to access the network for the hosted cluster. The agent uses egress to connect to theKonnectivityserver. The server is exposed by using either a route on port 443 or a manually assignedNodePort. - If the cluster API server address is an internal IP address, allow access from the workload subnets to the IP address on port 6443.
- If the address is an external IP address, allow egress on port 6443 to that external IP address from the nodes.
- The
Ignition- The
Ignitionservice runs on port 443 by default when you use the route and ingress to expose the service. - If you use the
NodePortpublishing strategy, use a firewall rule for theIgnitionservice.
- The
You do not need the following services on non-bare-metal agent machines:
OVNSbDbOIDC
Infrastructure requirements for non-bare-metal agent machines
The Agent platform does not create any infrastructure, but it has several requirements.
- Agents: An Agent represents a host that is booted with a discovery image and is ready to be provisioned as an OpenShift Container Platform node.
- DNS: The API and ingress endpoints must be routable.
Additional resources
- Recommended etcd practices
- Persistent storage using logical volume manager storage
- Disabling the automatic import of hosted clusters into multicluster engine Operator
- Manually enabling the hosted control planes feature
- Disabling the hosted control planes feature
DNS configuration on non-bare-metal agent machines
The API Server for the hosted cluster is exposed as a NodePort service. A DNS entry must exist for api.<hosted_cluster_name>.<basedomain> that points to destination where the API Server can be reached.
The DNS entry can be as simple as a record that points to one of the nodes in the managed cluster that is running the hosted control plane. The entry can also point to a load balancer that is deployed to redirect incoming traffic to the ingress pods.
The following examples show how to configure DNS for specific environments.
api.example.krnl.es. IN A 192.168.122.20
api.example.krnl.es. IN A 192.168.122.21
api.example.krnl.es. IN A 192.168.122.22
api-int.example.krnl.es. IN A 192.168.122.20
api-int.example.krnl.es. IN A 192.168.122.21
api-int.example.krnl.es. IN A 192.168.122.22
`*`.apps.example.krnl.es. IN A 192.168.122.23
api.example.krnl.es. IN A 2620:52:0:1306::5
api.example.krnl.es. IN A 2620:52:0:1306::6
api.example.krnl.es. IN A 2620:52:0:1306::7
api-int.example.krnl.es. IN A 2620:52:0:1306::5
api-int.example.krnl.es. IN A 2620:52:0:1306::6
api-int.example.krnl.es. IN A 2620:52:0:1306::7
`*`.apps.example.krnl.es. IN A 2620:52:0:1306::10
host-record=api-int.hub-dual.dns.base.domain.name,192.168.126.10
host-record=api.hub-dual.dns.base.domain.name,192.168.126.10
address=/apps.hub-dual.dns.base.domain.name/192.168.126.11
dhcp-host=aa:aa:aa:aa:10:01,ocp-master-0,192.168.126.20
dhcp-host=aa:aa:aa:aa:10:02,ocp-master-1,192.168.126.21
dhcp-host=aa:aa:aa:aa:10:03,ocp-master-2,192.168.126.22
dhcp-host=aa:aa:aa:aa:10:06,ocp-installer,192.168.126.25
dhcp-host=aa:aa:aa:aa:10:07,ocp-bootstrap,192.168.126.26
host-record=api-int.hub-dual.dns.base.domain.name,2620:52:0:1306::2
host-record=api.hub-dual.dns.base.domain.name,2620:52:0:1306::2
address=/apps.hub-dual.dns.base.domain.name/2620:52:0:1306::3
dhcp-host=aa:aa:aa:aa:10:01,ocp-master-0,[2620:52:0:1306::5]
dhcp-host=aa:aa:aa:aa:10:02,ocp-master-1,[2620:52:0:1306::6]
dhcp-host=aa:aa:aa:aa:10:03,ocp-master-2,[2620:52:0:1306::7]
dhcp-host=aa:aa:aa:aa:10:06,ocp-installer,[2620:52:0:1306::8]
dhcp-host=aa:aa:aa:aa:10:07,ocp-bootstrap,[2620:52:0:1306::9]
For this configuration, be sure to include DNS entries for both IPv4 and IPv6.
Defining a custom DNS name
As a cluster administrator, you can create a hosted cluster with an external API DNS name that differs from the internal endpoint that gets used for node bootstraps and control plane communication.
You might want to define a different DNS name for the following reasons:
- To replace the user-facing TLS certificate with one from a public CA without breaking the control plane functions that bind to the internal root CA
- To support split-horizon DNS and NAT scenarios
- To ensure a similar experience to standalone control planes, where you can use functions, such as the
Show Login Commandfunction, with the correctkubeconfigand DNS configuration
You can define a DNS name either during your initial setup or during postinstallation operations, by entering a domain name in the kubeAPIServerDNSName parameter of a HostedCluster object.
Prerequisites
- You have a valid TLS certificate that covers the DNS name that you set in the
kubeAPIServerDNSNameparameter. - You have a resolvable DNS name URI that can reach and point to the correct address.
Procedure
-
In the specification for the
HostedClusterobject, add thekubeAPIServerDNSNameparameter and the address for the domain and specify which certificate to use, as shown in the following example:#...spec:configuration:apiServer:servingCerts:namedCertificates:- names:- xxx.example.com- yyy.example.comservingCertificate:name: <my_serving_certificate>kubeAPIServerDNSName: <custom_address>The value for the
kubeAPIServerDNSNameparameter must be a valid and addressable domain.After you define the
kubeAPIServerDNSNameparameter and specify the certificate, the Control Plane Operator controllers create akubeconfigfile namedcustom-admin-kubeconfig, where the file gets stored in theHostedControlPlanenamespace. The generation of certificates happen from the root CA, and theHostedControlPlanenamespace manages their expiration and renewal.The Control Plane Operator reports a new
kubeconfigfile namedCustomKubeconfigin theHostedControlPlanenamespace. That file uses the defined new server in thekubeAPIServerDNSNameparameter.A reference for the custom
kubeconfigfile exists in thestatusparameter asCustomKubeconfigof theHostedClusterobject. TheCustomKubeConfigparameter is optional, and you can add the parameter only if thekubeAPIServerDNSNameparameter is not empty. After you set theCustomKubeConfigparameter, the parameter triggers the generation of a secret named<hosted_cluster_name>-custom-admin-kubeconfigin theHostedClusternamespace. You can use the secret to access theHostedClusterAPI server. If you remove theCustomKubeConfigparameter during postinstallation operations, deletion of all related secrets and status references occur.noteDefining a custom DNS name does not directly impact the data plane, so no expected rollouts occur. The
HostedControlPlanenamespace receives the changes from the HyperShift Operator and deletes the corresponding parameters.If you remove the
kubeAPIServerDNSNameparameter from the specification for theHostedClusterobject, all newly generated secrets and theCustomKubeconfigreference are removed from the cluster and from thestatusparameter.
Creating a hosted cluster on non-bare-metal agent machines by using the CLI
When you create a hosted cluster with the Agent platform, the HyperShift Operator installs the Agent Cluster API provider in the hosted control plane namespace. You can create a hosted cluster on bare metal or import one.
- Each hosted cluster must have a cluster-wide unique name. A hosted cluster name cannot be the same as any existing managed cluster in order for multicluster engine Operator to manage it.
- Do not use
clustersas a hosted cluster name. - A hosted cluster cannot be created in the namespace of a multicluster engine Operator managed cluster.
Procedure
-
Create the hosted control plane namespace by entering the following command:
$ oc create ns <hosted_cluster_namespace>-<hosted_cluster_name>Replace
<hosted_cluster_namespace>with your hosted cluster namespace name, for example,my-hosted-cluster-namespace. Replace<hosted_cluster_name>with your hosted cluster name. -
Create a hosted cluster by entering the following command:
$ hcp create cluster agent \--name=my-hosted-cluster \--pull-secret=/user/name/pullsecret \--agent-namespace=clusters-example \--base-domain=krnl.es \--api-server-address=api.my-hosted-cluster.krnl.es \--etcd-storage-class=lvm-storageclass \--ssh-key ~/.ssh/id_rsa.pub \--namespace my-hosted-cluster-namespace \--control-plane-availability-policy HighlyAvailable \--release-image=quay.io/openshift-release-dev/ocp-release:4.22.0-multi \--disable-cluster-capabilities=<capability> \--enable-cluster-capabilities=<capability> \--node-pool-replicas 3--namespecifies the name of your hosted cluster.--pull-secretspecifies the path to your pull secret.--agent-namespacespecifies your hosted control plane namespace. Ensure that agents are available in this namespace by using theoc get agent -n <hosted-control-plane-namespace>command.--base-domainspecifies your base domain.--api-server-addressThe--api-server-addressflag defines the IP address that is used for the Kubernetes API communication in the hosted cluster. If you do not set the--api-server-addressflag, you must log in to connect to the management cluster.--etcd-storage-classspecifies the etcd storage class name. Verify that you have a default storage class configured for your cluster. Otherwise, you might end up with pending PVCs.--ssh_keyspecifies the path to your SSH public key. The default file path is~/.ssh/id_rsa.pub.--namespacespecifies your hosted cluster namespace.--control-plane-availability-policyspecifies the availability policy for the hosted control plane components. Supported options areSingleReplicaandHighlyAvailable. The default value isHighlyAvailable.--release-imagespecifies the supported OpenShift Container Platform version that you want to use.--disable-cluster-capabilitiesspecifies that you want to disable optional capabilities in the hosted cluster. This flag is optional. For more information, see "Capabilities for hosted clusters".--enable-cluster-capabilitiesspecifies that you want to enable optional capabilities in the hosted cluster. This flag is optional. For more information, see "Capabilities for hosted clusters".--node-pool-replicasspecifies the node pool replica count. You must specify the replica count as0or greater to create the same number of replicas. Otherwise, no node pools are created.
Verification
-
After a few moments, verify that your hosted control plane pods are up and running by entering the following command:
$ oc -n <hosted_cluster_namespace>-<hosted_cluster_name> get podsExample outputNAME READY STATUS RESTARTS AGEcatalog-operator-6cd867cc7-phb2q 2/2 Running 0 2m50scontrol-plane-operator-f6b4c8465-4k5dh 1/1 Running 0 4m32s
Additional resources
- Manually importing a hosted cluster
- Configuring a custom API server certificate in a hosted cluster
- Extracting the release image digest
Creating a hosted cluster on non-bare-metal agent machines by using the web console
You can create a hosted cluster on non-bare-metal agent machines by using the OpenShift Container Platform web console.
Prerequisites
- You have access to the cluster with
cluster-adminprivileges. - You have access to the OpenShift Container Platform web console.
Procedure
-
Open the OpenShift Container Platform web console and log in by entering your administrator credentials.
-
In the console header, select All Clusters.
-
Click Infrastructure → Clusters.
-
Click Create cluster Host inventory → Hosted control plane. The Create cluster page is displayed.
-
On the Create cluster page, follow the prompts to enter details about the cluster, node pools, networking, and automation. As you enter details about the cluster, you might find the following tips useful:
- If you want to use predefined values to automatically populate fields in the console, you can create a host inventory credential. For more information, see Creating a credential for an on-premises environment.
- On the Cluster details page, the pull secret is your OpenShift Container Platform pull secret that you use to access OpenShift Container Platform resources. If you selected a host inventory credential, the pull secret is automatically populated.
- On the Node pools page, the namespace contains the hosts for the node pool. If you created a host inventory by using the console, the console creates a dedicated namespace.
- On the Networking page, you select an API server publishing strategy. The API server for the hosted cluster can be exposed either by using an existing load balancer or as a service of the
NodePorttype. A DNS entry must exist for theapi.<hosted_cluster_name>.<basedomain>setting that points to the destination where the API server can be reached. This entry can be a record that points to one of the nodes in the management cluster or a record that points to a load balancer that redirects incoming traffic to the Ingress pods.
-
Review your entries and click Create. The Hosted cluster view is displayed.
-
Monitor the deployment of the hosted cluster in the Hosted cluster view. If you do not see information about the hosted cluster, ensure that All Clusters is selected, and click the cluster name. Wait until the control plane components are ready. This process can take a few minutes.
-
To view the node pool status, scroll to the NodePool section. The process to install the nodes takes about 10 minutes. You can also click Nodes to confirm whether the nodes joined the hosted cluster.
Additional resources
- Creating a credential for an on-premises environment (Red Hat Advanced Cluster Management documentation)
- Accessing the web console
- Configuring a custom API server certificate in a hosted cluster
Creating a hosted cluster on non-bare-metal agent machines by using a mirror registry
You can use a mirror registry to create a hosted cluster on non-bare-metal agent machines by specifying the --image-content-sources flag in the hcp create cluster command.
Procedure
-
Create a YAML file to define Image Content Source Policies (ICSP). See the following example:
- mirrors:- brew.registry.redhat.iosource: registry.redhat.io- mirrors:- brew.registry.redhat.iosource: registry.stage.redhat.io- mirrors:- brew.registry.redhat.iosource: registry-proxy.engineering.redhat.com -
Save the file as
icsp.yaml. This file contains your mirror registries. -
To create a hosted cluster by using your mirror registries, run the following command:
$ hcp create cluster agent \--name=my-hosted-cluster \--pull-secret=/user/name/pullsecret\--agent-namespace=clusters-example \--base-domain=krnl.es \--api-server-address=api.my-hosted-cluster.krnl.es \--image-content-sources icsp.yaml \--ssh-key ~/.ssh/id_rsa.pub \--namespace my-hosted-cluster-namespace \--release-image=quay.io/openshift-release-dev/ocp-release:4.22.0-multi--namespecifies the name of your hosted cluster.--pull-secretspecifies the path to your pull secret.--agent-namespacespecifies your hosted control plane namespace. Ensure that agents are available in this namespace by using theoc get agent -n <hosted-control-plane-namespace>command.--base-domainspecifies your base domain.--api-server-addressdefines the IP address that is used for the Kubernetes API communication in the hosted cluster. If you do not set the--api-server-addressflag, you must log in to connect to the management cluster.--image-content-sourcesspecifies theicsp.yamlfile that defines ICSP and your mirror registries.--ssh-keyspecifies the path to your SSH public key. The default file path is~/.ssh/id_rsa.pub.--namespacespecifies your hosted cluster namespace.--release-imagespecifies the supported OpenShift Container Platform version that you want to use. If you are using a disconnected environment, replace the version with the digest image. To extract the OpenShift Container Platform release image digest, see "Extracting the release image digest".
Additional resources
Capabilities for hosted clusters
To reduce resource consumption and prevent unnecessary Operators and operands from being deployed, administrators can enable or disable optional OpenShift Container Platform components when they create a hosted cluster.
When capabilities are not specified on a HostedCluster resource, the cluster uses the OpenShift Container Platform version’s DefaultCapabilitySet settings, excluding the baremetal capability. As a result, most optional components are enabled by default.
Capabilities are immutable after cluster creation. You cannot change them after you create the HostedCluster resource.
Capabilities that you can enable or disable for a hosted cluster
Familiarize yourself with the supported capabilities that you can enable or disable for a HostedCluster resource.
The capabilities are described in the following table:
| Capability | Description |
|---|---|
ImageRegistry | The OpenShift Image Registry Operator and its operands, including cloud storage infrastructure, such as S3 buckets and Identity and Access Management (IAM) users. |
openshift-samples | The OpenShift Samples Operator, which manages example ImageStreams and templates. |
Insights | The Insights Operator, which collects and uploads cluster telemetry data. |
baremetal | The Bare Metal Infrastructure Operator. This capability is excluded from the default set. If needed, you must explicitly enable it. |
Console | The OpenShift Web Console Operator and its operands. |
NodeTuning | The Node Tuning Operator, which manages node-level performance tuning by using TuneD and performance profiles. |
Ingress | The OpenShift Ingress Operator, which manages the default router of the cluster. |
The following rules apply when you combine capability settings:
- No overlap
- A capability cannot be in both the
enabledanddisabledlists simultaneously. - Console requires Ingress
- You can disable the
Ingresscapability only if theConsolecapability is also disabled because the console depends on Ingress. - Version requirement
- You must use OpenShift Container Platform 4.20 or later to disable any of the following capabilities:
openshift-samples,Insights,Console,NodeTuning, andIngress. You can disableImageRegistryandbaremetalon versions earlier than 4.20. - Bare metal default exclusion
- The
baremetalcapability is excluded from the default set. You can add it to the cluster by explicitly enabling it.
Setting capabilities for a hosted cluster
To reduce unnecessary resource consumption, you can control which optional capabilities are enabled for a hosted cluster when you create the cluster.
Capabilities are immutable after cluster creation. You cannot change them after you create the HostedCluster resource.
You can specify which capabilities are enabled by either using the hcp command-line interface (CLI) or by setting the HostedCluster manifest.
Procedure
-
To specify which capabilities are enabled in a hosted cluster by using the CLI, you can add the
--disable-cluster-capabilitiesflag, the--enable-cluster-capabilitiesflag, or both. The following example shows how to disable theImageRegistry,Console, andIngresscapabilities and enable thebaremetalcapability while you create a hosted cluster on AWS by using thehcpcommand-line interface:$ hcp create cluster aws \--name my-hosted-cluster \--disable-cluster-capabilities=ImageRegistry,Console,Ingress \--enable-cluster-capabilities=baremetalYou can specify multiple capabilities as a comma-separated list. The supported values are as follows:
ImageRegistryopenshift-samplesInsightsbaremetalConsoleNodeTuningIngress
-
To specify which capabilities are enabled in a hosted cluster by using the
HostedClustermanifest at cluster creation time, see the following examples:- To directly disable capabilities in a hosted cluster, add the
spec.capabilities.disabledsection in theHostedClusterresource:apiVersion: hypershift.openshift.io/v1beta1kind: HostedClustermetadata:name: my-hosted-clusternamespace: my-cluster-namespacespec:capabilities:disabled:- ImageRegistry- Console- Ingress# ... - To explicitly enable a capability that is not part of the default set of capabilities, such as the
baremetalcapability, see the following example:apiVersion: hypershift.openshift.io/v1beta1kind: HostedClustermetadata:name: my-hosted-clusternamespace: my-cluster-namespacespec:capabilities:enabled:- baremetal# ... - You can use both
enabledanddisabledif no capabilities are in both lists. See the following example:apiVersion: hypershift.openshift.io/v1beta1kind: HostedClustermetadata:name: my-hosted-clusternamespace: my-cluster-namespacespec:capabilities:enabled:- baremetaldisabled:- ImageRegistry- openshift-samples# ...
- To directly disable capabilities in a hosted cluster, add the
Verifying hosted cluster creation on non-bare-metal agent machines
After the deployment process is complete, you can verify that the hosted cluster was created successfully.
Follow these steps a few minutes after you create the hosted cluster.
Procedure
-
Obtain the
kubeconfigfile for your new hosted cluster by entering the following command:$ oc extract -n <hosted_cluster_namespace> \secret/<hosted_cluster_name>-admin-kubeconfig --to=- \> kubeconfig-<hosted_cluster_name> -
Use the
kubeconfigfile to view the cluster Operators of the hosted cluster. Enter the following command:$ oc get co --kubeconfig=kubeconfig-<hosted_cluster_name>Example outputNAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGEconsole 4.10.26 True False False 2m38scsi-snapshot-controller 4.10.26 True False False 4m3sdns 4.10.26 True False False 2m52s -
View the running pods on your hosted cluster by entering the following command:
$ oc get pods -A --kubeconfig=kubeconfig-<hosted_cluster_name>Example outputNAMESPACE NAME READY STATUS RESTARTS AGEkube-system konnectivity-agent-khlqv 0/1 Running 0 3m52sopenshift-cluster-samples-operator cluster-samples-operator-6b5bcb9dff-kpnbc 2/2 Running 0 20mopenshift-monitoring alertmanager-main-0 6/6 Running 0 100sopenshift-monitoring openshift-state-metrics-677b9fb74f-qqp6g 3/3 Running 0 104s