Kubernetes is an open-source container orchestration platform that enables the operation of an elastic web server framework for cloud applications. Kubernetes can support data center outsourcing to public cloud service providers or can be used for web hosting at scale. Website and mobile applications with complex custom code can deploy using Kubernetes on commodity hardware to lower the costs on web server provisioning with public cloud hosts and to optimize software development processes.
Kubernetes features the ability to automate web server provisioning according to the level of web traffic in production. Web server hardware can be located in different data centers, on different hardware, or through different hosting providers. Kubernetes scales up web servers according to the demand for the software applications, then degrades web server instances during downtime. Kubernetes also has advanced load balancing capabilities for web traffic routing to web servers in operations.
Here’s the diagram of a Kubernetes cluster with all the components tied together.
Kubernetes (often abbreviated to “K8s”) is part of the Cloud Native Computing Foundation, which supports the development of shared networking standards in cloud data center management software. Docker is the most popular container virtualization standard used by Kubernetes. Docker offers integrated software lifecycle development tools for programming teams. RancherOS, CoreOS, and Alpine Linux are popular operating systems specifically designed for container usage. Container virtualization is different than VM or VPS tools using hypervisors and generally requires a smaller operating system footprint in production.
- Legacy term, used as synonym for nodes hosting the control plane.
- The term is still being used by some provisioning tools, such as kubeadm, and managed services, to label nodes with kubernetes.io/role and control placement of control plane pods.
- A node is a worker machine in Kubernetes.
- A worker node may be a VM or physical machine, depending on the cluster. It has local daemons or services necessary to run Pods and is managed by the control plane. The daemons on a node include kubelet, kube-proxy and a container runtime implementing the CRI such as Docker.
- The smallest and simplest Kubernetes object. A Pod represents a set of running containers on your cluster.
- A Pod is typically set up to run a single primary container. It can also run optional sidecar containers that add supplementary features like logging. Pods are commonly managed by a Deployment.
- A ReplicaSet (aims to) maintain a set of replica Pods running at any given time.
- Workload objects such as Deployment make use of ReplicaSets to ensure that the configured number of Pods are running in your cluster, based on the spec of that ReplicaSet.
Kubernetes Container Storage Interface (CSI)
- The Container Storage Interface (CSI) defines a standard interface to expose storage systems to containers.
- CSI allows vendors to create custom storage plugins for Kubernetes without adding them to the Kubernetes repository (out-of-tree plugins). To use a CSI driver from a storage provider, you must first deploy it to your cluster. You will then be able to create a Storage Class that uses that CSI driver.
Kubernetes Persistent Volumes
- An API object that represents a piece of storage in the cluster. Available as a general, pluggable resource that persists beyond the lifecycle of any individual Pod.
- PersistentVolumes (PVs) provide an API that abstracts details of how storage is provided from how it is consumed. PVs are used directly in scenarios where storage can be created ahead of time (static provisioning). For scenarios that require on-demand storage (dynamic provisioning), PersistentVolumeClaims (PVCs) are used instead.
Persistent Volume Claims
- Claims storage resources defined in a PersistentVolume so that it can be mounted as a volume in a container.
- Specifies the amount of storage, how the storage will be accessed (read-only, read-write and/or exclusive) and how it is reclaimed (retained, recycled or deleted). Details of the storage itself are described in the PersistentVolume object.