Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit b5cebeb

Browse files
authoredMar 28, 2025··
Merge branch 'main' into markdownlint
2 parents d8304f6 + 05d450f commit b5cebeb

File tree

8 files changed

+172
-6
lines changed

8 files changed

+172
-6
lines changed
 

‎.devcontainer/Dockerfile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
FROM jetpackio/devbox:latest
2+
3+
# Installing your devbox project
4+
WORKDIR /code
5+
USER root:root
6+
RUN mkdir -p /code && chown ${DEVBOX_USER}:${DEVBOX_USER} /code
7+
USER ${DEVBOX_USER}:${DEVBOX_USER}
8+
COPY --chown=${DEVBOX_USER}:${DEVBOX_USER} devbox.json devbox.json
9+
COPY --chown=${DEVBOX_USER}:${DEVBOX_USER} devbox.lock devbox.lock
10+
11+
12+
13+
RUN devbox run -- echo "Installed Packages."
14+
15+
RUN devbox shellenv --init-hook >> ~/.profile

‎.devcontainer/devcontainer.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"name": "Devbox Remote Container",
3+
"build": {
4+
"dockerfile": "./Dockerfile",
5+
"context": ".."
6+
},
7+
"customizations": {
8+
"vscode": {
9+
"settings": {},
10+
"extensions": [
11+
"jetpack-io.devbox"
12+
]
13+
}
14+
},
15+
"remoteUser": "devbox"
16+
}

‎README.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,4 @@ An opinionated guide to on-prem Kubernetes
44

55
## How to run local
66

7-
- run `brew install hugo`
8-
- run `brew install go`
9-
- run `hugo serve --source .pages`
10-
11-
When running the page is available at `http://localhost:1313/On-prem_Kubernetes_Guide/`
7+
For instructions on how to run this project, please refer to the [contributing.md](./contributing.md) file under `## Setting Up Your Development Environment` section.

‎contributing.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,35 @@ Create a PR with your suggestions, it will automatically be assigned to the main
2727
## Questions
2828

2929
If in doubt you can always reach out to the maintainers of this guide, maintainers can be found in the codeowners file in the .github folder.
30+
31+
## Setting Up Your Development Environment
32+
33+
You can use either Devbox or Dev Containers to set up a consistent development environment for working on this guide.
34+
35+
### Using Devbox
36+
37+
1. Install [Devbox](https://www.jetpack.io/devbox/docs/installing_devbox/)
38+
2. Clone this repository
39+
3. Navigate to the repository root directory
40+
4. Run `devbox shell` to enter a shell with all the required dependencies
41+
5. You're now ready to make your changes!
42+
43+
### Using Dev Containers
44+
45+
1. Install [Visual Studio Code](https://code.visualstudio.com/) and the [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension
46+
2. Clone this repository
47+
3. Open the repository in VS Code
48+
4. When prompted to "Reopen in Container", click "Yes". Alternatively, press F1 and select "Remote-Containers: Reopen in Container"
49+
5. Wait for the container to build and start
50+
6. You now have a fully configured development environment!
51+
52+
## Local Website Preview
53+
54+
To preview the website locally while making changes:
55+
56+
1. Run the Hugo development server:
57+
```
58+
hugo server --source .pages
59+
```
60+
2. Open your browser and navigate to `http://localhost:1313/On-prem_Kubernetes_Guide/ `
61+
3. The website will automatically refresh when you make changes to the source files

‎devbox.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.13.4/.schema/devbox.schema.json",
3+
"packages": ["hugo@latest"],
4+
"shell": {
5+
"init_hook": [
6+
"echo 'Welcome to devbox!' > /dev/null"
7+
],
8+
"scripts": {
9+
"test": [
10+
"echo \"Error: no test specified\" && exit 1"
11+
]
12+
}
13+
}
14+
}

‎devbox.lock

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
{
2+
"lockfile_version": "1",
3+
"packages": {
4+
"hugo@latest": {
5+
"last_modified": "2025-02-07T11:26:36Z",
6+
"resolved": "github:NixOS/nixpkgs/d98abf5cf5914e5e4e9d57205e3af55ca90ffc1d#hugo",
7+
"source": "devbox-search",
8+
"version": "0.143.0",
9+
"systems": {
10+
"aarch64-darwin": {
11+
"outputs": [
12+
{
13+
"name": "out",
14+
"path": "/nix/store/6j6py1jcp5n2sh1p3ksskhjc33vjyga9-hugo-0.143.0",
15+
"default": true
16+
}
17+
],
18+
"store_path": "/nix/store/6j6py1jcp5n2sh1p3ksskhjc33vjyga9-hugo-0.143.0"
19+
},
20+
"aarch64-linux": {
21+
"outputs": [
22+
{
23+
"name": "out",
24+
"path": "/nix/store/h22mcig2r7y1az488nncnpskal07csl9-hugo-0.143.0",
25+
"default": true
26+
}
27+
],
28+
"store_path": "/nix/store/h22mcig2r7y1az488nncnpskal07csl9-hugo-0.143.0"
29+
},
30+
"x86_64-darwin": {
31+
"outputs": [
32+
{
33+
"name": "out",
34+
"path": "/nix/store/kly0866bbxhd16k6acjkqxw5ngh6i0ws-hugo-0.143.0",
35+
"default": true
36+
}
37+
],
38+
"store_path": "/nix/store/kly0866bbxhd16k6acjkqxw5ngh6i0ws-hugo-0.143.0"
39+
},
40+
"x86_64-linux": {
41+
"outputs": [
42+
{
43+
"name": "out",
44+
"path": "/nix/store/vn0sn422kq2d87g06x20dg4y6fm76r9l-hugo-0.143.0",
45+
"default": true
46+
}
47+
],
48+
"store_path": "/nix/store/vn0sn422kq2d87g06x20dg4y6fm76r9l-hugo-0.143.0"
49+
}
50+
}
51+
}
52+
}
53+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
title: "Use Talos OS as the Preferred Operating System for Kubernetes Operations"
3+
date: "2025-02-25"
4+
---
5+
6+
7+
| status: | date: | decision-makers: |
8+
| --- | --- | --- |
9+
| proposed | 2025-02-25 | Sofus Albertsen |
10+
11+
12+
## Context and Problem Statement
13+
14+
Choosing the right operating system for your Kubernetes cluster is crucial for stability, security, and operational efficiency. The OS should be optimized for container workloads, minimize overhead, and integrate well with Infrastructure as Code (IaC) practices.
15+
## Considered Options
16+
17+
* Talos OS
18+
* Red Hat OpenShift
19+
* SUSE Rancher (RancherOS/RKE)
20+
21+
## Decision Outcome
22+
23+
Chosen option: **Talos OS**, because its minimal footprint, API-driven configuration, and singular focus on Kubernetes make it ideal for automated infrastructure management and reduce operational overhead.
24+
25+
Talos OS's immutable architecture and security-focused design further enhance its suitability for Kubernetes deployments, giving you a minimal attack surface from the OS point of view. As an example, the OS does not have any shell, so no bash scripts can be executed.
26+
27+
OpenShift and Rancher were considered, but their comprehensive feature sets, while beneficial in some scenarios, introduce increased complexity and overhead.
28+
29+
While their dashboards can simplify initial setup, they can also encourage "click-ops" and deviate from IaC best practices. These platforms might be suitable if existing Red Hat or SUSE expertise is a primary driver, but becuase they are fully fledged OS's underneath, they introduce more operational overhead than Talos.
30+
31+
### Consequences
32+
33+
* **Good:** Talos OS's minimal package selection makes it a smaller attack surface.
34+
* **Good:** The API-driven configuration of Talos OS allows for seamless integration with IaC tools like Terraform, enabling fully automated cluster provisioning and management.
35+
* **Good:** The immutable infrastructure of Talos OS simplifies updates and adds recilliency because of it's dual boot bank setup.
36+
* **Good:** The "two package" approach simplifies maintenance (day 2 operations) and reduces the likelihood of OS-related issues, as all known package combinations can be tested from the vendor.
37+
38+
* **Bad:** The learning curve for Talos OS might be steeper initially for teams unfamiliar with its API-driven approach.
39+
* **Bad:** The lack of a graphical user interface might be a drawback for some users accustomed to traditional OS management.
40+
* **Bad:** Talos is a relatively newer project compared to OpenShift or Rancher, therefore community support and available resources might be smaller.

‎docs/hardware_ready/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ In case virtualisation is chosen, the below recommendations are what you would r
1515

1616
| Problem domain | Description | Reason for importance | Tool recommendation |
1717
|:---:|:---:|:---:|:---:|
18-
| Kubernetes Node Operating System | The Operating System running on each of the hosts that will be part of your Kubernetes cluster | Choosing the right OS will be the foundation for building a production-grade Kubernetes cluster | |
18+
| Kubernetes Node Operating System | The Operating System running on each of the hosts that will be part of your Kubernetes cluster | Choosing the right OS will be the foundation for building a production-grade Kubernetes cluster | [Talos OS](hardware_ready/ADRs/talos_as_os.md) |
1919
| Storage solution | The underlying storage capabilities which Kubernetes will leverage to provide persistence for stateful workloads | Choosing the right storage solution for your clusters needs is important as there is a lot of balance tradeoffs associated with it, e.g redundancy vs. complexity | |
2020
| Container Runtime (CRI) | The software that is responsible for running containers | You need a working container runtime on each node in your cluster, so that the kubelet can launch pods and their containers | |
2121
| Network plugin (CNI) | Plugin used for cluster networking | A CNI plugin is required to implement the Kubernetes network model | [Cilium](Cilium_as_network_plugin.md) |

0 commit comments

Comments
 (0)
Please sign in to comment.