added gcloud intro

- Created a new script `instalL_asciinema.sh` to automate the installation of asciinema.
- The script detects the operating system and architecture to download the appropriate binary.
- Supports Linux (both musl and GNU) and macOS (Darwin).
- Sets executable permissions for the downloaded binary and verifies the installation by displaying the version.
This commit is contained in:
jon brookes 2025-10-16 10:05:51 +01:00
parent f3d077e3c4
commit 09f36dff16
26 changed files with 493 additions and 33 deletions

View file

@ -2,9 +2,9 @@
level: 2 level: 2
--- ---
# Configuration # `infctl`
Configuration is based on a simple list of JSON objects. Keep it simple, list of JSON objects.
````md magic-move {lines: true} ````md magic-move {lines: true}

View file

@ -2,26 +2,27 @@
level: 2 level: 2
--- ---
# MVK # MVK for pre-production
The **V** in MVK is for *viable*, so why is MVK viable ? The **V** in MVK is for *viable*, so why is MVK viable for 3 or more nodes ?
<div class="grid grid-cols-1"> <div class="grid grid-cols-1">
```mermaid ```mermaid
%%{init: {'theme': 'dark', 'themeVariables': { 'darkMode': true }}}%% %%{init: {'theme': 'dark', 'themeVariables': { 'darkMode': true }}}%%
flowchart LR flowchart LR
root((MVK)) root((3-node))
PS[Persistent Storage] PS[Persistent Storage]
LH[Longhorn] LH[Longhorn]
ING[Ingress] ING[Ingress]
TRA[Traefik] TRA[Traefik]
MET[Metallb] MET[cert-manager]
ETCD[etcd] ETCD[etcd]
KA[keepalived] KA[keepalived]
root --> PS --> LH root --> PS --> LH
root --> ING --> TRA --> MET root --> ING --> TRA
ING --> MET
root --> ETCD --> KA root --> ETCD --> KA
classDef default fill:transparent,color:#fff,stroke:#888 classDef default fill:transparent,color:#fff,stroke:#888
@ -31,9 +32,7 @@ flowchart LR
<div v-click> <div v-click>
We have in the build so far etcd and keepalived close to production - storage and multi node
there is still no persistent volume management or ingress
</div> </div>

View file

@ -0,0 +1,58 @@
---
level: 2
---
# MVK for development
The **V** in MVK is for *viable*, so why is MVK viable for single 'dev' nodes ?
<div class="grid grid-cols-1">
```mermaid
%%{init: {'theme': 'dark', 'themeVariables': { 'darkMode': true }}}%%
flowchart LR
root((1-node))
PS[Persistent Storage]
LH[Local attached]
ING[Ingress]
TRA[Traefik]
MET[cert-manager]
ETCD[etcd]
root --> PS --> LH
root --> ING --> TRA
ING --> MET
root --> ETCD
classDef default fill:transparent,color:#fff,stroke:#888
```
</div>
<div v-click>
Locally attached storage - single node implementation
Ingress can represent that of prodution environmetns that use cert-manager
</div>
<!--
why is MVK 'viable' ?
Out of the box K8s examples and some deployments are not useable without other externalities
* Persistent storage - often built in to managed kubernetes cloud platforms
* Ingress - is also provided by cloud providers, K8s does not natively have this
* ETCD is often offered as the 'management plane', again as part of managed kubernetes by cloud providers
K3s does not use k8s traditional 3 node ETCD unless you configure it to do so
MKK's infctl pipelines configure 3 node k3s on all 3 nodes
it also adds Longhorn for persistent storage
ingress is impossible without metallb and some kind of load balancer - traefik being my preference but others could be used, of course
-->

85
pages/gcloud-single.md Normal file
View file

@ -0,0 +1,85 @@
---
level: 2
---
# GCE
Google Compute Engine
````md magic-move {lines: true}
```bash
# 1. PREREQS
# 2. CONFIGURE
# 3. RUN
```
```bash
# PREREQS
# run pre flight checks ...
#
# we need to run this at least once to ensure we have tooling available ...
```
```bash
# PREREQS
# run pre flight checks ...
cd /home/user/projects/infctl-cli # where we checked out infct-cli to
./gcloud/tf/scripts/pre-flight-checks.sh
```
```bash
# PREREQS
# running pre flight checks ...
./gcloud/tf/scripts/pre-flight-checks.sh
# .....
✅ tofu is installed,...
✅ gcloud is installed,...
✅ kubectl is installed,...
✅ envsubst is installed,...
# .....
✅ Pre-flight checks passed. You are ready to proceed 🙂
```
```bash
# CONFIGURE
[ -f .env ] || cp -v .env.gcloud-example .env
# edit to include
export PROJECT_NAME="the name of your gcp project, often referred to as the project"
export EMAIL="your email address to identify yourself with letsencrypt"
export APP_DOMAIN_NAME="your domain name for the app, e.g., frgdr.some-domain.com"
export INSTALL_FORGEJO="true"
```
```bash
# RUN
LOG_FORMAT=none infctl -f ./gcloud/tf/scripts/build-gcloud-k3s-pipeline-wait-dns.json
```
````
<div v-click>
Lets see a Google Compute Engine install [Demo](https://ascii.headshed.dev/a/qslfF9KTMj69zcSwzD6xm1uZ7)
</div>
<!--
TBC
....
-->

View file

@ -1,18 +1,13 @@
# Minimal Viable Kubernetes? # Minimal Viable Kubernetes
What is MVK ? What is MVK ?
**CLI first** uses [`infctl`](https://mvk.headshed.dev/infctl/quick-start/) ### ≥ CLI friendly, CLI first
🧑‍💻 **Startup Ready** functional simply
🤹 **Automated** infrastructure as code
🎥 **Repeatable** re-useable and predictable.
📤 **Portable** kubernetes that can run anywhere
🛠 **Hackable** simple to modify & extend
<!-- <!--

26
pages/intro02.md Normal file
View file

@ -0,0 +1,26 @@
# Minimal Viable Kubernetes
What is MVK ?
### ≥ CLI friendly, CLI first
### 🤹 Promotes Infrastructure as code
<!--
We live in the command line, so MVK is CLI centric. It uses a very simple command line tool, `infctl` to marshal scripts and commands in a stop by step manner, similar to the way we right pipelines in the cloud.
It is simple to get started, so that startups and the impatient can become productive with Kubernetes quickly, without having to rely on managed offerings and in order to self host easily.
Each pipeline use steps of code that are repeatable, idempotent and using infrastructure as code.
Kubernetes *can run anywhere* so MVK takes that principle and applies this to the self hosted approach making it possible to have the same setup on-prem and in the cloud
It is important to keep things simple so as to be understandable, maintainable and easy to change and extend to our own use cases
-->

26
pages/intro03.md Normal file
View file

@ -0,0 +1,26 @@
# Minimal Viable Kubernetes
What is MVK ?
### ≥ CLI friendly, CLI first
### 🤹 Promotes Infrastructure as code
### 📤 **Portable** on-prem, cloud
<!--
We live in the command line, so MVK is CLI centric. It uses a very simple command line tool, `infctl` to marshal scripts and commands in a stop by step manner, similar to the way we right pipelines in the cloud.
It is simple to get started, so that startups and the impatient can become productive with Kubernetes quickly, without having to rely on managed offerings and in order to self host easily.
Each pipeline use steps of code that are repeatable, idempotent and using infrastructure as code.
Kubernetes *can run anywhere* so MVK takes that principle and applies this to the self hosted approach making it possible to have the same setup on-prem and in the cloud
It is important to keep things simple so as to be understandable, maintainable and easy to change and extend to our own use cases
-->

27
pages/intro04.md Normal file
View file

@ -0,0 +1,27 @@
# Minimal Viable Kubernetes
What is MVK ?
### ≥ CLI friendly, CLI first
### 🤹 Promotes Infrastructure as code
### 📤 **Portable** on-prem, cloud
### 🧐 Fosters inquisitiveness
<!--
We live in the command line, so MVK is CLI centric. It uses a very simple command line tool, `infctl` to marshal scripts and commands in a stop by step manner, similar to the way we right pipelines in the cloud.
It is simple to get started, so that startups and the impatient can become productive with Kubernetes quickly, without having to rely on managed offerings and in order to self host easily.
Each pipeline use steps of code that are repeatable, idempotent and using infrastructure as code.
Kubernetes *can run anywhere* so MVK takes that principle and applies this to the self hosted approach making it possible to have the same setup on-prem and in the cloud
It is important to keep things simple so as to be understandable, maintainable and easy to change and extend to our own use cases
-->

29
pages/intro05.md Normal file
View file

@ -0,0 +1,29 @@
# Minimal Viable Kubernetes
What is MVK ?
### ≥ CLI friendly, CLI first
### 🤹 Promotes Infrastructure as code
### 📤 **Portable** on-prem, cloud
### 🧐 Fosters inquisitiveness
### 🔒 Favours independence over lock-in
<!--
We live in the command line, so MVK is CLI centric. It uses a very simple command line tool, `infctl` to marshal scripts and commands in a stop by step manner, similar to the way we right pipelines in the cloud.
It is simple to get started, so that startups and the impatient can become productive with Kubernetes quickly, without having to rely on managed offerings and in order to self host easily.
Each pipeline use steps of code that are repeatable, idempotent and using infrastructure as code.
Kubernetes *can run anywhere* so MVK takes that principle and applies this to the self hosted approach making it possible to have the same setup on-prem and in the cloud
It is important to keep things simple so as to be understandable, maintainable and easy to change and extend to our own use cases
-->

28
pages/uses01.md Normal file
View file

@ -0,0 +1,28 @@
# Minimal Viable Kubernetes
Use Cases ?
### 🏠 Local development
<!--
We live in the command line, so MVK is CLI centric. It uses a very simple command line tool, `infctl` to marshal scripts and commands in a stop by step manner, similar to the way we right pipelines in the cloud.
It is simple to get started, so that startups and the impatient can become productive with Kubernetes quickly, without having to rely on managed offerings and in order to self host easily.
Each pipeline use steps of code that are repeatable, idempotent and using infrastructure as code.
Kubernetes *can run anywhere* so MVK takes that principle and applies this to the self hosted approach making it possible to have the same setup on-prem and in the cloud
It is important to keep things simple so as to be understandable, maintainable and easy to change and extend to our own use cases
-->

29
pages/uses02.md Normal file
View file

@ -0,0 +1,29 @@
# Minimal Viable Kubernetes
Use Cases ?
### 🏠 Local development
### 🛠️ Integration and smoke testing
<!--
We live in the command line, so MVK is CLI centric. It uses a very simple command line tool, `infctl` to marshal scripts and commands in a stop by step manner, similar to the way we right pipelines in the cloud.
It is simple to get started, so that startups and the impatient can become productive with Kubernetes quickly, without having to rely on managed offerings and in order to self host easily.
Each pipeline use steps of code that are repeatable, idempotent and using infrastructure as code.
Kubernetes *can run anywhere* so MVK takes that principle and applies this to the self hosted approach making it possible to have the same setup on-prem and in the cloud
It is important to keep things simple so as to be understandable, maintainable and easy to change and extend to our own use cases
-->

28
pages/uses03.md Normal file
View file

@ -0,0 +1,28 @@
# Minimal Viable Kubernetes
Use Cases ?
### 🏠 Local development
### 🛠️ Integration and smoke testing
### 🎬 Pre-prod & production
<!--
We live in the command line, so MVK is CLI centric. It uses a very simple command line tool, `infctl` to marshal scripts and commands in a stop by step manner, similar to the way we right pipelines in the cloud.
It is simple to get started, so that startups and the impatient can become productive with Kubernetes quickly, without having to rely on managed offerings and in order to self host easily.
Each pipeline use steps of code that are repeatable, idempotent and using infrastructure as code.
Kubernetes *can run anywhere* so MVK takes that principle and applies this to the self hosted approach making it possible to have the same setup on-prem and in the cloud
It is important to keep things simple so as to be understandable, maintainable and easy to change and extend to our own use cases
-->

28
pages/uses04.md Normal file
View file

@ -0,0 +1,28 @@
# Minimal Viable Kubernetes
Use Cases ?
### 🏠 Local development
### 🛠️ Integration and smoke testing
### 🎬 Pre-prod & production
### 💣 Disaster recovery rehearsal
<!--
We live in the command line, so MVK is CLI centric. It uses a very simple command line tool, `infctl` to marshal scripts and commands in a stop by step manner, similar to the way we right pipelines in the cloud.
It is simple to get started, so that startups and the impatient can become productive with Kubernetes quickly, without having to rely on managed offerings and in order to self host easily.
Each pipeline use steps of code that are repeatable, idempotent and using infrastructure as code.
Kubernetes *can run anywhere* so MVK takes that principle and applies this to the self hosted approach making it possible to have the same setup on-prem and in the cloud
It is important to keep things simple so as to be understandable, maintainable and easy to change and extend to our own use cases
-->

BIN
public/boat-under-water.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

BIN
public/cont13_c.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

BIN
public/cont3_c.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

BIN
public/cont8_c.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB

BIN
public/cont_ship3_c.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

BIN
public/cont_ship4_c.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

BIN
public/cont_ship5_c.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 KiB

BIN
public/containers2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

BIN
public/error.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 831 KiB

BIN
public/hi-and-dry.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

46
scripts/instalL_asciinema.sh Executable file
View file

@ -0,0 +1,46 @@
#!/usr/bin/env bash
## available versions as of Tue 7 Oct 18:34:05 BST 2025
# https://github.com/asciinema/asciinema/releases/download/v3.0.0/asciinema-aarch64-apple-darwin
# https://github.com/asciinema/asciinema/releases/download/v3.0.0/asciinema-aarch64-unknown-linux-gnu
# https://github.com/asciinema/asciinema/releases/download/v3.0.0/asciinema-x86_64-apple-darwin
# https://github.com/asciinema/asciinema/releases/download/v3.0.0/asciinema-x86_64-unknown-linux-gnu
# https://github.com/asciinema/asciinema/releases/download/v3.0.0/asciinema-x86_64-unknown-linux-musl
VERSION="3.0.0"
LINK="https://github.com/asciinema/asciinema/releases/download/v${VERSION}/asciinema-"
unameOut="$(uname -s)"
archOut="$(uname -m)"
case "${unameOut}" in
Linux)
if ldd --version 2>&1 | grep -q musl; then
platform="x86_64-unknown-linux-musl"
else
platform="x86_64-unknown-linux-gnu"
fi
if [[ "${archOut}" == "aarch64" ]]; then
platform="aarch64-unknown-linux-gnu"
fi
;;
Darwin)
if [[ "${archOut}" == "arm64" ]]; then
platform="aarch64-apple-darwin"
else
platform="x86_64-apple-darwin"
fi
;;
*)
echo "Unsupported platform: ${unameOut} ${archOut}"
exit 1
;;
esac
echo "Detected platform: $platform"
echo "installing asciinema version ${VERSION} for ${platform}"
sudo curl -sL "${LINK}${platform}" -o /usr/local/bin/asciinema
sudo chmod +x /usr/local/bin/asciinema
asciinema --version

View file

@ -7,7 +7,7 @@ theme: seriph
# background: https://cdn.jsdelivr.net/gh/slidevjs/slidev-covers@main/static/mYBMP8pW4uQ.webp # background: https://cdn.jsdelivr.net/gh/slidevjs/slidev-covers@main/static/mYBMP8pW4uQ.webp
# background: https://cdn.jsdelivr.net/gh/slidevjs/slidev-covers@main/static/zRkBOOpKRhs.webp # background: https://cdn.jsdelivr.net/gh/slidevjs/slidev-covers@main/static/zRkBOOpKRhs.webp
# background: https://cdn.jsdelivr.net/gh/slidevjs/slidev-covers@main/static/3XXSKa4jKaM.webp # background: https://cdn.jsdelivr.net/gh/slidevjs/slidev-covers@main/static/3XXSKa4jKaM.webp
background: containers.webp background: container_pipeline.jpg
# some information about your slides (markdown enabled) # some information about your slides (markdown enabled)
title: Minimal Viable Kubernetes title: Minimal Viable Kubernetes
info: | info: |
@ -37,7 +37,7 @@ seoMeta:
Kubernetes for the impatient and pragmatic Kubernetes for the impatient and pragmatic
Jon Brookes 2025 Jon Brookes 2025
cont13_c.jpg
[https://headshed.dev/n25](https://headshed.dev/n25) [https://headshed.dev/n25](https://headshed.dev/n25)
<div @click="$slidev.nav.next" class="mt-12 py-1" hover:bg="white op-10"> <div @click="$slidev.nav.next" class="mt-12 py-1" hover:bg="white op-10">
@ -60,13 +60,74 @@ Jon Brookes 2025
This is an introduction to Minimal Viable Kubernetes (MVK). What it is, why it is brought into being and the tooling around it. This is an introduction to Minimal Viable Kubernetes (MVK). What it is, why it is brought into being and the tooling around it.
--> -->
---
layout: image-right
image: cont3_c.jpg
transition: fade-out
src: ./pages/intro01.md
---
---
layout: image-right
image: cont8_c.jpg
transition: fade-out
src: ./pages/intro02.md
---
--- ---
layout: image-right layout: image-right
image: containers3.png image: containers3.png
transition: fade-out transition: fade-out
src: ./pages/intro-slide.md src: ./pages/intro03.md
--- ---
---
layout: image-right
image: containers2.jpg
transition: fade-out
src: ./pages/intro04.md
---
---
layout: image-right
image: boat-under-water.jpg
transition: fade-out
src: ./pages/intro05.md
---
---
layout: image-left
image: cont_ship3_c.jpg
transition: fade-out
src: ./pages/uses01.md
---
---
layout: image-left
image: cont_ship4_c.jpg
transition: fade-out
src: ./pages/uses02.md
---
---
layout: image-left
image: cont_ship5_c.jpg
transition: fade-out
src: ./pages/uses03.md
---
---
layout: image-left
image: hi-and-dry.png
transition: fade-out
src: ./pages/uses04.md
---
<!-- <!--
You can have `style` tag in markdown to override the style for the current page. You can have `style` tag in markdown to override the style for the current page.
Learn more: https://sli.dev/features/slide-scope-style Learn more: https://sli.dev/features/slide-scope-style
@ -99,31 +160,27 @@ src: ./pages/usage-slide.md
--- ---
--- ---
transition: fade-out transition: fade-out
src: ./pages/run-slide.md src: ./pages/diagram-single-node.md
--- ---
--- ---
transition: fade-out transition: fade-out
src: ./pages/diagram.md src: ./pages/diagram-3node.md
--- ---
--- ---
transition: fade-out transition: fade-out
src: ./pages/storage.md src: ./pages/gcloud-single.md
--- ---
---
transition: fade-out
src: ./pages/ingress.md
---
---
transition: fade-out
src: ./pages/ingress-test.md
---
--- ---
@ -147,4 +204,3 @@ class: text-center
[https://headshed.dev/n25/](https://headshed.dev/n25/) [https://headshed.dev/n25/](https://headshed.dev/n25/)
<PoweredBySlidev mt-10 />