diff --git a/pages/config-slide.md b/pages/config-slide.md index 681edb1..562baa6 100644 --- a/pages/config-slide.md +++ b/pages/config-slide.md @@ -2,9 +2,9 @@ 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} diff --git a/pages/diagram.md b/pages/diagram-3node.md similarity index 82% rename from pages/diagram.md rename to pages/diagram-3node.md index 808719e..d71359d 100644 --- a/pages/diagram.md +++ b/pages/diagram-3node.md @@ -2,26 +2,27 @@ 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 ?
```mermaid %%{init: {'theme': 'dark', 'themeVariables': { 'darkMode': true }}}%% flowchart LR - root((MVK)) + root((3-node)) PS[Persistent Storage] LH[Longhorn] ING[Ingress] TRA[Traefik] - MET[Metallb] + MET[cert-manager] ETCD[etcd] KA[keepalived] root --> PS --> LH - root --> ING --> TRA --> MET + root --> ING --> TRA + ING --> MET root --> ETCD --> KA classDef default fill:transparent,color:#fff,stroke:#888 @@ -31,9 +32,7 @@ flowchart LR
-We have in the build so far etcd and keepalived - -there is still no persistent volume management or ingress +close to production - storage and multi node
diff --git a/pages/diagram-single-node.md b/pages/diagram-single-node.md new file mode 100644 index 0000000..3fb486d --- /dev/null +++ b/pages/diagram-single-node.md @@ -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 ? + +
+ +```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 +``` + +
+ +
+ +Locally attached storage - single node implementation + +Ingress can represent that of prodution environmetns that use cert-manager + +
+ + \ No newline at end of file diff --git a/pages/gcloud-single.md b/pages/gcloud-single.md new file mode 100644 index 0000000..d05a49b --- /dev/null +++ b/pages/gcloud-single.md @@ -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 +``` + + + +```` +
+ +Lets see a Google Compute Engine install [Demo](https://ascii.headshed.dev/a/qslfF9KTMj69zcSwzD6xm1uZ7) + +
+ + + + \ No newline at end of file diff --git a/pages/intro-slide.md b/pages/intro01.md similarity index 69% rename from pages/intro-slide.md rename to pages/intro01.md index 34f1647..65d4e3d 100644 --- a/pages/intro-slide.md +++ b/pages/intro01.md @@ -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 \ No newline at end of file diff --git a/pages/intro03.md b/pages/intro03.md new file mode 100644 index 0000000..00ea79d --- /dev/null +++ b/pages/intro03.md @@ -0,0 +1,26 @@ +# Minimal Viable Kubernetes + +What is MVK ? + +### ≥ CLI friendly, CLI first + +### 🤹 Promotes Infrastructure as code + +### 📤 **Portable** on-prem, cloud + + + + + \ No newline at end of file diff --git a/pages/intro04.md b/pages/intro04.md new file mode 100644 index 0000000..51cdba1 --- /dev/null +++ b/pages/intro04.md @@ -0,0 +1,27 @@ +# Minimal Viable Kubernetes + +What is MVK ? + +### ≥ CLI friendly, CLI first + +### 🤹 Promotes Infrastructure as code + +### 📤 **Portable** on-prem, cloud + +### 🧐 Fosters inquisitiveness + + + + \ No newline at end of file diff --git a/pages/intro05.md b/pages/intro05.md new file mode 100644 index 0000000..018ee02 --- /dev/null +++ b/pages/intro05.md @@ -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 + + + + \ No newline at end of file diff --git a/pages/uses01.md b/pages/uses01.md new file mode 100644 index 0000000..c5e4fba --- /dev/null +++ b/pages/uses01.md @@ -0,0 +1,28 @@ +# Minimal Viable Kubernetes + +Use Cases ? + +### 🏠 Local development + + + + + + + + + + + \ No newline at end of file diff --git a/pages/uses02.md b/pages/uses02.md new file mode 100644 index 0000000..ada3de3 --- /dev/null +++ b/pages/uses02.md @@ -0,0 +1,29 @@ +# Minimal Viable Kubernetes + +Use Cases ? + +### 🏠 Local development + +### 🛠️ Integration and smoke testing + + + + + + + + + + \ No newline at end of file diff --git a/pages/uses03.md b/pages/uses03.md new file mode 100644 index 0000000..b42c5a8 --- /dev/null +++ b/pages/uses03.md @@ -0,0 +1,28 @@ +# Minimal Viable Kubernetes + +Use Cases ? + +### 🏠 Local development + +### 🛠️ Integration and smoke testing + +### 🎬 Pre-prod & production + + + + + + + \ No newline at end of file diff --git a/pages/uses04.md b/pages/uses04.md new file mode 100644 index 0000000..aeff32a --- /dev/null +++ b/pages/uses04.md @@ -0,0 +1,28 @@ +# Minimal Viable Kubernetes + +Use Cases ? + +### 🏠 Local development + +### 🛠️ Integration and smoke testing + +### 🎬 Pre-prod & production + +### 💣 Disaster recovery rehearsal + + + + + \ No newline at end of file diff --git a/public/boat-under-water.jpg b/public/boat-under-water.jpg new file mode 100644 index 0000000..f7ae4c1 Binary files /dev/null and b/public/boat-under-water.jpg differ diff --git a/public/cont13_c.jpg b/public/cont13_c.jpg new file mode 100644 index 0000000..c1270b3 Binary files /dev/null and b/public/cont13_c.jpg differ diff --git a/public/cont3_c.jpg b/public/cont3_c.jpg new file mode 100644 index 0000000..73499fa Binary files /dev/null and b/public/cont3_c.jpg differ diff --git a/public/cont8_c.jpg b/public/cont8_c.jpg new file mode 100644 index 0000000..cfe0603 Binary files /dev/null and b/public/cont8_c.jpg differ diff --git a/public/cont_ship3_c.jpg b/public/cont_ship3_c.jpg new file mode 100644 index 0000000..8720da5 Binary files /dev/null and b/public/cont_ship3_c.jpg differ diff --git a/public/cont_ship4_c.jpg b/public/cont_ship4_c.jpg new file mode 100644 index 0000000..f0bc3c5 Binary files /dev/null and b/public/cont_ship4_c.jpg differ diff --git a/public/cont_ship5_c.jpg b/public/cont_ship5_c.jpg new file mode 100644 index 0000000..75d2ce2 Binary files /dev/null and b/public/cont_ship5_c.jpg differ diff --git a/public/container_pipeline.jpg b/public/container_pipeline.jpg new file mode 100644 index 0000000..8e41680 Binary files /dev/null and b/public/container_pipeline.jpg differ diff --git a/public/containers2.jpg b/public/containers2.jpg new file mode 100644 index 0000000..34cbce9 Binary files /dev/null and b/public/containers2.jpg differ diff --git a/public/error.png b/public/error.png new file mode 100644 index 0000000..7da945a Binary files /dev/null and b/public/error.png differ diff --git a/public/hi-and-dry.png b/public/hi-and-dry.png new file mode 100644 index 0000000..dd33d25 Binary files /dev/null and b/public/hi-and-dry.png differ diff --git a/scripts/instalL_asciinema.sh b/scripts/instalL_asciinema.sh new file mode 100755 index 0000000..48c7e60 --- /dev/null +++ b/scripts/instalL_asciinema.sh @@ -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 \ No newline at end of file diff --git a/slides.md b/slides.md index 0cfc78c..9e54202 100644 --- a/slides.md +++ b/slides.md @@ -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/zRkBOOpKRhs.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) title: Minimal Viable Kubernetes info: | @@ -37,7 +37,7 @@ seoMeta: Kubernetes for the impatient and pragmatic Jon Brookes 2025 - +cont13_c.jpg [https://headshed.dev/n25](https://headshed.dev/n25)
@@ -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. --> +--- +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 image: containers3.png 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 +--- + + + +