<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <docs>https://blogs.law.harvard.edu/tech/rss</docs>
    <title>Helm on Fuchsbau</title>
    <link>https://this-is-fine.io/tags/helm/</link>
    <description>Recent content in Helm on Fuchsbau</description>
    <image>
      <title>Helm on Fuchsbau</title>
      <link>https://this-is-fine.io/tags/helm/</link>
      <url>https://source.unsplash.com/2000x1322/?fox</url>
    </image>
    <ttl>1440</ttl>
    <generator>Hugo 0.125.4</generator>
    <language>de-DE</language>
    <lastBuildDate>Wed, 20 May 2026 22:26:11 UT</lastBuildDate>
    <atom:link href="https://this-is-fine.io/tags/helm/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Running Mastodon in the Lab (Fediverse Stack)</title>
      <link>https://this-is-fine.io/posts/20251121-mastodon-fediverse/</link>
      <pubDate>Fri, 21 Nov 2025 11:00:00 UT</pubDate>
      <dc:creator>ff0x</dc:creator>
      <guid>https://this-is-fine.io/posts/20251121-mastodon-fediverse/</guid>
      <description>Mastodon is a federated microblog server: local timelines plus ActivityPub links to other instances. Running it means managing state (PostgreSQL, media, cache) and edge (HTTPS and /.well-known for discovery). The lab instance is at https://mastodon.this-is-fine.social.
It ships as a Helm release through Flux, same GitOps style as the rest of the lab.
Federation is the interesting part socially and technically. Other servers discover you through HTTPS hostnames and /.well-known endpoints; if DNS or TLS drifts, federation breaks even when the pod is healthy. That is why the lab treats edge (Gateway API, cert-manager, external-dns) as first-class dependencies, not an afterthought.
</description>
      <category domain="https://this-is-fine.io/categories/infrastructure">Infrastructure</category>
      <content:encoded><![CDATA[Mastodon is a federated microblog server: local timelines plus ActivityPub links to other instances. Running it means managing state (PostgreSQL, media, cache) and edge (HTTPS and /.well-known for discovery). The lab instance is at https://mastodon.this-is-fine.social.
It ships as a Helm release through Flux, same GitOps style as the rest of the lab.
Federation is the interesting part socially and technically. Other servers discover you through HTTPS hostnames and /.well-known endpoints; if DNS or TLS drifts, federation breaks even when the pod is healthy. That is why the lab treats edge (Gateway API, cert-manager, external-dns) as first-class dependencies, not an afterthought.
Software map Need Project Learn App Mastodon Admin setup SQL CloudNative-PG Postgres operator Cache Dragonfly Redis-compatible cache Media Rook-Ceph RGW S3 API via ObjectBucketClaim Ingress Gateway API HTTPRoute on shared-gateway-external TLS cert-manager ACME for *.this-is-fine.social Secrets External Secrets SMTP, VAPID, secretKeyBase from Vault Request path Internet -&amp;gt; mastodon.this-is-fine.social (HTTPRoute) -&amp;gt; Mastodon (Helm) PostgreSQL (CNPG) Dragonfly (cache) object storage (Rook S3) Federation needs stable DNS and valid TLS — see Mastodon federation notes. SMTP, VAPID, and secretKeyBase sync from Vault through External Secrets, like other lab apps.
Media attachments land in object storage (Rook’s S3-compatible endpoint) so the web pods do not fill local disks with uploads. PostgreSQL holds accounts and timelines; Dragonfly backs Redis-shaped caching Mastodon expects. None of those pieces are optional if you want a instance that survives real use.
Capacity and backups Mastodon is not a small Deployment: size CPU, memory, and database disk from upstream guidance. Database backups (CNPG) and optional PVC backups (VolSync) are separate choices.
Other fediverse apps (for example Pixelfed) can share the namespace; this article stays on Mastodon.
Further reading: ActivityPub, Mastodon releases.
]]></content:encoded>
    </item>
    <item>
      <title>Lab GitOps: Talos, Flux, and a Monorepo</title>
      <link>https://this-is-fine.io/posts/20251120-lab-gitops-flux-talos/</link>
      <pubDate>Thu, 20 Nov 2025 08:00:00 UT</pubDate>
      <dc:creator>ff0x</dc:creator>
      <guid>https://this-is-fine.io/posts/20251120-lab-gitops-flux-talos/</guid>
      <description>The lab is a Kubernetes testbed: try cluster layouts here before they go to production. After a short manual bootstrap, Flux keeps the cluster in sync with Git — the usual GitOps loop of declared state in version control and controllers that apply diffs.
Nodes run Talos Linux on Turing Pi RK1 boards. Images come from the Talos Image Factory (metal-arm64, sbc-rockchip / turingrk1). Talos keeps the node OS small and API-driven: you do not SSH in to patch packages. That pushes complexity into Kubernetes manifests, which fits a GitOps workflow.
Everything after the first bootstrap lives in one monorepo: cluster overlays, shared operators, Helm charts, and application kustomizations. Talos machine config (talconfig) is versioned there too, but applied with talosctl, not Flux. Drawing that line clearly avoids pretending the entire world is reconciled from Git when the hypervisor and disk layout are still operator steps.
</description>
      <category domain="https://this-is-fine.io/categories/infrastructure">Infrastructure</category>
      <content:encoded><![CDATA[The lab is a Kubernetes testbed: try cluster layouts here before they go to production. After a short manual bootstrap, Flux keeps the cluster in sync with Git — the usual GitOps loop of declared state in version control and controllers that apply diffs.
Nodes run Talos Linux on Turing Pi RK1 boards. Images come from the Talos Image Factory (metal-arm64, sbc-rockchip / turingrk1). Talos keeps the node OS small and API-driven: you do not SSH in to patch packages. That pushes complexity into Kubernetes manifests, which fits a GitOps workflow.
Everything after the first bootstrap lives in one monorepo: cluster overlays, shared operators, Helm charts, and application kustomizations. Talos machine config (talconfig) is versioned there too, but applied with talosctl, not Flux. Drawing that line clearly avoids pretending the entire world is reconciled from Git when the hypervisor and disk layout are still operator steps.
Stack (what each piece teaches) Piece Learn more Talos API-driven, immutable nodes — no SSH shell on hosts Flux GitRepository, Kustomization, HelmRelease Kustomize &#43; Helm Overlays vs charts — choose per app SOPS &#43; AGE Encrypted secrets in Git; decrypted at reconcile Vault &#43; External Secrets Long-lived credentials outside plain Git Cilium CNI; BGP can advertise service LoadBalancer ranges Gateway API &#43; Envoy Gateway HTTP and TCP ingress cert-manager ACME and in-cluster CAs Rook-Ceph Block, filesystem, and S3-style storage Renovate Automated bumps for image and chart pins Bootstrap, then GitOps flash Talos (RK1) -&amp;gt; talosctl bootstrap -&amp;gt; flux bootstrap Git becomes the source of truth One monorepo holds shared common/ operators and per-cluster overlays. The GitRepository uses an ignore block so Flux does not clone agent code, docs, or unrelated trees on every reconcile. That keeps sync intervals reasonable on modest hardware.
How a change rolls out Git branch (main) -&amp;gt; GitRepository (poll) -&amp;gt; common layer (Flux, Cilium, cert-manager, ...) -&amp;gt; repo definitions (Helm/OCI) -&amp;gt; app overlays (your workloads) -&amp;gt; HelmRelease, HTTPRoute, PVC, ExternalSecret, ... dependsOn orders that graph (storage before apps, for example). postBuild substitution reads common-config and fills hostnames — this-is-fine.io, this-is-fine.social, this-is-fine.internal, tif.internal — so the same manifests work on every cluster without per-site forks.
Bootstrap secrets use SOPS; runtime passwords and tokens live in Vault and sync through External Secrets. The split mirrors how often values change: bootstrap keys rotate rarely; database passwords and API tokens churn more often and are easier to audit in Vault.
Renovate watches the same repo and opens bump PRs for container images, Helm charts, and Talos or Flux pins. That closes the loop so the lab does not silently fall behind upstream.
DNS zones (quick map) this-is-fine.io public internet (ACME, external gateway) this-is-fine.social fediverse this-is-fine.internal lab UIs (internal gateway, Vault PKI) tif.internal Headscale tailnet (MagicDNS) Takeaway Talos limits the OS problem; Flux limits the “what is actually deployed?” problem. Together they give a repeatable lab: flash boards, bootstrap once per cluster, then iterate by merge request like any other software project.
More on this setup: ZeroClaw, Envoy Gateway, Cilium BGP, Zot, Pocket ID, backups, tailnet, image signing.
]]></content:encoded>
    </item>
  </channel>
</rss>
