<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Shahzad Ahmad | Kubernetes, Cloud Native & Platform Engineering]]></title><description><![CDATA[Senior DevOps Engineer sharing Kubernetes, Cloud Native, DevOps, Platform Engineering, CNCF certifications, automation, and real-world lessons from the journey to becoming a Kubestronaut.]]></description><link>https://shahzadahmad.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6a12d243551486ce6cf21b8c/c3f4971e-4b12-4967-85c6-41eb328513fc.jpg</url><title>Shahzad Ahmad | Kubernetes, Cloud Native &amp; Platform Engineering</title><link>https://shahzadahmad.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 06:44:49 GMT</lastBuildDate><atom:link href="https://shahzadahmad.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Understanding the Kubernetes Control Plane Like a DevOps Engineer]]></title><description><![CDATA[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]]></description><link>https://shahzadahmad.dev/understanding-the-kubernetes-control-plane-like-a-devops-engineer</link><guid isPermaLink="true">https://shahzadahmad.dev/understanding-the-kubernetes-control-plane-like-a-devops-engineer</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubernetes-pods]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[kubernetes-services]]></category><category><![CDATA[Kubernetes deployments]]></category><category><![CDATA[#kubernetes #container ]]></category><category><![CDATA[kubernetes-persistent-volumes]]></category><category><![CDATA[kubectl]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[Golden Kubestronaut]]></category><category><![CDATA[kubeadm]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sun, 21 Jun 2026 06:05:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/149420cc-1946-449a-8f00-9065bf1c696a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Kubernetes Control Plane explained in a practical way for engineers who manage real-world clusters.</p>
<h2><strong>Introduction</strong></h2>
<p>When I first started learning Kubernetes, I could create Pods, Deployments, and Services without much trouble.</p>
<p>I learned the commands, deployed applications, exposed services, and even scaled workloads.</p>
<p>But there was one thing that always felt like a black box:</p>
<p><strong>The Kubernetes Control Plane.</strong></p>
<p>Everyone says:</p>
<blockquote>
<p><em>“The Control Plane manages the cluster.”</em></p>
</blockquote>
<p>But what does that actually mean?</p>
<p>What happens behind the scenes when you run a simple command like:</p>
<pre><code class="language-plaintext">kubectl apply -f deployment.yaml
</code></pre>
<p>How does Kubernetes know where to place Pods?</p>
<p>Who decides which node should run them?</p>
<p>Who notices when a Pod crashes?</p>
<p>Who creates a replacement Pod?</p>
<p>Who ensures that the cluster always matches what you defined in your YAML files?</p>
<p>The answer to all these questions lies inside the Kubernetes Control Plane.</p>
<p>Understanding the Control Plane is one of the biggest steps toward becoming a confident Kubernetes engineer. Once you understand how these components work together, troubleshooting becomes easier, cluster behavior becomes more predictable, and many Kubernetes concepts suddenly make sense.</p>
<p>In this article, I’ll explain the Kubernetes Control Plane in a practical and beginner-friendly way, focusing on what each component does and how they work together to keep your applications running.</p>
<h2><strong>What Is the Kubernetes Control Plane?</strong></h2>
<p>Think of Kubernetes as a city.</p>
<p>The worker nodes are the buildings where people live and work.</p>
<p>The applications running inside Pods are the citizens.</p>
<p>The Control Plane is the city administration.</p>
<p>The administration doesn’t do the actual work happening inside the buildings. Instead, it manages the city, enforces rules, allocates resources, and ensures everything operates smoothly.</p>
<p>Similarly, the Kubernetes Control Plane does not run your application containers directly.</p>
<p>Instead, it:</p>
<ul>
<li><p>Receives instructions from users</p>
</li>
<li><p>Stores cluster information</p>
</li>
<li><p>Decides where workloads should run</p>
</li>
<li><p>Monitors cluster health</p>
</li>
<li><p>Replaces failed workloads</p>
</li>
<li><p>Maintains the desired state of the cluster</p>
</li>
</ul>
<p>Without the Control Plane:</p>
<ul>
<li><p>No Pods would be scheduled</p>
</li>
<li><p>No Deployments would be created</p>
</li>
<li><p>No scaling would occur</p>
</li>
<li><p>No self-healing would exist</p>
</li>
<li><p>No cluster management would be possible</p>
</li>
</ul>
<p>The Control Plane is essentially the brain of Kubernetes.</p>
<p>Its primary responsibility is to continuously compare what the cluster <strong>should look like</strong> with what it <strong>currently looks like</strong>, and then take actions to eliminate any differences.</p>
<h2><strong>The Main Components of the Control Plane</strong></h2>
<p>The Kubernetes Control Plane is made up of several components that work together.</p>
<p>Each component has a specific responsibility, and together they create the automation that Kubernetes is famous for.</p>
<h3><strong>1. API Server</strong></h3>
<p>The API Server is the most important component of the Control Plane.</p>
<p>It acts as the central communication hub for the entire cluster.</p>
<p>Every interaction with Kubernetes goes through the API Server.</p>
<p>Examples:</p>
<pre><code class="language-plaintext">kubectl get pods
</code></pre>
<pre><code class="language-plaintext">kubectl apply -f deployment.yamlkubectl delete pod nginx
</code></pre>
<p>Even when internal Kubernetes components communicate with each other, they usually do so through the API Server.</p>
<h3><strong>What Does the API Server Do?</strong></h3>
<p>The API Server performs several critical tasks:</p>
<ul>
<li><p>Receives requests from users and components</p>
</li>
<li><p>Authenticates users</p>
</li>
<li><p>Authorizes actions</p>
</li>
<li><p>Validates resource definitions</p>
</li>
<li><p>Processes API requests</p>
</li>
<li><p>Stores and retrieves data from etcd</p>
</li>
</ul>
<p>For example, when you create a Deployment, the API Server checks whether the YAML file is valid and whether you have permission to create that resource.</p>
<p>Only after validation does it save the information into Kubernetes.</p>
<p>Think of the API Server as the receptionist and gatekeeper of the cluster.</p>
<p>Nothing enters or leaves Kubernetes without passing through it.</p>
<h3><strong>2. etcd</strong></h3>
<p>If the API Server is the front door, then <strong>etcd</strong> is the storage room where all cluster information is kept.</p>
<p>etcd is a distributed key-value database used by Kubernetes.</p>
<p>It stores the entire state of the cluster.</p>
<p>This includes:</p>
<ul>
<li><p>Pods</p>
</li>
<li><p>Deployments</p>
</li>
<li><p>Services</p>
</li>
<li><p>Secrets</p>
</li>
<li><p>ConfigMaps</p>
</li>
<li><p>Nodes</p>
</li>
<li><p>Namespaces</p>
</li>
<li><p>Persistent Volumes</p>
</li>
<li><p>Cluster configuration</p>
</li>
</ul>
<p>Every important piece of information about your cluster lives inside etcd.</p>
<h3><strong>Why Is etcd So Important?</strong></h3>
<p>Imagine your cluster suddenly loses its etcd database.</p>
<p>Even if your worker nodes are still running, Kubernetes would lose knowledge about:</p>
<ul>
<li><p>Which Deployments exist</p>
</li>
<li><p>Which Services exist</p>
</li>
<li><p>Desired replica counts</p>
</li>
<li><p>Cluster configuration</p>
</li>
</ul>
<p>This is why etcd backups are considered one of the most important parts of Kubernetes disaster recovery.</p>
<h3><strong>Example</strong></h3>
<p>When you run:</p>
<pre><code class="language-plaintext">kubectl apply -f deployment.yaml
</code></pre>
<p>the Deployment definition is ultimately stored inside etcd.</p>
<p>From that point onward, Kubernetes treats that stored definition as the desired state of the cluster.</p>
<p>You can think of etcd as Kubernetes’ memory.</p>
<p>Without memory, the brain cannot function.</p>
<h3><strong>3. Scheduler</strong></h3>
<p>Once Kubernetes knows that a Pod needs to be created, another question arises:</p>
<blockquote>
<p><em>Where should this Pod run?</em></p>
</blockquote>
<p>This decision is made by the Kubernetes Scheduler.</p>
<p>The Scheduler’s job is to find the most suitable worker node for every unscheduled Pod.</p>
<p>Suppose you create a Deployment with:</p>
<pre><code class="language-plaintext">replicas: 3
</code></pre>
<p>Kubernetes now needs three Pods.</p>
<p>The Scheduler evaluates all available nodes and determines the best placement.</p>
<h3><strong>What Does the Scheduler Consider?</strong></h3>
<p>The Scheduler looks at many factors, including:</p>
<ul>
<li><p>Available CPU resources</p>
</li>
<li><p>Available memory resources</p>
</li>
<li><p>Resource requests and limits</p>
</li>
<li><p>Node selectors</p>
</li>
<li><p>Affinity and anti-affinity rules</p>
</li>
<li><p>Taints and tolerations</p>
</li>
<li><p>Node health</p>
</li>
<li><p>Existing workloads</p>
</li>
</ul>
<p>For example, if a node does not have enough memory available, the Scheduler may choose another node.</p>
<p>If a Pod requires a specific label such as:</p>
<pre><code class="language-plaintext">nodeSelector:
  environment: production
</code></pre>
<p>the Scheduler will only consider nodes matching that label.</p>
<h3><strong>What Happens Without the Scheduler?</strong></h3>
<p>Without the Scheduler, Pods would remain stuck in:</p>
<pre><code class="language-plaintext">Pending
</code></pre>
<p>because Kubernetes would know that Pods need to exist but would have no idea where to place them.</p>
<p>The Scheduler is essentially the decision-maker responsible for workload placement.</p>
<h3><strong>4. Controller Manager</strong></h3>
<p>Controllers are arguably the most powerful part of Kubernetes.</p>
<p>They are responsible for maintaining the desired state of the cluster.</p>
<p>Their logic is simple:</p>
<blockquote>
<p><em>Observe the current state, compare it with the desired state, and take corrective action if they differ.</em></p>
</blockquote>
<p>This process runs continuously.</p>
<h3><strong>Desired State vs Actual State</strong></h3>
<p>Suppose your Deployment specifies:</p>
<pre><code class="language-plaintext">replicas: 3
</code></pre>
<p>This means your desired state is:</p>
<pre><code class="language-plaintext">running pods: 3
</code></pre>
<p>Now imagine one Pod crashes.</p>
<p>The actual state becomes:</p>
<pre><code class="language-plaintext">running pods: 2
</code></pre>
<p>The Controller notices the mismatch.</p>
<p>It immediately creates another Pod to restore the desired state.</p>
<p>This automatic correction is what we call <strong>self-healing</strong>.</p>
<h3><strong>Why Controllers Matter</strong></h3>
<p>Without Controllers:</p>
<ul>
<li><p>Failed Pods would never be replaced</p>
</li>
<li><p>Scaling would not work</p>
</li>
<li><p>Deployments would not progress</p>
</li>
<li><p>Cluster state would drift over time</p>
</li>
</ul>
<p>Controllers are constantly watching the cluster and making adjustments whenever necessary.</p>
<p>They are the reason Kubernetes can operate with minimal human intervention.</p>
<h2><strong>Common Controllers</strong></h2>
<p>The Controller Manager runs multiple controllers, each responsible for a specific resource type.</p>
<h3><strong>Deployment Controller</strong></h3>
<p>The Deployment Controller manages Deployments.</p>
<p>It ensures that the correct ReplicaSets exist and that rolling updates happen correctly.</p>
<h3><strong>ReplicaSet Controller</strong></h3>
<p>The ReplicaSet Controller ensures that the required number of Pod replicas are running.</p>
<p>If a Pod disappears, it creates a replacement.</p>
<h3><strong>Node Controller</strong></h3>
<p>The Node Controller monitors worker nodes.</p>
<p>If a node becomes unreachable, Kubernetes can take corrective actions and reschedule workloads elsewhere.</p>
<h3><strong>Job Controller</strong></h3>
<p>The Job Controller manages batch workloads and ensures that Jobs complete successfully.</p>
<h3><strong>Endpoint Controller</strong></h3>
<p>The Endpoint Controller updates Service endpoints whenever Pods are added or removed.</p>
<p>Together, these controllers continuously monitor cluster resources and keep everything aligned with the desired state.</p>
<h3><strong>5. Cloud Controller Manager</strong></h3>
<p>When Kubernetes runs in cloud environments such as AWS, Azure, or Google Cloud, it needs a way to interact with cloud-specific services.</p>
<p>This responsibility belongs to the Cloud Controller Manager.</p>
<p>It acts as a bridge between Kubernetes and the cloud provider.</p>
<h3><strong>Common Tasks</strong></h3>
<p>The Cloud Controller Manager can:</p>
<ul>
<li><p>Create cloud load balancers</p>
</li>
<li><p>Manage cloud networking routes</p>
</li>
<li><p>Attach and detach storage volumes</p>
</li>
<li><p>Manage cloud-based node information</p>
</li>
</ul>
<p>For example, when you create a Service of type LoadBalancer:</p>
<pre><code class="language-plaintext">type: LoadBalancer
</code></pre>
<p>Kubernetes communicates with the cloud provider through the Cloud Controller Manager.</p>
<p>The cloud provider then creates an actual load balancer and assigns a public IP address.</p>
<p>Without this component, Kubernetes would not know how to interact with cloud infrastructure.</p>
<h2><strong>What Happens When You Create a Deployment?</strong></h2>
<p>Let’s walk through the complete lifecycle of a Deployment request.</p>
<p>You execute:</p>
<pre><code class="language-plaintext">kubectl apply -f deployment.yaml
</code></pre>
<h3><strong>Step 1</strong></h3>
<p>kubectl sends the Deployment definition to the API Server.</p>
<h3><strong>Step 2</strong></h3>
<p>The API Server authenticates the request, validates the YAML, and checks permissions.</p>
<h3><strong>Step 3</strong></h3>
<p>The Deployment definition is stored inside etcd.</p>
<p>At this point, Kubernetes knows what the desired state should be.</p>
<h3><strong>Step 4</strong></h3>
<p>The Deployment Controller notices that a new Deployment has been created.</p>
<h3><strong>Step 5</strong></h3>
<p>The Deployment Controller creates a ReplicaSet.</p>
<h3><strong>Step 6</strong></h3>
<p>The ReplicaSet Controller creates the required Pods.</p>
<h3><strong>Step 7</strong></h3>
<p>The Scheduler detects Pods that have not yet been assigned to any node.</p>
<h3><strong>Step 8</strong></h3>
<p>The Scheduler evaluates available nodes and selects the most suitable ones.</p>
<h3><strong>Step 9</strong></h3>
<p>The selected nodes receive instructions through their Kubelets.</p>
<h3><strong>Step 10</strong></h3>
<p>Kubelet pulls the container image and starts the containers.</p>
<h3><strong>Step 11</strong></h3>
<p>The Pods become healthy and transition to the Running state.</p>
<p>Your application is now live.</p>
<p>Although this process involves multiple components, it usually completes within seconds.</p>
<h2><strong>How Self-Healing Actually Works</strong></h2>
<p>Self-healing is one of Kubernetes’ most valuable features.</p>
<p>Let’s see how it works in practice.</p>
<p>Imagine you have a Deployment configured with:</p>
<pre><code class="language-plaintext">replicas: 3
</code></pre>
<p>The cluster currently has:</p>
<pre><code class="language-plaintext">Desired Pods = 3
Actual Pods = 3
</code></pre>
<p>Everything is healthy.</p>
<p>Now suppose one Pod crashes unexpectedly.</p>
<p>The cluster state becomes:</p>
<pre><code class="language-plaintext">Desired Pods = 3
Actual Pods = 2
</code></pre>
<p>The Controller immediately notices the difference.</p>
<p>It creates a replacement Pod.</p>
<p>The Scheduler assigns the new Pod to a suitable node.</p>
<p>The Kubelet starts the container.</p>
<p>After a short period, the cluster returns to:</p>
<pre><code class="language-plaintext">Desired Pods = 3
Actual Pods = 3
</code></pre>
<p>No administrator needs to log in.</p>
<p>No manual restart is required.</p>
<p>Kubernetes automatically restores the desired state.</p>
<p>This continuous reconciliation process is the foundation of Kubernetes automation.</p>
<h2><strong>Why DevOps Engineers Must Understand the Control Plane</strong></h2>
<p>Many engineers know how to use Kubernetes commands.</p>
<p>Far fewer understand what happens behind those commands.</p>
<p>Understanding the Control Plane provides significant advantages.</p>
<h3><strong>Faster Troubleshooting</strong></h3>
<p>When Pods remain stuck in:</p>
<pre><code class="language-plaintext">Pending
</code></pre>
<p>you immediately know to investigate the Scheduler.</p>
<p>When Deployments fail to maintain replicas:</p>
<p>Think Controllers.</p>
<p>When cluster data disappears:</p>
<p>Think etcd.</p>
<p>When API requests fail:</p>
<p>Think API Server.</p>
<p>Understanding component responsibilities dramatically reduces troubleshooting time.</p>
<h3><strong>Better Cluster Design</strong></h3>
<p>Knowledge of the Control Plane helps you design more reliable clusters.</p>
<p>You’ll make better decisions regarding:</p>
<ul>
<li><p>High availability</p>
</li>
<li><p>Multi-control-plane architectures</p>
</li>
<li><p>Backup strategies</p>
</li>
<li><p>Disaster recovery planning</p>
</li>
<li><p>Cluster scaling</p>
</li>
</ul>
<h3><strong>Better Interviews</strong></h3>
<p>Many Kubernetes interviews focus heavily on Control Plane concepts.</p>
<p>Questions such as:</p>
<ul>
<li><p>What is etcd?</p>
</li>
<li><p>What does the Scheduler do?</p>
</li>
<li><p>How does the API Server work?</p>
</li>
<li><p>What are Controllers?</p>
</li>
<li><p>How does Kubernetes self-heal workloads?</p>
</li>
</ul>
<p>become much easier to answer when you understand the architecture behind the platform.</p>
<h2><strong>The Mental Model I Use</strong></h2>
<p>Whenever I work with Kubernetes, I remember this simple flow:</p>
<pre><code class="language-plaintext">User
 ↓
API Server
 ↓
etcd
 ↓
Controllers
 ↓
Scheduler
 ↓
Worker Nodes
 ↓
Pods
</code></pre>
<p>Here’s how I interpret it:</p>
<ul>
<li><p>Users submit requests.</p>
</li>
<li><p>The API Server receives them.</p>
</li>
<li><p>etcd stores the desired state.</p>
</li>
<li><p>Controllers monitor and enforce that state.</p>
</li>
<li><p>The Scheduler decides placement.</p>
</li>
<li><p>Worker nodes run the workloads.</p>
</li>
<li><p>Pods deliver the application.</p>
</li>
</ul>
<p>The Control Plane continuously watches every step of this process and ensures reality matches the desired state.</p>
<p>That single idea explains most of Kubernetes.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>The Kubernetes Control Plane is what transforms Kubernetes from a simple container platform into a powerful orchestration system.</p>
<p>The API Server acts as the communication hub.</p>
<p>etcd stores the cluster’s source of truth.</p>
<p>Controllers continuously reconcile desired and actual states.</p>
<p>The Scheduler determines where workloads should run.</p>
<p>The Cloud Controller Manager integrates Kubernetes with cloud infrastructure.</p>
<p>Together, these components create the automation, scalability, resilience, and self-healing capabilities that make Kubernetes so powerful.</p>
<p>Once you truly understand the Control Plane, Kubernetes stops feeling like magic.</p>
<p>Instead, it becomes a system whose behavior you can predict, troubleshoot, and confidently operate in production.</p>
<p>And that’s the point where you stop being just a Kubernetes user and start thinking like a Kubernetes engineer.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[Understanding Kubernetes Networking Without Getting Lost]]></title><description><![CDATA[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]]></description><link>https://shahzadahmad.dev/understanding-kubernetes-networking-without-getting-lost</link><guid isPermaLink="true">https://shahzadahmad.dev/understanding-kubernetes-networking-without-getting-lost</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[networking]]></category><category><![CDATA[kubenetes tips]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubernetes-services]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[#kubernetes #container ]]></category><category><![CDATA[Kubernetes Security]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[network security]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sun, 21 Jun 2026 05:55:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/8831ab1c-a287-41a3-ac82-39f172ac6ea7.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>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 traffic, and Load Balancers expose applications to the outside world. At first, it can feel like a lot of moving pieces. But once you understand the purpose of each component and how they work together, Kubernetes networking becomes surprisingly logical.</em></p>
<p>When I first started learning Kubernetes, networking was the area that confused me the most.</p>
<p>Questions like:</p>
<ul>
<li><p>How do Pods communicate with each other?</p>
</li>
<li><p>Why can’t applications just use Pod IP addresses?</p>
</li>
<li><p>What exactly is a Service?</p>
</li>
<li><p>How does Kubernetes DNS work?</p>
</li>
<li><p>What is the difference between Ingress and a Load Balancer?</p>
</li>
<li><p>How does traffic travel from a user’s browser all the way to a Pod?</p>
</li>
</ul>
<p>kept appearing throughout my learning journey.</p>
<p>In this article, we’ll break Kubernetes networking down into simple concepts and build a mental model that helps you understand how everything fits together.</p>
<h2><strong>Understanding the Kubernetes Networking Model</strong></h2>
<p>Before diving into Services and Ingress, it’s important to understand one of Kubernetes’ core networking principles:</p>
<blockquote>
<p><em>Every Pod gets its own IP address, and every Pod can communicate directly with every other Pod in the cluster.</em></p>
</blockquote>
<p>Unlike traditional container environments where containers often share a host network or require Network Address Translation (NAT), Kubernetes treats Pods as first-class network citizens.</p>
<p>This means:</p>
<ul>
<li><p>Pods can communicate across nodes.</p>
</li>
<li><p>Pods don’t need port mapping to talk to each other.</p>
</li>
<li><p>Applications can assume network connectivity exists between Pods.</p>
</li>
</ul>
<p>To make this possible, Kubernetes relies on a Container Network Interface (CNI) plugin such as:</p>
<ul>
<li><p>Calico</p>
</li>
<li><p>Cilium</p>
</li>
<li><p>Flannel</p>
</li>
<li><p>Weave Net</p>
</li>
</ul>
<p>The CNI plugin is responsible for assigning Pod IP addresses and ensuring traffic can flow between Pods across different nodes.</p>
<p>Without a CNI plugin, Kubernetes networking simply wouldn’t work.</p>
<h2><strong>Start With a Simple Application</strong></h2>
<p>Imagine you deploy a web application.</p>
<pre><code class="language-plaintext">apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
</code></pre>
<p>Kubernetes creates three Pods:</p>
<pre><code class="language-plaintext">web-app-pod-1
web-app-pod-2
web-app-pod-3
</code></pre>
<p>Each Pod receives its own IP address.</p>
<pre><code class="language-plaintext">10.244.1.10
10.244.1.11
10.244.1.12
</code></pre>
<p>These IP addresses are assigned by the cluster’s networking layer.</p>
<p>Now imagine another Pod wants to communicate with one of these Pods.</p>
<p>It can directly send traffic to:</p>
<pre><code class="language-plaintext">10.244.1.10
</code></pre>
<p>or</p>
<pre><code class="language-plaintext">10.244.1.11
</code></pre>
<p>without any special configuration.</p>
<p>This direct Pod-to-Pod communication is one of Kubernetes’ most powerful networking features.</p>
<h2><strong>The First Problem: Pod IPs Are Not Permanent</strong></h2>
<p>While Pod IPs are useful, they introduce a major challenge.</p>
<p>Pods are ephemeral.</p>
<p>If a Pod crashes, gets rescheduled, or is replaced during a deployment, Kubernetes creates a new Pod.</p>
<p>For example:</p>
<pre><code class="language-plaintext">Old Pod IP:
10.244.1.10
</code></pre>
<p>After recreation:</p>
<pre><code class="language-plaintext">New Pod IP:
10.244.1.25
</code></pre>
<p>The application is still running, but its IP address has changed.</p>
<p>Imagine hundreds of applications depending on that IP.</p>
<p>Everything would break.</p>
<p>This is why applications should never depend directly on Pod IP addresses.</p>
<p>We need a stable endpoint that remains consistent even when Pods come and go.</p>
<h2><strong>Enter Kubernetes Services</strong></h2>
<p>A Kubernetes Service solves this problem.</p>
<p>A Service provides:</p>
<ul>
<li><p>A stable virtual IP address</p>
</li>
<li><p>A stable DNS name</p>
</li>
<li><p>Load balancing across Pods</p>
</li>
</ul>
<p>Let’s create a Service.</p>
<pre><code class="language-plaintext">kind: Service
metadata:
  name: web-service
</code></pre>
<p>Kubernetes assigns a virtual IP:</p>
<pre><code class="language-plaintext">10.96.15.20
</code></pre>
<p>Unlike Pod IPs, this IP remains stable.</p>
<p>Applications now communicate with:</p>
<pre><code class="language-plaintext">web-service
</code></pre>
<p>instead of individual Pods.</p>
<p>Think of a Service as a permanent front door that always knows which Pods are currently available.</p>
<p>Even if Pods are recreated, the Service remains unchanged.</p>
<h2><strong>How Services Find Pods</strong></h2>
<p>Services don’t magically know where Pods are.</p>
<p>They use labels and selectors.</p>
<p>Suppose your Pods have the label:</p>
<pre><code class="language-plaintext">labels:
  app: web-app
</code></pre>
<p>The Service might use:</p>
<pre><code class="language-plaintext">selector:
  app: web-app
</code></pre>
<p>Kubernetes continuously watches for Pods matching this selector.</p>
<p>Whenever Pods are added or removed, Kubernetes updates the Service endpoints automatically.</p>
<p>For example:</p>
<pre><code class="language-plaintext">web-service
    ↓
+----------------+
| Pod 1          |
| Pod 2          |
| Pod 3          |
+----------------+
</code></pre>
<p>If Pod 2 crashes:</p>
<pre><code class="language-plaintext">web-service
    ↓
+----------------+
| Pod 1          |
| Pod 3          |
+----------------+
</code></pre>
<p>Traffic continues flowing without interruption.</p>
<h2><strong>How Traffic Reaches a Pod</strong></h2>
<p>Let’s say a frontend application sends a request.</p>
<pre><code class="language-plaintext">Frontend → web-service
</code></pre>
<p>The request doesn’t go directly to a Pod.</p>
<p>Instead, Kubernetes performs several steps:</p>
<pre><code class="language-plaintext">Frontend
    ↓
Service
    ↓
Endpoints
    ↓
Selected Pod
</code></pre>
<p>Example:</p>
<pre><code class="language-plaintext">Frontend
    ↓
web-service
    ↓
web-app-pod-2
</code></pre>
<p>The frontend doesn’t care which Pod receives the request.</p>
<p>The Service handles load balancing automatically.</p>
<p>This abstraction is what allows Kubernetes applications to scale seamlessly.</p>
<h2><strong>Understanding Endpoints</strong></h2>
<p>Behind every Service is an Endpoint object.</p>
<p>Endpoints contain the actual Pod IP addresses associated with the Service.</p>
<p>Example:</p>
<pre><code class="language-plaintext">web-service
</code></pre>
<p>might map to:</p>
<pre><code class="language-plaintext">10.244.1.10
10.244.1.11
10.244.1.12
</code></pre>
<p>You can view them using:</p>
<pre><code class="language-plaintext">kubectl get endpoints
</code></pre>
<p>When troubleshooting networking issues, checking endpoints is often one of the first things you should do.</p>
<p>If a Service has no endpoints, traffic has nowhere to go.</p>
<h2><strong>Kubernetes DNS Makes Service Discovery Easy</strong></h2>
<p>Imagine managing hundreds of Services.</p>
<p>Remembering IP addresses would be impossible.</p>
<p>This is where CoreDNS comes in.</p>
<p>CoreDNS runs inside the cluster and provides service discovery.</p>
<p>When a Service is created:</p>
<pre><code class="language-plaintext">web-service
</code></pre>
<p>Kubernetes automatically creates a DNS record:</p>
<pre><code class="language-plaintext">web-service.default.svc.cluster.local
</code></pre>
<p>Applications can simply use:</p>
<pre><code class="language-plaintext">http://web-service
</code></pre>
<p>instead of IP addresses.</p>
<p>DNS resolves the name to the Service IP automatically.</p>
<p>This allows microservices to communicate using meaningful names rather than constantly changing addresses.</p>
<h2><strong>Understanding DNS Resolution</strong></h2>
<p>Suppose a Pod sends:</p>
<pre><code class="language-plaintext">http://web-service
</code></pre>
<p>The process looks like this:</p>
<pre><code class="language-plaintext">Application
      ↓
CoreDNS
      ↓
Service IP
      ↓
Service
      ↓
Pod
</code></pre>
<p>Everything happens automatically.</p>
<p>Most developers never need to think about the underlying DNS mechanics because Kubernetes handles it for them.</p>
<h2><strong>Types of Kubernetes Services</strong></h2>
<p>Not all Services are designed for the same purpose.</p>
<p>Kubernetes provides several Service types.</p>
<h3><strong>ClusterIP</strong></h3>
<p>This is the default Service type.</p>
<pre><code class="language-plaintext">type: ClusterIP
</code></pre>
<p>Traffic flow:</p>
<pre><code class="language-plaintext">Pod
 ↓
ClusterIP Service
 ↓
Pod
</code></pre>
<p>Characteristics:</p>
<ul>
<li><p>Internal only</p>
</li>
<li><p>Not accessible from outside the cluster</p>
</li>
<li><p>Most commonly used Service type</p>
</li>
</ul>
<p>Ideal for:</p>
<ul>
<li><p>Databases</p>
</li>
<li><p>Internal APIs</p>
</li>
<li><p>Backend services</p>
</li>
</ul>
<h3><strong>NodePort</strong></h3>
<p>NodePort exposes an application on every Kubernetes node.</p>
<pre><code class="language-plaintext">type: NodePort
</code></pre>
<p>Example:</p>
<pre><code class="language-plaintext">192.168.1.10:30080
</code></pre>
<p>Traffic flow:</p>
<pre><code class="language-plaintext">User
 ↓
Node IP:30080
 ↓
Service
 ↓
Pod
</code></pre>
<p>Advantages:</p>
<ul>
<li><p>Simple</p>
</li>
<li><p>Useful for testing</p>
</li>
</ul>
<p>Disadvantages:</p>
<ul>
<li><p>Limited port range</p>
</li>
<li><p>Not ideal for production</p>
</li>
<li><p>Difficult to manage at scale</p>
</li>
</ul>
<h3><strong>LoadBalancer</strong></h3>
<p>LoadBalancer is commonly used in cloud environments.</p>
<pre><code class="language-plaintext">type: LoadBalancer
</code></pre>
<p>When created, Kubernetes asks the cloud provider to provision an external load balancer.</p>
<p>Example:</p>
<pre><code class="language-plaintext">Internet
    ↓
AWS ELB
    ↓
Service
    ↓
Pods
</code></pre>
<p>Supported by:</p>
<ul>
<li><p>Amazon EKS</p>
</li>
<li><p>Azure AKS</p>
</li>
<li><p>Google GKE</p>
</li>
</ul>
<p>Advantages:</p>
<ul>
<li><p>Production-ready</p>
</li>
<li><p>Automatically managed</p>
</li>
<li><p>Provides external access</p>
</li>
</ul>
<p>Disadvantages:</p>
<ul>
<li><p>Additional cloud costs</p>
</li>
<li><p>One load balancer per Service</p>
</li>
</ul>
<h2><strong>Why We Need Ingress</strong></h2>
<p>Imagine deploying multiple applications.</p>
<pre><code class="language-plaintext">shop.example.com
api.example.com
admin.example.com
</code></pre>
<p>Without Ingress, you might create three separate LoadBalancers.</p>
<pre><code class="language-plaintext">LoadBalancer #1 → Shop
LoadBalancer #2 → API
LoadBalancer #3 → Admin
</code></pre>
<p>This quickly becomes expensive and difficult to manage.</p>
<p>Ingress solves this problem.</p>
<h2><strong>What Is Ingress?</strong></h2>
<p>Ingress is an API object that defines routing rules for HTTP and HTTPS traffic.</p>
<p>Example:</p>
<pre><code class="language-plaintext">shop.example.com → Shop Service
api.example.com → API Service
admin.example.com → Admin Service
</code></pre>
<p>Traffic flow:</p>
<pre><code class="language-plaintext">Internet
      ↓
Ingress Controller
      ↓
+-------------------+
| shop.example.com  |
| api.example.com   |
| admin.example.com |
+-------------------+
</code></pre>
<p>One external endpoint can serve multiple applications.</p>
<h2><strong>Ingress Controllers</strong></h2>
<p>An Ingress resource by itself does nothing.</p>
<p>You need an Ingress Controller to implement the routing rules.</p>
<p>Popular options include:</p>
<ul>
<li><p>NGINX Ingress Controller</p>
</li>
<li><p>Traefik</p>
</li>
<li><p>HAProxy</p>
</li>
<li><p>Kong</p>
</li>
<li><p>AWS Load Balancer Controller</p>
</li>
</ul>
<p>Think of the Ingress resource as configuration and the Ingress Controller as the actual software performing the routing.</p>
<h2><strong>The Complete Journey of a Request</strong></h2>
<p>Let’s follow a request from a user’s browser.</p>
<p>Suppose a user visits:</p>
<pre><code class="language-plaintext">https://shop.example.com
</code></pre>
<p>The request travels through multiple layers.</p>
<pre><code class="language-plaintext">User
 ↓
DNS
 ↓
Load Balancer
 ↓
Ingress Controller
 ↓
Service
 ↓
Pod
 ↓
Application
</code></pre>
<p>Let’s break this down.</p>
<h3><strong>Step 1: DNS Resolution</strong></h3>
<p>DNS resolves:</p>
<pre><code class="language-plaintext">shop.example.com
</code></pre>
<p>to the external IP address of the load balancer.</p>
<h3><strong>Step 2: Load Balancer</strong></h3>
<p>The cloud load balancer receives the request and forwards it to the Ingress Controller.</p>
<h3><strong>Step 3: Ingress Controller</strong></h3>
<p>The Ingress Controller examines:</p>
<pre><code class="language-plaintext">Host: shop.example.com
</code></pre>
<p>and determines which Service should receive the request.</p>
<h3><strong>Step 4: Service</strong></h3>
<p>The Service selects a healthy Pod.</p>
<h3><strong>Step 5: Pod</strong></h3>
<p>The Pod processes the request and generates a response.</p>
<h3><strong>Step 6: Response</strong></h3>
<p>The response travels back through the same path.</p>
<pre><code class="language-plaintext">Application
 ↓
Pod
 ↓
Service
 ↓
Ingress
 ↓
Load Balancer
 ↓
User
</code></pre>
<p>Understanding this flow is the key to understanding Kubernetes networking.</p>
<h2><strong>Network Policies: Controlling Traffic</strong></h2>
<p>By default, Kubernetes networking is very open.</p>
<p>Pods can generally communicate with each other.</p>
<p>Sometimes that’s not desirable.</p>
<p>For example:</p>
<pre><code class="language-plaintext">Frontend → Backend ✅
Frontend → Database ✅
Random Pod → Database ❌
</code></pre>
<p>Network Policies allow you to restrict traffic.</p>
<p>Example use cases:</p>
<ul>
<li><p>Allow only frontend Pods to access backend Pods</p>
</li>
<li><p>Restrict database access</p>
</li>
<li><p>Enforce zero-trust networking</p>
</li>
</ul>
<p>Network Policies act like Kubernetes firewalls for Pods.</p>
<h2><strong>Common Kubernetes Networking Issues</strong></h2>
<p>When troubleshooting networking problems, I usually investigate these areas first.</p>
<h3><strong>Pod Not Running</strong></h3>
<pre><code class="language-plaintext">kubectl get pods
</code></pre>
<p>If the Pod isn’t healthy, networking won’t matter.</p>
<h3><strong>Service Not Matching Labels</strong></h3>
<pre><code class="language-plaintext">kubectl get endpoints
</code></pre>
<p>No endpoints usually means the Service selector doesn’t match any Pods.</p>
<h3><strong>DNS Problems</strong></h3>
<pre><code class="language-plaintext">kubectl exec -it pod -- nslookup web-service
</code></pre>
<p>Verify DNS resolution inside the cluster.</p>
<h3><strong>Ingress Misconfiguration</strong></h3>
<pre><code class="language-plaintext">kubectl describe ingress
</code></pre>
<p>Check routing rules and events.</p>
<h3><strong>Network Policies Blocking Traffic</strong></h3>
<pre><code class="language-plaintext">kubectl get networkpolicy
</code></pre>
<p>A restrictive policy may be preventing communication.</p>
<h3><strong>Connectivity Testing</strong></h3>
<p>Use tools like:</p>
<pre><code class="language-plaintext">curl
wget
ping
</code></pre>
<p>from inside Pods to verify connectivity.</p>
<h2><strong>The Mental Model That Changed Everything</strong></h2>
<p>Instead of memorizing Kubernetes networking components individually, think of them as layers that solve specific problems.</p>
<pre><code class="language-plaintext">User
 ↓
Load Balancer
 ↓
Ingress
 ↓
Service
 ↓
Pod
</code></pre>
<p>Each layer adds a capability.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/8a133124-401d-474d-a28c-47aa66a0ac62.png" alt="" style="display:block;margin:0 auto" />

<p>Once this model clicks, Kubernetes networking becomes much easier to reason about.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>Networking is often the topic that intimidates Kubernetes beginners the most, but the underlying concepts are actually straightforward.</p>
<p>Pods provide compute.</p>
<p>Services provide stable connectivity.</p>
<p>DNS provides service discovery.</p>
<p>Ingress provides intelligent routing.</p>
<p>Load Balancers provide external access.</p>
<p>Network Policies provide security.</p>
<p>Together, these components create a powerful networking model that allows applications to communicate reliably, scale dynamically, and remain resilient even as Pods are constantly created and destroyed.</p>
<p>The next time someone says Kubernetes networking is complicated, remember:</p>
<blockquote>
<p><em>Kubernetes networking is simply a collection of layers working together to move traffic from a user to a Pod — and back again.</em></p>
</blockquote>
<p>Once you understand the role of each layer, everything starts to make sense.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[The Life of a Request Inside Kubernetes]]></title><description><![CDATA[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]]></description><link>https://shahzadahmad.dev/the-life-of-a-request-inside-kubernetes</link><guid isPermaLink="true">https://shahzadahmad.dev/the-life-of-a-request-inside-kubernetes</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[CKA Exam]]></category><category><![CDATA[CKAD Exam]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[#kubernetes #container ]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubernetes-pods]]></category><category><![CDATA[kubernetes-services]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[Kubernetes deployments]]></category><category><![CDATA[kubectl]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[Golden Kubestronaut]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sun, 21 Jun 2026 05:45:35 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/943d33d7-0aab-48ec-a41a-ce1477d2b4ed.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One of the most common questions developers ask when they start working with Kubernetes is:</p>
<blockquote>
<p><em>“What actually happens when a user sends a request to my application?”</em></p>
</blockquote>
<p>We deploy Pods, create Services, configure Ingress resources, and expose applications to the internet. But once a request enters a Kubernetes cluster, it travels through several layers before finally reaching the application container.</p>
<p>Understanding this journey is one of the most important Kubernetes concepts because it connects networking, services, load balancing, and application delivery into a single picture.</p>
<p>Let’s follow a request from a user’s browser all the way to a running container.</p>
<h2><strong>The Scenario</strong></h2>
<p>Imagine you’ve deployed a simple web application.</p>
<pre><code class="language-plaintext">User
  |
  v
Ingress
  |
  v
Service
  |
  v
Pod
</code></pre>
<p>Your application is accessible at:</p>
<pre><code class="language-plaintext">https://shop.example.com
</code></pre>
<p>The user opens the website and clicks a product page.</p>
<p>What happens next?</p>
<h2><strong>Step 1: The Browser Sends a Request</strong></h2>
<p>The journey starts on the user’s device.</p>
<p>The browser sends an HTTPS request:</p>
<pre><code class="language-plaintext">GET /products
Host: shop.example.com
</code></pre>
<p>Before the request reaches Kubernetes, DNS resolution occurs.</p>
<p>The browser asks:</p>
<pre><code class="language-plaintext">Where is shop.example.com?
</code></pre>
<p>DNS responds with an IP address.</p>
<pre><code class="language-plaintext">203.0.113.10
</code></pre>
<p>This IP typically belongs to:</p>
<ul>
<li><p>Load Balancer</p>
</li>
<li><p>Cloud Load Balancer</p>
</li>
<li><p>Ingress Controller</p>
</li>
</ul>
<p>The browser now knows where to send the request.</p>
<h2><strong>Step 2: The Load Balancer Receives the Request</strong></h2>
<p>In cloud environments such as:</p>
<ul>
<li><p>AWS</p>
</li>
<li><p>Azure</p>
</li>
<li><p>Google Cloud</p>
</li>
</ul>
<p>an external Load Balancer is often the first Kubernetes component that receives traffic.</p>
<p>Example:</p>
<pre><code class="language-plaintext">Internet
    |
    v
Load Balancer
</code></pre>
<p>The Load Balancer acts as the entry point into the cluster.</p>
<p>Its responsibilities include:</p>
<ul>
<li><p>Accepting incoming traffic</p>
</li>
<li><p>Health checking backend nodes</p>
</li>
<li><p>Distributing traffic across nodes</p>
</li>
</ul>
<p>The request is then forwarded into the Kubernetes cluster.</p>
<h2><strong>Step 3: The Ingress Controller Takes Over</strong></h2>
<p>The request reaches an Ingress Controller.</p>
<p>Popular examples include:</p>
<ul>
<li><p>NGINX Ingress Controller</p>
</li>
<li><p>Traefik</p>
</li>
<li><p>HAProxy</p>
</li>
<li><p>Kong</p>
</li>
</ul>
<p>The Ingress Controller examines:</p>
<pre><code class="language-plaintext">Host Header
Path
Protocol
</code></pre>
<p>Example:</p>
<pre><code class="language-plaintext">Host: shop.example.com
</code></pre>
<p>Based on Ingress rules:</p>
<pre><code class="language-plaintext">rules:
- host: shop.example.com
  http:
    paths:
    - path: /
      backend:
        service:
          name: web-service
</code></pre>
<p>the controller determines which Service should receive the request.</p>
<p>Think of Ingress as a smart traffic director.</p>
<h2><strong>Step 4: The Service Receives Traffic</strong></h2>
<p>The request is now forwarded to:</p>
<pre><code class="language-plaintext">web-service
</code></pre>
<p>The Service acts as a stable networking endpoint.</p>
<p>This is important because Pods are temporary.</p>
<p>Today a Pod may be:</p>
<pre><code class="language-plaintext">10.1.0.15
</code></pre>
<p>Tomorrow it may be:</p>
<pre><code class="language-plaintext">10.1.0.27
</code></pre>
<p>Applications cannot rely on Pod IP addresses.</p>
<p>The Service solves this problem by providing a permanent virtual IP.</p>
<p>Example:</p>
<pre><code class="language-plaintext">kind: Service
spec:
  selector:
    app: web
</code></pre>
<p>The Service continuously tracks matching Pods.</p>
<h2><strong>Step 5: kube-proxy Performs Load Balancing</strong></h2>
<p>The Service itself does not forward traffic.</p>
<p>Instead, Kubernetes uses:</p>
<pre><code class="language-plaintext">kube-proxy
</code></pre>
<p>running on every node.</p>
<p>kube-proxy maintains networking rules using:</p>
<ul>
<li><p>iptables</p>
</li>
<li><p>IPVS</p>
</li>
<li><p>nftables</p>
</li>
</ul>
<p>When traffic arrives at the Service IP:</p>
<pre><code class="language-plaintext">10.96.0.25
</code></pre>
<p>kube-proxy selects one healthy Pod.</p>
<p>Example:</p>
<pre><code class="language-plaintext">Pod A
Pod B
Pod C
</code></pre>
<p>The request may be routed to:</p>
<pre><code class="language-plaintext">Pod B
</code></pre>
<p>This provides built-in load balancing.</p>
<h2><strong>Step 6: The Pod Receives the Request</strong></h2>
<p>The request finally reaches the target Pod.</p>
<p>Inside the Pod, the container receives:</p>
<pre><code class="language-plaintext">GET /products
</code></pre>
<p>Your application processes the request.</p>
<p>For example:</p>
<pre><code class="language-plaintext">Spring Boot
Node.js
Python Flask
Go Application
.NET API
</code></pre>
<p>The application performs business logic.</p>
<p>Typical actions include:</p>
<ul>
<li><p>Database queries</p>
</li>
<li><p>API calls</p>
</li>
<li><p>Cache lookups</p>
</li>
<li><p>Authentication checks</p>
</li>
</ul>
<p>The application generates a response.</p>
<h2><strong>Step 7: The Response Travels Back</strong></h2>
<p>The response now travels in reverse.</p>
<pre><code class="language-plaintext">Application
    |
    v
Pod
    |
    v
Service
    |
    v
Ingress
    |
    v
Load Balancer
    |
    v
Browser
</code></pre>
<p>Example response:</p>
<pre><code class="language-plaintext">200 OK
</code></pre>
<p>with product information.</p>
<p>The browser renders the page.</p>
<p>The user sees the results.</p>
<p>The entire process typically takes milliseconds.</p>
<h2><strong>What Happens If the Pod Fails?</strong></h2>
<p>Suppose the selected Pod crashes.</p>
<pre><code class="language-plaintext">Pod B
</code></pre>
<p>becomes unavailable.</p>
<p>Kubernetes immediately removes it from the Service endpoints.</p>
<p>Future requests are routed to:</p>
<pre><code class="language-plaintext">Pod A
Pod C
</code></pre>
<p>instead.</p>
<p>Users continue accessing the application without noticing the failure.</p>
<p>This is one of the reasons Kubernetes provides high availability.</p>
<h2><strong>What Happens When Traffic Increases?</strong></h2>
<p>Imagine traffic suddenly jumps from:</p>
<pre><code class="language-plaintext">100 requests/sec
</code></pre>
<p>to:</p>
<pre><code class="language-plaintext">5,000 requests/sec
</code></pre>
<p>The Horizontal Pod Autoscaler may create additional Pods.</p>
<p>Example:</p>
<pre><code class="language-plaintext">Pod A
Pod B
Pod C
Pod D
Pod E
Pod F
</code></pre>
<p>The Service automatically discovers the new Pods.</p>
<p>No configuration changes are required.</p>
<p>Traffic begins flowing to the new instances immediately.</p>
<h2><strong>A Simple Visualization</strong></h2>
<p>The complete request journey looks like this:</p>
<pre><code class="language-plaintext">User Browser
      |
      v
DNS
      |
      v
Load Balancer
      |
      v
Ingress Controller
      |
      v
Service
      |
      v
kube-proxy
      |
      v
Pod
      |
      v
Application
      |
      v
Response
</code></pre>
<p>Every Kubernetes application follows some variation of this path.</p>
<h2><strong>Why Understanding This Matters</strong></h2>
<p>Many Kubernetes troubleshooting scenarios become easier once you understand where requests travel.</p>
<p>For example:</p>
<h3><strong>DNS Issue</strong></h3>
<p>Request never reaches the cluster.</p>
<h3><strong>Ingress Misconfiguration</strong></h3>
<p>Request reaches cluster but cannot find the Service.</p>
<h3><strong>Service Selector Issue</strong></h3>
<p>Service cannot find Pods.</p>
<h3><strong>Pod Failure</strong></h3>
<p>Request reaches Service but no healthy backend exists.</p>
<h3><strong>Application Bug</strong></h3>
<p>Request reaches the Pod but returns an error.</p>
<p>Understanding the request path helps you identify where problems occur.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>When users access a Kubernetes-hosted application, much more happens than simply reaching a container.</p>
<p>A single request may pass through:</p>
<ul>
<li><p>DNS</p>
</li>
<li><p>Load Balancer</p>
</li>
<li><p>Ingress Controller</p>
</li>
<li><p>Service</p>
</li>
<li><p>kube-proxy</p>
</li>
<li><p>Pod</p>
</li>
<li><p>Application</p>
</li>
</ul>
<p>before returning a response.</p>
<p>Kubernetes abstracts much of this complexity, making applications easier to deploy and scale. However, understanding these layers is essential for debugging, performance tuning, and operating production workloads.</p>
<p>The next time you open an application running on Kubernetes, remember that every request is taking a carefully orchestrated journey through multiple components before reaching the code you’ve written.</p>
<p>And that’s one of the reasons Kubernetes is such a powerful platform for modern cloud-native applications.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[What Happens When a Pod Crashes?]]></title><description><![CDATA[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]]></description><link>https://shahzadahmad.dev/what-happens-when-a-pod-crashes</link><guid isPermaLink="true">https://shahzadahmad.dev/what-happens-when-a-pod-crashes</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[CKAD Exam]]></category><category><![CDATA[CKA Exam]]></category><category><![CDATA[#Pods ]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[#kubernetes #container ]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubernetes-pods]]></category><category><![CDATA[kubernetes-services]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[Kubernetes deployments]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[kubectl]]></category><category><![CDATA[Golden Kubestronaut]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sun, 21 Jun 2026 02:18:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/669cffab-62a8-4a51-bb06-b633fc72564f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>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?</p>
<p>When I first started learning Kubernetes, I assumed that if an application failed, Kubernetes would somehow magically fix everything. The reality is much more interesting.</p>
<p>Understanding what happens during a Pod failure is one of the most important concepts for Kubernetes developers, operators, and certification candidates.</p>
<p>Let’s break it down step by step.</p>
<h2><strong>The Life of a Running Pod</strong></h2>
<p>Imagine you have deployed a simple application:</p>
<pre><code class="language-plaintext">apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
      - name: web-app
        image: nginx
</code></pre>
<p>This Deployment creates three Pods.</p>
<p>Users send requests to the application, and everything works normally.</p>
<p>Then suddenly, one of the Pods crashes.</p>
<p>What happens next?</p>
<h2><strong>Step 1: The Container Process Exits</strong></h2>
<p>Every container has a main process.</p>
<p>For example:</p>
<ul>
<li><p>Nginx runs the nginx process</p>
</li>
<li><p>Java applications run the JVM</p>
</li>
<li><p>Node.js applications run node</p>
</li>
<li><p>Python applications run python</p>
</li>
</ul>
<p>If this process exits unexpectedly, Kubernetes considers the container unhealthy.</p>
<p>Common reasons include:</p>
<ul>
<li><p>Application bugs</p>
</li>
<li><p>Out of memory errors</p>
</li>
<li><p>Unhandled exceptions</p>
</li>
<li><p>Misconfigurations</p>
</li>
<li><p>Failed startup logic</p>
</li>
</ul>
<p>At this point, the container stops running.</p>
<h2><strong>Step 2: The Kubelet Detects the Failure</strong></h2>
<p>Every Kubernetes node runs an agent called the Kubelet.</p>
<p>The Kubelet continuously monitors all Pods running on its node.</p>
<p>When the container exits, the Kubelet immediately notices the state change.</p>
<p>The Pod status changes from:</p>
<pre><code class="language-plaintext">Running
</code></pre>
<p>to:</p>
<pre><code class="language-plaintext">Error
</code></pre>
<p>or</p>
<pre><code class="language-plaintext">CrashLoopBackOff
</code></pre>
<p>depending on the situation.</p>
<p>The Kubelet now decides what action to take based on the Pod’s restart policy.</p>
<h2><strong>Step 3: Kubernetes Attempts a Restart</strong></h2>
<p>Most workloads use the default restart policy:</p>
<pre><code class="language-plaintext">restartPolicy: Always
</code></pre>
<p>This means Kubernetes will automatically restart the failed container.</p>
<p>The container runtime:</p>
<ul>
<li><p>containerd</p>
</li>
<li><p>CRI-O</p>
</li>
<li><p>Docker (older environments)</p>
</li>
</ul>
<p>creates a fresh container instance.</p>
<p>The application starts again.</p>
<p>If the issue was temporary, users may never notice anything happened.</p>
<h2><strong>Step 4: What If the Application Keeps Crashing?</strong></h2>
<p>Sometimes the application crashes immediately after startup.</p>
<p>Example:</p>
<pre><code class="language-plaintext">Container Started
Application Error
Container Exited
</code></pre>
<p>Kubernetes tries again.</p>
<pre><code class="language-plaintext">Container Started
Application Error
Container Exited
</code></pre>
<p>Again.</p>
<pre><code class="language-plaintext">Container Started
Application Error
Container Exited
</code></pre>
<p>Again.</p>
<p>This creates a restart loop.</p>
<p>To prevent endless rapid restarts, Kubernetes introduces a backoff delay.</p>
<p>This is known as:</p>
<pre><code class="language-plaintext">CrashLoopBackOff
</code></pre>
<p>You might see:</p>
<pre><code class="language-plaintext">kubectl get pods
</code></pre>
<p>Output:</p>
<pre><code class="language-plaintext">NAME                     READY   STATUS             RESTARTS
web-app-abc123           0/1     CrashLoopBackOff   8
</code></pre>
<p>This is Kubernetes telling you:</p>
<blockquote>
<p><em>“I keep restarting this container, but it keeps failing.”</em></p>
</blockquote>
<h2><strong>Step 5: Deployment Notices the Problem</strong></h2>
<p>Now let’s look at the bigger picture.</p>
<p>Remember:</p>
<pre><code class="language-plaintext">replicas: 3
</code></pre>
<p>The Deployment wants three healthy Pods.</p>
<p>If one Pod becomes permanently unhealthy, the Deployment controller begins reconciliation.</p>
<p>Kubernetes constantly compares:</p>
<pre><code class="language-plaintext">Desired State
</code></pre>
<p>with</p>
<pre><code class="language-plaintext">Actual State
</code></pre>
<p>If they don’t match, Kubernetes takes action.</p>
<p>This is one of the core principles behind Kubernetes.</p>
<h2><strong>Step 6: Kubernetes Creates a Replacement Pod</strong></h2>
<p>Suppose a node crashes completely.</p>
<p>The Pod disappears.</p>
<p>The Deployment notices:</p>
<pre><code class="language-plaintext">Desired Pods: 3
Actual Pods: 2
</code></pre>
<p>Kubernetes immediately schedules a replacement Pod on another available node.</p>
<p>Users continue accessing the application while Kubernetes restores the desired state.</p>
<p>This self-healing capability is one of the biggest reasons Kubernetes became the standard platform for modern applications.</p>
<h2><strong>Understanding CrashLoopBackOff</strong></h2>
<p>Many beginners think CrashLoopBackOff is the problem.</p>
<p>It’s not.</p>
<p>CrashLoopBackOff is actually a symptom.</p>
<p>The real issue is usually one of the following:</p>
<h3><strong>Application Bug</strong></h3>
<pre><code class="language-plaintext">Unhandled Exception
Segmentation Fault
Runtime Error
</code></pre>
<h3><strong>Missing Configuration</strong></h3>
<pre><code class="language-plaintext">Database URL missing
API key missing
Environment variable missing
</code></pre>
<h3><strong>Failed Dependencies</strong></h3>
<pre><code class="language-plaintext">Database unavailable
External API unreachable
Message queue unavailable
</code></pre>
<h3><strong>Resource Limits</strong></h3>
<pre><code class="language-plaintext">Out Of Memory
CPU starvation
</code></pre>
<p>The first thing you should do is inspect the logs.</p>
<pre><code class="language-plaintext">kubectl logs pod-name
</code></pre>
<p>For previously crashed containers:</p>
<pre><code class="language-plaintext">kubectl logs pod-name --previous
</code></pre>
<h2><strong>How Readiness and Liveness Probes Help</strong></h2>
<p>Kubernetes doesn’t just wait for containers to crash.</p>
<p>It can proactively monitor application health.</p>
<h3><strong>Liveness Probe</strong></h3>
<p>Checks:</p>
<blockquote>
<p><em>Is the application still alive?</em></p>
</blockquote>
<p>If the probe fails repeatedly:</p>
<pre><code class="language-plaintext">Container Restarted
</code></pre>
<h3><strong>Readiness Probe</strong></h3>
<p>Checks:</p>
<blockquote>
<p><em>Can the application serve traffic?</em></p>
</blockquote>
<p>If the probe fails:</p>
<pre><code class="language-plaintext">Pod Removed From Service Endpoints
</code></pre>
<p>Traffic stops flowing to that Pod until it becomes healthy again.</p>
<p>This prevents users from hitting unhealthy applications.</p>
<h2><strong>A Real Production Scenario</strong></h2>
<p>Imagine an e-commerce application.</p>
<p>One Pod develops a memory leak.</p>
<p>Memory usage increases until the process crashes.</p>
<p>Kubernetes detects the failure.</p>
<p>The container restarts.</p>
<p>The Service automatically routes traffic to healthy Pods.</p>
<p>Users continue shopping.</p>
<p>A replacement Pod becomes available.</p>
<p>The platform heals itself.</p>
<p>Without Kubernetes, an engineer might need to wake up at 2 AM and manually restart the application.</p>
<p>With Kubernetes, most failures are handled automatically.</p>
<h2><strong>Key Lessons</strong></h2>
<p>When a Pod crashes, Kubernetes follows a predictable process:</p>
<ol>
<li><p>Container process exits</p>
</li>
<li><p>Kubelet detects the failure</p>
</li>
<li><p>Kubernetes attempts a restart</p>
</li>
<li><p>CrashLoopBackOff appears if failures continue</p>
</li>
<li><p>Deployment compares desired state with actual state</p>
</li>
<li><p>Replacement Pods are created if needed</p>
</li>
<li><p>Services continue routing traffic to healthy Pods</p>
</li>
</ol>
<p>This entire workflow happens automatically and often within seconds.</p>
<p>That’s the power of Kubernetes.</p>
<p>It isn’t just a container orchestration platform.</p>
<p>It’s a self-healing system designed to keep applications running even when individual components fail.</p>
<p>The next time you see a Pod enter CrashLoopBackOff, don’t panic.</p>
<p>Instead, remember that Kubernetes is already doing its job — the real task is finding out why the application keeps crashing.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>One of the biggest lessons I learned while working with Kubernetes is that failures are expected.</p>
<p>Containers crash.<br />Nodes fail.<br />Applications encounter bugs.</p>
<p>Kubernetes was designed with this reality in mind.</p>
<p>Rather than trying to prevent every failure, Kubernetes focuses on detecting problems quickly, recovering automatically, and maintaining the desired state of the system.</p>
<p>Understanding what happens when a Pod crashes helps you move beyond simply deploying applications and start thinking like a Kubernetes operator.</p>
<p>The next time you see a Pod restart or enter a CrashLoopBackOff state, you’ll know exactly what’s happening behind the scenes — and more importantly, where to begin troubleshooting.</p>
<p>That’s one of the key skills that separates Kubernetes beginners from engineers who can confidently run production workloads.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[Kubernetes Services Explained: How Traffic Reaches Your Applications]]></title><description><![CDATA[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]]></description><link>https://shahzadahmad.dev/kubernetes-services-explained-how-traffic-reaches-your-applications</link><guid isPermaLink="true">https://shahzadahmad.dev/kubernetes-services-explained-how-traffic-reaches-your-applications</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[services]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubernetes-pods]]></category><category><![CDATA[kubernetes-services]]></category><category><![CDATA[Kubernetes deployments]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[kubectl]]></category><category><![CDATA[#kubernetes #container ]]></category><category><![CDATA[kubeadm]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sun, 21 Jun 2026 01:51:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/0e907734-dc7f-4656-8b57-f85966c2be85.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When developers first start learning Kubernetes, they quickly understand Pods and Deployments.</p>
<p>You create a Deployment, Kubernetes creates Pods, and your application starts running.</p>
<p>Simple, right?</p>
<p>Not quite.</p>
<p>A common question soon follows:</p>
<p><strong>“If Pods are constantly being created, destroyed, and replaced, how do users actually reach my application?”</strong></p>
<p>The answer is Kubernetes Services.</p>
<p>Services are one of the most important Kubernetes concepts because they provide a stable network endpoint for applications running inside a constantly changing environment.</p>
<p>In this article, I’ll explain what Kubernetes Services are, why they exist, and the different Service types every Kubernetes practitioner should understand.</p>
<h2><strong>The Problem Kubernetes Services Solve</strong></h2>
<p>Imagine you deploy an application using a Deployment.</p>
<pre><code class="language-plaintext">apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
</code></pre>
<p>Kubernetes creates three Pods:</p>
<pre><code class="language-plaintext">web-app-abc123
web-app-def456
web-app-ghi789
</code></pre>
<p>Each Pod receives its own IP address:</p>
<pre><code class="language-plaintext">10.244.0.10
10.244.0.11
10.244.0.12
</code></pre>
<p>The challenge?</p>
<p>These IP addresses are temporary.</p>
<p>If a Pod crashes or gets rescheduled:</p>
<pre><code class="language-plaintext">Old Pod IP: 10.244.0.10
New Pod IP: 10.244.0.25
</code></pre>
<p>Any application trying to communicate directly with Pod IPs would immediately break.</p>
<p>Kubernetes needed a way to provide a stable address regardless of how many Pods exist or where they are running.</p>
<p>That solution is a Service.</p>
<h2><strong>What Is a Kubernetes Service?</strong></h2>
<p>A Service is an abstraction that provides a stable network endpoint for a set of Pods.</p>
<p>Instead of connecting directly to Pods, clients connect to the Service.</p>
<p>The Service automatically routes traffic to healthy Pods behind it.</p>
<p>Think of it like a receptionist in an office building.</p>
<p>Visitors don’t need to know which room an employee is sitting in today.</p>
<p>They simply ask the receptionist, who routes them to the correct person.</p>
<p>Kubernetes Services work the same way.</p>
<h2><strong>How Services Find Pods</strong></h2>
<p>Services use labels and selectors.</p>
<p>A Deployment may create Pods with labels like:</p>
<pre><code class="language-plaintext">labels:
  app: web-app
</code></pre>
<p>A Service selects those Pods:</p>
<pre><code class="language-plaintext">selector:
  app: web-app
</code></pre>
<p>Whenever a Pod matches the selector:</p>
<pre><code class="language-plaintext">app: web-app
</code></pre>
<p>it automatically becomes part of the Service.</p>
<p>No manual updates required.</p>
<h2><strong>Service Example</strong></h2>
<pre><code class="language-plaintext">apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    app: web-app
</code></pre>
<pre><code class="language-plaintext">  ports:
    - port: 80
      targetPort: 8080
</code></pre>
<p>Here:</p>
<ul>
<li><p>Service listens on Port 80</p>
</li>
<li><p>Traffic is forwarded to Port 8080 inside Pods</p>
</li>
<li><p>Pods can come and go without affecting users</p>
</li>
</ul>
<p>Applications simply use:</p>
<pre><code class="language-plaintext">web-service
</code></pre>
<p>instead of Pod IPs.</p>
<h2><strong>Service Discovery in Kubernetes</strong></h2>
<p>Every Service automatically receives a DNS name.</p>
<p>For example:</p>
<pre><code class="language-plaintext">web-service.default.svc.cluster.local
</code></pre>
<p>Most applications simply use:</p>
<pre><code class="language-plaintext">http://web-service
</code></pre>
<p>and Kubernetes DNS resolves it automatically.</p>
<p>This makes service-to-service communication extremely simple.</p>
<h2><strong>ClusterIP Service</strong></h2>
<p>ClusterIP is the default Service type.</p>
<pre><code class="language-plaintext">spec:
  type: ClusterIP
</code></pre>
<p>Characteristics:</p>
<p>✅ Accessible inside the cluster</p>
<p>✅ Gets a virtual IP</p>
<p>✅ Used for internal communication</p>
<p>❌ Not accessible from outside Kubernetes</p>
<p>Example:</p>
<pre><code class="language-plaintext">Frontend → Backend API
Backend → Database
Microservice → Microservice
</code></pre>
<p>ClusterIP is the most commonly used Service type in production.</p>
<h2><strong>NodePort Service</strong></h2>
<p>A NodePort exposes the application on a port of every worker node.</p>
<pre><code class="language-plaintext">spec:
  type: NodePort
</code></pre>
<p>Example:</p>
<pre><code class="language-plaintext">Node IP: 192.168.1.10
Port: 30080
</code></pre>
<p>Users can access:</p>
<pre><code class="language-plaintext">http://192.168.1.10:30080
</code></pre>
<p>Kubernetes forwards traffic to the appropriate Pods.</p>
<p>Advantages:</p>
<ul>
<li><p>Simple external access</p>
</li>
<li><p>Useful for testing</p>
</li>
</ul>
<p>Disadvantages:</p>
<ul>
<li><p>High port numbers</p>
</li>
<li><p>Not ideal for production</p>
</li>
<li><p>Requires node IP awareness</p>
</li>
</ul>
<h2><strong>LoadBalancer Service</strong></h2>
<p>Cloud providers offer a more production-friendly option.</p>
<pre><code class="language-plaintext">spec:
  type: LoadBalancer
</code></pre>
<p>When created:</p>
<pre><code class="language-plaintext">kubectl get svc
</code></pre>
<p>You might see:</p>
<pre><code class="language-plaintext">EXTERNAL-IP
34.121.10.25
</code></pre>
<p>Cloud platforms automatically create:</p>
<ul>
<li><p>AWS Elastic Load Balancer</p>
</li>
<li><p>Azure Load Balancer</p>
</li>
<li><p>Google Cloud Load Balancer</p>
</li>
</ul>
<p>Benefits:</p>
<p>✅ Public IP</p>
<p>✅ Load balancing</p>
<p>✅ Production ready</p>
<p>✅ Easy external access</p>
<p>This is the preferred approach for many cloud-native applications.</p>
<h2><strong>ExternalName Service</strong></h2>
<p>Sometimes the target isn’t inside Kubernetes.</p>
<p>Example:</p>
<pre><code class="language-plaintext">type: ExternalName
externalName: database.company.com
</code></pre>
<p>Kubernetes simply creates a DNS alias.</p>
<p>Applications can continue using Kubernetes-style service names while connecting to external resources.</p>
<p>Useful for:</p>
<ul>
<li><p>Managed databases</p>
</li>
<li><p>Legacy systems</p>
</li>
<li><p>External APIs</p>
</li>
</ul>
<h2><strong>How Load Balancing Works</strong></h2>
<p>Suppose your Deployment has:</p>
<pre><code class="language-plaintext">3 Pods
</code></pre>
<p>Traffic arrives at the Service:</p>
<pre><code class="language-plaintext">Request 1 → Pod A
Request 2 → Pod B
Request 3 → Pod C
</code></pre>
<p>Kubernetes automatically distributes traffic across healthy Pods.</p>
<p>This provides:</p>
<ul>
<li><p>Scalability</p>
</li>
<li><p>High availability</p>
</li>
<li><p>Fault tolerance</p>
</li>
</ul>
<p>without requiring application changes.</p>
<h2><strong>Services and Health Checks</strong></h2>
<p>Remember Readiness Probes?</p>
<p>A Service only sends traffic to Pods that are ready.</p>
<p>If a Pod fails its readiness check:</p>
<pre><code class="language-plaintext">Ready = False
</code></pre>
<p>Kubernetes immediately removes it from Service endpoints.</p>
<p>Users never receive traffic to unhealthy Pods.</p>
<p>This is one reason why readiness probes are so important.</p>
<h2><strong>Service Endpoints</strong></h2>
<p>You can see which Pods a Service is targeting.</p>
<pre><code class="language-plaintext">kubectl get endpoints web-service
</code></pre>
<p>Example:</p>
<pre><code class="language-plaintext">10.244.0.10
10.244.0.11
10.244.0.12
</code></pre>
<p>These endpoints update automatically as Pods change.</p>
<h2><strong>A Real-World Example</strong></h2>
<p>Imagine an e-commerce platform.</p>
<pre><code class="language-plaintext">Frontend Service
        ↓
Product Service
        ↓
Order Service
        ↓
Payment Service
</code></pre>
<p>Each service communicates through Kubernetes Services.</p>
<p>Developers never worry about Pod IPs.</p>
<p>Kubernetes handles:</p>
<ul>
<li><p>Service discovery</p>
</li>
<li><p>Traffic routing</p>
</li>
<li><p>Load balancing</p>
</li>
<li><p>Failover</p>
</li>
</ul>
<p>behind the scenes.</p>
<h2><strong>Key Takeaways</strong></h2>
<p>Kubernetes Services are the networking backbone of modern cloud-native applications.</p>
<p>They provide:</p>
<ul>
<li><p>Stable endpoints for Pods</p>
</li>
<li><p>Built-in service discovery</p>
</li>
<li><p>Automatic load balancing</p>
</li>
<li><p>Internal and external access methods</p>
</li>
<li><p>Seamless integration with health checks</p>
</li>
</ul>
<p>If Pods are where applications run, Services are how applications communicate.</p>
<p>Understanding Services is one of the biggest milestones in becoming comfortable with Kubernetes networking.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>One of the biggest mindset shifts when learning Kubernetes is realizing that applications should never depend on individual Pods.</p>
<p>Pods are designed to be ephemeral. They can be restarted, replaced, rescheduled, or scaled at any time.</p>
<p>Services solve this challenge by providing a stable layer between applications and the Pods running behind them.</p>
<p>Whether you’re building a simple web application or a large microservices platform, Kubernetes Services make communication reliable, scalable, and resilient.</p>
<p>As I continued my Kubernetes journey and prepared for certifications like <a href="https://www.credly.com/badges/e72821a9-97a5-4ee8-a7f6-93f40246e864/public_url">CKA</a> and <a href="https://www.credly.com/badges/79423978-8948-451b-bca1-7721fff284e3/public_url">CKAD</a>, I realized that understanding Services was the foundation for understanding more advanced networking concepts such as Ingress, Service Meshes, and Gateway APIs.</p>
<p>If Pods are the workers doing the job, Services are the communication layer that keeps everything connected.</p>
<p>Mastering Kubernetes Services is a major step toward becoming confident with Kubernetes networking and operating production-ready applications.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me on for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[Kubernetes Health Checks Explained: Liveness, Readiness, and Startup Probes]]></title><description><![CDATA[When I first started learning Kubernetes, I thought that if a Pod showed a Running status, everything was working correctly.
The application was running.The container hadn’t crashed.The deployment was]]></description><link>https://shahzadahmad.dev/kubernetes-health-checks-explained-liveness-readiness-and-startup-probes</link><guid isPermaLink="true">https://shahzadahmad.dev/kubernetes-health-checks-explained-liveness-readiness-and-startup-probes</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[health check]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubernetes-services]]></category><category><![CDATA[Kubernetes deployments]]></category><category><![CDATA[kubernetes-pods]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[CKA Exam]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[Golden Kubestronaut]]></category><category><![CDATA[kubectl]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sun, 21 Jun 2026 01:43:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/9c450b8a-d94b-4db1-94fb-44b6c4c43ae4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I first started learning Kubernetes, I thought that if a Pod showed a <strong>Running</strong> status, everything was working correctly.</p>
<p>The application was running.<br />The container hadn’t crashed.<br />The deployment was healthy.</p>
<p>Or so I thought.</p>
<p>As I gained more experience with Kubernetes and prepared for CNCF certifications like <a href="https://www.credly.com/badges/e72821a9-97a5-4ee8-a7f6-93f40246e864/public_url">CKA</a> and <a href="https://www.credly.com/badges/79423978-8948-451b-bca1-7721fff284e3/public_url">CKAD</a>, I learned that a running container doesn’t necessarily mean a healthy application.</p>
<p>An application can be:</p>
<ul>
<li><p>Running but unable to serve requests</p>
</li>
<li><p>Connected to the wrong backend</p>
</li>
<li><p>Stuck in a deadlock</p>
</li>
<li><p>Waiting for a database connection</p>
</li>
<li><p>Starting up slowly</p>
</li>
</ul>
<p>This is exactly why Kubernetes provides <strong>Health Checks</strong>, also known as <strong>Probes</strong>.</p>
<p>Understanding these probes is one of the most important skills for anyone deploying applications to Kubernetes.</p>
<h2><strong>The Problem Kubernetes Is Trying To Solve</strong></h2>
<p>Imagine an application running inside a Pod.</p>
<p>The process is alive, but:</p>
<ul>
<li><p>The application cannot connect to the database</p>
</li>
<li><p>A critical dependency is unavailable</p>
</li>
<li><p>The application is still initializing</p>
</li>
<li><p>The server is stuck and no longer responding</p>
</li>
</ul>
<p>From Kubernetes’ perspective, the container is still running.</p>
<p>Without health checks, Kubernetes has no way to determine whether the application is actually usable.</p>
<p>This is where probes come in.</p>
<p>Kubernetes asks three different questions:</p>
<p><strong>Is the application alive?</strong></p>
<p><strong>Is the application ready to receive traffic?</strong></p>
<p><strong>Has the application finished starting?</strong></p>
<p>Each question is answered by a different probe.</p>
<h2><strong>Understanding Kubernetes Probes</strong></h2>
<p>Kubernetes provides three types of health checks:</p>
<ol>
<li><p>Liveness Probe</p>
</li>
<li><p>Readiness Probe</p>
</li>
<li><p>Startup Probe</p>
</li>
</ol>
<p>Each serves a different purpose.</p>
<p>Let’s look at them one by one.</p>
<h3><strong>1. Liveness Probe</strong></h3>
<p>The Liveness Probe answers a simple question:</p>
<blockquote>
<p><em>Is the application still alive?</em></p>
</blockquote>
<p>Sometimes applications become unresponsive without crashing.</p>
<p>Examples include:</p>
<ul>
<li><p>Deadlocked threads</p>
</li>
<li><p>Infinite loops</p>
</li>
<li><p>Memory-related issues</p>
</li>
<li><p>Hung processes</p>
</li>
</ul>
<p>The container is still running, but the application has stopped functioning properly.</p>
<p>A Liveness Probe allows Kubernetes to detect this condition and restart the container automatically.</p>
<p>Example:</p>
<pre><code class="language-plaintext">livenessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 10
  periodSeconds: 5
</code></pre>
<p>In this example, Kubernetes checks the <code>/health</code> endpoint every five seconds.</p>
<p>If the endpoint repeatedly fails, Kubernetes assumes the application is unhealthy and restarts the container.</p>
<h3><strong>Why It Matters</strong></h3>
<p>Without a Liveness Probe:</p>
<pre><code class="language-plaintext">Application freezes
↓
Container keeps running
↓
Users receive failures
↓
Nobody notices
</code></pre>
<p>With a Liveness Probe:</p>
<pre><code class="language-plaintext">Application freezes
↓
Probe fails
↓
Container restarts
↓
Application recovers automatically
</code></pre>
<p>This can prevent many production incidents.</p>
<h3><strong>2. Readiness Probe</strong></h3>
<p>The Readiness Probe answers a different question:</p>
<blockquote>
<p><em>Can this Pod receive traffic?</em></p>
</blockquote>
<p>This is arguably the most important probe in production environments.</p>
<p>Consider a scenario where an application needs:</p>
<ul>
<li><p>Database connectivity</p>
</li>
<li><p>Cache initialization</p>
</li>
<li><p>External API connections</p>
</li>
</ul>
<p>The container may start immediately, but the application isn’t actually ready to serve users.</p>
<p>Example:</p>
<pre><code class="language-plaintext">readinessProbe:
  httpGet:
    path: /ready
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 5
</code></pre>
<p>Until the probe succeeds, Kubernetes removes the Pod from Service endpoints.</p>
<p>This means traffic will not be sent to that Pod.</p>
<h3><strong>What Happens During Startup?</strong></h3>
<pre><code class="language-plaintext">Pod Starts
↓
Application Initializing
↓
Readiness Probe Fails
↓
No Traffic Sent
↓
Application Ready
↓
Probe Succeeds
↓
Traffic Begins
</code></pre>
<h3><strong>Why It Matters</strong></h3>
<p>Without Readiness Probes:</p>
<p>Users may hit Pods that aren’t ready yet.</p>
<p>With Readiness Probes:</p>
<p>Only healthy and fully initialized Pods receive requests.</p>
<p>This significantly reduces deployment-related outages.</p>
<h3><strong>3. Startup Probe</strong></h3>
<p>The Startup Probe was introduced to solve a common problem.</p>
<p>Some applications take a long time to start.</p>
<p>Examples:</p>
<ul>
<li><p>Java applications</p>
</li>
<li><p>Spring Boot services</p>
</li>
<li><p>Large enterprise applications</p>
</li>
</ul>
<p>Without a Startup Probe, Kubernetes may interpret slow startup as a failure.</p>
<p>The result?</p>
<pre><code class="language-plaintext">Application Starts Slowly
↓
Liveness Probe Fails
↓
Container Restarts
↓
Application Starts Again
↓
Infinite Crash Loop
</code></pre>
<p>A Startup Probe tells Kubernetes:</p>
<blockquote>
<p><em>Give this application time to initialize before checking liveness.</em></p>
</blockquote>
<p>Example:</p>
<pre><code class="language-plaintext">startupProbe:
  httpGet:
    path: /startup
    port: 8080

  failureThreshold: 30
  periodSeconds: 10
</code></pre>
<p>This configuration allows up to five minutes for startup.</p>
<p>Once the Startup Probe succeeds, Kubernetes begins running the Liveness and Readiness Probes.</p>
<h3><strong>Why It Matters</strong></h3>
<p>Startup Probes are particularly useful for:</p>
<ul>
<li><p>Java applications</p>
</li>
<li><p>Legacy enterprise systems</p>
</li>
<li><p>Applications with lengthy initialization processes</p>
</li>
</ul>
<h2><strong>Visualizing All Three Probes</strong></h2>
<p>A simple way to remember them:</p>
<pre><code class="language-plaintext">Startup Probe
↓
Has the application finished starting?
</code></pre>
<pre><code class="language-plaintext">Readiness Probe
↓
Can the application receive traffic?
</code></pre>
<pre><code class="language-plaintext">Liveness Probe
↓
Is the application still healthy?
</code></pre>
<p>Each probe focuses on a different stage of the application’s lifecycle.</p>
<h2><strong>Common Mistakes Developers Make</strong></h2>
<h3><strong>Mistake 1: Using the Same Endpoint Everywhere</strong></h3>
<p>Many teams configure:</p>
<pre><code class="language-plaintext">/health
</code></pre>
<p>for all probes.</p>
<p>This often leads to unexpected behavior.</p>
<p>Each probe should ideally validate the condition it is responsible for.</p>
<h3><strong>Mistake 2: No Readiness Probe</strong></h3>
<p>This is one of the most common issues.</p>
<p>Without Readiness Probes:</p>
<ul>
<li><p>New Pods receive traffic too early</p>
</li>
<li><p>Deployments become unstable</p>
</li>
<li><p>Users experience errors during releases</p>
</li>
</ul>
<h3><strong>Mistake 3: Aggressive Timeouts</strong></h3>
<p>Some teams configure:</p>
<pre><code class="language-plaintext">timeoutSeconds: 1
</code></pre>
<p>for everything.</p>
<p>Temporary network delays can cause false failures and unnecessary restarts.</p>
<h3><strong>Mistake 4: No Startup Probe For Slow Applications</strong></h3>
<p>Slow-starting applications often enter restart loops because Kubernetes assumes they have failed.</p>
<p>Startup Probes solve this problem elegantly.</p>
<h3><strong>Mistake 5: Checking External Dependencies Inside Liveness Probes</strong></h3>
<p>Imagine your liveness endpoint checks the database.</p>
<p>The database becomes unavailable.</p>
<p>The application is still healthy, but the liveness check fails.</p>
<p>Kubernetes starts restarting perfectly healthy Pods.</p>
<p>Now you’ve turned a database issue into an application outage.</p>
<p>Liveness checks should focus on application health, not dependency availability.</p>
<h2><strong>A Real Production Scenario</strong></h2>
<p>Imagine an e-commerce application.</p>
<p>Components:</p>
<pre><code class="language-plaintext">Frontend
Backend API
Database
Redis Cache
</code></pre>
<p>When a new Backend Pod starts:</p>
<ol>
<li><p>Container starts</p>
</li>
<li><p>Database connection initializes</p>
</li>
<li><p>Cache connection initializes</p>
</li>
<li><p>Readiness Probe remains failed</p>
</li>
<li><p>No traffic reaches the Pod</p>
</li>
<li><p>Initialization completes</p>
</li>
<li><p>Readiness Probe succeeds</p>
</li>
<li><p>Traffic begins</p>
</li>
</ol>
<p>Users never notice the deployment.</p>
<p>This is exactly how modern cloud-native applications achieve reliability.</p>
<h2><strong>The Biggest Lesson I Learned</strong></h2>
<p>One of the biggest lessons I learned while preparing for CKAD and working with Kubernetes is that most outages aren’t caused by containers crashing.</p>
<p>They’re caused by applications appearing healthy when they actually aren’t.</p>
<p>A Pod can be running while serving errors.</p>
<p>A process can be alive while being completely unusable.</p>
<p>Health checks bridge that gap.</p>
<p>They allow Kubernetes to understand the true state of an application and respond accordingly.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>Kubernetes Health Checks are one of those features that seem simple at first but become incredibly important in production environments.</p>
<p>Understanding the differences between:</p>
<p>✅ Liveness Probes<br />✅ Readiness Probes<br />✅ Startup Probes</p>
<p>can dramatically improve application reliability and reduce downtime.</p>
<p>If you’re learning Kubernetes, don’t just memorize the YAML syntax.</p>
<p>Understand the problem each probe is solving.</p>
<p>That’s the difference between deploying containers and operating production-ready applications.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[The Kubernetes Features Developers Should Know]]></title><description><![CDATA[Moving Beyond “kubectl apply” and Understanding What Makes Applications Production-Ready
When I first started working with Kubernetes, I thought my responsibility as a developer ended once my containe]]></description><link>https://shahzadahmad.dev/the-kubernetes-features-developers-should-know</link><guid isPermaLink="true">https://shahzadahmad.dev/the-kubernetes-features-developers-should-know</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[Developer]]></category><category><![CDATA[developer productivity]]></category><category><![CDATA[CKAD Exam]]></category><category><![CDATA[CKA Exam]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubernetes-persistent-volumes]]></category><category><![CDATA[kubernetes-services]]></category><category><![CDATA[Kubernetes deployments]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[kubectl]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[Golden Kubestronaut]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sat, 20 Jun 2026 02:07:03 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/a8b7f5e3-e163-40d0-999f-6a7f711f787c.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Moving Beyond “kubectl apply” and Understanding What Makes Applications Production-Ready</em></p>
<p>When I first started working with Kubernetes, I thought my responsibility as a developer ended once my container image was built and deployed.</p>
<p>Write a Dockerfile.<br />Build an image.<br />Create a Deployment.<br />Done.</p>
<p>Or so I thought.</p>
<p>As I spent more time preparing for CNCF certifications and working with production workloads, I realized Kubernetes provides far more than just a platform to run containers. It offers a rich set of features that help developers build resilient, scalable, secure, and maintainable applications.</p>
<p>The problem is that many developers only interact with Deployments and Pods while missing the features that make Kubernetes truly powerful.</p>
<p>In this article, I’ll share the Kubernetes features every developer should understand, even if you’re not a platform engineer.</p>
<h2><strong>1. ConfigMaps: Stop Hardcoding Configuration</strong></h2>
<p>One of the first mistakes developers make is embedding environment-specific values directly inside applications.</p>
<p>Things like:</p>
<ul>
<li><p>Database URLs</p>
</li>
<li><p>Feature flags</p>
</li>
<li><p>API endpoints</p>
</li>
<li><p>Logging configurations</p>
</li>
</ul>
<p>should not be hardcoded.</p>
<p>Kubernetes provides ConfigMaps to separate configuration from application code.</p>
<p>Instead of rebuilding an image for every environment, the same container image can run in:</p>
<ul>
<li><p>Development</p>
</li>
<li><p>Testing</p>
</li>
<li><p>Staging</p>
</li>
<li><p>Production</p>
</li>
</ul>
<p>with different configurations.</p>
<h3><strong>Why Developers Should Care</strong></h3>
<p>This follows the Twelve-Factor App methodology and simplifies deployments significantly.</p>
<p>Example:</p>
<pre><code class="language-plaintext">apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config

data:
  APP_ENV: production
  LOG_LEVEL: info
</code></pre>
<p>Your application simply reads these values as environment variables.</p>
<h2><strong>2. Secrets: Protect Sensitive Information</strong></h2>
<p>Passwords and API keys should never be stored in:</p>
<ul>
<li><p>Git repositories</p>
</li>
<li><p>Docker images</p>
</li>
<li><p>Source code</p>
</li>
</ul>
<p>Kubernetes Secrets provide a mechanism to store sensitive data separately from application logic.</p>
<p>Examples include:</p>
<ul>
<li><p>Database passwords</p>
</li>
<li><p>TLS certificates</p>
</li>
<li><p>OAuth tokens</p>
</li>
<li><p>Cloud credentials</p>
</li>
</ul>
<h3><strong>Why Developers Should Care</strong></h3>
<p>Security incidents often happen because credentials are exposed accidentally.</p>
<p>Using Secrets makes security practices much cleaner and easier to manage.</p>
<h2><strong>3. Liveness Probes: Automatically Recover Failed Applications</strong></h2>
<p>Applications sometimes become unhealthy without actually crashing.</p>
<p>Examples:</p>
<ul>
<li><p>Deadlocks</p>
</li>
<li><p>Memory issues</p>
</li>
<li><p>Hung threads</p>
</li>
<li><p>Stuck database connections</p>
</li>
</ul>
<p>Without health checks, Kubernetes assumes the application is healthy.</p>
<p>A Liveness Probe tells Kubernetes:</p>
<blockquote>
<p><em>“If this endpoint stops responding, restart my container.</em></p>
</blockquote>
<p>Example:</p>
<pre><code class="language-plaintext">livenessProbe:
  httpGet:
    path: /health
    port: 8080
</code></pre>
<h3><strong>Why Developers Should Care</strong></h3>
<p>Many production outages can be resolved automatically when Kubernetes is allowed to restart unhealthy containers.</p>
<h2><strong>4. Readiness Probes: Prevent Broken Traffic Routing</strong></h2>
<p>An application may be running but not ready to serve requests.</p>
<p>Examples:</p>
<ul>
<li><p>Startup still in progress</p>
</li>
<li><p>Database connection not established</p>
</li>
<li><p>Cache not initialized</p>
</li>
</ul>
<p>A Readiness Probe prevents traffic from reaching the application until it is actually ready.</p>
<h3><strong>Why Developers Should Care</strong></h3>
<p>Without readiness probes, users may receive errors during deployments and startup events.</p>
<h2><strong>5. Resource Requests and Limits</strong></h2>
<p>Containers are not infinite.</p>
<p>Every application consumes:</p>
<ul>
<li><p>CPU</p>
</li>
<li><p>Memory</p>
</li>
</ul>
<p>Kubernetes allows developers to specify how much resources an application requires.</p>
<p>Example:</p>
<pre><code class="language-plaintext">resources:
  requests:
    memory: "256Mi"
    cpu: "250m"

  limits:
    memory: "512Mi"
    cpu: "500m"
</code></pre>
<h3><strong>Why Developers Should Care</strong></h3>
<p>Proper resource settings help:</p>
<ul>
<li><p>Prevent noisy neighbors</p>
</li>
<li><p>Improve scheduling</p>
</li>
<li><p>Reduce cluster costs</p>
</li>
<li><p>Avoid unexpected OOMKills</p>
</li>
</ul>
<h2><strong>6. Horizontal Pod Autoscaler (HPA)</strong></h2>
<p>One of Kubernetes’ most valuable features is automatic scaling.</p>
<p>Instead of manually increasing replicas, HPA can scale applications based on metrics.</p>
<p>Example:</p>
<pre><code class="language-plaintext">minReplicas: 2
maxReplicas: 10
</code></pre>
<p>When traffic increases:</p>
<pre><code class="language-plaintext">2 Pods → 4 Pods → 8 Pods
</code></pre>
<p>When traffic decreases:</p>
<pre><code class="language-plaintext">8 Pods → 4 Pods → 2 Pods
</code></pre>
<h3><strong>Why Developers Should Care</strong></h3>
<p>Applications can handle traffic spikes automatically without human intervention.</p>
<h2><strong>7. Rolling Updates</strong></h2>
<p>Before Kubernetes, deployments often involved downtime.</p>
<p>Kubernetes Deployments support rolling updates out of the box.</p>
<p>Instead of replacing all instances at once:</p>
<pre><code class="language-plaintext">Old Version → New Version

Pod 1 replaced
Pod 2 replaced
Pod 3 replaced
</code></pre>
<p>Traffic continues flowing throughout the update.</p>
<h3><strong>Why Developers Should Care</strong></h3>
<p>Users experience minimal disruption during releases.</p>
<h2><strong>8. Rollbacks</strong></h2>
<p>Even great engineers deploy bugs.</p>
<p>The real question is:</p>
<p>How quickly can you recover?</p>
<p>Kubernetes stores deployment history and allows quick rollback.</p>
<p>Example:</p>
<pre><code class="language-plaintext">kubectl rollout undo deployment/myapp
</code></pre>
<h3><strong>Why Developers Should Care</strong></h3>
<p>Recovery often matters more than perfection.</p>
<h2><strong>9. Namespaces</strong></h2>
<p>As clusters grow, organization becomes important.</p>
<p>Namespaces help separate workloads.</p>
<p>Examples:</p>
<pre><code class="language-plaintext">development
testing
staging
production
</code></pre>
<h3><strong>Why Developers Should Care</strong></h3>
<p>Namespaces prevent accidental interference between environments and teams.</p>
<h2><strong>10. Ingress</strong></h2>
<p>Applications need to be accessible from outside the cluster.</p>
<p>Ingress provides:</p>
<ul>
<li><p>URL routing</p>
</li>
<li><p>TLS termination</p>
</li>
<li><p>Domain management</p>
</li>
<li><p>Reverse proxy functionality</p>
</li>
</ul>
<p>Example:</p>
<pre><code class="language-plaintext">api.company.com
app.company.com
blog.company.com
</code></pre>
<p>can all share the same Kubernetes cluster.</p>
<h3><strong>Why Developers Should Care</strong></h3>
<p>Ingress simplifies exposing applications to users while reducing infrastructure complexity.</p>
<h2><strong>11. Persistent Volumes</strong></h2>
<p>Containers are temporary.</p>
<p>Data often isn’t.</p>
<p>Kubernetes provides Persistent Volumes for stateful applications.</p>
<p>Examples:</p>
<ul>
<li><p>Databases</p>
</li>
<li><p>File storage</p>
</li>
<li><p>Shared application data</p>
</li>
</ul>
<h3><strong>Why Developers Should Care</strong></h3>
<p>Understanding storage is critical when applications need to retain information across restarts.</p>
<h2><strong>12. Network Policies</strong></h2>
<p>By default, applications inside a cluster can often communicate freely.</p>
<p>Network Policies allow you to define who can talk to whom.</p>
<p>Example:</p>
<pre><code class="language-plaintext">Frontend → Backend ✓

Backend → Database ✓

Frontend → Database ✗
</code></pre>
<h3><strong>Why Developers Should Care</strong></h3>
<p>This significantly improves application security and reduces lateral movement risks.</p>
<h2><strong>The Biggest Realization</strong></h2>
<p>The most important lesson I learned is that Kubernetes is not merely a container orchestrator.</p>
<p>It is a platform that provides built-in capabilities for:</p>
<ul>
<li><p>Configuration management</p>
</li>
<li><p>Security</p>
</li>
<li><p>Scaling</p>
</li>
<li><p>High availability</p>
</li>
<li><p>Traffic management</p>
</li>
<li><p>Disaster recovery</p>
</li>
</ul>
<p>Developers who understand these features write applications that are far easier to operate in production.</p>
<p>And that’s the real goal.</p>
<p>Not just deploying containers.</p>
<p>But building applications that survive real-world production environments.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>Many developers learn Kubernetes by focusing only on Pods, Deployments, and Services.</p>
<p>Those are important.</p>
<p>But the real power of Kubernetes comes from the ecosystem of features surrounding them.</p>
<p>If you’re starting your Kubernetes journey, focus on understanding these capabilities:</p>
<p>✅ ConfigMaps<br />✅ Secrets<br />✅ Probes<br />✅ Resource Limits<br />✅ HPA<br />✅ Rolling Updates<br />✅ Rollbacks<br />✅ Namespaces<br />✅ Ingress<br />✅ Persistent Volumes<br />✅ Network Policies</p>
<p>Master these, and you’ll begin thinking like a cloud-native developer rather than someone simply deploying containers.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[How Applications Actually Run on Kubernetes]]></title><description><![CDATA[Most people start learning Kubernetes by creating Pods, Deployments, and Services.
kubectl create deployment nginx --image=nginx

The Pod becomes Running, the Service gets created, and everything appe]]></description><link>https://shahzadahmad.dev/how-applications-actually-run-on-kubernetes</link><guid isPermaLink="true">https://shahzadahmad.dev/how-applications-actually-run-on-kubernetes</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[application modernization]]></category><category><![CDATA[Applications]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[#kubernetes #container ]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubernetes-services]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[Kubernetes deployments]]></category><category><![CDATA[kubectl]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[Golden Kubestronaut]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sat, 20 Jun 2026 01:59:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/394c902f-1364-40bd-990f-e53560214e27.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most people start learning Kubernetes by creating Pods, Deployments, and Services.</p>
<pre><code class="language-plaintext">kubectl create deployment nginx --image=nginx
</code></pre>
<p>The Pod becomes Running, the Service gets created, and everything appears to work.</p>
<p>But have you ever stopped to ask:</p>
<p><strong>What actually happens behind the scenes when an application runs on Kubernetes?</strong></p>
<p>Understanding this changed the way I think about Kubernetes.</p>
<p>Instead of seeing Deployments, Services, and Pods as individual resources, I started seeing them as components working together to deliver an application to end users.</p>
<p>Let’s walk through the complete journey.</p>
<h2><strong>The Traditional Way</strong></h2>
<p>Before Kubernetes, deploying an application was relatively simple.</p>
<ol>
<li><p>Install a server.</p>
</li>
<li><p>Install the application.</p>
</li>
<li><p>Start the process.</p>
</li>
<li><p>Open a port.</p>
</li>
<li><p>Hope nothing crashes.</p>
</li>
</ol>
<p>If the server failed, the application became unavailable.</p>
<p>If traffic increased, scaling was often manual.</p>
<p>Kubernetes was designed to solve these operational challenges.</p>
<h2><strong>The Application Journey</strong></h2>
<p>Imagine you’re deploying a simple web application.</p>
<p>A user opens a browser and enters:</p>
<pre><code class="language-plaintext">https://myapp.com
</code></pre>
<p>From that single request, several Kubernetes components begin working together.</p>
<h3><strong>Step 1: DNS Resolves the Application</strong></h3>
<p>The domain name points to an external load balancer or ingress endpoint.</p>
<p>The user’s request reaches the Kubernetes cluster.</p>
<p>At this point Kubernetes has not yet reached the application itself.</p>
<p>The request has only arrived at the cluster boundary.</p>
<h3><strong>Step 2: Ingress Receives the Traffic</strong></h3>
<p>The Ingress acts like a smart traffic controller.</p>
<p>It examines:</p>
<ul>
<li><p>Hostname</p>
</li>
<li><p>URL path</p>
</li>
<li><p>Routing rules</p>
</li>
</ul>
<p>Example:</p>
<pre><code class="language-plaintext">apiVersion: networking.k8s.io/v1
kind: Ingress
spec:
  rules:
  - host: myapp.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-service
            port:
              number: 80
</code></pre>
<p>The Ingress determines where the request should go next.</p>
<h3><strong>Step 3: Service Finds the Application</strong></h3>
<p>A Service provides a stable endpoint for application Pods.</p>
<p>Instead of communicating directly with Pods, users communicate with Services.</p>
<p>Why?</p>
<p>Because Pods are temporary.</p>
<p>Pods can:</p>
<ul>
<li><p>Restart</p>
</li>
<li><p>Move to another node</p>
</li>
<li><p>Be recreated</p>
</li>
<li><p>Receive new IP addresses</p>
</li>
</ul>
<p>Services solve this problem by providing a permanent virtual endpoint.</p>
<p>Example:</p>
<pre><code class="language-plaintext">kind: Service
spec:
  selector:
    app: web
</code></pre>
<p>The Service continuously discovers Pods matching its selector.</p>
<h3><strong>Step 4: Service Selects a Pod</strong></h3>
<p>Suppose three Pods are running:</p>
<pre><code class="language-plaintext">web-1
web-2
web-3
</code></pre>
<p>The Service automatically load-balances traffic among them.</p>
<p>Request 1 → web-1</p>
<p>Request 2 → web-2</p>
<p>Request 3 → web-3</p>
<p>This happens transparently.</p>
<p>The user never knows which Pod handled the request.</p>
<h3><strong>Step 5: Pod Runs the Application</strong></h3>
<p>A Pod is the smallest deployable unit in Kubernetes.</p>
<p>Inside the Pod lives the actual application container.</p>
<p>Example:</p>
<pre><code class="language-plaintext">containers:
- name: web
  image: nginx
</code></pre>
<p>This container contains:</p>
<ul>
<li><p>Application code</p>
</li>
<li><p>Runtime</p>
</li>
<li><p>Libraries</p>
</li>
<li><p>Dependencies</p>
</li>
</ul>
<p>When the request reaches the Pod, the application processes it and generates a response.</p>
<h3><strong>Step 6: Node Provides the Compute</strong></h3>
<p>Pods do not run directly on Kubernetes.</p>
<p>They run on Nodes.</p>
<p>A Node is a machine that provides:</p>
<ul>
<li><p>CPU</p>
</li>
<li><p>Memory</p>
</li>
<li><p>Storage</p>
</li>
<li><p>Networking</p>
</li>
</ul>
<p>Think of Nodes as apartment buildings.</p>
<p>Pods are the apartments.</p>
<p>Kubernetes decides which apartment building should host each tenant.</p>
<h3><strong>Step 7: Kubelet Keeps Everything Running</strong></h3>
<p>Every Node runs a component called Kubelet.</p>
<p>The Kubelet continuously checks:</p>
<ul>
<li><p>Is the Pod running?</p>
</li>
<li><p>Did the container crash?</p>
</li>
<li><p>Does the Pod match the desired state?</p>
</li>
</ul>
<p>If something goes wrong, Kubernetes attempts to restore the desired state automatically.</p>
<p>This is one of Kubernetes’ most powerful features.</p>
<h3><strong>Step 8: Deployment Maintains Desired State</strong></h3>
<p>The Deployment acts as the application manager.</p>
<p>Suppose you want three replicas:</p>
<pre><code class="language-plaintext">replicas: 3
</code></pre>
<p>If one Pod crashes:</p>
<pre><code class="language-plaintext">Current Pods: 2
Desired Pods: 3
</code></pre>
<p>The Deployment immediately creates another Pod.</p>
<p>You don’t need to intervene.</p>
<p>Kubernetes continuously works to ensure reality matches your declared configuration.</p>
<h2><strong>Why This Architecture Matters</strong></h2>
<p>When I first learned Kubernetes, I viewed each resource separately.</p>
<p>Deployment.</p>
<p>Service.</p>
<p>Ingress.</p>
<p>Pod.</p>
<p>Node.</p>
<p>But real understanding came when I saw how they work together.</p>
<p>A user request travels through an entire chain:</p>
<pre><code class="language-plaintext">User
  ↓
DNS
  ↓
Ingress
  ↓
Service
  ↓
Pod
  ↓
Container
  ↓
Application
</code></pre>
<p>Every Kubernetes resource exists to support that journey.</p>
<p>Once you understand the flow, troubleshooting becomes much easier.</p>
<p>Instead of guessing, you can systematically identify where the problem exists.</p>
<ul>
<li><p>DNS issue?</p>
</li>
<li><p>Ingress issue?</p>
</li>
<li><p>Service issue?</p>
</li>
<li><p>Pod issue?</p>
</li>
<li><p>Application issue?</p>
</li>
</ul>
<p>The architecture starts making sense.</p>
<h2><strong>The Biggest Lesson</strong></h2>
<p>The biggest lesson I learned is that Kubernetes is not really about Pods.</p>
<p>It’s about managing the entire lifecycle of applications.</p>
<p>Pods, Deployments, Services, Ingresses, Nodes, and Controllers are simply building blocks working together toward one goal:</p>
<p><strong>Delivering reliable applications to users.</strong></p>
<p>The moment you stop seeing Kubernetes as a collection of YAML files and start seeing it as an application delivery platform, everything begins to click.</p>
<p>And that’s when your Kubernetes journey truly starts.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>When I began learning Kubernetes, I spent a lot of time memorizing resources and commands.</p>
<p>Pods.</p>
<p>Deployments.</p>
<p>Services.</p>
<p>Ingresses.</p>
<p>But the real breakthrough came when I understood how these components work together to run and deliver applications.</p>
<p>Kubernetes is not just a platform for managing containers — it is a system designed to ensure applications remain available, scalable, and resilient, even when failures occur.</p>
<p>Once you understand the journey of a request from a user’s browser to a running container, Kubernetes becomes far less intimidating and much more logical.</p>
<p>If you’re learning Kubernetes, don’t focus solely on YAML syntax or exam objectives.</p>
<p>Focus on understanding the flow.</p>
<p>Because when you understand how applications actually run on Kubernetes, you’re no longer just deploying workloads — you’re building the foundation for reliable, cloud-native applications.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[Understanding Kubernetes Design Patterns]]></title><description><![CDATA[One of the biggest realizations I had while preparing for and passing the Certified Kubernetes Application Developer (CKAD) exam was this:
Deploying containers is easy. Designing cloud-native applicat]]></description><link>https://shahzadahmad.dev/understanding-kubernetes-design-patterns</link><guid isPermaLink="true">https://shahzadahmad.dev/understanding-kubernetes-design-patterns</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[design patterns]]></category><category><![CDATA[Design Systems]]></category><category><![CDATA[design principles]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[kubeadm]]></category><category><![CDATA[kubernetes-services]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[Kubernetes]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sat, 20 Jun 2026 01:44:24 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/5a8de266-eff1-4f1d-9a38-259f4b4f7392.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One of the biggest realizations I had while preparing for and passing the <a href="https://www.credly.com/badges/79423978-8948-451b-bca1-7721fff284e3/public_url">Certified Kubernetes Application Developer (CKAD)</a> exam was this:</p>
<p><strong>Deploying containers is easy. Designing cloud-native applications is hard.</strong></p>
<p>Many Kubernetes beginners focus on learning Pods, Deployments, Services, and Ingresses. Those are important building blocks, but understanding how experienced engineers combine these components is what truly elevates your Kubernetes skills.</p>
<p>This is where Kubernetes Design Patterns come in.</p>
<p>Design patterns provide proven approaches to solving common problems when building applications on Kubernetes. They help us create systems that are scalable, resilient, maintainable, and production-ready.</p>
<p>In this article, I’ll explore some of the most important Kubernetes design patterns that every CKAD candidate and cloud-native engineer should understand.</p>
<h2><strong>What Are Kubernetes Design Patterns?</strong></h2>
<p>A design pattern is a reusable solution to a recurring problem.</p>
<p>Think of design patterns as architectural blueprints.</p>
<p>Instead of reinventing the wheel every time, engineers apply established patterns that have already proven successful in production environments.</p>
<p>For example:</p>
<ul>
<li><p>How should an application initialize before starting?</p>
</li>
<li><p>How should configuration be injected?</p>
</li>
<li><p>How should logs be collected?</p>
</li>
<li><p>How should sidecar functionality be implemented?</p>
</li>
</ul>
<p>Design patterns provide the answers.</p>
<h2><strong>1. Sidecar Pattern</strong></h2>
<p>The Sidecar Pattern is one of the most popular Kubernetes design patterns.</p>
<p>In this pattern, an additional container runs alongside the main application container within the same Pod.</p>
<p>Both containers share:</p>
<ul>
<li><p>Network</p>
</li>
<li><p>Storage volumes</p>
</li>
<li><p>Lifecycle</p>
</li>
</ul>
<h3><strong>Common Use Cases</strong></h3>
<ul>
<li><p>Log shipping</p>
</li>
<li><p>Monitoring agents</p>
</li>
<li><p>Service mesh proxies</p>
</li>
<li><p>Data synchronization</p>
</li>
</ul>
<p>For example:</p>
<pre><code class="language-plaintext">Pod
├── Application Container
└── Logging Sidecar
</code></pre>
<p>The application focuses on business logic while the sidecar handles logging responsibilities.</p>
<p>This separation improves maintainability and keeps applications lightweight.</p>
<h3><strong>Lesson Learned</strong></h3>
<p>Not every responsibility belongs inside your application container.</p>
<p>Sometimes a dedicated sidecar is the cleaner solution.</p>
<h2><strong>2. Ambassador Pattern</strong></h2>
<p>The Ambassador Pattern acts as a proxy between your application and external services.</p>
<p>Instead of connecting directly to external systems, your application communicates with an ambassador container.</p>
<h3><strong>Common Use Cases</strong></h3>
<ul>
<li><p>Database proxies</p>
</li>
<li><p>API gateways</p>
</li>
<li><p>Service abstractions</p>
</li>
<li><p>Security enforcement</p>
</li>
</ul>
<p>Example:</p>
<pre><code class="language-plaintext">Application
     │
     ▼
Ambassador Container
     │
     ▼
External Database
</code></pre>
<p>This allows applications to remain unaware of underlying infrastructure changes.</p>
<h2><strong>3. Adapter Pattern</strong></h2>
<p>The Adapter Pattern transforms data formats between systems.</p>
<p>Applications often produce data in formats that monitoring or logging systems don’t understand.</p>
<p>An adapter container converts the data into the required format.</p>
<h3><strong>Common Use Cases</strong></h3>
<ul>
<li><p>Metrics transformation</p>
</li>
<li><p>Log format conversion</p>
</li>
<li><p>Legacy application integration</p>
</li>
</ul>
<p>This pattern is particularly useful when modernizing older applications for Kubernetes.</p>
<h2><strong>4. Init Container Pattern</strong></h2>
<p>One of the most practical Kubernetes design patterns is the Init Container.</p>
<p>An Init Container runs before the application starts.</p>
<p>The main container cannot start until the Init Container completes successfully.</p>
<h3><strong>Common Use Cases</strong></h3>
<ul>
<li><p>Database initialization</p>
</li>
<li><p>Configuration generation</p>
</li>
<li><p>Dependency checks</p>
</li>
<li><p>Secret retrieval</p>
</li>
</ul>
<p>Example:</p>
<pre><code class="language-plaintext">Init Container
     ▼
Prepare Environment
     ▼
Application Starts
</code></pre>
<p>I frequently use Init Containers in production to ensure dependencies are available before applications begin serving traffic.</p>
<h2><strong>5. Controller Pattern</strong></h2>
<p>Kubernetes itself is built around the Controller Pattern.</p>
<p>Controllers continuously monitor the desired state and compare it with the actual state.</p>
<p>Whenever differences appear, Kubernetes takes action to reconcile them.</p>
<p>Examples include:</p>
<ul>
<li><p>Deployments</p>
</li>
<li><p>ReplicaSets</p>
</li>
<li><p>StatefulSets</p>
</li>
<li><p>Jobs</p>
</li>
</ul>
<p>The idea is simple:</p>
<blockquote>
<p><em>Desired State → Continuous Reconciliation → Actual State</em></p>
</blockquote>
<p>This pattern is one of Kubernetes’ most powerful innovations.</p>
<h2><strong>6. Leader Election Pattern</strong></h2>
<p>Some distributed applications require a single active leader.</p>
<p>The Leader Election Pattern ensures only one instance performs critical tasks.</p>
<h3><strong>Common Use Cases</strong></h3>
<ul>
<li><p>Scheduled jobs</p>
</li>
<li><p>Cluster coordination</p>
</li>
<li><p>Distributed processing</p>
</li>
</ul>
<p>Without leader election, multiple replicas might execute the same task simultaneously.</p>
<p>That can lead to duplicated work and inconsistent results.</p>
<h2><strong>7. Health Check Pattern</strong></h2>
<p>Kubernetes applications must be able to communicate their health.</p>
<p>This pattern relies on:</p>
<ul>
<li><p>Liveness Probes</p>
</li>
<li><p>Readiness Probes</p>
</li>
<li><p>Startup Probes</p>
</li>
</ul>
<p>These mechanisms allow Kubernetes to make intelligent decisions about:</p>
<ul>
<li><p>Restarting containers</p>
</li>
<li><p>Routing traffic</p>
</li>
<li><p>Handling failures</p>
</li>
</ul>
<p>Many production outages can be traced back to poorly designed health checks.</p>
<h2><strong>8. External Configuration Pattern</strong></h2>
<p>One of the key principles of cloud-native applications is separating configuration from code.</p>
<p>Kubernetes provides:</p>
<ul>
<li><p>ConfigMaps</p>
</li>
<li><p>Secrets</p>
</li>
</ul>
<p>to implement this pattern.</p>
<p>Instead of hardcoding values, applications retrieve configuration dynamically.</p>
<p>Benefits include:</p>
<ul>
<li><p>Easier deployments</p>
</li>
<li><p>Environment portability</p>
</li>
<li><p>Improved security</p>
</li>
<li><p>Better maintainability</p>
</li>
</ul>
<p>This is a pattern every CKAD candidate should master.</p>
<h2><strong>Why CKAD Candidates Should Care About Design Patterns</strong></h2>
<p>The CKAD exam doesn’t explicitly ask:</p>
<blockquote>
<p><em>“Explain the Sidecar Pattern.”</em></p>
</blockquote>
<p>However, many exam tasks are built around concepts that originate from these patterns.</p>
<p>Understanding the patterns helps you:</p>
<ul>
<li><p>Build better Kubernetes applications</p>
</li>
<li><p>Troubleshoot complex deployments</p>
</li>
<li><p>Design production-ready architectures</p>
</li>
<li><p>Understand real-world cloud-native systems</p>
</li>
</ul>
<p>Most importantly, patterns help you think like an application developer rather than someone simply writing YAML files.</p>
<h2><strong>The Bigger Lesson</strong></h2>
<p>When I first learned Kubernetes, I focused heavily on commands:</p>
<pre><code class="language-plaintext">kubectl create
kubectl apply
kubectl edit
kubectl describe
</code></pre>
<p>Those commands are important.</p>
<p>But as my Kubernetes journey progressed, I realized the real value lies in understanding how applications are designed.</p>
<p>Kubernetes design patterns bridge the gap between knowing Kubernetes and using Kubernetes effectively.</p>
<p>They help transform a collection of containers into a resilient, scalable, cloud-native application.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>CKAD taught me how to deploy applications on Kubernetes.</p>
<p>Learning Kubernetes design patterns taught me how to design them.</p>
<p>Whether you’re preparing for CKAD, working as a DevOps engineer, or building cloud-native applications, understanding these patterns will help you create systems that are easier to scale, operate, and maintain.</p>
<p>The next time you deploy an application, don’t just think about Pods and Deployments.</p>
<p>Think about the design patterns behind them.</p>
<p>That’s where the real learning begins.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[The Biggest Lessons I Learned From CKAD]]></title><description><![CDATA[When I first started preparing for the Certified Kubernetes Application Developer (CKAD) exam, I assumed it would simply be a lighter version of the Certified Kubernetes Administrator (CKA).
After all]]></description><link>https://shahzadahmad.dev/the-biggest-lessons-i-learned-from-ckad</link><guid isPermaLink="true">https://shahzadahmad.dev/the-biggest-lessons-i-learned-from-ckad</guid><category><![CDATA[ckad]]></category><category><![CDATA[CKAD Exam]]></category><category><![CDATA[CKAD Questions & Answers]]></category><category><![CDATA[cka]]></category><category><![CDATA[lessons learned]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[kubernetes-services]]></category><category><![CDATA[kubectl]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[Golden Kubestronaut]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sat, 20 Jun 2026 01:38:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/b341d8a9-b98c-4832-9839-8fcf6342640f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I first started preparing for the <a href="https://www.credly.com/badges/79423978-8948-451b-bca1-7721fff284e3/public_url">Certified Kubernetes Application Developer (CKAD)</a> exam, I assumed it would simply be a lighter version of the <a href="https://www.credly.com/badges/e72821a9-97a5-4ee8-a7f6-93f40246e864/public_url">Certified Kubernetes Administrator (CKA)</a>.</p>
<p>After all, I had already passed CKA and spent years working with Kubernetes in real-world environments.</p>
<p>I was wrong.</p>
<p><a href="https://www.credly.com/badges/79423978-8948-451b-bca1-7721fff284e3/public_url">CKAD</a> taught me lessons that went far beyond passing an exam. It fundamentally changed how I think about building, deploying, troubleshooting, and operating Kubernetes applications.</p>
<p>Looking back, these are the biggest lessons I learned from the CKAD journey.</p>
<h2><strong>1. Kubernetes Is About Applications, Not Just Clusters</strong></h2>
<p>As administrators and DevOps engineers, we often focus on the platform itself:</p>
<ul>
<li><p>Nodes</p>
</li>
<li><p>Networking</p>
</li>
<li><p>Storage</p>
</li>
<li><p>Security</p>
</li>
<li><p>Cluster Operations</p>
</li>
</ul>
<p>CKAD forced me to focus on the application layer.</p>
<p>Instead of asking:</p>
<blockquote>
<p><em>Is the cluster healthy?</em></p>
</blockquote>
<p>I started asking:</p>
<blockquote>
<p><em>Can the application run reliably in production?</em></p>
</blockquote>
<p>That shift in perspective changed how I approach Kubernetes today.</p>
<p>A perfectly healthy cluster is meaningless if applications are poorly designed, difficult to scale, or constantly failing health checks.</p>
<h2><strong>2. YAML Speed Matters More Than You Think</strong></h2>
<p>Before CKAD, I relied heavily on existing manifests and infrastructure repositories.</p>
<p>During exam preparation, I had to create Kubernetes resources quickly from scratch.</p>
<p>This taught me:</p>
<ul>
<li><p>How to use imperative commands effectively</p>
</li>
<li><p>How to generate manifests rapidly</p>
</li>
<li><p>How to modify YAML efficiently</p>
</li>
<li><p>How to avoid unnecessary typing</p>
</li>
</ul>
<p>The ability to work quickly with Kubernetes resources is valuable far beyond the exam.</p>
<p>In production environments, speed often matters when troubleshooting incidents or deploying fixes under pressure.</p>
<h2><strong>3. Probes Are More Important Than Most Engineers Realize</strong></h2>
<p>Liveness probes.</p>
<p>Readiness probes.</p>
<p>Startup probes.</p>
<p>Before CKAD, I understood them conceptually.</p>
<p>During preparation, I learned how critical they are for application reliability.</p>
<p>A Kubernetes deployment is not truly production-ready without proper health checks.</p>
<p>Incorrect probe configurations can lead to:</p>
<ul>
<li><p>Crash loops</p>
</li>
<li><p>Traffic being routed to unhealthy pods</p>
</li>
<li><p>Slow recoveries</p>
</li>
<li><p>Unnecessary outages</p>
</li>
</ul>
<p>CKAD helped me understand that probes are not just exam objectives — they are operational requirements.</p>
<h2><strong>4. Resource Management Is a Core Application Skill</strong></h2>
<p>One of the most common mistakes in Kubernetes environments is ignoring resource requests and limits.</p>
<p>CKAD repeatedly reinforced the importance of:</p>
<ul>
<li><p>CPU requests</p>
</li>
<li><p>CPU limits</p>
</li>
<li><p>Memory requests</p>
</li>
<li><p>Memory limits</p>
</li>
</ul>
<p>Applications that do not define resources properly can create problems for the entire cluster.</p>
<p>This lesson changed how I review Kubernetes manifests.</p>
<p>Today, missing resource specifications immediately stand out to me as a risk.</p>
<h2><strong>5. Debugging Is a Developer Skill Too</strong></h2>
<p>Many engineers think troubleshooting is primarily an administrator’s responsibility.</p>
<p>CKAD teaches the opposite.</p>
<p>Developers should understand how to investigate:</p>
<ul>
<li><p>Pod failures</p>
</li>
<li><p>Container crashes</p>
</li>
<li><p>Misconfigured services</p>
</li>
<li><p>Failed deployments</p>
</li>
<li><p>Environment variable issues</p>
</li>
</ul>
<p>The exam emphasizes practical troubleshooting rather than memorization.</p>
<p>That mindset aligns closely with real-world Kubernetes operations.</p>
<h2><strong>6. ConfigMaps and Secrets Are Everywhere</strong></h2>
<p>During preparation, I realized how frequently applications depend on external configuration.</p>
<p>CKAD reinforced best practices around:</p>
<ul>
<li><p>Environment variables</p>
</li>
<li><p>Configuration management</p>
</li>
<li><p>Secret handling</p>
</li>
<li><p>Application portability</p>
</li>
</ul>
<p>A well-designed Kubernetes application should be able to move between environments with minimal changes.</p>
<p>ConfigMaps and Secrets make that possible.</p>
<h2><strong>7. Scaling Is More Than Increasing Replicas</strong></h2>
<p>Before CKAD, scaling often meant:</p>
<pre><code class="language-plaintext">kubectl scale deployment app --replicas=5
</code></pre>
<p>CKAD showed me that scaling is really about application design.</p>
<p>Questions began to emerge:</p>
<ul>
<li><p>Is the application stateless?</p>
</li>
<li><p>Can multiple replicas safely run together?</p>
</li>
<li><p>Does the application handle traffic spikes?</p>
</li>
<li><p>Is session persistence required?</p>
</li>
</ul>
<p>The exam helped me think beyond Kubernetes commands and focus on application architecture.</p>
<h2><strong>8. The Official Documentation Is a Superpower</strong></h2>
<p>One of the biggest advantages during CKAD is access to Kubernetes documentation.</p>
<p>However, simply having access is not enough.</p>
<p>You must know:</p>
<ul>
<li><p>Where information lives</p>
</li>
<li><p>Which examples are useful</p>
</li>
<li><p>How to navigate quickly</p>
</li>
</ul>
<p>Learning to use documentation efficiently became one of the most valuable skills I gained.</p>
<p>This skill continues to help me long after passing the exam.</p>
<h2><strong>9. Simplicity Wins</strong></h2>
<p>Many engineers overcomplicate Kubernetes deployments.</p>
<p>CKAD rewards simple, clean, maintainable solutions.</p>
<p>During preparation, I learned to avoid unnecessary complexity and focus on solving the actual problem.</p>
<p>In real-world environments, simple architectures are usually easier to:</p>
<ul>
<li><p>Operate</p>
</li>
<li><p>Troubleshoot</p>
</li>
<li><p>Scale</p>
</li>
<li><p>Secure</p>
</li>
</ul>
<h2><strong>10. Thinking Like an Application Developer Makes You a Better DevOps Engineer</strong></h2>
<p>This may be the most important lesson of all.</p>
<p>CKA taught me how Kubernetes works.</p>
<p>CKAD taught me why applications behave the way they do inside Kubernetes.</p>
<p>After passing CKAD, I became more effective at:</p>
<ul>
<li><p>Supporting development teams</p>
</li>
<li><p>Reviewing manifests</p>
</li>
<li><p>Troubleshooting deployments</p>
</li>
<li><p>Designing cloud-native applications</p>
</li>
<li><p>Building production-ready Kubernetes workloads</p>
</li>
</ul>
<p>The certification expanded my perspective beyond infrastructure and into application design.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>Passing CKAD was not just another certification milestone.</p>
<p>It helped me bridge the gap between Kubernetes administration and Kubernetes application development.</p>
<p>If CKA teaches you how to manage Kubernetes, CKAD teaches you how to build applications that thrive inside it.</p>
<p>For me, that was the biggest value of the journey.</p>
<p>And it is one of the reasons I believe every Kubernetes professional — whether developer, DevOps engineer, platform engineer, or administrator — can benefit from preparing for CKAD.</p>
<p>The certification may last a few years, but the lessons stay with you much longer.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[How Passing CKAD Changed the Way I Think About Kubernetes Applications]]></title><description><![CDATA[When I first started learning Kubernetes, my focus was almost entirely on infrastructure.
I wanted to understand:

Pods

Services

Networking

Storage

Scheduling

Cluster operations


This naturally ]]></description><link>https://shahzadahmad.dev/how-passing-ckad-changed-the-way-i-think-about-kubernetes-applications</link><guid isPermaLink="true">https://shahzadahmad.dev/how-passing-ckad-changed-the-way-i-think-about-kubernetes-applications</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[Thinking]]></category><category><![CDATA[#learning-in-public]]></category><category><![CDATA[Learning Journey]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[Golden Kubestronaut]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sat, 20 Jun 2026 01:32:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/862fd42a-d161-4422-9e43-468e2f6b5136.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I first started learning Kubernetes, my focus was almost entirely on infrastructure.</p>
<p>I wanted to understand:</p>
<ul>
<li><p>Pods</p>
</li>
<li><p>Services</p>
</li>
<li><p>Networking</p>
</li>
<li><p>Storage</p>
</li>
<li><p>Scheduling</p>
</li>
<li><p>Cluster operations</p>
</li>
</ul>
<p>This naturally led me toward the <a href="https://www.credly.com/badges/e72821a9-97a5-4ee8-a7f6-93f40246e864/public_url">Certified Kubernetes Administrator (CKA)</a> certification.</p>
<p>The CKA gave me a strong understanding of how Kubernetes works behind the scenes.</p>
<p>But after passing the <a href="https://www.credly.com/badges/79423978-8948-451b-bca1-7721fff284e3/public_url">Certified Kubernetes Application Developer (CKAD)</a>, I realized something important:</p>
<blockquote>
<p><em>Kubernetes isn’t just a platform to manage. It’s a platform to build on.</em></p>
</blockquote>
<p>That shift fundamentally changed the way I think about applications running inside Kubernetes.</p>
<h2><strong>Before CKAD, I Thought Mostly About Infrastructure</strong></h2>
<p>As a DevOps Engineer, I was naturally drawn toward operational topics.</p>
<p>When I looked at a Kubernetes cluster, I thought about questions like:</p>
<ul>
<li><p>Are the nodes healthy?</p>
</li>
<li><p>Is networking working?</p>
</li>
<li><p>Is storage configured correctly?</p>
</li>
<li><p>Are workloads scheduled properly?</p>
</li>
<li><p>Are resources being utilized efficiently?</p>
</li>
</ul>
<p>These are all important questions.</p>
<p>In fact, they’re critical.</p>
<p>But they focus on the platform itself.</p>
<p>What I wasn’t thinking about enough was the application experience.</p>
<h2><strong>CKAD Forced Me to Think Like a Developer</strong></h2>
<p>One of the biggest lessons from CKAD was learning to view Kubernetes from the perspective of the application.</p>
<p>Instead of asking:</p>
<blockquote>
<p><em>“Is the cluster healthy?”</em></p>
</blockquote>
<p>I started asking:</p>
<blockquote>
<p><em>“Can the application function correctly inside the cluster?</em></p>
</blockquote>
<p>That may sound like a small difference.</p>
<p>In reality, it’s a completely different mindset.</p>
<p>Applications don’t care how elegant the cluster architecture is.</p>
<p>They care about:</p>
<ul>
<li><p>Connectivity</p>
</li>
<li><p>Configuration</p>
</li>
<li><p>Availability</p>
</li>
<li><p>Reliability</p>
</li>
<li><p>Scalability</p>
</li>
</ul>
<p>CKAD helped me focus on those concerns.</p>
<h2><strong>I Started Thinking More About Application Lifecycles</strong></h2>
<p>Before CKAD, deploying an application often felt like the final step.</p>
<p>After CKAD, I realized deployment is only the beginning.</p>
<p>Every application has a lifecycle:</p>
<ul>
<li><p>Build</p>
</li>
<li><p>Deploy</p>
</li>
<li><p>Configure</p>
</li>
<li><p>Scale</p>
</li>
<li><p>Monitor</p>
</li>
<li><p>Update</p>
</li>
<li><p>Recover</p>
</li>
</ul>
<p>Kubernetes touches every stage of that lifecycle.</p>
<p>The more I learned, the more I appreciated how much planning goes into running applications successfully.</p>
<h2><strong>Probes Became One of My Favorite Kubernetes Features</strong></h2>
<p>During my early Kubernetes learning journey, probes felt like another exam objective.</p>
<p>CKAD changed that.</p>
<p>I began understanding how critical they are for production reliability.</p>
<h3><strong>Readiness Probes</strong></h3>
<p>Answer:</p>
<blockquote>
<p><em>Is the application ready to receive traffic?</em></p>
</blockquote>
<h3><strong>Liveness Probes</strong></h3>
<p>Answer:</p>
<blockquote>
<p><em>Is the application still functioning correctly?</em></p>
</blockquote>
<h3><strong>Startup Probes</strong></h3>
<p>Answer:</p>
<blockquote>
<p><em>Has the application finished initializing?</em></p>
</blockquote>
<p>These simple configurations can dramatically improve application resilience.</p>
<p>Today, I rarely look at deployments without thinking about probe design.</p>
<h2><strong>ConfigMaps and Secrets Became Design Decisions</strong></h2>
<p>Before CKAD, ConfigMaps and Secrets were resources I created because the exam required them.</p>
<p>After CKAD, I began seeing them as architectural decisions.</p>
<p>Questions I now consider:</p>
<ul>
<li><p>What should be externalized?</p>
</li>
<li><p>What belongs in a Secret?</p>
</li>
<li><p>How will this application behave across environments?</p>
</li>
<li><p>How will configuration changes be managed?</p>
</li>
</ul>
<p>These decisions directly affect maintainability and scalability.</p>
<h2><strong>YAML Stopped Being Just YAML</strong></h2>
<p>One of the biggest surprises was how much my relationship with YAML changed.</p>
<p>Before CKAD:</p>
<p>YAML was configuration.</p>
<p>After CKAD:</p>
<p>YAML became application design.</p>
<p>A Deployment manifest isn’t just syntax.</p>
<p>It’s a description of how an application should behave.</p>
<p>Every field communicates intent.</p>
<p>Every configuration impacts reliability.</p>
<p>Every resource definition influences operations.</p>
<p>CKAD helped me appreciate that.</p>
<h2><strong>I Learned the Difference Between Running Containers and Running Applications</strong></h2>
<p>This was probably the biggest mindset shift of all.</p>
<p>Containers are easy.</p>
<p>Applications are not.</p>
<p>A container can start successfully and still fail to deliver business value.</p>
<p>An application needs:</p>
<ul>
<li><p>Networking</p>
</li>
<li><p>Configuration</p>
</li>
<li><p>Health checks</p>
</li>
<li><p>Storage</p>
</li>
<li><p>Secrets</p>
</li>
<li><p>Scaling</p>
</li>
</ul>
<p>CKAD taught me that successful Kubernetes deployments require thinking beyond containers.</p>
<p>You must think about the complete application ecosystem.</p>
<h2><strong>Multi-Container Pods Finally Made Sense</strong></h2>
<p>During CKAD preparation, I spent more time understanding application design patterns.</p>
<p>Concepts like:</p>
<ul>
<li><p>Sidecar</p>
</li>
<li><p>Ambassador</p>
</li>
<li><p>Adapter</p>
</li>
</ul>
<p>began making practical sense.</p>
<p>Instead of viewing Pods as single-container units, I started understanding them as collaborative application environments.</p>
<p>This significantly expanded my understanding of Kubernetes architecture.</p>
<h2><strong>Troubleshooting Became More Application-Centric</strong></h2>
<p>My troubleshooting process also evolved.</p>
<p>Before CKAD, my troubleshooting often focused on infrastructure.</p>
<p>Questions like:</p>
<ul>
<li><p>Is the node healthy?</p>
</li>
<li><p>Is networking working?</p>
</li>
<li><p>Is storage attached?</p>
</li>
</ul>
<p>After CKAD, I added another layer:</p>
<ul>
<li><p>Is the application configured correctly?</p>
</li>
<li><p>Is the readiness probe failing?</p>
</li>
<li><p>Are environment variables missing?</p>
</li>
<li><p>Are Secrets mounted properly?</p>
</li>
<li><p>Is the application behaving as expected?</p>
</li>
</ul>
<p>This broader perspective has helped me solve production issues more effectively.</p>
<h2><strong>CKAD Helped Me Appreciate Developer Challenges</strong></h2>
<p>One unexpected benefit of CKAD was gaining a better understanding of developer concerns.</p>
<p>As DevOps engineers, we often focus on platforms.</p>
<p>Developers focus on delivering applications.</p>
<p>CKAD helped bridge that gap.</p>
<p>It taught me to think about:</p>
<ul>
<li><p>Developer experience</p>
</li>
<li><p>Deployment simplicity</p>
</li>
<li><p>Configuration management</p>
</li>
<li><p>Application reliability</p>
</li>
</ul>
<p>These are areas where infrastructure and application teams must work together.</p>
<h2><strong>The Certification Was Valuable. The Mindset Shift Was More Valuable.</strong></h2>
<p>Passing CKAD was a great achievement.</p>
<p>But the certification itself wasn’t the most valuable outcome.</p>
<p>The real value came from changing how I think.</p>
<p>I stopped viewing Kubernetes solely as infrastructure.</p>
<p>I started viewing it as an application platform.</p>
<p>That perspective has influenced how I design, deploy, troubleshoot, and operate workloads.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>Looking back, CKA taught me how Kubernetes works.</p>
<p>CKAD taught me how applications work within Kubernetes.</p>
<p>Both certifications were valuable.</p>
<p>But together, they provided something much bigger:</p>
<p>A more complete understanding of cloud-native systems.</p>
<p>Today, when I look at a Kubernetes environment, I no longer see just clusters, nodes, and Pods.</p>
<p>I see applications.</p>
<p>I see user experiences.</p>
<p>I see reliability requirements.</p>
<p>I see design decisions.</p>
<p>And I believe that mindset shift is one of the most valuable lessons CKAD gave me.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me on for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[CKA vs CKAD: Which Kubernetes Certification Should You Take First?]]></title><description><![CDATA[One of the most common questions I receive from Kubernetes learners is:

“Should I start with CKA or CKAD?”

It’s a fair question.
Both certifications are highly respected within the Kubernetes ecosys]]></description><link>https://shahzadahmad.dev/cka-vs-ckad-which-kubernetes-certification-should-you-take-first</link><guid isPermaLink="true">https://shahzadahmad.dev/cka-vs-ckad-which-kubernetes-certification-should-you-take-first</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[CKA Exam]]></category><category><![CDATA[CKAD Exam]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[Compare]]></category><category><![CDATA[journey into tech]]></category><category><![CDATA[kubectl]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[Golden Kubestronaut]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sat, 20 Jun 2026 01:24:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/f19140fc-038f-4bcf-91aa-d61987f86563.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One of the most common questions I receive from Kubernetes learners is:</p>
<blockquote>
<p><em>“Should I start with CKA or CKAD?”</em></p>
</blockquote>
<p>It’s a fair question.</p>
<p>Both certifications are highly respected within the Kubernetes ecosystem.</p>
<p>Both are performance-based exams.</p>
<p>Both validate real-world Kubernetes skills.</p>
<p>And both can significantly improve your understanding of cloud-native technologies.</p>
<p>After earning both the <a href="https://www.credly.com/badges/e72821a9-97a5-4ee8-a7f6-93f40246e864/public_url">Certified Kubernetes Administrator (CKA)</a> and <a href="https://www.credly.com/badges/79423978-8948-451b-bca1-7721fff284e3/public_url">Certified Kubernetes Application Developer (CKAD)</a>, I’ve come to realize that the answer depends less on the certification itself and more on your career goals.</p>
<p>In this article, I’ll compare both certifications and explain which one I would recommend taking first.</p>
<h2><strong>Understanding the Purpose of Each Certification</strong></h2>
<p>Before deciding which certification to pursue, it’s important to understand what each certification is designed to teach.</p>
<h3><strong>CKA</strong></h3>
<p>The Certified Kubernetes Administrator focuses on:</p>
<ul>
<li><p>Cluster administration</p>
</li>
<li><p>Networking</p>
</li>
<li><p>Storage</p>
</li>
<li><p>Security</p>
</li>
<li><p>Scheduling</p>
</li>
<li><p>Troubleshooting</p>
</li>
<li><p>Cluster maintenance</p>
</li>
</ul>
<p>The exam asks:</p>
<blockquote>
<p><em>“Can you operate and maintain a Kubernetes cluster?”</em></p>
</blockquote>
<h3><strong>CKAD</strong></h3>
<p>The Certified Kubernetes Application Developer focuses on:</p>
<ul>
<li><p>Application deployment</p>
</li>
<li><p>ConfigMaps</p>
</li>
<li><p>Secrets</p>
</li>
<li><p>Multi-container Pods</p>
</li>
<li><p>Jobs and CronJobs</p>
</li>
<li><p>Probes</p>
</li>
<li><p>Application design patterns</p>
</li>
</ul>
<p>The exam asks:</p>
<blockquote>
<p><em>“Can you build and deploy applications on Kubernetes?”</em></p>
</blockquote>
<h2><strong>The Biggest Difference</strong></h2>
<p>The biggest difference is mindset.</p>
<h3><strong>CKA Mindset</strong></h3>
<p>You think about:</p>
<ul>
<li><p>Clusters</p>
</li>
<li><p>Nodes</p>
</li>
<li><p>Networking</p>
</li>
<li><p>Infrastructure</p>
</li>
<li><p>Reliability</p>
</li>
</ul>
<p>You’re responsible for keeping Kubernetes healthy.</p>
<h3><strong>CKAD Mindset</strong></h3>
<p>You think about:</p>
<ul>
<li><p>Applications</p>
</li>
<li><p>Containers</p>
</li>
<li><p>Deployments</p>
</li>
<li><p>Configuration</p>
</li>
<li><p>Delivery</p>
</li>
</ul>
<p>You’re responsible for running applications effectively.</p>
<h2><strong>Comparing the Certifications</strong></h2>
<img src="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/5f10a03a-7085-4275-a2e6-887f833513e2.png" alt="" style="display:block;margin:0 auto" />

  
<p>Neither certification is better.</p>
<p>They simply focus on different aspects of Kubernetes.</p>
<h2><strong>Which Certification Is Easier?</strong></h2>
<p>This question comes up often.</p>
<p>My answer:</p>
<p>Neither.</p>
<p>They’re difficult in different ways.</p>
<h3><strong>Why CKA Feels Difficult</strong></h3>
<p>You need to understand:</p>
<ul>
<li><p>Cluster internals</p>
</li>
<li><p>Networking</p>
</li>
<li><p>Storage</p>
</li>
<li><p>Security</p>
</li>
<li><p>Troubleshooting</p>
</li>
</ul>
<p>The breadth of topics is significant.</p>
<h3><strong>Why CKAD Feels Difficult</strong></h3>
<p>You need to understand:</p>
<ul>
<li><p>Kubernetes resources</p>
</li>
<li><p>YAML creation</p>
</li>
<li><p>Application behavior</p>
</li>
<li><p>Configuration management</p>
</li>
<li><p>Deployment strategies</p>
</li>
</ul>
<p>CKAD often requires more speed when creating and modifying manifests.</p>
<h2><strong>If You’re a DevOps Engineer</strong></h2>
<p>My recommendation:</p>
<h3><strong>Start with CKA</strong></h3>
<p>Why?</p>
<p>Because understanding how Kubernetes works creates a stronger foundation.</p>
<p>Once you understand:</p>
<ul>
<li><p>Pods</p>
</li>
<li><p>Services</p>
</li>
<li><p>Networking</p>
</li>
<li><p>Storage</p>
</li>
<li><p>Scheduling</p>
</li>
</ul>
<p>learning CKAD becomes much easier.</p>
<p>This was the path I followed.</p>
<p>And looking back, I would follow the same sequence again.</p>
<h2><strong>If You’re a Software Developer</strong></h2>
<p>My recommendation:</p>
<h3><strong>Start with CKAD</strong></h3>
<p>Developers typically care about:</p>
<ul>
<li><p>Deploying applications</p>
</li>
<li><p>Configuration management</p>
</li>
<li><p>Scaling</p>
</li>
<li><p>Health checks</p>
</li>
</ul>
<p>CKAD aligns closely with daily development activities.</p>
<p>The concepts often feel more immediately relevant.</p>
<h2><strong>If You’re New to Kubernetes</strong></h2>
<p>This is where things get interesting.</p>
<p>Many beginners assume CKAD should come first because it sounds more application-focused.</p>
<p>However, Kubernetes applications run on Kubernetes infrastructure.</p>
<p>Without understanding:</p>
<ul>
<li><p>Pods</p>
</li>
<li><p>Services</p>
</li>
<li><p>Networking</p>
</li>
<li><p>Scheduling</p>
</li>
</ul>
<p>many CKAD concepts become harder to grasp.</p>
<p>For most beginners, I still recommend:</p>
<pre><code class="language-plaintext">CKA
↓
CKAD
↓
CKS
</code></pre>
<p>This path creates a natural progression.</p>
<h2><strong>Why I Took CKA First</strong></h2>
<p>When I began my Kubernetes journey, I wanted to understand the platform itself.</p>
<p>CKA helped me understand:</p>
<ul>
<li><p>How Kubernetes works</p>
</li>
<li><p>Why things fail</p>
</li>
<li><p>How workloads are scheduled</p>
</li>
<li><p>How networking functions</p>
</li>
</ul>
<p>That knowledge made my CKAD preparation significantly easier.</p>
<p>Many application-level concepts suddenly made more sense because I already understood the underlying platform.</p>
<h2><strong>What CKAD Taught Me After CKA</strong></h2>
<p>One of the biggest surprises was how much my perspective changed.</p>
<p>CKA taught me:</p>
<blockquote>
<p><em>How Kubernetes runs.</em></p>
</blockquote>
<p>CKAD taught me:</p>
<blockquote>
<p><em>Why applications run the way they do on Kubernetes.</em></p>
</blockquote>
<p>I started thinking more about:</p>
<ul>
<li><p>Application reliability</p>
</li>
<li><p>Configuration management</p>
</li>
<li><p>Health checks</p>
</li>
<li><p>Deployment strategies</p>
</li>
<li><p>Design patterns</p>
</li>
</ul>
<p>The two certifications complemented each other perfectly.</p>
<h2><strong>The Path I Recommend Today</strong></h2>
<p>If I were advising my past self, I would follow this sequence:</p>
<h3><strong>Step 1</strong></h3>
<p>Learn Kubernetes fundamentals.</p>
<h3><strong>Step 2</strong></h3>
<p>Earn CKA.</p>
<p>Build a strong operational foundation.</p>
<h3><strong>Step 3</strong></h3>
<p>Earn CKAD.</p>
<p>Learn application delivery and deployment.</p>
<h3><strong>Step 4</strong></h3>
<p>Earn CKS.</p>
<p>Focus on Kubernetes security.</p>
<p>This progression mirrors how many engineers grow in real-world environments.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>Choosing between CKA and CKAD isn’t about selecting the “better” certification.</p>
<p>It’s about selecting the right starting point.</p>
<p>If your goal is understanding Kubernetes infrastructure, start with CKA.</p>
<p>If your goal is deploying and managing applications, start with CKAD.</p>
<p>Personally, I’m glad I started with CKA.</p>
<p>It gave me a deep understanding of the platform that made everything else easier.</p>
<p>But the biggest lesson I’ve learned is this:</p>
<p>The real value isn’t in choosing one certification over another.</p>
<p>The real value comes from understanding both perspectives.</p>
<p>Because the best Kubernetes engineers understand not only how Kubernetes works — but also how applications thrive on it.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[What CKAD Taught Me That CKA Didn’t]]></title><description><![CDATA[When I started my Kubernetes certification journey, my first goal was clear:
Pass the Certified Kubernetes Administrator (CKA) exam.
The CKA taught me how Kubernetes works.
It taught me how to manage ]]></description><link>https://shahzadahmad.dev/what-ckad-taught-me-that-cka-didn-t</link><guid isPermaLink="true">https://shahzadahmad.dev/what-ckad-taught-me-that-cka-didn-t</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[kubernetes-services]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[learning]]></category><category><![CDATA[Learning Journey]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[kubectl]]></category><category><![CDATA[#kubeweek]]></category><category><![CDATA[Golden Kubestronaut]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sat, 20 Jun 2026 01:17:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/73ebedcc-1ed2-4e4e-bea3-86d20aa61837.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I started my Kubernetes certification journey, my first goal was clear:</p>
<p>Pass the <a href="https://www.credly.com/badges/e72821a9-97a5-4ee8-a7f6-93f40246e864/public_url">Certified Kubernetes Administrator (CKA)</a> exam.</p>
<p>The CKA taught me how Kubernetes works.</p>
<p>It taught me how to manage clusters, troubleshoot issues, configure networking, and understand the infrastructure behind Kubernetes.</p>
<p>After passing the CKA, I felt confident in my Kubernetes knowledge.</p>
<p>Then I started preparing for the <a href="https://www.credly.com/badges/79423978-8948-451b-bca1-7721fff284e3/public_url">Certified Kubernetes Application Developer (CKAD)</a>.</p>
<p>That’s when I realized something important:</p>
<blockquote>
<p><em>Knowing how Kubernetes works is very different from knowing how applications work on Kubernetes.</em></p>
</blockquote>
<p>The CKAD didn’t replace what I learned during the CKA journey.</p>
<p>Instead, it completed the picture.</p>
<p>In this article, I want to share the biggest lessons <a href="https://www.credly.com/badges/79423978-8948-451b-bca1-7721fff284e3/public_url">CKAD</a> taught me that CKA didn’t.</p>
<h2><strong>The Biggest Shift: From Infrastructure to Applications</strong></h2>
<p>The CKA focuses heavily on cluster operations.</p>
<p>You learn about:</p>
<ul>
<li><p>Nodes</p>
</li>
<li><p>Networking</p>
</li>
<li><p>Storage</p>
</li>
<li><p>Scheduling</p>
</li>
<li><p>Cluster Maintenance</p>
</li>
<li><p>Security</p>
</li>
<li><p>Troubleshooting</p>
</li>
</ul>
<p>The primary question becomes:</p>
<blockquote>
<p><em>“How do I keep Kubernetes running?”</em></p>
</blockquote>
<p>CKAD asks a different question:</p>
<blockquote>
<p><em>“How do I build and run applications effectively on Kubernetes?”</em></p>
</blockquote>
<p>That shift completely changed my perspective.</p>
<p>Instead of thinking about clusters, I started thinking about workloads.</p>
<p>Instead of focusing on infrastructure, I focused on application behavior.</p>
<h2><strong>CKA Taught Me the Platform</strong></h2>
<p>CKA helped me understand:</p>
<ul>
<li><p>How Kubernetes components interact</p>
</li>
<li><p>How Pods are scheduled</p>
</li>
<li><p>How Services work</p>
</li>
<li><p>How cluster networking functions</p>
</li>
<li><p>How to troubleshoot failures</p>
</li>
</ul>
<p>These skills are essential.</p>
<p>Without them, managing Kubernetes in production becomes difficult.</p>
<p>However, I realized that understanding the platform alone isn’t enough.</p>
<p>Applications are the reason Kubernetes exists in the first place.</p>
<h2><strong>CKAD Taught Me the Application Lifecycle</strong></h2>
<p>One of the biggest lessons from CKAD was understanding the complete lifecycle of an application.</p>
<p>Questions I started asking:</p>
<ul>
<li><p>How is the application deployed?</p>
</li>
<li><p>How is it configured?</p>
</li>
<li><p>How is it updated?</p>
</li>
<li><p>How is it scaled?</p>
</li>
<li><p>How is it monitored?</p>
</li>
<li><p>How does it recover from failures?</p>
</li>
</ul>
<p>These questions rarely appeared during my early Kubernetes learning journey.</p>
<p>CKAD brought them to the forefront.</p>
<h2><strong>I Finally Appreciated Probes</strong></h2>
<p>During CKA preparation, I understood probes conceptually.</p>
<p>But during CKAD preparation, I truly appreciated their importance.</p>
<h3><strong>Liveness Probe</strong></h3>
<p>Answers:</p>
<blockquote>
<p><em>Is the application still alive?</em></p>
</blockquote>
<h3><strong>Readiness Probe</strong></h3>
<p>Answers:</p>
<blockquote>
<p><em>Is the application ready to receive traffic?</em></p>
</blockquote>
<h3><strong>Startup Probe</strong></h3>
<p>Answers:</p>
<blockquote>
<p><em>Has the application finished starting?</em></p>
</blockquote>
<p>Before CKAD, probes felt like another Kubernetes feature.</p>
<p>After CKAD, they felt like one of the most important tools for application reliability.</p>
<h2><strong>ConfigMaps and Secrets Became More Meaningful</strong></h2>
<p>During CKA preparation, ConfigMaps and Secrets were simply resources to create.</p>
<p>During CKAD preparation, I began thinking about them from a developer’s perspective.</p>
<p>Questions like:</p>
<ul>
<li><p>How should applications consume configuration?</p>
</li>
<li><p>What belongs in a Secret?</p>
</li>
<li><p>What should be externalized?</p>
</li>
<li><p>How do we manage environment-specific settings?</p>
</li>
</ul>
<p>This was a completely different way of thinking.</p>
<h2><strong>Multi-Container Pods Finally Made Sense</strong></h2>
<p>One topic I underestimated during CKA preparation was multi-container Pods.</p>
<p>CKAD introduced me to patterns such as:</p>
<ul>
<li><p>Sidecar</p>
</li>
<li><p>Ambassador</p>
</li>
<li><p>Adapter</p>
</li>
</ul>
<p>These patterns helped me understand how multiple containers can collaborate within a single Pod.</p>
<p>More importantly, they showed me how Kubernetes solves real application problems.</p>
<h2><strong>CKAD Taught Me to Think About Design</strong></h2>
<p>One thing that surprised me was how much application design appears throughout CKAD.</p>
<p>The exam isn’t just about writing YAML.</p>
<p>It’s about making decisions.</p>
<p>Questions like:</p>
<ul>
<li><p>Should this be a Deployment or a Job?</p>
</li>
<li><p>When should I use a CronJob?</p>
</li>
<li><p>How should this application be exposed?</p>
</li>
<li><p>Where should configuration live?</p>
</li>
</ul>
<p>These decisions affect how applications behave in production.</p>
<p>CKAD encourages you to think like an architect, not just an operator.</p>
<h2><strong>Troubleshooting Looks Different</strong></h2>
<p>CKA troubleshooting often focuses on:</p>
<ul>
<li><p>Cluster issues</p>
</li>
<li><p>Node issues</p>
</li>
<li><p>Networking problems</p>
</li>
<li><p>Storage failures</p>
</li>
</ul>
<p>CKAD troubleshooting often focuses on:</p>
<ul>
<li><p>Application failures</p>
</li>
<li><p>Misconfigurations</p>
</li>
<li><p>Container startup issues</p>
</li>
<li><p>Health checks</p>
</li>
<li><p>Deployment behavior</p>
</li>
</ul>
<p>The troubleshooting mindset remains the same.</p>
<p>The scope changes.</p>
<h2><strong>YAML Became More Important</strong></h2>
<p>The more I progressed through CKAD, the more I realized how important YAML is.</p>
<p>CKA often allows you to solve problems through administration tasks.</p>
<p>CKAD requires you to describe applications accurately through manifests.</p>
<p>Every field matters.</p>
<p>Every indentation matters.</p>
<p>Every specification matters.</p>
<p>Writing Kubernetes manifests became a skill in itself.</p>
<h2><strong>CKAD Felt Closer to Real Application Teams</strong></h2>
<p>One unexpected realization was that CKAD often feels closer to what developers and platform teams encounter daily.</p>
<p>Topics such as:</p>
<ul>
<li><p>Deployments</p>
</li>
<li><p>Probes</p>
</li>
<li><p>ConfigMaps</p>
</li>
<li><p>Secrets</p>
</li>
<li><p>Jobs</p>
</li>
<li><p>Scaling</p>
</li>
</ul>
<p>appear constantly in production environments.</p>
<p>Many of the challenges developers face revolve around these concepts.</p>
<h2><strong>Which Certification Was More Valuable?</strong></h2>
<p>This question comes up frequently.</p>
<p>The truth is:</p>
<p>Neither certification is better.</p>
<p>They serve different purposes.</p>
<h3><strong>CKA teaches:</strong></h3>
<blockquote>
<p><em>How Kubernetes works.</em></p>
</blockquote>
<h3><strong>CKAD teaches:</strong></h3>
<blockquote>
<p><em>How applications work on Kubernetes.</em></p>
</blockquote>
<p>Together, they create a much stronger understanding than either certification alone.</p>
<h2><strong>My Biggest Takeaway</strong></h2>
<p>If CKA taught me how to operate Kubernetes, CKAD taught me why Kubernetes exists.</p>
<p>Applications are the reason organizations adopt Kubernetes.</p>
<p>Applications are what users interact with.</p>
<p>Applications are what businesses depend on.</p>
<p>Understanding how to build, deploy, configure, and maintain those applications has made me a better Kubernetes practitioner.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>Looking back, earning both certifications gave me a more complete view of Kubernetes.</p>
<p>CKA helped me understand the platform.</p>
<p>CKAD helped me understand the workloads running on that platform.</p>
<p>Both perspectives matter.</p>
<p>And together, they transformed the way I think about Kubernetes.</p>
<p>For anyone considering the next step after CKA, CKAD isn’t just another certification.</p>
<p>It’s an opportunity to see Kubernetes through a completely different lens.</p>
<p>And in my experience, that’s where some of the most valuable learning begins.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[Why I’m Pursuing CKAD After Becoming a CKA]]></title><description><![CDATA[Passing the Certified Kubernetes Administrator (CKA) was one of the most rewarding milestones in my cloud-native journey.
The certification challenged me to understand Kubernetes from an administrator]]></description><link>https://shahzadahmad.dev/why-i-m-pursuing-ckad-after-becoming-a-cka</link><guid isPermaLink="true">https://shahzadahmad.dev/why-i-m-pursuing-ckad-after-becoming-a-cka</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[journey]]></category><category><![CDATA[journey into tech]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[kubectl]]></category><category><![CDATA[#kubeweek]]></category><category><![CDATA[kubeadm]]></category><category><![CDATA[#kubernetes #container ]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sat, 20 Jun 2026 01:11:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/b9744785-43db-40d2-a627-826711fd3ccc.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Passing the <a href="https://www.credly.com/badges/e72821a9-97a5-4ee8-a7f6-93f40246e864/public_url">Certified Kubernetes Administrator (CKA)</a> was one of the most rewarding milestones in my cloud-native journey.</p>
<p>The certification challenged me to understand Kubernetes from an administrator’s perspective:</p>
<ul>
<li><p>Cluster architecture</p>
</li>
<li><p>Networking</p>
</li>
<li><p>Storage</p>
</li>
<li><p>Security</p>
</li>
<li><p>Troubleshooting</p>
</li>
<li><p>Cluster maintenance</p>
</li>
</ul>
<p>It taught me how Kubernetes works.</p>
<p>It taught me how to operate Kubernetes.</p>
<p>Most importantly, it taught me how to think under pressure when things break.</p>
<p>But after earning my CKA and reflecting on my learning journey, I realized something important:</p>
<blockquote>
<p><em>Knowing how to operate Kubernetes is only one side of the story.</em></p>
</blockquote>
<p>The other side is understanding how applications are designed, deployed, configured, and managed inside Kubernetes.</p>
<p>And that’s exactly why I’ve decided to pursue the Certified Kubernetes Application Developer (CKAD) certification.</p>
<h2><strong>The CKA Changed How I View Kubernetes</strong></h2>
<p>Before preparing for the CKA, Kubernetes felt like a massive collection of YAML files, commands, and concepts.</p>
<p>By the end of my preparation, I understood:</p>
<ul>
<li><p>How Pods communicate</p>
</li>
<li><p>How Services expose applications</p>
</li>
<li><p>How Storage works</p>
</li>
<li><p>How to troubleshoot cluster issues</p>
</li>
<li><p>How to manage Kubernetes resources</p>
</li>
</ul>
<p>The CKA gave me a strong operational foundation.</p>
<p>But it also revealed a gap in my knowledge.</p>
<p>I understood the platform.</p>
<p>I wanted to better understand the applications running on the platform.</p>
<h2><strong>Kubernetes Is More Than Infrastructure</strong></h2>
<p>One of the biggest realizations I had during my CKA journey was this:</p>
<p>Most users don’t care about Kubernetes.</p>
<p>They care about applications.</p>
<p>Developers care about:</p>
<ul>
<li><p>Deploying applications</p>
</li>
<li><p>Managing configurations</p>
</li>
<li><p>Handling secrets</p>
</li>
<li><p>Scaling workloads</p>
</li>
<li><p>Building reliable services</p>
</li>
</ul>
<p>As DevOps engineers, we often focus heavily on infrastructure.</p>
<p>But Kubernetes was created to run applications.</p>
<p>To truly understand Kubernetes, I believe we need to understand both sides:</p>
<ul>
<li><p>The administrator perspective</p>
</li>
<li><p>The developer perspective</p>
</li>
</ul>
<h2><strong>What the CKA Focuses On</strong></h2>
<p>The CKA teaches you how to operate Kubernetes clusters.</p>
<p>Typical topics include:</p>
<p>✅ Cluster Maintenance</p>
<p>✅ Networking</p>
<p>✅ Storage</p>
<p>✅ Security</p>
<p>✅ Troubleshooting</p>
<p>✅ Scheduling</p>
<p>✅ RBAC</p>
<p>These skills are essential.</p>
<p>Without them, clusters become unreliable.</p>
<p>But many application-level concepts receive less attention.</p>
<h2><strong>What the CKAD Focuses On</strong></h2>
<p>The CKAD approaches Kubernetes from a different angle.</p>
<p>Instead of asking:</p>
<blockquote>
<p><em>“How do I manage the cluster?”</em></p>
</blockquote>
<p>It asks:</p>
<blockquote>
<p><em>“How do I build and run applications effectively on Kubernetes?”</em></p>
</blockquote>
<p>Topics include:</p>
<ul>
<li><p>Application deployment</p>
</li>
<li><p>Configuration management</p>
</li>
<li><p>Multi-container Pods</p>
</li>
<li><p>Health checks</p>
</li>
<li><p>Jobs and CronJobs</p>
</li>
<li><p>Application observability</p>
</li>
<li><p>Kubernetes design patterns</p>
</li>
</ul>
<p>This shift in perspective is exactly what interests me.</p>
<h2><strong>From Infrastructure Thinking to Application Thinking</strong></h2>
<p>One lesson I’ve learned throughout my DevOps career is that great engineers understand both infrastructure and applications.</p>
<p>You can build the most reliable Kubernetes cluster in the world.</p>
<p>But if you don’t understand:</p>
<ul>
<li><p>Application behavior</p>
</li>
<li><p>Deployment strategies</p>
</li>
<li><p>Container design</p>
</li>
<li><p>Configuration patterns</p>
</li>
</ul>
<p>you’re only seeing half the picture.</p>
<p>CKAD helps bridge that gap.</p>
<h2><strong>Why This Matters in the Real World</strong></h2>
<p>In production environments, problems rarely stay within one domain.</p>
<p>A deployment issue might involve:</p>
<ul>
<li><p>Application configuration</p>
</li>
<li><p>Secrets</p>
</li>
<li><p>Networking</p>
</li>
<li><p>Resource limits</p>
</li>
<li><p>Storage</p>
</li>
</ul>
<p>Understanding both the platform and the workload makes troubleshooting significantly easier.</p>
<p>The more I work with Kubernetes, the more I realize that successful engineers don’t think in silos.</p>
<p>They understand the complete system.</p>
<h2><strong>What I’m Most Excited to Learn</strong></h2>
<p>As I begin my CKAD journey, these are the areas I’m most excited to explore:</p>
<h3><strong>Kubernetes Design Patterns</strong></h3>
<p>Understanding patterns like:</p>
<ul>
<li><p>Sidecar</p>
</li>
<li><p>Ambassador</p>
</li>
<li><p>Adapter</p>
</li>
</ul>
<h3><strong>Application Lifecycle Management</strong></h3>
<p>How applications are deployed, updated, and maintained inside Kubernetes.</p>
<h3><strong>Health Checks</strong></h3>
<p>Learning how readiness, liveness, and startup probes contribute to application reliability.</p>
<h3><strong>Configuration Management</strong></h3>
<p>Using ConfigMaps and Secrets effectively in real-world environments.</p>
<h3><strong>Multi-Container Applications</strong></h3>
<p>Understanding how containers collaborate within Pods.</p>
<h2><strong>My Goal Is Bigger Than Certification</strong></h2>
<p>Just like with the CKA, my goal isn’t simply to pass an exam.</p>
<p>The certification is important.</p>
<p>But the learning is more important.</p>
<p>The objective is to become a better engineer.</p>
<p>A better troubleshooter.</p>
<p>A better Kubernetes practitioner.</p>
<p>A better DevOps professional.</p>
<p>CKAD is simply the next step in that journey.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>The CKA taught me how to manage Kubernetes.</p>
<p>Now I want to learn how to build on Kubernetes.</p>
<p>That’s why CKAD feels like the natural next step.</p>
<p>As cloud-native adoption continues to grow, understanding both operations and application development becomes increasingly valuable.</p>
<p>For me, this isn’t just about collecting certifications.</p>
<p>It’s about becoming a more complete Kubernetes engineer.</p>
<p>The journey continues.</p>
<p>And CKAD is the next chapter.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[Kubernetes Troubleshooting Mindset: How I Approach Production Issues]]></title><description><![CDATA[One of the biggest lessons I’ve learned in my Kubernetes journey is this:

Most production incidents are not solved by knowing more commands.
They’re solved by having a systematic troubleshooting proc]]></description><link>https://shahzadahmad.dev/kubernetes-troubleshooting-mindset-how-i-approach-production-issues</link><guid isPermaLink="true">https://shahzadahmad.dev/kubernetes-troubleshooting-mindset-how-i-approach-production-issues</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[CKAD Exam]]></category><category><![CDATA[troubleshooting]]></category><category><![CDATA[troubleshooting tips]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[#kubernetes #container ]]></category><category><![CDATA[kubernetes-pods]]></category><category><![CDATA[kubernetes-services]]></category><category><![CDATA[kubestronaut]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sat, 20 Jun 2026 01:06:02 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/d0fefa52-2c68-4c8a-a7e4-14d9cb26fc54.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One of the biggest lessons I’ve learned in my Kubernetes journey is this:</p>
<blockquote>
<p><em>Most production incidents are not solved by knowing more commands.</em></p>
<p><em>They’re solved by having a systematic troubleshooting process.</em></p>
</blockquote>
<p>When I first started learning Kubernetes, my troubleshooting strategy was simple:</p>
<pre><code class="language-plaintext">Try random commands until something makes sense.
</code></pre>
<p>Sometimes it worked.</p>
<p>Most of the time, it wasted valuable time and created more confusion.</p>
<p>After preparing for the <a href="https://www.credly.com/badges/e72821a9-97a5-4ee8-a7f6-93f40246e864/public_url">CKA</a>, working with Kubernetes, and spending countless hours troubleshooting broken deployments, failed Pods, networking issues, and cluster problems, I realized that effective troubleshooting is more about mindset than commands.</p>
<p>This article covers the troubleshooting framework I follow whenever I face Kubernetes issues.</p>
<h2><strong>The Biggest Mistake Engineers Make</strong></h2>
<p>When something breaks, many engineers immediately jump to conclusions.</p>
<p>Examples:</p>
<ul>
<li><p>“The application must be broken.”</p>
</li>
<li><p>“The network is down.”</p>
</li>
<li><p>“Kubernetes is acting weird.”</p>
</li>
<li><p>“The deployment failed.”</p>
</li>
</ul>
<p>These assumptions often lead troubleshooting in the wrong direction.</p>
<p>Instead, I try to follow a simple principle:</p>
<blockquote>
<p><em>Observe first. Assume later.</em></p>
</blockquote>
<h2><strong>My Kubernetes Troubleshooting Framework</strong></h2>
<p>Whenever I encounter a problem, I follow this sequence:</p>
<pre><code class="language-plaintext">Observe
↓
Scope
↓
Gather Evidence
↓
Validate Assumptions
↓
Fix
↓
Verify
↓
Document
</code></pre>
<p>Let’s break it down.</p>
<h2><strong>Step 1: Observe the Symptoms</strong></h2>
<p>Before touching anything, I ask:</p>
<p>What exactly is failing?</p>
<p>Examples:</p>
<ul>
<li><p>Pod not starting</p>
</li>
<li><p>Service unreachable</p>
</li>
<li><p>Node NotReady</p>
</li>
<li><p>Application crashing</p>
</li>
<li><p>Storage issue</p>
</li>
<li><p>DNS issue</p>
</li>
</ul>
<p>At this stage, I avoid making assumptions.</p>
<p>I simply gather facts.</p>
<p>Commands I often use:</p>
<pre><code class="language-plaintext">kubectl get pods -A
kubectl get nodes
kubectl get svc -A
</code></pre>
<p>The goal is visibility.</p>
<h2><strong>Step 2: Define the Scope</strong></h2>
<p>The next question is:</p>
<p>How big is the problem?</p>
<p>Is it:</p>
<ul>
<li><p>One Pod?</p>
</li>
<li><p>One Deployment?</p>
</li>
<li><p>One Namespace?</p>
</li>
<li><p>One Node?</p>
</li>
<li><p>The entire cluster?</p>
</li>
</ul>
<p>This step is important because it narrows the investigation.</p>
<p>For example:</p>
<p>If only one Pod is affected, the problem is likely application-related.</p>
<p>If every workload is failing, the issue may be cluster-wide.</p>
<h2><strong>Step 3: Gather Evidence</strong></h2>
<p>This is where most troubleshooting begins.</p>
<p>Instead of guessing, collect information.</p>
<p>My favorite commands:</p>
<pre><code class="language-plaintext">kubectl describe pod &lt;pod-name&gt;
</code></pre>
<pre><code class="language-plaintext">kubectl logs &lt;pod-name&gt;
</code></pre>
<pre><code class="language-plaintext">kubectl logs --previous &lt;pod-name&gt;
</code></pre>
<pre><code class="language-plaintext">kubectl describe node &lt;node-name&gt;
</code></pre>
<pre><code class="language-plaintext">kubectl get events --sort-by=.metadata.creationTimestamp
</code></pre>
<p>Events often reveal the story behind the failure.</p>
<h2><strong>Step 4: Follow the Dependency Chain</strong></h2>
<p>One of the most powerful troubleshooting techniques is following dependencies.</p>
<p>For example:</p>
<p>Application not working?</p>
<p>Check:</p>
<pre><code class="language-plaintext">Application
↓
Pod
↓
Deployment
↓
Service
↓
DNS
↓
Network
↓
Node
↓
Cluster
</code></pre>
<p>Instead of randomly jumping between components, I trace the path systematically.</p>
<p>This prevents missing critical clues.</p>
<h2><strong>Step 5: Validate Assumptions</strong></h2>
<p>This is where many engineers get stuck.</p>
<p>Let’s say you believe DNS is broken.</p>
<p>Don’t assume.</p>
<p>Prove it.</p>
<p>Example:</p>
<pre><code class="language-plaintext">kubectl exec -it pod-name -- nslookup kubernetes.default
</code></pre>
<p>If DNS works, move on.</p>
<p>If DNS fails, investigate further.</p>
<p>Evidence should drive conclusions — not intuition.</p>
<h2><strong>Step 6: Fix One Thing at a Time</strong></h2>
<p>A common mistake during incidents is changing multiple things simultaneously.</p>
<p>Example:</p>
<ul>
<li><p>Update deployment</p>
</li>
<li><p>Restart pods</p>
</li>
<li><p>Modify service</p>
</li>
<li><p>Change ConfigMap</p>
</li>
</ul>
<p>Now you don’t know which change fixed the issue.</p>
<p>My rule:</p>
<blockquote>
<p><em>Make one change.</em></p>
<p><em>Verify the result.</em></p>
<p><em>Continue if necessary.</em></p>
</blockquote>
<p>This makes troubleshooting much easier.</p>
<h2><strong>Step 7: Verify the Resolution</strong></h2>
<p>Never assume a problem is fixed.</p>
<p>Verify it.</p>
<p>Check:</p>
<pre><code class="language-plaintext">kubectl get pods
</code></pre>
<pre><code class="language-plaintext">kubectl logs
</code></pre>
<pre><code class="language-plaintext">kubectl get endpoints
</code></pre>
<pre><code class="language-plaintext">kubectl get events
</code></pre>
<p>And most importantly:</p>
<p>Verify that the application itself is functioning correctly.</p>
<p>A green Pod does not always mean a healthy application.</p>
<h2><strong>Step 8: Document the Incident</strong></h2>
<p>This step is often skipped.</p>
<p>After resolving an issue, document:</p>
<ul>
<li><p>Root cause</p>
</li>
<li><p>Symptoms</p>
</li>
<li><p>Fix applied</p>
</li>
<li><p>Prevention steps</p>
</li>
</ul>
<p>Future-you will thank present-you.</p>
<p>Many recurring issues can be solved in minutes if previous incidents were documented properly.</p>
<h2><strong>My Mental Checklist for Common Issues</strong></h2>
<h3><strong>Pod Not Starting</strong></h3>
<p>Check:</p>
<pre><code class="language-plaintext">kubectl describe pod
kubectl logs
kubectl logs --previous
</code></pre>
<p>Look for:</p>
<ul>
<li><p>ImagePullBackOff</p>
</li>
<li><p>CrashLoopBackOff</p>
</li>
<li><p>Resource limits</p>
</li>
<li><p>Missing ConfigMaps</p>
</li>
<li><p>Missing Secrets</p>
</li>
</ul>
<h3><strong>Service Not Working</strong></h3>
<p>Check:</p>
<pre><code class="language-plaintext">kubectl get svc
kubectl get endpoints
kubectl describe svc
</code></pre>
<p>Verify:</p>
<ul>
<li><p>Selectors</p>
</li>
<li><p>Ports</p>
</li>
<li><p>Target Ports</p>
</li>
<li><p>Pod readiness</p>
</li>
</ul>
<h3><strong>DNS Problems</strong></h3>
<p>Check:</p>
<pre><code class="language-plaintext">kubectl get pods -n kube-system
</code></pre>
<p>Verify CoreDNS is healthy.</p>
<p>Test:</p>
<pre><code class="language-plaintext">nslookup kubernetes.default
</code></pre>
<h3><strong>Node NotReady</strong></h3>
<p>Check:</p>
<pre><code class="language-plaintext">kubectl describe node
</code></pre>
<p>Investigate:</p>
<ul>
<li><p>Kubelet status</p>
</li>
<li><p>Disk pressure</p>
</li>
<li><p>Memory pressure</p>
</li>
<li><p>Networking</p>
</li>
</ul>
<h2><strong>The Most Important Skill</strong></h2>
<p>After years of working in IT and preparing for Kubernetes certifications, I’ve come to believe that the most valuable Kubernetes skill is not:</p>
<ul>
<li><p>Writing YAML</p>
</li>
<li><p>Memorizing commands</p>
</li>
<li><p>Passing certifications</p>
</li>
</ul>
<p>It’s troubleshooting.</p>
<p>Production environments are unpredictable.</p>
<p>Applications fail.</p>
<p>Nodes fail.</p>
<p>Networks fail.</p>
<p>Configurations fail.</p>
<p>The engineers who remain calm, gather evidence, and troubleshoot systematically are the ones who solve problems quickly.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>Kubernetes troubleshooting is not about finding the perfect command.</p>
<p>It’s about developing a repeatable process.</p>
<p>Whenever something breaks, I remind myself:</p>
<pre><code class="language-plaintext">Observe
↓
Scope
↓
Gather Evidence
↓
Validate Assumptions
↓
Fix
↓
Verify
↓
Document
</code></pre>
<p>This simple framework has helped me solve countless Kubernetes issues more effectively than any command cheat sheet ever could.</p>
<p>The goal isn’t to know everything.</p>
<p>The goal is to know how to find the answer when things go wrong.</p>
<p>And that’s what separates Kubernetes users from Kubernetes operators.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider following, clapping, andsharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[What Nobody Tells You About Learning Kubernetes]]></title><description><![CDATA[When I first started learning Kubernetes, I thought the hardest part would be understanding Pods, Deployments, Services, and YAML files.
I was wrong.
The technical concepts were challenging, but they ]]></description><link>https://shahzadahmad.dev/what-nobody-tells-you-about-learning-kubernetes</link><guid isPermaLink="true">https://shahzadahmad.dev/what-nobody-tells-you-about-learning-kubernetes</guid><category><![CDATA[cka]]></category><category><![CDATA[CKAD Exam]]></category><category><![CDATA[ckad]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubernetes-pods]]></category><category><![CDATA[#kubernetes #container ]]></category><category><![CDATA[Kubernetes deployments]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[Learning Journey]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Sat, 20 Jun 2026 00:58:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/d9edc3cb-7de5-43dc-8afc-7fc1ef779f4a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I first started learning Kubernetes, I thought the hardest part would be understanding Pods, Deployments, Services, and YAML files.</p>
<p>I was wrong.</p>
<p>The technical concepts were challenging, but they weren’t the biggest obstacle.</p>
<p>The real challenge was navigating the overwhelming amount of information, figuring out what actually mattered, and staying motivated when everything felt confusing.</p>
<p>After earning my <a href="https://www.credly.com/badges/e72821a9-97a5-4ee8-a7f6-93f40246e864/public_url">Certified Kubernetes Administrator (CKA)</a> certification and spending countless hours learning, practicing, troubleshooting, and breaking clusters, I’ve realized there are several things nobody tells you when you begin your Kubernetes journey.</p>
<p>If you’re currently learning Kubernetes, this article might save you some frustration.</p>
<h2><strong>1. Kubernetes Feels Overwhelming at First</strong></h2>
<p>Most people don’t struggle because Kubernetes is impossible to learn.</p>
<p>They struggle because Kubernetes introduces too many new concepts at once.</p>
<p>On your first day, you’ll hear terms like:</p>
<ul>
<li><p>Pods</p>
</li>
<li><p>Deployments</p>
</li>
<li><p>ReplicaSets</p>
</li>
<li><p>Services</p>
</li>
<li><p>Ingress</p>
</li>
<li><p>ConfigMaps</p>
</li>
<li><p>Secrets</p>
</li>
<li><p>StatefulSets</p>
</li>
<li><p>RBAC</p>
</li>
<li><p>Persistent Volumes</p>
</li>
<li><p>Network Policies</p>
</li>
</ul>
<p>And that’s before you even touch the command line.</p>
<p>At first, it feels like everyone else understands how everything connects together except you.</p>
<p>The truth?</p>
<p>Most Kubernetes professionals felt exactly the same way when they started.</p>
<p>The confusion is normal.</p>
<h2><strong>2. You Don’t Need to Learn Everything</strong></h2>
<p>One of the biggest mistakes I made was trying to understand every Kubernetes concept immediately.</p>
<p>I wanted complete understanding before moving forward.</p>
<p>That approach slowed me down.</p>
<p>What helped was accepting that Kubernetes is a huge ecosystem.</p>
<p>You don’t need to master:</p>
<ul>
<li><p>Service Mesh</p>
</li>
<li><p>Operators</p>
</li>
<li><p>Advanced Networking</p>
</li>
<li><p>Multi-Cluster Management</p>
</li>
</ul>
<p>on day one.</p>
<p>Focus on the fundamentals first:</p>
<ul>
<li><p>Pods</p>
</li>
<li><p>Deployments</p>
</li>
<li><p>Services</p>
</li>
<li><p>Storage</p>
</li>
<li><p>Networking Basics</p>
</li>
<li><p>Troubleshooting</p>
</li>
</ul>
<p>Everything else becomes easier later.</p>
<h2><strong>3. Reading Isn’t Enough</strong></h2>
<p>Many people spend weeks watching videos and reading blogs.</p>
<p>Then they open a terminal and realize they can’t deploy anything.</p>
<p>Kubernetes is not a spectator sport.</p>
<p>The fastest learning happens when you:</p>
<ul>
<li><p>Create resources</p>
</li>
<li><p>Break resources</p>
</li>
<li><p>Fix resources</p>
</li>
<li><p>Repeat</p>
</li>
</ul>
<p>Every mistake teaches something valuable.</p>
<p>Some of my biggest learning moments happened after spending hours troubleshooting something I accidentally broke.</p>
<h2><strong>4. Troubleshooting Is More Important Than Memorization</strong></h2>
<p>Early in my journey, I thought success meant memorizing commands.</p>
<p>Later I realized professional Kubernetes engineers are paid to solve problems, not recite commands.</p>
<p>Anyone can copy YAML from documentation.</p>
<p>The valuable skill is identifying why something isn’t working.</p>
<p>Learning to answer questions like:</p>
<ul>
<li><p>Why is the Pod not starting?</p>
</li>
<li><p>Why is the Service not reachable?</p>
</li>
<li><p>Why is the Deployment stuck?</p>
</li>
<li><p>Why is the Node NotReady?</p>
</li>
</ul>
<p>will take you much further than memorizing commands.</p>
<h2><strong>5. Documentation Is a Skill</strong></h2>
<p>At first, Kubernetes documentation felt intimidating.</p>
<p>I thought experienced engineers had every command memorized.</p>
<p>They don’t.</p>
<p>The best engineers know how to find information quickly.</p>
<p>One of the most important skills I developed during my CKA preparation was learning how to navigate the Kubernetes documentation efficiently.</p>
<p>In fact, being comfortable with documentation is often more valuable than trying to memorize everything.</p>
<h2><strong>6. YAML Will Frustrate You</strong></h2>
<p>Nobody warns you about how much time you’ll spend staring at YAML files.</p>
<p>A missing space.</p>
<p>A typo.</p>
<p>An incorrect indentation.</p>
<p>A wrong selector.</p>
<p>Any of these can stop an application from working.</p>
<p>At times, it feels ridiculous.</p>
<p>But eventually, reading YAML becomes second nature.</p>
<p>The frustration doesn’t last forever.</p>
<h2><strong>7. Linux Skills Matter More Than You Think</strong></h2>
<p>Many people jump directly into Kubernetes without strengthening their Linux fundamentals.</p>
<p>That was a mistake I made early on.</p>
<p>The better I became at:</p>
<ul>
<li><p>Linux commands</p>
</li>
<li><p>Process management</p>
</li>
<li><p>Networking</p>
</li>
<li><p>Logs</p>
</li>
<li><p>File systems</p>
</li>
</ul>
<p>the easier Kubernetes became.</p>
<p>Kubernetes doesn’t replace Linux.</p>
<p>It builds on top of it.</p>
<h2><strong>8. The CKA Exam Is Not the End Goal</strong></h2>
<p>When I started preparing for the CKA, it felt like the finish line.</p>
<p>After passing it, I realized something important:</p>
<p>The certification is a milestone, not the destination.</p>
<p>The real value comes from:</p>
<ul>
<li><p>Learning Kubernetes deeply</p>
</li>
<li><p>Building confidence</p>
</li>
<li><p>Developing troubleshooting skills</p>
</li>
<li><p>Understanding production systems</p>
</li>
</ul>
<p>The certification validates your knowledge.</p>
<p>The journey transforms your skills.</p>
<h2><strong>9. Production Kubernetes Is Different</strong></h2>
<p>Learning Kubernetes in labs is one thing.</p>
<p>Running Kubernetes in production is another.</p>
<p>In labs:</p>
<ul>
<li><p>You control everything.</p>
</li>
<li><p>Nothing is critical.</p>
</li>
<li><p>Failure has no consequences.</p>
</li>
</ul>
<p>In production:</p>
<ul>
<li><p>Security matters.</p>
</li>
<li><p>Reliability matters.</p>
</li>
<li><p>Monitoring matters.</p>
</li>
<li><p>Downtime matters.</p>
</li>
</ul>
<p>This realization completely changed how I approached learning Kubernetes.</p>
<h2><strong>10. Progress Is Slower Than You Expect</strong></h2>
<p>One of the most frustrating parts of learning Kubernetes is feeling like you’re moving too slowly.</p>
<p>You spend hours learning a concept and still feel confused.</p>
<p>Then suddenly, a few weeks later, everything starts connecting.</p>
<p>Kubernetes learning is not linear.</p>
<p>The understanding comes in layers.</p>
<p>Trust the process.</p>
<p>Keep practicing.</p>
<p>Eventually, concepts that once seemed impossible become routine.</p>
<h2><strong>What Helped Me the Most</strong></h2>
<p>Looking back, these were the biggest accelerators in my learning journey:</p>
<p>✅ Consistent hands-on practice</p>
<p>✅ Building small labs</p>
<p>✅ Reading official documentation</p>
<p>✅ Troubleshooting broken clusters</p>
<p>✅ Preparing for the CKA</p>
<p>✅ Writing about what I learned</p>
<p>Writing articles forced me to organize my thoughts and identify knowledge gaps.</p>
<p>Teaching is one of the best ways to learn.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>Nobody tells you that learning Kubernetes is as much a mental challenge as it is a technical one.</p>
<p>There will be moments when:</p>
<ul>
<li><p>Everything feels confusing.</p>
</li>
<li><p>Concepts don’t make sense.</p>
</li>
<li><p>Labs break unexpectedly.</p>
</li>
<li><p>Progress feels slow.</p>
</li>
</ul>
<p>That’s normal.</p>
<p>Every Kubernetes engineer you’ve ever looked up to has experienced the same struggles.</p>
<p>The key is consistency.</p>
<p>Keep learning.</p>
<p>Keep practicing.</p>
<p>Keep troubleshooting.</p>
<p>One day you’ll look back and realize that the concepts that once felt impossible have become second nature.</p>
<p>And that’s when you know you’ve truly started your Kubernetes journey.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[Kubernetes Interview Questions Every CKA Should Be Able to Answer]]></title><description><![CDATA[Passing the Certified Kubernetes Administrator (CKA) exam demonstrates that you understand Kubernetes administration and can solve hands-on problems under pressure.
However, passing the exam is only p]]></description><link>https://shahzadahmad.dev/kubernetes-interview-questions-every-cka-should-be-able-to-answer</link><guid isPermaLink="true">https://shahzadahmad.dev/kubernetes-interview-questions-every-cka-should-be-able-to-answer</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[interview questions]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[#kubernetes #container ]]></category><category><![CDATA[kubernetes-pods]]></category><category><![CDATA[kubernetes-services]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Fri, 19 Jun 2026 18:14:53 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/e3378d0d-b74f-463f-a259-4948ad273475.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Passing the <a href="https://www.credly.com/badges/e72821a9-97a5-4ee8-a7f6-93f40246e864/public_url">Certified Kubernetes Administrator (CKA)</a> exam demonstrates that you understand Kubernetes administration and can solve hands-on problems under pressure.</p>
<p>However, passing the exam is only part of the journey.</p>
<p>When interviewing for Kubernetes, DevOps, SRE, or Platform Engineering roles, you’ll often encounter a different challenge:</p>
<blockquote>
<p><em>Can you explain Kubernetes concepts clearly and confidently?</em></p>
</blockquote>
<p>Over the years, I’ve noticed that many engineers can execute kubectl commands but struggle to explain the reasoning behind them during interviews.</p>
<p>In this article, I’ve compiled some of the most common Kubernetes interview questions that every CKA should be able to answer, along with several advanced questions that frequently appear in senior-level interviews.</p>
<p>Let’s dive in.</p>
<h2><strong>Beginner-Level Questions</strong></h2>
<h3><strong>1. What is Kubernetes?</strong></h3>
<p><strong>Answer:</strong></p>
<p>Kubernetes is an open-source container orchestration platform that automates:</p>
<ul>
<li><p>Deployment</p>
</li>
<li><p>Scaling</p>
</li>
<li><p>Management</p>
</li>
<li><p>Networking</p>
</li>
</ul>
<p>of containerized applications.</p>
<p>It helps organizations run applications reliably across clusters of servers.</p>
<h3><strong>2. What is a Pod?</strong></h3>
<p><strong>Answer:</strong></p>
<p>A Pod is the smallest deployable unit in Kubernetes.</p>
<p>A Pod can contain:</p>
<ul>
<li><p>One container</p>
</li>
<li><p>Multiple tightly coupled containers</p>
</li>
</ul>
<p>Containers inside the same Pod share:</p>
<ul>
<li><p>Network namespace</p>
</li>
<li><p>Storage volumes</p>
</li>
</ul>
<h3><strong>3. What is the difference between a Pod and a Deployment?</strong></h3>
<p><strong>Answer:</strong></p>
<p>A Pod runs containers.</p>
<p>A Deployment manages Pods.</p>
<p>Deployments provide:</p>
<ul>
<li><p>Self-healing</p>
</li>
<li><p>Scaling</p>
</li>
<li><p>Rolling updates</p>
</li>
<li><p>Rollbacks</p>
</li>
</ul>
<p>In production, Pods are usually managed through Deployments.</p>
<h3><strong>4. What is a Namespace?</strong></h3>
<p><strong>Answer:</strong></p>
<p>Namespaces logically separate resources within a cluster.</p>
<p>They are commonly used for:</p>
<ul>
<li><p>Development</p>
</li>
<li><p>Testing</p>
</li>
<li><p>Production</p>
</li>
<li><p>Team isolation</p>
</li>
</ul>
<h3><strong>5. What is a Service?</strong></h3>
<p><strong>Answer:</strong></p>
<p>A Service provides stable network access to a group of Pods.</p>
<p>Since Pods are ephemeral and their IP addresses change, Services provide a consistent endpoint for communication.</p>
<h2><strong>Intermediate-Level Questions</strong></h2>
<h3><strong>6. Explain the difference between ClusterIP, NodePort, and LoadBalancer.</strong></h3>
<h3><strong>ClusterIP</strong></h3>
<ul>
<li>Internal cluster communication only</li>
</ul>
<h3><strong>NodePort</strong></h3>
<ul>
<li>Exposes service through a node port</li>
</ul>
<h3><strong>LoadBalancer</strong></h3>
<ul>
<li><p>Uses a cloud provider load balancer</p>
</li>
<li><p>Exposes applications externally</p>
</li>
</ul>
<p>Interview Tip:</p>
<p>Be prepared to explain when you would use each type.</p>
<h3><strong>7. What is Ingress?</strong></h3>
<p><strong>Answer:</strong></p>
<p>Ingress manages external HTTP and HTTPS access into Kubernetes clusters.</p>
<p>Benefits include:</p>
<ul>
<li><p>Host-based routing</p>
</li>
<li><p>Path-based routing</p>
</li>
<li><p>SSL/TLS termination</p>
</li>
</ul>
<p>Think of Ingress as the front door to your applications.</p>
<h3><strong>8. What is the role of etcd?</strong></h3>
<p><strong>Answer:</strong></p>
<p>etcd is Kubernetes’ distributed key-value store.</p>
<p>It stores:</p>
<ul>
<li><p>Pods</p>
</li>
<li><p>Deployments</p>
</li>
<li><p>Secrets</p>
</li>
<li><p>ConfigMaps</p>
</li>
<li><p>Cluster state</p>
</li>
</ul>
<p>etcd is considered the source of truth for Kubernetes.</p>
<h3><strong>9. What is kube-apiserver?</strong></h3>
<p><strong>Answer:</strong></p>
<p>The API Server is the central communication hub of Kubernetes.</p>
<p>All components interact through it.</p>
<p>Whenever you run:</p>
<pre><code class="language-plaintext">kubectl get pods
</code></pre>
<p>the request is processed through the API Server.</p>
<h3><strong>10. What happens when you create a Pod?</strong></h3>
<p><strong>Answer:</strong></p>
<p>A typical flow is:</p>
<ol>
<li><p>User submits YAML</p>
</li>
<li><p>API Server receives request</p>
</li>
<li><p>Data stored in etcd</p>
</li>
<li><p>Scheduler selects node</p>
</li>
<li><p>Kubelet creates Pod</p>
</li>
<li><p>Container runtime starts containers</p>
</li>
</ol>
<p>This is one of the most common interview questions.</p>
<h3><strong>11. What is a ConfigMap?</strong></h3>
<p><strong>Answer:</strong></p>
<p>A ConfigMap is used to store non-sensitive configuration data as key-value pairs.</p>
<p>Applications can consume ConfigMaps through:</p>
<ul>
<li><p>Environment variables</p>
</li>
<li><p>Command-line arguments</p>
</li>
<li><p>Mounted files</p>
</li>
</ul>
<p>ConfigMaps help separate configuration from application code.</p>
<h3><strong>12. What is a Secret?</strong></h3>
<p><strong>Answer:</strong></p>
<p>Secrets are used to store sensitive information such as:</p>
<ul>
<li><p>Passwords</p>
</li>
<li><p>API keys</p>
</li>
<li><p>Tokens</p>
</li>
<li><p>Certificates</p>
</li>
</ul>
<p>Although Secrets are base64 encoded by default, additional encryption mechanisms should be used in production environments.</p>
<h2><strong>Advanced-Level Questions</strong></h2>
<h3><strong>13. How does Kubernetes scheduling work?</strong></h3>
<p><strong>Answer:</strong></p>
<p>The scheduler identifies suitable nodes based on:</p>
<ul>
<li><p>Resource availability</p>
</li>
<li><p>Node selectors</p>
</li>
<li><p>Taints and tolerations</p>
</li>
<li><p>Affinity rules</p>
</li>
</ul>
<p>Then it assigns the Pod to an appropriate node.</p>
<h3><strong>14. What are Taints and Tolerations?</strong></h3>
<p><strong>Answer:</strong></p>
<p>Taints prevent Pods from being scheduled onto specific nodes.</p>
<p>Tolerations allow Pods to ignore those restrictions.</p>
<p>They’re commonly used for:</p>
<ul>
<li><p>Dedicated nodes</p>
</li>
<li><p>GPU workloads</p>
</li>
<li><p>Specialized infrastructure</p>
</li>
</ul>
<h3><strong>15. What is RBAC?</strong></h3>
<p><strong>Answer:</strong></p>
<p>RBAC (Role-Based Access Control) controls access within Kubernetes.</p>
<p>Key components:</p>
<ul>
<li><p>Roles</p>
</li>
<li><p>ClusterRoles</p>
</li>
<li><p>RoleBindings</p>
</li>
<li><p>ClusterRoleBindings</p>
</li>
</ul>
<p>RBAC answers:</p>
<blockquote>
<p><em>Who can do what and where?</em></p>
</blockquote>
<h3><strong>16. Explain Persistent Volumes and Persistent Volume Claims.</strong></h3>
<h3><strong>Persistent Volume (PV)</strong></h3>
<p>Represents storage.</p>
<h3><strong>Persistent Volume Claim (PVC)</strong></h3>
<p>Represents a request for storage.</p>
<p>This abstraction separates infrastructure from application requirements.</p>
<h3><strong>17. What is a StatefulSet?</strong></h3>
<p><strong>Answer:</strong></p>
<p>StatefulSets manage stateful applications.</p>
<p>They provide:</p>
<ul>
<li><p>Stable identities</p>
</li>
<li><p>Stable storage</p>
</li>
<li><p>Predictable ordering</p>
</li>
</ul>
<p>Examples:</p>
<ul>
<li><p>PostgreSQL</p>
</li>
<li><p>MySQL</p>
</li>
<li><p>MongoDB</p>
</li>
</ul>
<h3><strong>18. What is the difference between a Deployment and a StatefulSet?</strong></h3>
<p><strong>Answer:</strong></p>
<p>A Deployment is designed for stateless applications where Pods are interchangeable.</p>
<p>A StatefulSet is designed for stateful applications that require:</p>
<ul>
<li><p>Stable network identities</p>
</li>
<li><p>Persistent storage</p>
</li>
<li><p>Ordered deployment and scaling</p>
</li>
</ul>
<p>Examples:</p>
<ul>
<li><p>Deployment → Web applications</p>
</li>
<li><p>StatefulSet → Databases</p>
</li>
</ul>
<h3><strong>19. What are Node Affinity and Pod Affinity?</strong></h3>
<p><strong>Answer:</strong></p>
<p>Affinity rules influence scheduling decisions.</p>
<h3><strong>Node Affinity</strong></h3>
<p>Schedules Pods onto specific nodes based on labels.</p>
<h3><strong>Pod Affinity</strong></h3>
<p>Schedules Pods close to other Pods.</p>
<h3><strong>Pod Anti-Affinity</strong></h3>
<p>Ensures Pods are spread across nodes for high availability.</p>
<h3><strong>20. What is the difference between a DaemonSet and a Deployment?</strong></h3>
<p><strong>Answer:</strong></p>
<p>A Deployment runs a specified number of Pod replicas.</p>
<p>A DaemonSet ensures that a Pod runs on every node (or selected nodes).</p>
<p>Common DaemonSet use cases:</p>
<ul>
<li><p>Fluent Bit</p>
</li>
<li><p>Prometheus Node Exporter</p>
</li>
<li><p>Security agents</p>
</li>
<li><p>Log collectors</p>
</li>
</ul>
<h3><strong>21. Explain the Kubernetes networking model.</strong></h3>
<p><strong>Answer:</strong></p>
<p>Kubernetes networking follows these principles:</p>
<ul>
<li><p>Every Pod gets its own IP address.</p>
</li>
<li><p>Pods can communicate with each other without NAT.</p>
</li>
<li><p>Nodes can communicate with Pods.</p>
</li>
<li><p>Services provide stable access to Pods.</p>
</li>
</ul>
<p>Popular CNI plugins include:</p>
<ul>
<li><p>Calico</p>
</li>
<li><p>Cilium</p>
</li>
<li><p>Flannel</p>
</li>
</ul>
<h2><strong>Expert-Level Questions (Frequently Asked in Senior Interviews)</strong></h2>
<h3><strong>22. How does kube-proxy work?</strong></h3>
<p><strong>Answer:</strong></p>
<p>kube-proxy manages network rules on nodes and enables communication between Services and Pods.</p>
<p>It can operate in:</p>
<ul>
<li><p>iptables mode</p>
</li>
<li><p>IPVS mode</p>
</li>
</ul>
<p>It watches the API Server and updates networking rules dynamically.</p>
<h3><strong>23. What happens if etcd becomes unavailable?</strong></h3>
<p><strong>Answer:</strong></p>
<p>If etcd becomes unavailable:</p>
<ul>
<li><p>Existing workloads continue running.</p>
</li>
<li><p>New cluster changes cannot be persisted.</p>
</li>
<li><p>Scheduling and API operations may fail.</p>
</li>
<li><p>Control plane functionality becomes degraded.</p>
</li>
</ul>
<p>This is why etcd backups and high availability are critical.</p>
<h3><strong>24. Explain the difference between Requests and Limits.</strong></h3>
<p><strong>Answer:</strong></p>
<h3><strong>Requests</strong></h3>
<p>Guaranteed resources used by the scheduler when placing Pods.</p>
<h3><strong>Limits</strong></h3>
<p>Maximum resources a container can consume.</p>
<p>Improper configuration can lead to:</p>
<ul>
<li><p>OOMKilled containers</p>
</li>
<li><p>Resource starvation</p>
</li>
<li><p>Inefficient cluster utilization</p>
</li>
</ul>
<h3><strong>25. What is the difference between Container Runtime Interface (CRI), CNI, and CSI?</strong></h3>
<p><strong>Answer:</strong></p>
<h3><strong>CRI</strong></h3>
<p>Container Runtime Interface</p>
<p>Examples:</p>
<ul>
<li><p>containerd</p>
</li>
<li><p>CRI-O</p>
</li>
</ul>
<h3><strong>CNI</strong></h3>
<p>Container Network Interface</p>
<p>Examples:</p>
<ul>
<li><p>Calico</p>
</li>
<li><p>Cilium</p>
</li>
<li><p>Flannel</p>
</li>
</ul>
<h3><strong>CSI</strong></h3>
<p>Container Storage Interface</p>
<p>Used for integrating storage providers with Kubernetes.</p>
<p>This question is commonly asked in senior Kubernetes interviews.</p>
<h3><strong>26. How would you design a highly available Kubernetes control plane?</strong></h3>
<p><strong>Answer:</strong></p>
<p>A highly available control plane typically includes:</p>
<ul>
<li><p>Multiple API Servers</p>
</li>
<li><p>Multiple Controller Managers</p>
</li>
<li><p>Multiple Schedulers</p>
</li>
<li><p>Highly available etcd cluster</p>
</li>
<li><p>Load balancer in front of API Servers</p>
</li>
</ul>
<p>The goal is to eliminate single points of failure.</p>
<h3><strong>27. Explain how Kubernetes performs rolling updates.</strong></h3>
<p><strong>Answer:</strong></p>
<p>Deployments use rolling updates to gradually replace old Pods with new ones.</p>
<p>Key parameters:</p>
<ul>
<li><p>maxUnavailable</p>
</li>
<li><p>maxSurge</p>
</li>
</ul>
<p>Benefits:</p>
<ul>
<li><p>Zero or minimal downtime</p>
</li>
<li><p>Controlled rollout</p>
</li>
<li><p>Easy rollback if issues occur</p>
</li>
</ul>
<h2><strong>Troubleshooting Questions</strong></h2>
<h3><strong>28. A Pod is stuck in CrashLoopBackOff. What would you do?</strong></h3>
<p>Possible steps:</p>
<pre><code class="language-plaintext">kubectl describe pod
kubectl logs
kubectl logs --previous
</code></pre>
<p>Common causes:</p>
<ul>
<li><p>Application crash</p>
</li>
<li><p>Missing configuration</p>
</li>
<li><p>Startup failures</p>
</li>
<li><p>Resource constraints</p>
</li>
</ul>
<p>Interviewers love troubleshooting scenarios.</p>
<h3><strong>29. A Service is not reaching Pods. How would you troubleshoot?</strong></h3>
<p>Checklist:</p>
<ul>
<li><p>Verify Service exists</p>
</li>
<li><p>Check selectors</p>
</li>
<li><p>Verify endpoints</p>
</li>
<li><p>Confirm Pods are healthy</p>
</li>
<li><p>Test networking</p>
</li>
</ul>
<p>Commands:</p>
<pre><code class="language-plaintext">kubectl get svc
kubectl get endpoints
kubectl describe svc
</code></pre>
<h3><strong>30. How would you troubleshoot a Node that is NotReady?</strong></h3>
<p>Check:</p>
<pre><code class="language-plaintext">kubectl get nodes
kubectl describe node
</code></pre>
<p>Investigate:</p>
<ul>
<li><p>kubelet status</p>
</li>
<li><p>networking issues</p>
</li>
<li><p>disk pressure</p>
</li>
<li><p>memory pressure</p>
</li>
</ul>
<h3><strong>31. A Pod is stuck in Pending state. What could be the reasons?</strong></h3>
<p>Common causes include:</p>
<ul>
<li><p>Insufficient CPU or memory</p>
</li>
<li><p>Missing Persistent Volume</p>
</li>
<li><p>Node selector mismatch</p>
</li>
<li><p>Taints without tolerations</p>
</li>
<li><p>Unschedulable nodes</p>
</li>
</ul>
<p>Useful commands:</p>
<pre><code class="language-plaintext">kubectl describe pod
kubectl get events
</code></pre>
<h3><strong>32. How would you troubleshoot DNS issues inside a cluster?</strong></h3>
<p>Steps:</p>
<ul>
<li><p>Verify CoreDNS Pods are running</p>
</li>
<li><p>Check DNS resolution from a test Pod</p>
</li>
<li><p>Inspect CoreDNS logs</p>
</li>
<li><p>Verify Service and network connectivity</p>
</li>
</ul>
<p>Commands:</p>
<pre><code class="language-plaintext">kubectl get pods -n kube-system
kubectl logs -n kube-system deployment/coredns
</code></pre>
<h3><strong>33. A Pod can reach other Pods but cannot access external websites. How would you troubleshoot?</strong></h3>
<p>Possible causes:</p>
<ul>
<li><p>DNS issues</p>
</li>
<li><p>Network policies</p>
</li>
<li><p>NAT gateway problems</p>
</li>
<li><p>Firewall restrictions</p>
</li>
<li><p>CNI configuration issues</p>
</li>
</ul>
<p>Investigation steps:</p>
<ul>
<li><p>Test DNS resolution</p>
</li>
<li><p>Verify outbound connectivity</p>
</li>
<li><p>Check network policies</p>
</li>
<li><p>Review CNI logs</p>
</li>
</ul>
<p>This is a common real-world troubleshooting scenario.</p>
<h2><strong>Production-Focused Questions</strong></h2>
<h3><strong>34. How do you secure Kubernetes?</strong></h3>
<p>Topics to mention:</p>
<ul>
<li><p>RBAC</p>
</li>
<li><p>Network Policies</p>
</li>
<li><p>Pod Security</p>
</li>
<li><p>Secrets Management</p>
</li>
<li><p>Image Scanning</p>
</li>
<li><p>Admission Controllers</p>
</li>
</ul>
<p>This demonstrates production awareness.</p>
<h3><strong>35. What monitoring tools have you used with Kubernetes?</strong></h3>
<p>Examples:</p>
<ul>
<li><p>Prometheus</p>
</li>
<li><p>Grafana</p>
</li>
<li><p>Loki</p>
</li>
<li><p>OpenTelemetry</p>
</li>
</ul>
<p>Many interviewers look for observability experience.</p>
<h3><strong>36. What is GitOps?</strong></h3>
<p><strong>Answer:</strong></p>
<p>GitOps uses Git repositories as the source of truth.</p>
<p>Changes are applied automatically through tools such as:</p>
<ul>
<li><p>Argo CD</p>
</li>
<li><p>Flux</p>
</li>
</ul>
<p>This is increasingly common in production environments.</p>
<h3><strong>37. What is Horizontal Pod Autoscaling (HPA)?</strong></h3>
<p><strong>Answer:</strong></p>
<p>HPA automatically scales the number of Pods based on metrics such as:</p>
<ul>
<li><p>CPU utilization</p>
</li>
<li><p>Memory utilization</p>
</li>
<li><p>Custom metrics</p>
</li>
</ul>
<p>It helps applications handle varying workloads efficiently.</p>
<h3><strong>38. What is the difference between HPA, VPA, and Cluster Autoscaler?</strong></h3>
<h3><strong>HPA (Horizontal Pod Autoscaler)</strong></h3>
<p>Scales the number of Pods.</p>
<h3><strong>VPA (Vertical Pod Autoscaler)</strong></h3>
<p>Adjusts CPU and memory requests for Pods.</p>
<h3><strong>Cluster Autoscaler</strong></h3>
<p>Adds or removes worker nodes based on cluster demand.</p>
<p>This is a popular production-focused interview question.</p>
<h3><strong>39. How would you perform a Kubernetes cluster upgrade?</strong></h3>
<p><strong>Answer:</strong></p>
<p>A typical upgrade process includes:</p>
<ol>
<li><p>Back up etcd</p>
</li>
<li><p>Upgrade control plane components</p>
</li>
<li><p>Upgrade worker nodes</p>
</li>
<li><p>Drain nodes before upgrading</p>
</li>
<li><p>Validate workloads after upgrade</p>
</li>
</ol>
<p>Interviewers often ask this question to assess operational experience.</p>
<h3><strong>40. How would you implement multi-tenancy in Kubernetes?</strong></h3>
<p><strong>Answer:</strong></p>
<p>Common approaches include:</p>
<ul>
<li><p>Namespaces</p>
</li>
<li><p>RBAC</p>
</li>
<li><p>Network Policies</p>
</li>
<li><p>Resource Quotas</p>
</li>
<li><p>Limit Ranges</p>
</li>
<li><p>Separate node pools</p>
</li>
</ul>
<p>The goal is to isolate teams and workloads securely.</p>
<h3><strong>41. What are Admission Controllers and why are they important?</strong></h3>
<p><strong>Answer:</strong></p>
<p>Admission Controllers intercept requests before objects are persisted in etcd.</p>
<p>They can:</p>
<ul>
<li><p>Validate requests</p>
</li>
<li><p>Mutate objects</p>
</li>
<li><p>Enforce policies</p>
</li>
</ul>
<p>Examples:</p>
<ul>
<li><p>NamespaceLifecycle</p>
</li>
<li><p>ResourceQuota</p>
</li>
<li><p>PodSecurity</p>
</li>
</ul>
<p>Many organizations use admission controllers for governance and security.</p>
<h2><strong>Bonus Question</strong></h2>
<h3><strong>What is the biggest difference between learning Kubernetes and using Kubernetes in production?</strong></h3>
<p>My answer:</p>
<p>Learning Kubernetes focuses on:</p>
<ul>
<li><p>Concepts</p>
</li>
<li><p>Commands</p>
</li>
<li><p>Labs</p>
</li>
</ul>
<p>Production Kubernetes focuses on:</p>
<ul>
<li><p>Reliability</p>
</li>
<li><p>Observability</p>
</li>
<li><p>Security</p>
</li>
<li><p>Automation</p>
</li>
<li><p>Troubleshooting</p>
</li>
</ul>
<p>Understanding this distinction demonstrates maturity as an engineer.</p>
<h2><strong>My Interview Preparation Strategy</strong></h2>
<p>Whenever I prepare for Kubernetes interviews, I focus on three areas:</p>
<h3><strong>Concepts</strong></h3>
<p>Can I explain the topic?</p>
<h3><strong>Hands-On Knowledge</strong></h3>
<p>Can I demonstrate it?</p>
<h3><strong>Troubleshooting</strong></h3>
<p>Can I solve problems under pressure?</p>
<h3><strong>Production Experience</strong></h3>
<p>Can I explain how Kubernetes operates at scale?</p>
<p>Many candidates prepare only for the first two.</p>
<p>The strongest engineers excel at all four.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>The CKA certification teaches valuable Kubernetes skills.</p>
<p>But interviews test something slightly different:</p>
<blockquote>
<p><em>Your ability to communicate, troubleshoot, and apply Kubernetes concepts in real-world situations.</em></p>
</blockquote>
<p>If you’re preparing for Kubernetes, DevOps, SRE, or Platform Engineering interviews, start with these questions and make sure you can answer them confidently.</p>
<p>For senior-level roles, expect deeper questions around:</p>
<ul>
<li><p>Kubernetes internals</p>
</li>
<li><p>Networking</p>
</li>
<li><p>Security</p>
</li>
<li><p>High availability</p>
</li>
<li><p>Scalability</p>
</li>
<li><p>Production operations</p>
</li>
</ul>
<p>Knowing the answer is important.</p>
<p>Explaining it clearly is what gets you hired.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[The Biggest Differences Between Learning Kubernetes and Using Kubernetes in Production]]></title><description><![CDATA[When I first started learning Kubernetes, my world revolved around:

Pods

Deployments

Services

YAML files

kubectl commands

CKA exam objectives


My goal was simple:

Understand Kubernetes and ear]]></description><link>https://shahzadahmad.dev/the-biggest-differences-between-learning-kubernetes-and-using-kubernetes-in-production</link><guid isPermaLink="true">https://shahzadahmad.dev/the-biggest-differences-between-learning-kubernetes-and-using-kubernetes-in-production</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[production]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[#kubernetes #container ]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubernetes-services]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[Kubernetes deployments]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[CKAD Exam]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Fri, 19 Jun 2026 18:03:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/038e391c-5565-4cae-acea-18d0b5cf6d75.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I first started learning Kubernetes, my world revolved around:</p>
<ul>
<li><p>Pods</p>
</li>
<li><p>Deployments</p>
</li>
<li><p>Services</p>
</li>
<li><p>YAML files</p>
</li>
<li><p>kubectl commands</p>
</li>
<li><p>CKA exam objectives</p>
</li>
</ul>
<p>My goal was simple:</p>
<blockquote>
<p><em>Understand Kubernetes and earn the</em> <a href="https://www.credly.com/badges/e72821a9-97a5-4ee8-a7f6-93f40246e864/public_url"><em>Certified Kubernetes Administrator (CKA)</em></a> <em>certification.</em></p>
</blockquote>
<p>Over time, I became comfortable creating workloads, troubleshooting pods, managing storage, and navigating Kubernetes documentation.</p>
<p>But once I started working with Kubernetes in real-world environments, I realized something important:</p>
<blockquote>
<p><em>Learning Kubernetes and operating Kubernetes in production are two very different challenges.</em></p>
</blockquote>
<p>The Kubernetes you encounter in labs and certification preparation is only part of the story.</p>
<p>Production Kubernetes introduces entirely new problems, responsibilities, and ways of thinking.</p>
<p>In this article, I want to share the biggest differences I noticed between learning Kubernetes and actually using Kubernetes in production environments.</p>
<h2><strong>1. In Labs, Everything Works. In Production, Everything Eventually Breaks.</strong></h2>
<p>When learning Kubernetes, most exercises are designed to teach a concept.</p>
<p>You create:</p>
<ul>
<li><p>A Pod</p>
</li>
<li><p>A Deployment</p>
</li>
<li><p>A Service</p>
</li>
</ul>
<p>And everything behaves exactly as expected.</p>
<p>Production environments are different.</p>
<p>Applications crash.</p>
<p>Storage becomes unavailable.</p>
<p>Certificates expire.</p>
<p>Nodes become unhealthy.</p>
<p>Network connectivity breaks unexpectedly.</p>
<p>The question changes from:</p>
<blockquote>
<p><em>“Can I create a Deployment?”</em></p>
</blockquote>
<p>to:</p>
<blockquote>
<p><em>“Can I quickly identify why this application is failing?”</em></p>
</blockquote>
<p>This is why troubleshooting becomes one of the most valuable Kubernetes skills.</p>
<h2><strong>2. kubectl Is Important, but Observability Is Essential</strong></h2>
<p>During CKA preparation, I spent countless hours using:</p>
<pre><code class="language-plaintext">kubectl get
kubectl describe
kubectl logs
kubectl exec
</code></pre>
<p>These commands remain important.</p>
<p>However, production environments introduce a new requirement:</p>
<p>Visibility.</p>
<p>Teams need answers to questions like:</p>
<ul>
<li><p>Why is latency increasing?</p>
</li>
<li><p>Why are requests failing?</p>
</li>
<li><p>Why is memory usage growing?</p>
</li>
<li><p>Why did the application restart?</p>
</li>
</ul>
<p>This is where tools such as:</p>
<ul>
<li><p>Prometheus</p>
</li>
<li><p>Grafana</p>
</li>
<li><p>Loki</p>
</li>
<li><p>OpenTelemetry</p>
</li>
</ul>
<p>become critical.</p>
<p>Learning Kubernetes teaches you how workloads run.</p>
<p>Production teaches you how to observe them.</p>
<h2><strong>3. YAML Is Only the Beginning</strong></h2>
<p>When preparing for certifications, many people spend significant time writing YAML manifests.</p>
<p>In production environments, teams rarely manage hundreds of YAML files manually.</p>
<p>Instead, they often use:</p>
<ul>
<li><p>Helm</p>
</li>
<li><p>Kustomize</p>
</li>
<li><p>GitOps workflows</p>
</li>
<li><p>Infrastructure as Code</p>
</li>
</ul>
<p>The challenge shifts from:</p>
<blockquote>
<p><em>Writing YAML</em></p>
</blockquote>
<p>to</p>
<blockquote>
<p><em>Managing Kubernetes at scale.</em></p>
</blockquote>
<h2><strong>4. Git Becomes the Source of Truth</strong></h2>
<p>During learning, most changes happen directly through kubectl.</p>
<p>In production, this approach can become risky.</p>
<p>Modern Kubernetes environments increasingly rely on GitOps practices.</p>
<p>Tools such as:</p>
<ul>
<li><p>Argo CD</p>
</li>
<li><p>Flux</p>
</li>
</ul>
<p>allow teams to manage Kubernetes declaratively through Git repositories.</p>
<p>The mindset changes from:</p>
<blockquote>
<p><em>“Apply changes directly”</em></p>
</blockquote>
<p>to</p>
<blockquote>
<p><em>“Commit changes and let automation deploy them.”</em></p>
</blockquote>
<p>This was one of the biggest shifts in how I thought about Kubernetes operations.</p>
<h2><strong>5. Security Becomes Much More Important</strong></h2>
<p>In labs, security often feels like an isolated topic.</p>
<p>You learn:</p>
<ul>
<li><p>Service Accounts</p>
</li>
<li><p>Secrets</p>
</li>
<li><p>RBAC</p>
</li>
</ul>
<p>Then move on.</p>
<p>Production environments treat security as a daily responsibility.</p>
<p>Organizations must consider:</p>
<ul>
<li><p>Image vulnerabilities</p>
</li>
<li><p>Secret management</p>
</li>
<li><p>Access controls</p>
</li>
<li><p>Policy enforcement</p>
</li>
<li><p>Supply chain security</p>
</li>
<li><p>Runtime protection</p>
</li>
</ul>
<p>The reality is that securing Kubernetes often requires more effort than deploying applications.</p>
<h2><strong>6. Cost Suddenly Matters</strong></h2>
<p>When learning Kubernetes, resource consumption rarely matters.</p>
<p>Nobody worries about cluster costs in a local lab.</p>
<p>Production environments are different.</p>
<p>Questions become:</p>
<ul>
<li><p>Are workloads overprovisioned?</p>
</li>
<li><p>Are nodes underutilized?</p>
</li>
<li><p>Can autoscaling reduce costs?</p>
</li>
<li><p>Are we wasting cloud resources?</p>
</li>
</ul>
<p>Kubernetes isn’t just a technical platform.</p>
<p>It’s also a financial platform.</p>
<p>Every CPU and every gigabyte of memory has a cost.</p>
<h2><strong>7. Kubernetes Is Only One Part of the Platform</strong></h2>
<p>One of the biggest surprises for me was realizing how many technologies surround Kubernetes.</p>
<p>When learning, Kubernetes feels like the center of everything.</p>
<p>In production, Kubernetes becomes one component of a much larger ecosystem.</p>
<p>You often work with:</p>
<ul>
<li><p>Terraform</p>
</li>
<li><p>GitHub Actions</p>
</li>
<li><p>Jenkins</p>
</li>
<li><p>Argo CD</p>
</li>
<li><p>Vault</p>
</li>
<li><p>Prometheus</p>
</li>
<li><p>Grafana</p>
</li>
<li><p>Cloud providers</p>
</li>
</ul>
<p>Real-world engineers spend significant time integrating Kubernetes with the rest of the platform.</p>
<h2><strong>8. Communication Matters More Than Expected</strong></h2>
<p>Learning Kubernetes is largely an individual activity.</p>
<p>Production Kubernetes is a team sport.</p>
<p>When incidents happen, engineers must:</p>
<ul>
<li><p>Communicate clearly</p>
</li>
<li><p>Coordinate troubleshooting</p>
</li>
<li><p>Share updates</p>
</li>
<li><p>Explain root causes</p>
</li>
</ul>
<p>Technical skills remain important.</p>
<p>But communication often determines how effectively a team responds to issues.</p>
<p>This was something no certification exam could fully teach me.</p>
<h2><strong>9. Troubleshooting Becomes a Daily Skill</strong></h2>
<p>One of the biggest differences between labs and production is frequency.</p>
<p>In learning environments:</p>
<p>You troubleshoot occasionally.</p>
<p>In production:</p>
<p>Troubleshooting becomes part of daily operations.</p>
<p>You investigate:</p>
<ul>
<li><p>Failed deployments</p>
</li>
<li><p>DNS issues</p>
</li>
<li><p>Storage problems</p>
</li>
<li><p>Resource bottlenecks</p>
</li>
<li><p>Network failures</p>
</li>
</ul>
<p>The engineers who become valuable in production environments are usually the ones who can diagnose problems quickly and systematically.</p>
<h2><strong>10. The Real Goal Is Reliability</strong></h2>
<p>When learning Kubernetes, success often means:</p>
<blockquote>
<p><em>“My application is running.”</em></p>
</blockquote>
<p>Production changes the definition of success.</p>
<p>Now success means:</p>
<ul>
<li><p>Reliability</p>
</li>
<li><p>Availability</p>
</li>
<li><p>Scalability</p>
</li>
<li><p>Security</p>
</li>
<li><p>Recoverability</p>
</li>
</ul>
<p>A deployment that works today isn’t enough.</p>
<p>The question becomes:</p>
<blockquote>
<p><em>Will it still work next week during peak traffic?</em></p>
</blockquote>
<p>This shift in thinking is what separates learning Kubernetes from operating Kubernetes.</p>
<h2><strong>What Helped Me Bridge the Gap</strong></h2>
<p>Looking back, several things helped me transition from Kubernetes learner to Kubernetes practitioner.</p>
<h3><strong>Building Labs</strong></h3>
<p>Hands-on practice remains invaluable.</p>
<h3><strong>Breaking Things Intentionally</strong></h3>
<p>Some of my biggest lessons came from creating failures and troubleshooting them.</p>
<h3><strong>Learning GitOps</strong></h3>
<p>Understanding Argo CD changed how I viewed Kubernetes operations.</p>
<h3><strong>Exploring Observability</strong></h3>
<p>Prometheus and Grafana helped me understand what production teams actually need.</p>
<h3><strong>Real-World Projects</strong></h3>
<p>Nothing accelerates learning faster than solving actual problems.</p>
<h2><strong>My Biggest Takeaway</strong></h2>
<p>The Kubernetes certification journey gave me a strong foundation.</p>
<p>It taught me:</p>
<ul>
<li><p>Core concepts</p>
</li>
<li><p>Administration skills</p>
</li>
<li><p>Troubleshooting fundamentals</p>
</li>
</ul>
<p>But production environments taught me something equally important:</p>
<blockquote>
<p><em>Kubernetes is not just about deploying containers.</em></p>
</blockquote>
<p>It’s about operating reliable systems.</p>
<p>The deeper I moved into cloud-native technologies, the more I realized that success isn’t measured by how quickly you can create a Deployment.</p>
<p>It’s measured by how effectively you can keep systems running.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>Learning Kubernetes and using Kubernetes in production are both valuable experiences.</p>
<p>One teaches you the platform.</p>
<p>The other teaches you responsibility.</p>
<p>The CKA helped me understand Kubernetes.</p>
<p>Production environments taught me how to think like an operator.</p>
<p>And in many ways, that’s where the real Kubernetes journey begins.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[How I Would Prepare for CKA If I Had to Start Again]]></title><description><![CDATA[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]]></description><link>https://shahzadahmad.dev/how-i-would-prepare-for-cka-if-i-had-to-start-again</link><guid isPermaLink="true">https://shahzadahmad.dev/how-i-would-prepare-for-cka-if-i-had-to-start-again</guid><category><![CDATA[cka]]></category><category><![CDATA[preparation]]></category><category><![CDATA[CKA Exam]]></category><category><![CDATA[ckad]]></category><category><![CDATA[CKAD Exam]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[#kubernetes #container ]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[kubestronaut]]></category><category><![CDATA[kubectl]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Fri, 19 Jun 2026 17:54:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/752663d6-5bac-4606-bb0c-6cafff362a37.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I started preparing for the <a href="https://www.credly.com/badges/e72821a9-97a5-4ee8-a7f6-93f40246e864/public_url">Certified Kubernetes Administrator (CKA)</a> exam, I did what most people do.</p>
<p>I watched courses.</p>
<p>I took notes.</p>
<p>I practiced labs.</p>
<p>I collected resources.</p>
<p>And I constantly wondered:</p>
<blockquote>
<p><em>“Am I preparing the right way?”</em></p>
</blockquote>
<p>Looking back after passing the CKA and continuing my cloud-native journey toward becoming a Kubestronaut, I realized something important:</p>
<p>I spent too much time trying to learn everything and not enough time focusing on what actually mattered.</p>
<p>If I had to start my CKA preparation from scratch today, I would approach it very differently.</p>
<p>This article is the roadmap I wish someone had given me on Day 1.</p>
<h2><strong>What I Got Wrong Initially</strong></h2>
<p>Like many candidates, I believed success would come from consuming more content.</p>
<p>I downloaded:</p>
<ul>
<li><p>PDFs</p>
</li>
<li><p>Cheat sheets</p>
</li>
<li><p>Notes</p>
</li>
<li><p>Practice questions</p>
</li>
<li><p>Multiple courses</p>
</li>
</ul>
<p>The problem wasn’t a lack of resources.</p>
<p>The problem was information overload.</p>
<p>I spent weeks collecting resources when I should have been spending more time inside a Kubernetes cluster.</p>
<p>One lesson became very clear:</p>
<blockquote>
<p><em>Kubernetes is learned by doing, not by reading.</em></p>
</blockquote>
<h2><strong>Step 1: Build Strong Linux Fundamentals First</strong></h2>
<p>If I were starting again, I would spend my first week strengthening Linux skills.</p>
<p>Many candidates underestimate how important Linux is for the CKA.</p>
<p>You should be comfortable with:</p>
<ul>
<li><p>grep</p>
</li>
<li><p>awk</p>
</li>
<li><p>sed</p>
</li>
<li><p>vim</p>
</li>
<li><p>systemctl</p>
</li>
<li><p>journalctl</p>
</li>
<li><p>ssh</p>
</li>
<li><p>tar</p>
</li>
<li><p>networking commands</p>
</li>
</ul>
<p>The CKA is not purely a Kubernetes exam.</p>
<p>Linux knowledge saves valuable minutes during troubleshooting tasks.</p>
<h2><strong>Step 2: Learn Core Kubernetes Concepts Before Touching the Exam</strong></h2>
<p>I would avoid jumping directly into mock exams.</p>
<p>Instead, I would focus on understanding:</p>
<ul>
<li><p>Pods</p>
</li>
<li><p>Deployments</p>
</li>
<li><p>Services</p>
</li>
<li><p>ConfigMaps</p>
</li>
<li><p>Secrets</p>
</li>
<li><p>Namespaces</p>
</li>
<li><p>Persistent Volumes</p>
</li>
<li><p>RBAC</p>
</li>
<li><p>Networking</p>
</li>
</ul>
<p>The goal would be understanding, not memorization.</p>
<p>Many exam tasks become easier when you understand why Kubernetes behaves a certain way.</p>
<h2><strong>Step 3: Build a Practice Cluster Immediately</strong></h2>
<p>If I started again, I would create a lab environment during Week 1.</p>
<p>Possible options:</p>
<ul>
<li><p>Minikube</p>
</li>
<li><p>Kind</p>
</li>
<li><p>K3s</p>
</li>
<li><p>kubeadm-based cluster</p>
</li>
</ul>
<p>Then I would:</p>
<ul>
<li><p>Break things</p>
</li>
<li><p>Fix things</p>
</li>
<li><p>Deploy applications</p>
</li>
<li><p>Experiment freely</p>
</li>
</ul>
<p>Nothing accelerates learning faster than hands-on practice.</p>
<h2><strong>Step 4: Use Kubernetes Documentation From Day One</strong></h2>
<p>This is probably the biggest change I would make.</p>
<p>Many candidates prepare as if they need to memorize everything.</p>
<p>You don’t.</p>
<p>The official Kubernetes documentation is available during the exam.</p>
<p>I would practice every lab with documentation open.</p>
<p>Whenever I forgot something, I would search:</p>
<ul>
<li><p><a href="http://kubernetes.io">kubernetes.io</a></p>
</li>
<li><p>kubectl reference</p>
</li>
<li><p>task guides</p>
</li>
</ul>
<p>By exam day, documentation navigation would feel natural.</p>
<h2><strong>Step 5: Focus on kubectl Mastery</strong></h2>
<p>If I had to start again, I would spend more time mastering kubectl.</p>
<p>This includes:</p>
<pre><code class="language-plaintext">kubectl get
kubectl describe
kubectl logs
kubectl exec
kubectl edit
kubectl apply
kubectl expose
kubectl create
kubectl explain
</code></pre>
<p>And especially:</p>
<pre><code class="language-plaintext">kubectl explain
</code></pre>
<p>This command is one of the most underrated tools for CKA preparation.</p>
<h2><strong>Step 6: Learn YAML Generation Shortcuts Early</strong></h2>
<p>One mistake I made was manually writing YAML too often.</p>
<p>Today, I would immediately learn commands like:</p>
<pre><code class="language-plaintext">kubectl create deployment nginx \
--image=nginx \
--dry-run=client -o yaml
</code></pre>
<p>and</p>
<pre><code class="language-plaintext">kubectl run nginx \
--image=nginx \
--dry-run=client -o yaml
</code></pre>
<p>Generating templates is significantly faster than writing everything from scratch.</p>
<p>Those saved minutes matter during the exam.</p>
<h2><strong>Step 7: Prioritize Troubleshooting Skills</strong></h2>
<p>The biggest lesson from my CKA journey is this:</p>
<blockquote>
<p><em>Troubleshooting is more valuable than memorization.</em></p>
</blockquote>
<p>I would intentionally create problems such as:</p>
<ul>
<li><p>CrashLoopBackOff</p>
</li>
<li><p>ImagePullBackOff</p>
</li>
<li><p>Failed Services</p>
</li>
<li><p>Broken RBAC</p>
</li>
<li><p>Storage issues</p>
</li>
<li><p>Node failures</p>
</li>
</ul>
<p>Then practice fixing them repeatedly.</p>
<p>The exam rewards problem-solving more than memorization.</p>
<h2><strong>Step 8: Practice Time Management Earlier</strong></h2>
<p>During preparation, many candidates spend unlimited time solving tasks.</p>
<p>The real exam doesn’t work that way.</p>
<p>If I started again, I would:</p>
<ul>
<li><p>Set timers</p>
</li>
<li><p>Simulate exam pressure</p>
</li>
<li><p>Practice switching tasks quickly</p>
</li>
</ul>
<p>Learning when to move on is an important exam skill.</p>
<h2><strong>Step 9: Memorize Only What Matters</strong></h2>
<p>I would stop trying to memorize everything.</p>
<p>Instead, I would focus on:</p>
<ul>
<li><p>Frequently used kubectl commands</p>
</li>
<li><p>YAML structures</p>
</li>
<li><p>Common troubleshooting workflows</p>
</li>
<li><p>Documentation locations</p>
</li>
</ul>
<p>Everything else can be verified through documentation.</p>
<p>The goal is efficiency, not perfect memory.</p>
<h2><strong>Step 10: Use a Structured Resource Strategy</strong></h2>
<p>If I started again, my resource stack would be simple:</p>
<h3><strong>Learning</strong></h3>
<ul>
<li><p>Kubernetes Official Documentation</p>
</li>
<li><p>Kubernetes the Hard Way (selected concepts)</p>
</li>
</ul>
<h3><strong>Hands-On Practice</strong></h3>
<ul>
<li><p>Killer Shell</p>
</li>
<li><p>Personal Lab Environment</p>
</li>
</ul>
<h3><strong>Exam Readiness</strong></h3>
<ul>
<li><p>Killer CKA Simulator</p>
</li>
<li><p>Timed practice sessions</p>
</li>
</ul>
<p>That’s it.</p>
<p>Too many resources often slow progress.</p>
<h2><strong>My Ideal 8-Week CKA Plan</strong></h2>
<h3><strong>Weeks 1–2</strong></h3>
<p>Focus on:</p>
<ul>
<li><p>Linux</p>
</li>
<li><p>Pods</p>
</li>
<li><p>Deployments</p>
</li>
<li><p>Services</p>
</li>
<li><p>Namespaces</p>
</li>
</ul>
<h3><strong>Weeks 3–4</strong></h3>
<p>Focus on:</p>
<ul>
<li><p>Storage</p>
</li>
<li><p>Networking</p>
</li>
<li><p>RBAC</p>
</li>
<li><p>ConfigMaps</p>
</li>
<li><p>Secrets</p>
</li>
</ul>
<h3><strong>Weeks 5–6</strong></h3>
<p>Focus on:</p>
<ul>
<li><p>Cluster Architecture</p>
</li>
<li><p>Scheduling</p>
</li>
<li><p>Troubleshooting</p>
</li>
<li><p>etcd</p>
</li>
</ul>
<h3><strong>Weeks 7–8</strong></h3>
<p>Focus on:</p>
<ul>
<li><p>Mock Exams</p>
</li>
<li><p>Time Management</p>
</li>
<li><p>Documentation Navigation</p>
</li>
<li><p>Weak Areas</p>
</li>
</ul>
<h2><strong>The Most Important Lesson</strong></h2>
<p>If I could give my past self only one piece of advice, it would be:</p>
<blockquote>
<p><em>Spend less time collecting resources and more time inside a Kubernetes cluster.</em></p>
</blockquote>
<p>The candidates who pass the CKA aren’t necessarily the ones who watch the most videos.</p>
<p>They’re the ones who practice consistently.</p>
<p>Every hour spent troubleshooting a real Kubernetes problem teaches more than hours of passive learning.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>If I had to prepare for the CKA again, I would focus on:</p>
<p>✅ Linux fundamentals</p>
<p>✅ Kubernetes concepts</p>
<p>✅ Hands-on labs</p>
<p>✅ Documentation navigation</p>
<p>✅ Troubleshooting skills</p>
<p>✅ Time management</p>
<p>And I would spend far less time searching for the perfect resource.</p>
<p>Passing the CKA isn’t about knowing everything.</p>
<p>It’s about knowing enough to solve problems efficiently under pressure.</p>
<p>The sooner you realize that, the faster your preparation becomes.</p>
<h2><strong>What would you do differently if you were preparing for the CKA today?</strong></h2>
<p>I’d love to hear your thoughts and experiences.</p>
<p>Follow me for more Kubernetes, CNCF, DevOps, and Kubestronaut journey content.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item><item><title><![CDATA[The Kubernetes Concepts That Took Me the Longest to Understand]]></title><description><![CDATA[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 ]]></description><link>https://shahzadahmad.dev/the-kubernetes-concepts-that-took-me-the-longest-to-understand</link><guid isPermaLink="true">https://shahzadahmad.dev/the-kubernetes-concepts-that-took-me-the-longest-to-understand</guid><category><![CDATA[cka]]></category><category><![CDATA[ckad]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[#kubernetes #container ]]></category><category><![CDATA[kubernetes architecture]]></category><category><![CDATA[kubernetes-pods]]></category><category><![CDATA[kubernetes setup]]></category><category><![CDATA[Kubernetes deployments]]></category><category><![CDATA[kubernetes-services]]></category><category><![CDATA[kubectl]]></category><category><![CDATA[kubestronaut]]></category><dc:creator><![CDATA[Shahzad Ali Ahmad]]></dc:creator><pubDate>Fri, 19 Jun 2026 17:24:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a12d243551486ce6cf21b8c/81f8af9b-ee44-425e-a507-492f3fa4c500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When people start learning Kubernetes, they usually ask:</p>
<blockquote>
<p><em>“What’s the hardest part of Kubernetes?”</em></p>
</blockquote>
<p>At first, I thought the answer would be something complicated like etcd, kube-scheduler, or cluster upgrades.</p>
<p>But after spending months learning Kubernetes, preparing for the <a href="https://www.credly.com/badges/e72821a9-97a5-4ee8-a7f6-93f40246e864/public_url">Certified Kubernetes Administrator (CKA)</a> exam, and eventually becoming a Kubestronaut, I realized something surprising:</p>
<p>The hardest Kubernetes concepts aren’t necessarily the most advanced ones.</p>
<p>They’re often the concepts that seem simple on the surface but require a completely different way of thinking.</p>
<p>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.</p>
<h2><strong>1. Kubernetes Networking</strong></h2>
<p>This was by far the most confusing topic for me.</p>
<p>Initially, I understood networking in traditional environments:</p>
<ul>
<li><p>IP addresses</p>
</li>
<li><p>Subnets</p>
</li>
<li><p>Routers</p>
</li>
<li><p>Firewalls</p>
</li>
</ul>
<p>Then Kubernetes introduced:</p>
<ul>
<li><p>Pod networking</p>
</li>
<li><p>ClusterIP</p>
</li>
<li><p>NodePort</p>
</li>
<li><p>LoadBalancer</p>
</li>
<li><p>Ingress</p>
</li>
<li><p>Network Policies</p>
</li>
</ul>
<p>Suddenly there were multiple layers of networking interacting together.</p>
<p>The biggest challenge was understanding:</p>
<blockquote>
<p><em>How can every Pod have its own IP address?</em></p>
</blockquote>
<p>The breakthrough came when I stopped memorizing concepts and started drawing network flows.</p>
<p>Once I visualized traffic moving from:</p>
<p>Client → Ingress → Service → Pod</p>
<p>everything started making sense.</p>
<h2><strong>2. Services vs Ingress</strong></h2>
<p>For weeks, these felt like the same thing.</p>
<p>Both seemed to expose applications.</p>
<p>Both dealt with traffic.</p>
<p>Both appeared in almost every Kubernetes deployment.</p>
<p>The realization that helped me was:</p>
<p><strong>Services connect traffic to Pods.</strong></p>
<p><strong>Ingress manages external access into the cluster.</strong></p>
<p>Think of Services as internal traffic controllers and Ingress as the front door to your Kubernetes environment.</p>
<p>After that, I stopped confusing the two.</p>
<h2><strong>3. Labels and Selectors</strong></h2>
<p>At first glance, labels seemed too simple to matter.</p>
<p>They’re just key-value pairs, right?</p>
<p>Wrong.</p>
<p>Labels are the foundation of how Kubernetes connects resources together.</p>
<p>Deployments find Pods using labels.</p>
<p>Services route traffic using labels.</p>
<p>Network Policies often rely on labels.</p>
<p>Many Kubernetes resources depend on them.</p>
<p>The moment I understood that labels are Kubernetes’ primary way of organizing and discovering resources, everything became much clearer.</p>
<h2><strong>4. Persistent Volumes and Persistent Volume Claims</strong></h2>
<p>Storage was another topic that took me much longer than expected.</p>
<p>My initial question was:</p>
<blockquote>
<p><em>Why do we need both PVs and PVCs?</em></p>
</blockquote>
<p>Why not just mount storage directly?</p>
<p>The explanation that finally clicked was:</p>
<p>A Persistent Volume represents actual storage.</p>
<p>A Persistent Volume Claim represents a request for storage.</p>
<p>Similar to how:</p>
<ul>
<li><p>Infrastructure teams provide storage</p>
</li>
<li><p>Application teams request storage</p>
</li>
</ul>
<p>Understanding this separation made the Kubernetes storage model much easier to grasp.</p>
<h2><strong>5. RBAC (Role-Based Access Control)</strong></h2>
<p>RBAC looked intimidating when I first encountered it.</p>
<p>There were:</p>
<ul>
<li><p>Roles</p>
</li>
<li><p>ClusterRoles</p>
</li>
<li><p>RoleBindings</p>
</li>
<li><p>ClusterRoleBindings</p>
</li>
<li><p>Service Accounts</p>
</li>
</ul>
<p>At first, everything felt overwhelming.</p>
<p>The concept became easier when I thought about RBAC using a simple question:</p>
<blockquote>
<p><em>Who can do what and where?</em></p>
</blockquote>
<p>Every RBAC configuration ultimately answers that question.</p>
<p>Once I approached it from that perspective, writing permissions became significantly easier.</p>
<h2><strong>6. Network Policies</strong></h2>
<p>Network Policies felt like Kubernetes firewall rules — but not exactly.</p>
<p>I spent a long time misunderstanding how traffic was allowed and denied.</p>
<p>The biggest lesson was:</p>
<p>Network Policies are generally deny-by-default once applied.</p>
<p>If you don’t explicitly allow traffic, communication may stop working.</p>
<p>That realization changed how I approached network security inside Kubernetes clusters.</p>
<h2><strong>7. Controllers</strong></h2>
<p>One of the most important Kubernetes concepts is also one of the easiest to overlook.</p>
<p>Controllers continuously compare:</p>
<p>Desired State vs Current State</p>
<p>When they don’t match, Kubernetes takes action.</p>
<p>That idea sounds simple.</p>
<p>But understanding it fundamentally changed how I viewed Kubernetes.</p>
<p>Kubernetes isn’t just running workloads.</p>
<p>It’s constantly working to make reality match your declared configuration.</p>
<p>Once I understood controllers, many Kubernetes behaviors suddenly made sense.</p>
<h2><strong>8. etcd</strong></h2>
<p>During my CKA preparation, I memorized:</p>
<ul>
<li><p>etcd stores cluster data</p>
</li>
<li><p>etcd is the source of truth</p>
</li>
</ul>
<p>But I didn’t fully understand why it mattered.</p>
<p>Only after studying cluster architecture did I appreciate its importance.</p>
<p>Everything Kubernetes knows about:</p>
<ul>
<li><p>Pods</p>
</li>
<li><p>Nodes</p>
</li>
<li><p>Secrets</p>
</li>
<li><p>ConfigMaps</p>
</li>
<li><p>Deployments</p>
</li>
</ul>
<p>ultimately lives in etcd.</p>
<p>Protecting and backing up etcd isn’t just an exam objective.</p>
<p>It’s critical for cluster recovery.</p>
<h2><strong>9. The Kubernetes Control Plane</strong></h2>
<p>Early in my learning journey, I memorized components without understanding their interaction.</p>
<p>I knew:</p>
<ul>
<li><p>kube-apiserver</p>
</li>
<li><p>scheduler</p>
</li>
<li><p>controller-manager</p>
</li>
<li><p>etcd</p>
</li>
</ul>
<p>But I couldn’t explain how they worked together.</p>
<p>The breakthrough came when I started following the lifecycle of a Pod:</p>
<ol>
<li><p>User submits YAML</p>
</li>
<li><p>API Server receives request</p>
</li>
<li><p>Data stored in etcd</p>
</li>
<li><p>Scheduler assigns a node</p>
</li>
<li><p>Kubelet creates the Pod</p>
</li>
</ol>
<p>Following this workflow transformed a collection of components into a complete system.</p>
<h2><strong>10. The Declarative Model</strong></h2>
<p>This concept took me the longest to fully appreciate.</p>
<p>Coming from traditional administration, I was used to executing commands directly.</p>
<p>Kubernetes works differently.</p>
<p>Instead of saying:</p>
<blockquote>
<p><em>Do this.</em></p>
</blockquote>
<p>You declare:</p>
<blockquote>
<p><em>This is what I want.</em></p>
</blockquote>
<p>Kubernetes figures out how to achieve it.</p>
<p>This declarative mindset is one of the biggest shifts Kubernetes requires from infrastructure engineers.</p>
<p>And in my experience, it’s also one of the most important.</p>
<h2><strong>What Finally Helped Me Learn Kubernetes</strong></h2>
<p>Looking back, I noticed a pattern.</p>
<p>The concepts that took me the longest weren’t difficult because they were technically complex.</p>
<p>They were difficult because they required a new way of thinking.</p>
<p>What helped me most was:</p>
<ul>
<li><p>Building labs repeatedly</p>
</li>
<li><p>Breaking clusters intentionally</p>
</li>
<li><p>Troubleshooting issues</p>
</li>
<li><p>Drawing architectures</p>
</li>
<li><p>Reading official documentation</p>
</li>
<li><p>Practicing for the CKA exam</p>
</li>
</ul>
<p>Most importantly, I stopped trying to memorize Kubernetes.</p>
<p>I focused on understanding how the pieces fit together.</p>
<p>That’s when everything started to click.</p>
<h2><strong>Final Thoughts</strong></h2>
<p>Every Kubernetes engineer has concepts that feel impossible at first.</p>
<p>For me, networking, storage, RBAC, and the declarative model took the longest to understand.</p>
<p>The good news is that struggling with these topics is completely normal.</p>
<p>Kubernetes is not difficult because individual concepts are complicated.</p>
<p>It’s difficult because many concepts interact simultaneously.</p>
<p>If you’re currently stuck on a Kubernetes topic, keep practicing.</p>
<p>One day, the concept that feels confusing today will suddenly become obvious.</p>
<p>And when that happens, you’ll realize you’ve made more progress than you thought.</p>
<h2><strong>What Kubernetes concept took you the longest to understand?</strong></h2>
<p>Let me know in the comments. I’m curious to hear what challenged other engineers on their Kubernetes journey.</p>
<p>Follow me for more content on Kubernetes, DevOps, CNCF certifications, and my journey as a Kubestronaut.</p>
<h2><strong>Connect With Me</strong></h2>
<p>If you’re preparing for Kubernetes certifications, pursuing the Kubestronaut journey, or working in the cloud-native ecosystem, I’d love to connect.</p>
<p>Follow me for more articles on Kubernetes, CNCF certifications, DevOps, Platform Engineering, and Cloud-Native technologies.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/shahzadaliahmad/">https://www.linkedin.com/in/shahzadaliahmad/</a></p>
<p>LFX Profile: <a href="https://openprofile.dev/profile/shahzadahmad91">https://openprofile.dev/profile/shahzadahmad91</a></p>
<p>Credly: <a href="https://www.credly.com/users/shahzadahmad">https://www.credly.com/users/shahzadahmad</a></p>
<p>Website: <a href="https://shahzadahmad.dev/">https://shahzadahmad.dev/</a></p>
<p>If you found this article helpful, consider sharing it with others in the Kubernetes community.</p>
]]></content:encoded></item></channel></rss>