====== Platform Technologies ======
===== Table of Contents =====
* [[platform#kubernetes|Kubernetes]]
* [[platform#distributions|Distributions]]
* [[platform#microk8s|Microk8s]]
* [[platform#addons|Addons]]
* [[platform#nfs_storage|NFS Storage]]
* [[platform#nfs_provisioner|NFS Provisioner]]
* [[platform#storage_class|Storage Class]]
===== Kubernetes =====
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.
==== Distributions ====
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.
* Opinionated distributions build the vendor's opinions and best practices related to installation, configuration, and operation into the distribution.
* Upstream and open-source distributions are simpler open-source Kubernetes distributions that make installation easier without add-ons. Some of these distributions use upstream Kubernetes and others do not.
* Cloud-managed distributions are offered by cloud platforms like AWS, GCP, and Azure. With these distributions, the provider manages the control plane and users focus on development and productivity.
* Single-node distributions have control plane and worker nodes on the same server. These Kubernetes distributions are often used as learning environments and can be beneficial for use cases like running an application in Raspberry Pi, edge, and IoT devices.
==== Microk8s ====
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.
=== Addons ===
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]
===== NFS Storage =====
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.
==== NFS Provisioner ====
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 Class ====
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 Chart =====
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 [[eolab:crunchy_cloud:step_by_step:start|here]].