|
| 1 | +import Virtualisation from '/assets/images/Virtualization.drawio.png'; |
| 2 | +import Metal from '/assets/images/Metal.drawio.png'; |
| 3 | +import Docker from '/assets/images/DockerHost.drawio.png'; |
| 4 | +import Kubernetes from '/assets/images/kubernetes.drawio.png'; |
| 5 | +import Layers from '/assets/images/k8s-layers.drawio.png'; |
| 6 | +import Layer0 from '/assets/images/k8s-layer0.drawio.png'; |
| 7 | +import Layer1 from '/assets/images/k8s-layer1.drawio.png'; |
| 8 | +import Layer2 from '/assets/images/k8s-layer2.drawio.png'; |
| 9 | +import Layers01 from '/assets/images/k8s-layers01.drawio.png'; |
| 10 | +import Layers012 from '/assets/images/k8s-layers012.drawio.png'; |
| 11 | + |
| 12 | +# Types of Hosts |
| 13 | + |
| 14 | +## Bare-Metal |
| 15 | + |
| 16 | +"Bare Metal" means that your host OS is running directly on a piece of hardware without any |
| 17 | +virtualisation. This reduces the complexity of deployment at the cost of increased time and effort |
| 18 | +for re-provisioning the host. |
| 19 | + |
| 20 | +<div style={{ textAlign: 'center' }}> |
| 21 | + <a target="\_blank" href={require('/assets/images/Metal.drawio.png').default}> |
| 22 | + <img src={Metal} width="500" /> |
| 23 | + </a> |
| 24 | +</div> |
| 25 | +<br /> |
| 26 | + |
| 27 | +## Virtual Machines |
| 28 | + |
| 29 | +Virtual Machines are a software-defined layer of abstraction atop a Bare-Metal host which makes |
| 30 | +deployments more consistent and easier to manage declaratively. This greatly reduces the difficulty |
| 31 | +of re-deployment and creates the conditions required for securely running multiple guests within the |
| 32 | +same physical host. Virtual Machines can also be used to create hosts that run different operating |
| 33 | +systems (Windows, MacOS) or architectures (ARM) than the host machine. This added functionality |
| 34 | +comes at the cost of added complexity, a slight performance penalty, and you need to already have a |
| 35 | +Bare-Metal host on which to run the VMs. |
| 36 | + |
| 37 | +<div style={{ textAlign: 'center' }}> |
| 38 | + <a target="\_blank" href={require('/assets/images/Virtualization.drawio.png').default}> |
| 39 | + <img src={Virtualisation} width="500" /> |
| 40 | + </a> |
| 41 | +</div> |
| 42 | +<br /> |
| 43 | + |
| 44 | +Additional Reading: |
| 45 | + |
| 46 | +- [A Study of Performance and Security Across the Virtualization Spectrum](https://repository.tudelft.nl/islandora/object/uuid:34b3732e-2960-4374-94a2-1c1b3f3c4bd5/datastream/OBJ/download) - |
| 47 | + Vincent van Rijn |
| 48 | +- [Hyper-converged infrastructure](https://en.wikipedia.org/wiki/Hyper-converged_infrastructure) - |
| 49 | + Wikipedia |
| 50 | +- [Rethinking the PC](https://www.computerworld.com/article/3518849/rethinking-the-pc-why-virtual-machines-should-replace-operating-systems.html) - |
| 51 | + Rob Enderle |
| 52 | + |
| 53 | +## Containers |
| 54 | + |
| 55 | +Containers are built on 'cgroups' (control groups), which are a feature of the Linux kernel that |
| 56 | +limits monitors, and isolates the resource usage of a collection of processes. This means that |
| 57 | +running containers on Linux is very lightweight form of virtualisation. However, on other operating |
| 58 | +systems which do not use the Linux kernel, a Linux virtual machine or translation-layer must be |
| 59 | +created to run containers. The manner by which each Operating System resolves this issue varies |
| 60 | +greatly as shown below. Because of this variance, the self-hosting documentation targets Linux as a |
| 61 | +means of avoiding excess complexity. |
| 62 | + |
| 63 | +<div style={{ textAlign: 'center' }}> |
| 64 | + <a target="\_blank" href={require('/assets/images/DockerHost.drawio.png').default}> |
| 65 | + <img src={Docker} width="500" /> |
| 66 | + </a> |
| 67 | +</div> |
| 68 | +<br /> |
| 69 | + |
| 70 | +Additional Reading: |
| 71 | + |
| 72 | +- [The Mental Model Of Docker Container Shipping](https://bernhardwenzel.com/2022/the-mental-model-of-docker-container-shipping/) - |
| 73 | + Bernhard Wenzel |
| 74 | +- [Why is Docker-in-Docker considered bad?](https://devops.stackexchange.com/questions/676/why-is-docker-in-docker-considered-bad) |
| 75 | +- [Why it is recommended to run only one process in a container?](https://devops.stackexchange.com/questions/447/why-it-is-recommended-to-run-only-one-process-in-a-container) |
| 76 | + |
| 77 | +## Kubernetes (Cloud Runner) |
| 78 | + |
| 79 | +Kubernetes is somewhat of a combination of all other host types. Since it is an API, it must be |
| 80 | +installed on an existing host (called a "Node") which is usually either a VM or physical device. A |
| 81 | +Kubernetes "Cluster" is usually made up of 3 or more nodes - though you can have as few as one, or |
| 82 | +as many 5,000 per cluster. |
| 83 | + |
| 84 | +<br /> |
| 85 | +<div style={{ textAlign: 'center' }}> |
| 86 | + <a target="\_blank" href={require('/assets/images/k8s-layer0.drawio.png').default}> |
| 87 | + <img src={Layer0} width="700" /> |
| 88 | + </a> |
| 89 | + <br /> |
| 90 | +</div> |
| 91 | +<br /> |
| 92 | + |
| 93 | +Once installed, Kubernetes creates |
| 94 | +[standardised interfaces](https://matt-rickard.com/kubernetes-interfaces) to control the hardware & |
| 95 | +software components of the underlying nodes (networking, storage, GPUs, CPU cores etc...) as well as |
| 96 | +a distributed key-value store which facilitates communication between all nodes in the cluster. |
| 97 | + |
| 98 | +<br /> |
| 99 | +<div style={{ textAlign: 'center' }}> |
| 100 | + <a target="\_blank" href={require('/assets/images/k8s-layers01.drawio.png').default}> |
| 101 | + <img src={Layers01} width="750" /> |
| 102 | + </a> |
| 103 | + <br /> |
| 104 | +</div> |
| 105 | +<br /> |
| 106 | + |
| 107 | +With the underlying hardware abstracted into a generic pool of resources, Kubernetes is then able to |
| 108 | +re-compose those assets into isolated environments called "Namespaces" where it deploys |
| 109 | +containerised workloads in groups called "Pods". This layer of Kubernetes is very similar to a |
| 110 | +typical container host but with many more features for multi-tenancy, security, and life-cycle |
| 111 | +management. |
| 112 | + |
| 113 | +<br /> |
| 114 | +<div style={{ textAlign: 'center' }}> |
| 115 | + <a target="\_blank" href={require('/assets/images/k8s-layers012.drawio.png').default}> |
| 116 | + <img src={Layers012} width="800" /> |
| 117 | + </a> |
| 118 | +</div> |
| 119 | +<br /> |
| 120 | + |
| 121 | +Additional Reading: |
| 122 | + |
| 123 | +- [Kubernetes Components](https://kubernetes.io/docs/concepts/overview/components/) - kubernetes.io |
| 124 | +- [A visual guide to Kubernetes networking fundamentals](https://opensource.com/article/22/6/kubernetes-networking-fundamentals) - |
| 125 | + Nived Velayudhan |
| 126 | +- [Thinking about the complexity of the Kubernetes ecosystem](https://erkanerol.github.io/post/complexity-of-kubernetes/) - |
| 127 | + Erkan Erol |
| 128 | +- [Ephemeral, Idempotent and Immutable Infrastructure ](https://cloudnativenow.com/topics/ephemeral-idempotent-and-immutable-infrastructure/) - |
| 129 | + Marc Hornbeek |
0 commit comments