πŸ“šBook Signing at KubeCon EU 2026Meet us at Booking.com HQ (Mon 18:30-21:00) & vCluster booth #521 (Tue 24 Mar, 12:30-1:30pm) β€” free book giveaway!RSVP Booking.com Event
Deployments intermediate ⏱ 20 minutes K8s 1.28+

OpenShift 4.20: New Features and Upgrade Guide

OpenShift 4.20 (EUS) new features, Kubernetes 1.33 alignment, the upgrade path from 4.18, and what administrators need to know before upgrading.

By Luca Berton β€’ β€’ πŸ“– 6 min read

πŸ’‘ Quick Answer: OpenShift 4.20 is an EUS (Extended Update Support) release based on Kubernetes 1.33. As an even-numbered release, it gets 18 months of support. Upgrade path: 4.18 (EUS) β†’ 4.19 β†’ 4.20, or EUS-to-EUS 4.18 β†’ 4.20 (recommended for production). Key highlights: enhanced GPU/AI scheduling, Gateway API GA, improved MachineConfig management, and OVN-Kubernetes enhancements.

The Problem

Each OpenShift minor release brings new Kubernetes APIs, operator changes, deprecated features, and infrastructure improvements. Administrators need to understand what changed, what broke, and how to upgrade safely β€” especially for EUS releases that production clusters depend on for 18 months.

Release Overview

PropertyValue
VersionOpenShift Container Platform 4.20
Kubernetes version1.33
RHCOS baseRHEL 9.6
Release typeEUS (Extended Update Support)
Support duration18 months
GA dateQ2 2026 (estimated)
Previous EUS4.18
Next EUS4.22
flowchart LR
    V418["4.18<br/>(EUS, K8s 1.31)"] -->|"Minor"| V419["4.19<br/>(K8s 1.32)"]
    V419 -->|"Minor"| V420["4.20<br/>(EUS, K8s 1.33)"]
    V418 -.->|"EUS-to-EUS<br/>(recommended)"| V420
    V420 -->|"Minor"| V421["4.21<br/>(K8s 1.34)"]
    V421 -->|"Minor"| V422["4.22<br/>(EUS, K8s 1.35)"]

New Features and Enhancements

Kubernetes 1.33 Alignment

  • Sidecar containers GA β€” initContainers with restartPolicy: Always now fully stable
  • In-place pod resize β€” Change CPU/memory limits without restarting pods (beta)
  • Improved scheduler throughput β€” Better handling of large-scale clusters (5000+ nodes)
  • PodReadyToStartContainers condition β€” New condition for precise pod lifecycle tracking
  • CRD validation ratcheting GA β€” Existing objects with old invalid values pass validation during updates

Networking

  • Gateway API GA β€” HTTPRoute, GRPCRoute, TLSRoute fully supported by OVN-Kubernetes
  • OVN-Kubernetes improvements β€” Better multi-homing for secondary network interfaces
  • Network observability operator β€” Enhanced flow collection, DNS tracking, RTT metrics
  • AdminNetworkPolicy GA β€” Cluster-scoped network policies for platform administrators
  • Service mesh integration β€” Improved Istio/Sail Operator compatibility

AI/GPU Infrastructure

  • NVIDIA GPU Operator 24.9+ β€” Improved support for multi-instance GPU (MIG)
  • Dynamic Resource Allocation (DRA) β€” Enhanced GPU scheduling with structured parameters
  • Topology-aware scheduling improvements β€” Better GPU/NIC co-location for RDMA workloads
  • InstaSlice operator β€” Dynamic MIG profile management (Tech Preview)

Security

  • Pod Security Admission enforcement β€” Updated baseline and restricted profiles
  • Confidential containers (CoCo) β€” Enhanced support for Kata + SEV/TDX (Tech Preview)
  • Cert-manager operator β€” Now included as a supported component
  • FIPS 140-3 compliance β€” Updated cryptographic modules
  • Token request API improvements β€” Better bound service account tokens

Storage

  • CSI driver updates β€” NFS, Ceph, AWS EBS/EFS with enhanced performance
  • Shared resource CSI driver GA β€” Share Secrets and ConfigMaps across namespaces
  • VolumeGroupSnapshot GA β€” Consistent snapshots across multiple PVCs
  • ReadWriteOncePod access mode GA β€” Single-pod PVC access for databases

Developer Experience

  • OpenShift Builds v2 β€” Shipwright-based builds as first-class citizen
  • Developer perspective improvements β€” Enhanced topology view, Helm chart management
  • Pipelines (Tekton) 1.17 β€” Improved matrix fan-out, step-level resource limits
  • GitOps (ArgoCD) 2.13 β€” ApplicationSet improvements, multi-source apps GA

Operator Framework

  • OLM v1 GA β€” New operator lifecycle management with catalog-based resolution
  • Cluster Extensions API β€” Simpler operator installation without subscriptions
  • Operator SDK updates β€” Enhanced scorecard, Ansible operator improvements

Upgrade Path

# Pre-flight checks
oc get co | grep -v "True.*False.*False"    # All operators healthy
oc adm upgrade                               # Check available versions

# Check for deprecated APIs used in 4.19/4.20
oc get apirequestcounts -o custom-columns='RESOURCE:.metadata.name,REMOVEDIN:.status.removedInRelease,REQUESTCOUNT:.status.requestCount' | grep -v "<none>" | sort

# Backup etcd
oc debug node/master-0 -- chroot /host /usr/local/bin/cluster-backup.sh /home/core/backup

# 1. Pause worker MCP
oc patch mcp worker --type merge -p '{"spec":{"paused":true}}'

# 2. Set channel
oc adm upgrade channel eus-4.20

# 3. Upgrade control plane through 4.19 to 4.20
oc adm upgrade --to-latest
# CP goes 4.18 β†’ 4.19.x β†’ waits for next

# 4. Once CP is on 4.19, upgrade to 4.20
oc adm upgrade --to-latest
# CP goes 4.19 β†’ 4.20.x

# 5. Wait for CP completion
oc wait --for=condition=Progressing=False clusterversion version --timeout=90m

# 6. Unpause workers (they jump 4.18 β†’ 4.20, single reboot)
oc patch mcp worker --type merge -p '{"spec":{"paused":false}}'

# 7. Monitor
watch 'oc get mcp; echo "---"; oc get nodes -o wide'

Sequential Upgrade (4.19 β†’ 4.20)

# If already on 4.19:
oc adm upgrade channel stable-4.20
oc adm upgrade --to-latest

# Monitor
oc get clusterversion -w
oc get co
oc get mcp

Deprecated and Removed Features

FeatureStatus in 4.20Action Required
Jenkins operatorRemovedMigrate to Tekton/GitOps
OpenShift Builds v1 (BuildConfig)DeprecatedMigrate to Builds v2 (Shipwright)
OLM v0 subscriptionsDeprecatedPrepare for OLM v1
In-tree cloud providersRemovedUse external cloud-controller-managers
networking.k8s.io/v1beta1 IngressRemoved (K8s 1.22+)Use networking.k8s.io/v1
policy/v1beta1 PodDisruptionBudgetRemoved (K8s 1.25+)Use policy/v1

Notable Technical Changes

  • RHCOS rebased on RHEL 9.6 β€” Updated kernel, systemd, container runtime
  • CRI-O 1.33 β€” Container runtime aligned with Kubernetes
  • etcd 3.5.x β€” Latest stable with improved compaction and defrag
  • CoreDNS 1.12 β€” Enhanced caching and plugin support
  • Prometheus stack update β€” Prometheus 2.55+, Alertmanager 0.28+

Post-Upgrade Verification

# 1. Version confirmation
oc get clusterversion

# 2. All operators available
oc get co -o custom-columns='NAME:.metadata.name,AVAIL:.status.conditions[?(@.type=="Available")].status,PROG:.status.conditions[?(@.type=="Progressing")].status,DEG:.status.conditions[?(@.type=="Degraded")].status' | column -t

# 3. All nodes at target version
oc get nodes -o custom-columns='NAME:.metadata.name,VERSION:.status.nodeInfo.kubeletVersion,OS:.status.nodeInfo.osImage'

# 4. MCP completed
oc get mcp

# 5. Workload health
oc get pods -A --field-selector=status.phase!=Running,status.phase!=Succeeded | grep -v Completed

# 6. Test new features
kubectl get gatewayclasses    # Gateway API GA
kubectl get volumegroupsnapshots  # VolumeGroupSnapshot

Common Issues

IssueCauseFix
EUS-to-EUS upgrade stuckWorker MCP unpaused too earlyPause MCP, wait for CP 4.20, then unpause
Operator Degraded after upgradeOperator not compatible with 4.20Check operator subscription, update to compatible version
Jenkins pipelines brokenJenkins operator removedMigrate to Tekton Pipelines
BuildConfig not workingBuilds v1 deprecatedStill works but migrate to Shipwright
etcd defrag neededLarge etcd database after upgradeoc debug node/master-0 -- etcdctl defrag

Best Practices

  • EUS-to-EUS for production β€” workers reboot once, minimal disruption
  • Test in staging with production workloads β€” not just empty clusters
  • Migrate deprecated APIs before upgrading β€” don’t carry technical debt
  • Plan for 18-month EUS cycle β€” schedule the next upgrade before support expires
  • Review operator compatibility β€” check Red Hat compatibility matrix
  • Backup etcd β€” always, before every minor upgrade

Key Takeaways

  • 4.20 is EUS β€” 18 months support, recommended for production
  • Based on Kubernetes 1.33 with sidecar containers GA and in-place pod resize beta
  • Gateway API GA β€” production-ready alternative to Ingress
  • Upgrade via EUS-to-EUS (4.18β†’4.20) for single worker reboot
  • Jenkins operator removed β€” migrate to Tekton
  • RHCOS rebased on RHEL 9.6
#openshift #openshift-4.20 #eus #upgrade #release-notes
Luca Berton
Written by Luca Berton

Principal Solutions Architect specializing in Kubernetes, AI/GPU infrastructure, and cloud-native platforms. Author of Kubernetes Recipes and creator of CopyPasteLearn courses.

Kubernetes Recipes book cover

Want More Kubernetes Recipes?

This recipe is from Kubernetes Recipes, our 750-page practical guide with hundreds of production-ready patterns.

Luca Berton Ansible Pilot Ansible by Example Open Empower K8s Recipes Terraform Pilot CopyPasteLearn ProteinLens