Originally owned by Google, Kubernetes was donated to the Cloud Native Computing Foundation (CNCF) in 2014 as a seed technology. The CNCF became a sub-foundation of the Linux Foundation. Initially at 2003 by Google with name Borg. Kubernetes source code is in Go language.
YAGNI - You aren't gonna need it is a principle which arose from extreme programming (XP) that states a programmer should not add functionality until deemed necessary.
Namespaces
In Kubernetes, namespaces provides a mechanism for isolating groups of resources within a single cluster. Names of resources need to be unique within a namespace.
Cluster
Is a set of nodes that run containerized applications.
Context
Is a group of access parameters that define which cluster you're interacting with, which user you're using, and which namespace you're working in.
Pod
Is a collection of one or more Linux containers, and is the smallest unit of a Kubernetes application.
- Cluster has Nodes (Nodes - can be physical machines or virtual machines, and they are responsible for running your containerized applications)
- Node has Pods (Pods - each Pod in a Kubernetes cluster typically has its own IP address. This IP address is used for internal communication within the cluster)
- Pod has Containers
- Node has a single Kubelet process. Kubelet is responsible for managing all the Pods and containers on the node.
- Node has a single kube-proxy process. Kube-proxy is responsible for maintaining network rules and facilitating network communication for the Pods on that node. It helps with tasks like load balancing and service discovery.
In a Kubernetes cluster, there is a master node, also known as the control plane. The master node is responsible for managing the overall state and orchestration of the cluster. It hosts various control plane components such as the API server, etcd (the cluster's distributed key-value store), the scheduler, and the controller manager.
- kube-apiserver (Kubernetes API Server):
- The central component that exposes the Kubernetes API, allowing users, administrators, and other components to interact with the cluster.
- It validates and processes API requests, maintains state information, and serves as the entry point for cluster communication.
- etcd:
- A distributed key-value store that serves as the cluster database and stores all configuration data, cluster state, and metadata.
- Etcd is the source of truth for the cluster, and it ensures data consistency and reliability.
- kube-scheduler:
- Responsible for making decisions about where to run Pods based on resource requirements, policies, and constraints.
- It selects an appropriate node for a newly created Pod and ensures even distribution of workloads across the cluster.
- kube-controller-manager:
- A set of controllers that handle different aspects of the cluster behavior, such as node controller, replication controller, and service controller.
- Each controller ensures that the cluster maintains the desired state and performs actions to correct any discrepancies.
- Cloud-controller-manager:
- Used when Kubernetes hosted over cloud, has the following responsibilities
- Cloud Resource Management: It manages cloud-specific resources, such as load balancers, storage volumes, and virtual machines.
- Node Controller: It monitors and manages nodes in the cluster that are created and managed by the cloud provider. This can include tasks such as node termination and replacement, ensuring that nodes are in the desired state.
- Route Controller: If your cluster uses cloud-specific routing solutions, the Cloud Controller Manager manages and maintains routes and networking configurations specific to the cloud provider.
- Volume Controller: It handles the lifecycle of cloud-based storage volumes, ensuring that persistent volumes and storage classes are provisioned and managed correctly.
- Load Balancer Controller: Manages the creation and configuration of cloud-specific load balancers to distribute traffic to services in the cluster.
- Used when Kubernetes hosted over cloud, has the following responsibilities
- ConfigMaps are configuration data stored to etcd datastore. This information is distributed across the nodes & pods.
- Volumes is a directory that is accessible to containers in a Pod. Volumes are used to store and share data between containers in a Pod or between containers and the underlying node filesystem.
- Deployment is an object that provides declarative updates to applications. Replica Management - Defines number of replicas (Pods) you want to run and the template for creating those Pods. And also Rolling Updates and Rollbacks / Self-Healing / Scaling / Declarative Configuration (using YAML or JSON files)
- StatefulSet is a resource that is used for managing stateful applications, such as databases and other distributed systems.
kubectl - is the command-line tool for interacting with Kubernetes clusters.
kubeadm - is a command-line tool that is part of the Kubernetes project. Used to initialize the control plane of a cluster. It sets up the essential components, like the API server, etcd, and controller manager.
Minikube - is a tool that allows you to run a single-node Kubernetes cluster locally for development purposes.
AWS CLI - Amazon command line interface is a unified tool to manage your AWS services.
Azure CLI - Microsoft command line interface is a unified tool to manage your Azure services.
management
K9s - manage your kubernetes clusters in style!
Kubie - is a command-line utility that simplifies the management of multiple Kubernetes clusters and contexts
Podman / podman desktop [2] [3] - is a container management tool that provides an alternative to Docker for running and managing containers
kOps - create, destroy, upgrade and maintain clusters
deployment
Helm - is a tool that streamlines installing and managing Kubernetes applications
Kubespray - deploy a production ready kubernetes cluster
monitoringKubernetes Dashboard - General-purpose web UI for Kubernetes clusters reference
kube-prometheus - Monitor Kubernetes and applications running on Kubernetes
indiK8or - Kubernetes Visualization Tool
jaeger - a distributed tracing platform
OpenTelemetry - logs for clusters, nodes, pods, and containers, as well as enabling the cluster to support services emitting data
Kubetail - Web-based real-time log viewer for Kubernetes
development
Telepresence - allows developers to work on Kubernetes applications locally, as if they were running in a remote Kubernetes cluster
Tilt - automate common tasks and providing a live feedback loop during development
k8slens - IDE for Kubernetes
Lens Resource Map - IDE extension that displays Kubernetes resources and their relations as a force graph. Will show secrets, configmaps and persistent volume claims, that are defined in pod spec, as connected resources
other
(paid) Veeam - Kasten - secure backup
build yours today at any provider :
- Google Kubernetes Engine (GKE)
- Red Hat OpenShift
- Azure Kubernetes Service (AKS)
- Platform9
- Amazon Elastic Kubernetes Service (Amazon EKS)
- Oracle Container Engine for Kubernetes
- IBM Cloud Kubernetes Service
- Kubermatic Kubernetes Platform
- DigitalOcean Kubernetes
- VMware Tanzu
- K3s - Lightweight Kubernetes distribution for Desktop or Server
- Suse.Rancher
- Rancher Desktop - container management and Kubernetes on the Desktop
- Longhorn - distributed block storage for Kubernetes
https://survey.stackoverflow.co/
latest updates - https://kubernetes.io/blog/
winpty [2]
The hater guide to Kubernetes
K8s Service Meshes - The Bill Comes Due
Container Runtime Interface streaming explained
Semgr8s - Semgrep-Based Policy Controller for Kubernetes
Talos - An Immutable OS for Kubernetes
I Stopped Using Kubernetes, Our DevOps Team Is Happier Than Ever
I Didn't Need Kubernetes, and You Probably Don't Either