Comprehensive Guide to Kubernetes (K8s)

Kanav GatheKanav Gathe
6 min read

1. What is Kubernetes?

Kubernetes, often abbreviated as K8s, is an open-source container orchestration platform that was originally developed by Google and is now maintained by the Cloud Native Computing Foundation (CNCF). The name "Kubernetes" comes from Greek, meaning "helmsman" or "pilot," reflecting its role in steering and managing containerized applications.

The abbreviation "K8s" follows a common numeronym pattern where 8 represents the number of letters between 'K' and 's' in "Kubernetes" (K + ubernete + s = K8s). This shorthand has become the standard way to refer to Kubernetes in technical discussions and documentation.

At its core, Kubernetes serves as an automated system for:

  • Deploying containerized applications

  • Scaling these applications up or down based on demand

  • Managing the entire lifecycle of containerized applications

  • Ensuring high availability and reliability of applications

  • Orchestrating storage systems

  • Handling network traffic

  • Managing security and access control

2. Benefits of Using Kubernetes

2.1 Container Orchestration

  • Automated container placement: Intelligently places containers based on resource requirements and constraints

  • Self-healing capabilities: Automatically replaces and reschedules containers from failed nodes

  • Horizontal scaling: Scales applications up or down with simple commands or automatically based on CPU or custom metrics

2.2 Application Deployment

  • Rolling updates: Performs updates gradually while monitoring health

  • Automated rollbacks: Reverts to previous versions if issues are detected

  • Canary deployments: Tests new versions with limited user exposure

  • Blue-green deployments: Enables zero-downtime updates

2.3 Storage Management

  • Persistent storage: Manages storage volumes that persist beyond container lifecycles

  • Storage orchestration: Automatically mounts storage systems of choice

  • Dynamic volume provisioning: Creates storage volumes on-demand

2.4 Network Management

  • Service discovery: Automatically detects services and manages endpoints

  • Load balancing: Distributes network traffic for optimal performance

  • External access: Manages external access to applications with various strategies

2.5 Configuration Management

  • ConfigMaps: Manages configuration data separately from application code

  • Secrets: Handles sensitive information securely

  • Environment variables: Manages application configuration across environments

3. Kubernetes Architecture

Technical Definition:

Kubernetes architecture follows a master-worker (control plane-node) pattern implementing a distributed system that's highly available and scalable. It utilizes a declarative API system to maintain the desired state of containerized applications across multiple nodes while ensuring optimal resource utilization and high availability.

Simple Explanation:

Think of Kubernetes like a city:

  1. Control Plane (City Hall)

    • Makes all important decisions

    • Keeps track of everything

    • Manages the whole system

  2. Worker Nodes (City Buildings)

    • Where actual work happens

    • Runs your applications

    • Can have many worker nodes

  3. Basic Components:

    • Container Runtime (like Docker)

    • Networking

    • Storage System

4. Control Plane

Technical Definition:

The Control Plane is the orchestration layer of Kubernetes that manages the state of the cluster through various controller processes. It implements the cluster's control loops, responding to changes in the cluster and working to make the actual state match the desired state. The Control Plane consists of distributed components that collectively make decisions about the cluster and detect and respond to cluster events.

Simple Explanation:

The Control Plane is like the brain of Kubernetes. It has four main parts:

  1. API Server: The front desk - handles all communication

  2. Scheduler: The planner - decides where to run things

  3. Controller Manager: The supervisor - makes sure everything runs as planned

  4. etcd: The notebook - stores all important information

5. Kubectl vs Kubelet

Technical Definition:

Kubectl is a command-line interface (CLI) tool that communicates with the Kubernetes API server through RESTful APIs to manage cluster resources. It implements client-side logic for common operations and supports multiple authentication methods.

Kubelet is a node agent that runs on each node in the cluster. It ensures that containers are running in a Pod by taking a set of PodSpecs provided through various mechanisms and ensuring that the containers described in those PodSpecs are running and healthy.

Simple Explanation:

Imagine running a restaurant:

Kubectl is like the ordering system:

  • Used by managers (you) to give commands

  • Runs on your computer

  • Tells the system what to do

Kubelet is like the kitchen staff:

  • Runs on each worker node

  • Actually does the work

  • Makes sure containers are running properly

6. API Server

Technical Definition:

The Kubernetes API server is a component of the Kubernetes control plane that exposes the Kubernetes API. It is the front-end for the Kubernetes control plane, processing RESTful API requests, validating them, and updating the corresponding objects in etcd. It serves as the primary management point for the entire cluster.

Simple Explanation:

Think of the API Server as a receptionist:

  • Takes all requests

  • Makes sure they're valid

  • Passes them to the right component

  • Keeps track of what's happening

Key Functions:

  1. Central communication hub

  2. Authentication and authorization

  3. Resource validation

  4. State maintenance

7. Basic Setup Commands and Docker Differences

7.1 Basic Kubernetes Commands

# Cluster Management
kubectl cluster-info
kubectl get nodes
kubectl get pods --all-namespaces

# Deployment Management
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80
kubectl scale deployment nginx --replicas=3

# Pod Management
kubectl get pods
kubectl describe pod [pod-name]
kubectl logs [pod-name]

7.2 Key Differences from Docker

Orchestration Level:

  • Docker: Single host container management

  • Kubernetes: Multi-host container orchestration

Scaling:

  • Docker: Manual or basic Docker Swarm

  • Kubernetes: Advanced automatic scaling

Networking:

  • Docker: Basic container networking

  • Kubernetes: Advanced overlay networking

Storage:

  • Docker: Basic volume management

  • Kubernetes: Dynamic storage provisioning

8. Minikube Overview

Minikube is a lightweight Kubernetes implementation that creates a VM on your local machine and deploys a simple cluster containing only one node. It's designed for:

  • Local development

  • Testing

  • Learning Kubernetes

  • CI environments

Key Features:

  • Single-node Kubernetes cluster

  • Cross-platform support

  • Multiple container runtimes

  • AddOns support

  • GPU support

  • Multiple Kubernetes versions

9. Installation Guide

9.1 Linux Installation

# Install required packages
sudo apt-get update
sudo apt-get install virtualbox

# Download Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# Install kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install kubectl /usr/local/bin/kubectl

# Start Minikube
minikube start

9.2 Windows Installation

  1. Prerequisites:

    • Install Windows Subsystem for Linux 2 (WSL2)

    • Install Docker Desktop

    • Enable Hyper-V or install VirtualBox

  2. Installation Steps:

# Using Chocolatey
choco install minikube
choco install kubernetes-cli

# Or download installer:
New-Item -Path 'c:\' -Name 'minikube' -ItemType Directory
Invoke-WebRequest -OutFile 'c:\minikube\minikube.exe' -Uri 'https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe'

# Add to PATH
$oldPath = [Environment]::GetEnvironmentVariable('Path', [EnvironmentVariableTarget]::Machine)
$newPath = $oldPath + ';c:\minikube\'
[Environment]::SetEnvironmentVariable('Path', $newPath, [EnvironmentVariableTarget]::Machine)

# Start Minikube
minikube start
  1. Verification:
minikube status
kubectl get nodes
10
Subscribe to my newsletter

Read articles from Kanav Gathe directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Kanav Gathe
Kanav Gathe