惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Cloudflare Blog
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
博客园 - 司徒正美
V
Visual Studio Blog
G
Google Developers Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客
aimingoo的专栏
aimingoo的专栏
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
S
SegmentFault 最新的问题
T
The Blog of Author Tim Ferriss
D
Docker
Vercel News
Vercel News
Recent Announcements
Recent Announcements
Last Week in AI
Last Week in AI
爱范儿
爱范儿
J
Java Code Geeks
大猫的无限游戏
大猫的无限游戏

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
OpenShift Upgrade Deep Dive: 4.19 4.20 (Step-by-Step + Wh...
Ashish Nair · 2026-05-07 · via DEV Community

Ashish Nair

Upgrading Red Hat OpenShift isn’t just about running oc adm upgrade.
Behind the scenes, a carefully orchestrated process ensures your cluster stays available while everything gets updated.

In this guide, I’ll walk through:

  • Real Upgrade path 4.19 to 4.20
  • Handling AdminAckRequired blockers
  • Setting upgrade channels properly
  • Understanding how OpenShift upgrades nodes (masters + workers)
  • Why Pod Disruption Budgets (PDBs) can make or break your upgrade

Pre-Upgrade:

  • Check that none of the operators are "Degraded"
  • Check PDB's.
  • Check Failing Pods.
  • Run a must gather (oc adm must-gather).

1. Check current status

#oc adm upgrade

Enter fullscreen mode Exit fullscreen mode

The output will look something like:

Cluster version is 4.19.27

Upgradeable=False

Reason: AdminAckRequired
Message: The admissionregistration.k8s.io/v1beta1 group version is deprecated in 4.19 and will be removed in 4.20.Any clients using the v1beta1 version of these resources must be updated to use the corresponding v1 version instead. See https://access.redhat.com/articles/7130599 for more information.

Enter fullscreen mode Exit fullscreen mode

This essentially means our upgrade, usually Redhat will compliment the message with a knowledgebase as you can see in the above output.That knowledgebase will actually give you pointers on how to unblock.

2. Acknowledgement and Approval

The knowledgebase actually asked use to patch a configmap named admin-acks.

oc -n openshift-config patch cm admin-acks \
  --patch '{"data":{"ack-4.19-admissionregistration-v1beta1-api-removals-in-4.20":"true"}}' \
  --type=merge

Enter fullscreen mode Exit fullscreen mode

3. Setting the upgrade channel

At the time when I ran this upgrade updates were only available in the fast channel but In production consider using stable or EUS channels.

oc adm upgrade channel fast-4.20

Enter fullscreen mode Exit fullscreen mode

Verify by running the "oc adm upgrade" command again. Output should show something on these lines:

Channel: fast-4.20

VERSION     IMAGE
  4.20.18     quay.io/openshift-release-dev/ocp-release@sha256:2dab927fd20984e247301b2483083b71f942a1f550f5d8a1db42897edc042e39

Enter fullscreen mode Exit fullscreen mode

If I could explain the relevance of channels in one word:

Fast channels - Latest features but mostly used for Dev/Test environments
Stable channels - Production grade upgrades
EUS channels - LTS upgrades

4. Trigger the upgrade

oc adm upgrade --to=4.20.18

Enter fullscreen mode Exit fullscreen mode

Now, this is where most articles/guides stop. Because the next steps are taken care by openshift and most Engineers leave their desk for coffee breaks here. If you ask me, this part is equally important to understand, I will briefly walk though what openshift does "Under the Hood".

4.1 Upgrades the control planes first.

Suppose you have 3 masters, It will upgrade one master at a time, so that the cluster quorum is maintained. Each master goes through the below process:

  • Node gets cordoned.
  • Node gets drained.
  • Update is applied.
  • Node is rebooted.
  • API restored.
  • Uncordoned.
  • Moves on to the next Master.

4.2. Next it moves on the Worker nodes.

The worker nodes also go through a similar process:

  • Cordon
  • Drain
  • Update
  • Reboot
  • Uncordoned

Another topic that's less spoken about when an upgrade gets stuck is PDB's. If your PDB's are too strict your upgrade gets stuck and if it's too generous, the application is impacted. Be very careful while budgeting PDB's.

And lastly, Skip the coffee breaks and monitor the upgrade:

oc get clusterversion -w
NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version   4.19.27   True        True          11s     Working towards 4.20.18: 10 of 959 done (1% complete)
version   4.19.27   True        True          11s     Working towards 4.20.18
version   4.19.27   True        True          11s     Working towards 4.20.18: 1 of 959 done (0% complete)
version   4.19.27   True        True          11s     Working towards 4.20.18: 4 of 959 done (0% complete)
version   4.19.27   True        True          11s     Working towards 4.20.18: 6 of 959 done (0% complete)
version   4.19.27   True        True          11s     Working towards 4.20.18: 8 of 959 done (0% complete)
version   4.19.27   True        True          11s     Working towards 4.20.18: 10 of 959 done (1% complete)

Enter fullscreen mode Exit fullscreen mode

5. Verify completion

oc get clusterversion 
NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version   4.20.18   True        False         10m     Cluster version is 4.20.18

Enter fullscreen mode Exit fullscreen mode

My verdict on the upgrade process is, the upgrade is straight forward only when:

  • you handle any deprecations properly
  • Set correct channels.
  • Don't skip prechecks.

If this helped you, feel free to share or drop your upgrade experiences too!