talks/PersonalInfrastructure/PersonalInfrastructure.md

3.1 KiB

theme _class backgroundColor backgroundImage marp
gaia lead url('https://0.s3.envato.com/files/138380962/Preview%20Image%20White%20Low%20Poly%20Background2.jpg') true

bg left:40% 80%

Personal Infrastructure

Marcus Noble

🔗 https://marcusnoble.co.uk 🐦 @Marcus_Noble_ AverageMarcus


A little about me and the past

  • I work professionally as a "DevOps" engineer at Elsevier with a focus on Kubernetes and containers
  • Previously a JavaScript developer, now a Go developer
  • I've been running my own servers for as long back as I can recall (historically cheap VPS's with applications running either directly on the OS or using Dokku)
  • I like to tinker with "Smart Home" stuff

Where things are at today...

  • 87 uniquely identifiable devices connected to my home network
  • A Zigbee network with 32 devices
  • A single-node Kubernetes cluster running on a dedicated desktop machine hosting 14 applications
  • An autoscaling 1-3 node Kubernetes cluster hosted on Scaleway running ~30 applications
  • 1 Raspberry Pi running Home Assistant to control all smart devices in my home
  • 1 Raspberry Pi running OctoPi to control my 3D printer

Local Network setup

FTTP - Zen Internet ↯ ISP ModemPowerlineRouter - TP-Link Archer C7 ↯ Mesh WiFi beacons - TP-Link Deco M4 (x3) ↯ 87 devices


Local Network setup

4 devices connected via ethernet

Everything else via WiFi

All devices have static IPs and assigned hostnames (based on the periodic table of elements)


Kubernetes - local

An old desktop machine repurposed as a single-node Kubernetes cluster

OS: Ubuntu Kubernetes Version: Microk8s v1.20.1 Specs: CPU - 4 core | Memory - 12Gb | HDD - Lots


Kubernetes - local

Primary Use: Hosting sensitive or local-specific applications that I want to keep off the internet. E.g.

  • custom built CCTV monitoring application covering the 8 cameras I currently have set up
  • automated download tools so I can kick off downloads remotely while I'm out
  • DNS-based ad blocker (AdGuard)

Kubernetes - cloud

Hosted on Scaleway's managed Kubernetes platform, Kapsule. 1-3 DEV1_M instances, autoscaled based on load.

All defined in code using Terraform and stored in git.

Kubernetes Version: v1.20 Specs: CPU - 3 vCPUs | Memory - 4Gb | HDD - 40Gb + 14 PVCs of varying size


Kubernetes - cloud

Primary Use: Hosting internet facing services and providing a secure, authenticated tunnel to my local cluster E.g.

  • My personal blog plus some related sites
  • Self-hosted alternatives to cloud services: Gitea, Nextcloud, Harbor, Photoprism, etc.
  • Tekton - handle all my CI/CD needs, triggered by webhooks from Gitea
  • "Utility" applications to make my life easier:
    • Convert SVG to DXF - used when creating 3D print designs from SVG
    • website-to-remarkable - lets me send a webpage as a PDF to my reMarkable tablet for later reading