---
title: Kubernetes
description: updateMaster CSS nesting without the “pyramid of doom.” Learn how to write scalable, maintainable styles with flatter architecture and better code clarity.
publish date: 2026-05-08
author: Victor Bauz
image: https://media2.oshyn.com/-/media/Oshyn/Insights/Blog/2026-03-31-CSS-Nesting-and-Human-Readability/blog_hero_css-nesting.jpg?rev=1818ec52aaea4d6b8dd1900622064417
url: http://www.oshyn.com/blog/2026/05/kubernetes-visual-guide
---
# Kubernetes

![Bird building a nest](https://media2.oshyn.com/-/media/Oshyn/Insights/Blog/2026-03-31-CSS-Nesting-and-Human-Readability/blog_hero_css-nesting.jpg?rev=1818ec52aaea4d6b8dd1900622064417&hash=0A26C0E20729A623F437C4690ACB6E2D)

Kubernetes is a software virtualization technology developed by Google that enables DevOps teams to easily manage software components. It delivers a number of key benefits, such as:

- Auto scaling capacity based on load
  - A related feature of this is self-healing, which automatically creates new instances of servers when an issue is detected
- Simple version management, deployments, rollbacks, etc.
- Portability of software components through containerization and Docker images

Kubernetes solves the problem of managing hundreds or thousands of containers in production and separates the software from the hardware, enabling it to easily transition between operating system nodes.

In this post, we’ll explore the basics of how Kubernetes is built, how to get it up and running on bare-metal Linux servers, and some common software deployment scenarios. Of course, the easiest way to deploy a Kubernetes cluster is to leverage a public cloud provider such as AWS, GCP, or Azure, but effectively managing the cloud Kube deployments requires a basic understanding of how Kubernetes works.

## Cluster Architecture Overview

![Kubernetes Cluster Architecture: Control Plane + Worker Nodes](https://media2.oshyn.com/-/media/Oshyn/Insights/Blog/2024-07-18-Automate-Windows-Security-Updates-for-AWS-EC2-Instances-with-AWS-Systems-Manager/approval-rules_automate-windows-security-updates.png?rev=f6828a3889e84820a9eea1c9758ed66c?)

*Kubernetes Cluster Architecture: Control Plane + Worker Nodes*

### Control Plane Components


| Component | Description |
| --- | --- |
| API Server | Central management point; all kubectl commands go through here. Validates and processes REST requests. |
| etcd | Distributed key-value store; single source of truth for all cluster state. |
| Scheduler | Assigns new Pods to Nodes based on resource availability and constraints. |
| Controller Manager | Runs controllers (Node, Deployment, ReplicaSet, etc.) that reconcile desired vs actual state. |
| Cloud Controller Manager | Integrates with cloud provider APIs for LoadBalancers, storage, etc. |

## Installation

### Tools Overview

![](https://media2.oshyn.com/-/media/Oshyn/Case-Studies/Wolters-Kluwer/app-mobile-views_audiodigest-headless-commerce.png?rev=f14571d205e2436489f03ac364e86c4e?)

### Installing kubectl

#### Listing 1: Install kubectl on Linux


### Listing 1: Install kubectl on Linux

```
# Download latest stable release
curl -LO "https://dl.k8s.io/release/$(curl -L -s \
  https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

# Install binary
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

# Verify installation
kubectl version --client
```

### Local Development: Minikube

#### Listing 2: Install and start Minikube


```
# Install Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# Start cluster (uses Docker driver by default)
minikube start --driver=docker --cpus=2 --memory=4g

# Check cluster status
minikube status
kubectl get nodes

# Enable useful addons
minikube addons enable ingress
minikube addons enable metrics-server
minikube addons enable dashboard

# Open dashboard in browser
minikube dashboard
```

### Production Cluster: kubeadm

#### Listing 3: Bootstrap a production cluster with kubeadm


```
# --- On ALL nodes ---
sudo apt-get update && sudo apt-get install -y containerd
sudo systemctl enable containerd && sudo systemctl start containerd

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | \
  sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] \
  https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | \
  sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

# --- On CONTROL PLANE node ONLY ---
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl apply -f \
  https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

# --- On WORKER nodes ---
sudo kubeadm join <control-plane-ip>:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash>
```

## Kubernetes Objects: Visual Map

![Complete map of Kubernetes object categories and types](https://media2.oshyn.com/-/media/Oshyn/Insights/Blog/2024-07-18-Automate-Windows-Security-Updates-for-AWS-EC2-Instances-with-AWS-Systems-Manager/approval-rules_automate-windows-security-updates.png?rev=f6828a3889e84820a9eea1c9758ed66c?)

*Complete map of Kubernetes object categories and types*

## Workload Objects

### Pod — The Atomic Unit

A Pod is the smallest deployable unit in Kubernetes. It encapsulates one or more containers that share the same network namespace and storage volumes.

![Pod internal structure: containers share network and volumes](https://media2.oshyn.com/-/media/Oshyn/Insights/Blog/2024-07-18-Automate-Windows-Security-Updates-for-AWS-EC2-Instances-with-AWS-Systems-Manager/approval-rules_automate-windows-security-updates.png?rev=f6828a3889e84820a9eea1c9758ed66c?)

*Pod internal structure: containers share network and volumes*

#### Listing 4: Minimal Pod YAML


```
apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod
  namespace: default
  labels:
    app: my-app
spec:
  containers:
  - name: app
    image: nginx:1.25
    ports:
    - containerPort: 80
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
    readinessProbe:
      httpGet:
        path: /healthz
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 10
```

When to Use Pods Directly. Rarely — Pods are ephemeral. Use them directly only for quick debugging or one-off commands. In production, always use a higher-level controller (Deployment, StatefulSet, etc.) that manages Pods automatically.
