Skip to main content
Version: v4 (current)

Types of Hosts

Bare-Metal

"Bare Metal" means that your host OS is running directly on a piece of hardware without any virtualisation. This reduces the complexity of deployment at the cost of increased time and effort for re-provisioning the host.


Virtual Machines

Virtual Machines are a software-defined layer of abstraction atop a Bare-Metal host which makes deployments more consistent and easier to manage declaratively. This greatly reduces the difficulty of re-deployment and creates the conditions required for securely running multiple guests within the same physical host. Virtual Machines can also be used to create hosts that run different operating systems (Windows, MacOS) or architectures (ARM) than the host machine. This added functionality comes at the cost of added complexity, a slight performance penalty, and you need to already have a Bare-Metal host on which to run the VMs.


Additional Reading:

Containers

Containers are built on 'cgroups' (control groups), which are a feature of the Linux kernel that limits monitors, and isolates the resource usage of a collection of processes. This means that running containers on Linux is very lightweight form of virtualisation. However, on other operating systems which do not use the Linux kernel, a Linux virtual machine or translation-layer must be created to run containers. The manner by which each Operating System resolves this issue varies greatly as shown below. Because of this variance, the self-hosting documentation targets Linux as a means of avoiding excess complexity.


Additional Reading:

Kubernetes (Cloud Runner)

Kubernetes is somewhat of a combination of all other host types. Since it is an API, it must be installed on an existing host (called a "Node") which is usually either a VM or physical device. A Kubernetes "Cluster" is usually made up of 3 or more nodes - though you can have as few as one, or as many 5,000 per cluster.




Once installed, Kubernetes creates standardised interfaces to control the hardware & software components of the underlying nodes (networking, storage, GPUs, CPU cores etc...) as well as a distributed key-value store which facilitates communication between all nodes in the cluster.




With the underlying hardware abstracted into a generic pool of resources, Kubernetes is then able to re-compose those assets into isolated environments called "Namespaces" where it deploys containerised workloads in groups called "Pods". This layer of Kubernetes is very similar to a typical container host but with many more features for multi-tenancy, security, and life-cycle management.



Additional Reading: