Kubernetes is an open-source container orchestration system designed for automating the deployment, scaling, and management of containerized applications and services. Originally developed by Google, Kubernetes provides a portable, extensible platform that facilitates the efficient orchestration of workloads across clusters of machines. It allows users to abstract the underlying infrastructure, making it easier to deploy and manage applications consistently across diverse environments.
Kubernetes automates tasks such as load balancing, scaling, and rolling updates, enhancing the efficiency and reliability of containerized applications. Its architecture includes key components like Pods, Nodes, and a Master Control Plane, ensuring seamless coordination and communication among containers. Kubernetes plays a crucial role in modern cloud-native application development, offering a standardized approach to container orchestration and resource management.
As Kubernetes gained popularity, many companies started providing add-on services, features, and capabilities to help their customers achieve their business goals more quickly. Each of these offerings is known as a distribution; a modified version of the upstream Kubernetes distribution or bundled with additional tools and features.
MicroK8s is a low-ops, minimal production Kubernetes.
MicroK8s is an open-source system for automating deployment, scaling, and management of containerized applications. It provides the functionality of core Kubernetes components, in a small footprint, scalable from a single node to a high-availability production cluster.
MicroK8s uses the minimum amount of components for a pure, lightweight Kubernetes. However, plenty of extra features are available as add-ons. Add-ons are pre-packaged components that will provide extra capabilities for your Kubernetes.
To see the list of available and installed add-ons at any time run:
microk8s status
The add-ons required for our setup are dns, hostpath-storage, ingress, and metallb. Make sure they are all enabled, if any of the add-ons are not enabled you can enable them by running:
microk8s enable [add-on name]
Network File System (NFS) is a distributed file system protocol that enables a client to access files over a network as if they were locally stored. In Kubernetes, NFS storage can be utilized as a backend for Persistent Volumes (PVs), allowing shared storage across multiple nodes in a cluster.
Before using NFS as storage we need to install the NFS CSI driver on MicroK8s. This assumes that NFS is completely and correctly set up on a separate server.
Storage Classes define the characteristics and properties of applications' underlying storage. They enable users to provision storage resources dynamically based on specific requirements.
In Kubernetes, StorageClass is an API object that allows users to define storage classes and dynamically provision Persistent Volumes (PVs) with specific properties. These properties may include performance levels, redundancy, and other features. This abstraction simplifies the management of storage resources in a Kubernetes cluster, providing flexibility to match application requirements with the appropriate storage backend.
Helm is a tool that automates the creation, packaging, configuration, and deployment of Kubernetes applications by combining your configuration files into a single reusable package. Helm provides one of the most accessible solutions to this problem, making deployments more consistent, repeatable, and reliable. As we are using Microk8s, helm is installed as an add-on so we don't need to separately install helm.
For a step by step guide for installing and running your cluster follow the step by step guide here.