Open main menu

Kubernetes

Revision as of 07:30, 2 August 2024 by Admin (talk | contribs) (→‎Helm)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Kubernetes is an open source system for managing containerized applications across multiple hosts. It provides basic mechanisms for deployment, maintenance, and scaling of applications.

Container evolution

It's important to note right up front, before you dive into Kubernetes, that minikube is the tool for local Kubernetes.


TechWorld with Nana has a great crash course in Kubernetes 72:03.

For hands-on interactive learning, head over to https://Katacoda.com

Reddit community is at https://www.reddit.com/r/kubernetes/

Kubernetes Components

When you deploy Kubernetes, you get a cluster. The cluster is composed of many components. Here are brief details on some of them.

Kubernetes Components


Pod
abstraction of a container
Service
communication between Pods
Ingress
route traffic into cluster
ConfigMap
external configuration
Secret
external configuration
Volume
data persistence
Blueprints
Deployments
for replication of stateless services; a template for creating pods; Declarative so the Controller Manager can check and ensure system is what we want. Each configuration file has 3 parts: metadata, specification, status (automatically generated and added by K8s)
StatefulSet
replication of stateful applications like databases

Current status comes from etcd - the "Cluster Brain".

Kube-apiserver

The API server is the front end for the Kubernetes control plane.

The main implementation of a Kubernetes API server is kube-apiserver. kube-apiserver is designed to scale horizontally—that is, it scales by deploying more instances. You can run several instances of kube-apiserver and balance traffic between those instances.

All communication; whether from a UI, API or CLI, goes through the API Server, and must be in the form of JSON or Yaml.

etcd

Consistent and highly-available key value store. Used for backing store for all cluster data. https://etcd.io/docs/ Play with etcd. github: https://github.com/etcd-io/etcdlabs Sizing etcdctl (command line client)

Kube-scheduler

Control plane component that watches for newly created Pods with no assigned node , and selects a node for them to run on.

Factors taken into account for scheduling decisions include: individual and collective resource requirements, hardware/software/policy constraints, affinity and anti-affinity specifications, data locality, inter-workload interference, and deadlines.

Kube-controller-manager

Control Plane component that runs controller processes; including Node controller, Replication controller, Endpoints controller, Service Account and Token controllers.

Cloud-controller-manager

A Kubernetes control plane component that embeds cloud-specific control logic. The cloud controller manager lets you link your cluster into your cloud provider's API, and separates out the components that interact with that cloud platform from components that just interact with your cluster.

Node Components

Node components run on every node, maintaining running pods and providing the Kubernetes runtime environment.

Kubelet

An agent that runs on each node in the cluster. It makes sure that containers are running in a Pod .

Kube-proxy

kube-proxy is a network proxy that runs on each node in your cluster, implementing part of the Kubernetes Service concept.

Container runtime

The container runtime is the software that is responsible for running containers. Docker by default, it can also be CRI-O or possibly other implementations of the Container Runtime Interface.

Addons

You probably need at least the DNS and Web UI addons.

Tools

Kubectl

Kubeadm

Kubeadm is a component of Kubernetes.

Kubeadm is a tool built to provide best-practice "fast paths" for creating Kubernetes clusters. It performs the actions necessary to get a minimum viable, secure cluster up and running in a user friendly way. Kubeadm's scope is limited to the local node filesystem and the Kubernetes API, and it is intended to be a composable building block of higher level tools.

Helm

The package manager for Kubernetes

Helm is a tool for managing Charts, self-styled as "the package manager for Kubernetes".

Container Registries

RedHat has a registry at quay.io. Quay builds, analyzes, distributes your container images.

For example, see the bitnami manifest for MediaWiki. What's really interesting is that not only can you quickly look at the manifest, they also show you a list of all the packages built into the image. Most importantly, they do a security scan for vulnerabilities and even show which layer the (vulnerable) package is introduced in.

LXD public image server

Official Ubuntu Cloud Images

Chart Repositories

There is a Helm chart repository at https://hub.helm.sh/ There you can find the chart for Bitnami MediaWiki

Bitnami has it's own chart repository at https://charts.bitnami.com/ (nothing to see there). The GitHub repo is https://github.com/bitnami/charts

Cloud Providers

Each cloud provider has customized their offerings for Kubernetes to integrate with their platforms. So we have:

Canonical doesn't offer cloud products per-se, but Ubuntu is the reference platform for Kubernetes on all major public clouds, including official support in Google's GKE, Microsoft's AKS, and Amazon's EKS offerings. Canonical supports these upstreams: MicroK8s, Charmed Kubernetes, kubeadm