The Kubernetes Concepts That Took Me the Longest to Understand

Search for a command to run...

No comments yet. Be the first to comment.
Follow my journey from DevOps Engineer to Kubestronaut as I explore Kubernetes, CNCF certifications, cloud-native technologies, and hands-on learning. In this series, I share my experiences preparing for and passing certifications such as CKA, CKAD, and CKS, along with exam strategies, study resources, troubleshooting lessons, and practical insights gained from real-world Kubernetes environments. Whether you're just starting with Kubernetes or pursuing advanced CNCF certifications, I hope these experiences help guide your own cloud-native journey.
When I started preparing for the Certified Kubernetes Administrator (CKA) exam, I did what most people do. I watched courses. I took notes. I practiced labs. I collected resources. And I constantly wo
Kubernetes Control Plane explained in a practical way for engineers who manage real-world clusters. Introduction When I first started learning Kubernetes, I could create Pods, Deployments, and Service

Kubernetes networking is one of the most important — and often most confusing — topics for beginners. Pods have IP addresses, Services have virtual IPs, DNS magically resolves names, Ingress routes tr

One of the most common questions developers ask when they start working with Kubernetes is: “What actually happens when a user sends a request to my application?” We deploy Pods, create Services, co

Most developers know that Kubernetes can automatically restart failed applications. But have you ever wondered what actually happens behind the scenes when a Pod crashes? When I first started learning

When developers first start learning Kubernetes, they quickly understand Pods and Deployments. You create a Deployment, Kubernetes creates Pods, and your application starts running. Simple, right? Not

Shahzad Ahmad | Kubernetes, DevOps & Cloud Native Journey
32 posts
Senior DevOps Engineer documenting my journey through Kubernetes, CNCF certifications, cloud-native technologies, platform engineering, and automation. Here you'll find hands-on tutorials, certification experiences (CKA, CKAD, CKS), exam strategies, troubleshooting guides, and lessons learned from real-world DevOps and Kubernetes environments. My goal is to share practical knowledge, help others in their cloud-native journey, and ultimately document the path from DevOps Engineer to Kubestronaut.
When people start learning Kubernetes, they usually ask:
“What’s the hardest part of Kubernetes?”
At first, I thought the answer would be something complicated like etcd, kube-scheduler, or cluster upgrades.
But after spending months learning Kubernetes, preparing for the Certified Kubernetes Administrator (CKA) exam, and eventually becoming a Kubestronaut, I realized something surprising:
The hardest Kubernetes concepts aren’t necessarily the most advanced ones.
They’re often the concepts that seem simple on the surface but require a completely different way of thinking.
In this article, I want to share the Kubernetes concepts that took me the longest to truly understand and the lessons that finally made them click.
This was by far the most confusing topic for me.
Initially, I understood networking in traditional environments:
IP addresses
Subnets
Routers
Firewalls
Then Kubernetes introduced:
Pod networking
ClusterIP
NodePort
LoadBalancer
Ingress
Network Policies
Suddenly there were multiple layers of networking interacting together.
The biggest challenge was understanding:
How can every Pod have its own IP address?
The breakthrough came when I stopped memorizing concepts and started drawing network flows.
Once I visualized traffic moving from:
Client → Ingress → Service → Pod
everything started making sense.
For weeks, these felt like the same thing.
Both seemed to expose applications.
Both dealt with traffic.
Both appeared in almost every Kubernetes deployment.
The realization that helped me was:
Services connect traffic to Pods.
Ingress manages external access into the cluster.
Think of Services as internal traffic controllers and Ingress as the front door to your Kubernetes environment.
After that, I stopped confusing the two.
At first glance, labels seemed too simple to matter.
They’re just key-value pairs, right?
Wrong.
Labels are the foundation of how Kubernetes connects resources together.
Deployments find Pods using labels.
Services route traffic using labels.
Network Policies often rely on labels.
Many Kubernetes resources depend on them.
The moment I understood that labels are Kubernetes’ primary way of organizing and discovering resources, everything became much clearer.
Storage was another topic that took me much longer than expected.
My initial question was:
Why do we need both PVs and PVCs?
Why not just mount storage directly?
The explanation that finally clicked was:
A Persistent Volume represents actual storage.
A Persistent Volume Claim represents a request for storage.
Similar to how:
Infrastructure teams provide storage
Application teams request storage
Understanding this separation made the Kubernetes storage model much easier to grasp.
RBAC looked intimidating when I first encountered it.
There were:
Roles
ClusterRoles
RoleBindings
ClusterRoleBindings
Service Accounts
At first, everything felt overwhelming.
The concept became easier when I thought about RBAC using a simple question:
Who can do what and where?
Every RBAC configuration ultimately answers that question.
Once I approached it from that perspective, writing permissions became significantly easier.
Network Policies felt like Kubernetes firewall rules — but not exactly.
I spent a long time misunderstanding how traffic was allowed and denied.
The biggest lesson was:
Network Policies are generally deny-by-default once applied.
If you don’t explicitly allow traffic, communication may stop working.
That realization changed how I approached network security inside Kubernetes clusters.
One of the most important Kubernetes concepts is also one of the easiest to overlook.
Controllers continuously compare:
Desired State vs Current State
When they don’t match, Kubernetes takes action.
That idea sounds simple.
But understanding it fundamentally changed how I viewed Kubernetes.
Kubernetes isn’t just running workloads.
It’s constantly working to make reality match your declared configuration.
Once I understood controllers, many Kubernetes behaviors suddenly made sense.
During my CKA preparation, I memorized:
etcd stores cluster data
etcd is the source of truth
But I didn’t fully understand why it mattered.
Only after studying cluster architecture did I appreciate its importance.
Everything Kubernetes knows about:
Pods
Nodes
Secrets
ConfigMaps
Deployments
ultimately lives in etcd.
Protecting and backing up etcd isn’t just an exam objective.
It’s critical for cluster recovery.
Early in my learning journey, I memorized components without understanding their interaction.
I knew:
kube-apiserver
scheduler
controller-manager
etcd
But I couldn’t explain how they worked together.
The breakthrough came when I started following the lifecycle of a Pod:
User submits YAML
API Server receives request
Data stored in etcd
Scheduler assigns a node
Kubelet creates the Pod
Following this workflow transformed a collection of components into a complete system.
This concept took me the longest to fully appreciate.
Coming from traditional administration, I was used to executing commands directly.
Kubernetes works differently.
Instead of saying:
Do this.
You declare:
This is what I want.
Kubernetes figures out how to achieve it.
This declarative mindset is one of the biggest shifts Kubernetes requires from infrastructure engineers.
And in my experience, it’s also one of the most important.
Looking back, I noticed a pattern.
The concepts that took me the longest weren’t difficult because they were technically complex.
They were difficult because they required a new way of thinking.
What helped me most was:
Building labs repeatedly
Breaking clusters intentionally
Troubleshooting issues
Drawing architectures
Reading official documentation
Practicing for the CKA exam
Most importantly, I stopped trying to memorize Kubernetes.
I focused on understanding how the pieces fit together.
That’s when everything started to click.
Every Kubernetes engineer has concepts that feel impossible at first.
For me, networking, storage, RBAC, and the declarative model took the longest to understand.
The good news is that struggling with these topics is completely normal.
Kubernetes is not difficult because individual concepts are complicated.
It’s difficult because many concepts interact simultaneously.
If you’re currently stuck on a Kubernetes topic, keep practicing.
One day, the concept that feels confusing today will suddenly become obvious.
And when that happens, you’ll realize you’ve made more progress than you thought.
Let me know in the comments. I’m curious to hear what challenged other engineers on their Kubernetes journey.
Follow me for more content on Kubernetes, DevOps, CNCF certifications, and my journey as a Kubestronaut.
If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.
Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.
LinkedIn: https://www.linkedin.com/in/shahzadaliahmad/
LFX Profile: https://openprofile.dev/profile/shahzadahmad91
Credly: https://www.credly.com/users/shahzadahmad
Website: https://shahzadahmad.dev/
If you found this article helpful, consider sharing it with others in the Kubernetes community.