Kubernetes is an API-driven control system for running workloads. You declare the desired state ; controllers continuously compare that desired state with the observed state and act to reduce the difference.
Engineer / CI/CD
|
| kubectl / API client
v
+------------------------------+
| CONTROL PLANE |
| |
| kube-apiserver |
| | |
| +----> etcd |
| | |
| +----> kube-scheduler |
| | |
| +----> controllers |
+------------------------------+
|
| desired state / assignments
v
+------------------------------------------+
| WORKER NODE |
| |
| kubelet ---> container runtime ---> Pod |
| networking / Service implementation |
+------------------------------------------+
The control plane manages overall cluster state:
Component What it does kube-apiserverExposes the Kubernetes HTTP API and is the front door to cluster state etcdStores Kubernetes API data as a consistent key-value store kube-schedulerChooses a suitable Node for unscheduled Pods kube-controller-managerRuns reconciliation controllers cloud-controller-managerOptional integration point for supported cloud-provider functions
A worker node runs workloads and normally includes:
kubelet — ensures assigned Pods and containers are running
container runtime — actually creates/runs containers
network implementation — connects Pods and implements cluster networking
kube-proxy or an alternative Service implementation — handles Service traffic rules in many clusters
Suppose you apply a Deployment:
kubectl apply -f deployment.yaml
A simplified flow is:
kubectl sends an API request to the API server.
Authentication, authorization and admission checks occur.
The desired object is persisted in cluster state.
Controllers notice that desired replicas do not exist and create lower-level objects.
The scheduler sees unscheduled Pods and selects Nodes.
The kubelet on each selected Node observes the assigned Pod.
The kubelet asks the container runtime to create containers.
Networking and storage integrations prepare what the Pod needs.
Status flows back through the API.
That observe → compare → reconcile loop is the heart of Kubernetes.
Shows important cluster endpoints known to your current context.
kubectl get nodes -o wide
Lists Nodes and useful placement/network information.
kubectl get pods -A -o wide
Lists Pods across namespaces and shows where each Pod is running.
kubectl get --raw='/readyz?verbose'
Where permitted, queries API-server readiness details directly through the Kubernetes API.
💡 bongoDev Tip
When troubleshooting Kubernetes, first decide which layer is failing: API access, scheduling, node/runtime, application startup, networking, storage, configuration, security, or capacity . This prevents random command execution.
🎤 Interview Question
Walk through what happens after kubectl apply -f deployment.yaml until a container is actually running on a worker node.
🧪 Hands-on Lab
Create a small Deployment, then observe it with kubectl get deploy,rs,pods -w. Identify which controller-created objects appear and in what order.