From 2b034797107660d4d83f8a7acdc55d32db785b82 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Thu, 2 Oct 2025 11:28:55 +0300 Subject: Update content for md --- about/resources.md | 188 +- ...6-04-09-jails-and-zfs-on-freebsd-with-puppet.md | 1 + ...2022-07-30-lets-encrypt-with-openbsd-and-rex.md | 1 + .../2024-01-13-one-reason-why-i-love-openbsd.md | 1 + ...24-04-01-KISS-high-availability-with-OpenBSD.md | 1 + ...024-11-17-f3s-kubernetes-with-freebsd-part-1.md | 2 + ...024-12-03-f3s-kubernetes-with-freebsd-part-2.md | 5 +- ...025-02-01-f3s-kubernetes-with-freebsd-part-3.md | 2 + ...025-04-05-f3s-kubernetes-with-freebsd-part-4.md | 2 + ...025-05-11-f3s-kubernetes-with-freebsd-part-5.md | 2 + ...025-07-14-f3s-kubernetes-with-freebsd-part-6.md | 10 +- ...025-10-02-f3s-kubernetes-with-freebsd-part-7.md | 960 ++++++++++ gemfeed/DRAFT-kubernetes-with-freebsd-part-7.md | 580 ------ gemfeed/examples/conf/Rexfile | 3 + gemfeed/examples/conf/babylon5/backup-start | 64 + .../conf/babylon5/docker-start-anki-sync-server | 4 + .../conf/babylon5/docker-start-audiobookshelf | 12 + .../conf/babylon5/docker-start-nextcloud-aio | 15 + .../conf/babylon5/docker-start-vaultwarden | 10 + .../examples/conf/babylon5/docker-start-wallabag | 4 + gemfeed/examples/conf/dotfiles/Rexfile | 225 +++ gemfeed/examples/conf/dotfiles/bash/bash_profile | 3 + gemfeed/examples/conf/dotfiles/bash/bashrc | 15 + gemfeed/examples/conf/dotfiles/fish/conf.d/ai.fish | 39 + .../conf/dotfiles/fish/conf.d/alternatives.fish | 17 + .../examples/conf/dotfiles/fish/conf.d/config.fish | 31 + .../conf/dotfiles/fish/conf.d/dotfiles.fish | 48 + .../examples/conf/dotfiles/fish/conf.d/editor.fish | 44 + .../examples/conf/dotfiles/fish/conf.d/fuzzy.fish | 5 + .../examples/conf/dotfiles/fish/conf.d/games.fish | 15 + .../examples/conf/dotfiles/fish/conf.d/gos.fish | 6 + .../examples/conf/dotfiles/fish/conf.d/k8s.fish | 76 + .../conf/dotfiles/fish/conf.d/quickedit.fish | 93 + .../conf/dotfiles/fish/conf.d/supersync.fish | 114 ++ .../conf/dotfiles/fish/conf.d/taskwarrior.fish | 121 ++ .../examples/conf/dotfiles/fish/conf.d/timr.fish | 25 + .../conf/dotfiles/fish/conf.d/tmputils.fish | 54 + .../examples/conf/dotfiles/fish/conf.d/tmux.fish | 94 + .../examples/conf/dotfiles/fish/conf.d/update.fish | 75 + .../examples/conf/dotfiles/fish/conf.d/utils.fish | 142 ++ .../conf/dotfiles/fish/conf.d/worktime.fish | 122 ++ .../examples/conf/dotfiles/fish/conf.d/zoxide.fish | 6 + .../examples/conf/dotfiles/fish/conf.d/zsh.fish | 12 + gemfeed/examples/conf/dotfiles/ghostty/config | 17 + .../examples/conf/dotfiles/gitsyncer/config.json | 33 + gemfeed/examples/conf/dotfiles/helix/config.toml | 87 + .../examples/conf/dotfiles/helix/languages.toml | 203 +++ gemfeed/examples/conf/dotfiles/nvim/init.lua | 70 + .../examples/conf/dotfiles/pipewire/pipewire.conf | 257 +++ gemfeed/examples/conf/dotfiles/scripts/ai | 7 + .../conf/dotfiles/scripts/brokenlinkfinder | 73 + gemfeed/examples/conf/dotfiles/scripts/gvim | 7 + .../conf/dotfiles/scripts/hx.aichat-prompt | 9 + .../conf/dotfiles/scripts/hx.chatgpt-prompt | 3 + .../examples/conf/dotfiles/scripts/hx.goformatter | 3 + .../examples/conf/dotfiles/scripts/hx.hexai-prompt | 9 + .../conf/dotfiles/scripts/hx.nvim-copilot-prompt | 32 + gemfeed/examples/conf/dotfiles/scripts/hx.prompt | 14 + .../examples/conf/dotfiles/scripts/randomnote.rb | 30 + .../conf/dotfiles/scripts/taskwarriorfeeder.rb | 221 +++ gemfeed/examples/conf/dotfiles/signature | 2 + gemfeed/examples/conf/dotfiles/ssh/config | 21 + .../conf/dotfiles/sway/config.d/keyboard.conf | 6 + gemfeed/examples/conf/dotfiles/tmux/tmux.conf | 32 + .../examples/conf/dotfiles/tmux/tmux.local.conf | 2 + gemfeed/examples/conf/dotfiles/vale.ini | 6 + gemfeed/examples/conf/dotfiles/waybar/config.jsonc | 194 ++ gemfeed/examples/conf/dotfiles/waybar/style.css | 326 ++++ .../examples/conf/f3s/anki-sync-server/Justfile | 12 + .../f3s/anki-sync-server/docker-image/Dockerfile | 39 + .../f3s/anki-sync-server/docker-image/Justfile | 6 + .../anki-sync-server/docker-image/entrypoint.sh | 31 + .../f3s/anki-sync-server/helm-chart/Chart.yaml | 5 + .../helm-chart/templates/deployment.yaml | 35 + .../helm-chart/templates/ingress.yaml | 20 + .../helm-chart/templates/persistent-volume.yaml | 27 + .../helm-chart/templates/service.yaml | 15 + gemfeed/examples/conf/f3s/audiobookshelf/Justfile | 12 + .../conf/f3s/audiobookshelf/helm-chart/Chart.yaml | 5 + .../helm-chart/templates/deployment.yaml | 53 + .../helm-chart/templates/ingress.yaml | 20 + .../helm-chart/templates/persistent-volumes.yaml | 83 + .../conf/f3s/example-apache-volume-claim/Justfile | 12 + .../helm-chart/Chart.yaml | 5 + .../helm-chart/templates/apache-deployment.yaml | 41 + .../helm-chart/templates/apache-ingress.yaml | 41 + .../templates/apache-persistent-volume.yaml | 27 + .../helm-chart/templates/apache-service.yaml | 17 + gemfeed/examples/conf/f3s/example-apache/Justfile | 12 + .../conf/f3s/example-apache/helm-chart/Chart.yaml | 5 + .../helm-chart/templates/apache-deployment.yaml | 21 + .../helm-chart/templates/apache-ingress.yaml | 40 + .../helm-chart/templates/apache-service.yaml | 16 + gemfeed/examples/conf/f3s/freshrss/Justfile | 12 + .../conf/f3s/freshrss/helm-chart/Chart.yaml | 6 + .../freshrss/helm-chart/templates/deployment.yaml | 48 + .../f3s/freshrss/helm-chart/templates/ingress.yaml | 21 + .../helm-chart/templates/persistent-volumes.yaml | 28 + gemfeed/examples/conf/f3s/miniflux/Justfile | 12 + .../conf/f3s/miniflux/helm-chart/Chart.yaml | 5 + .../miniflux/helm-chart/templates/deployment.yaml | 92 + .../f3s/miniflux/helm-chart/templates/ingress.yaml | 20 + .../helm-chart/templates/persistent-volumes.yaml | 27 + .../f3s/miniflux/helm-chart/templates/service.yaml | 23 + gemfeed/examples/conf/f3s/opodsync/Justfile | 12 + .../conf/f3s/opodsync/helm-chart/Chart.yaml | 5 + .../helm-chart/templates/configmap-nginx.yaml | 46 + .../opodsync/helm-chart/templates/deployment.yaml | 43 + .../f3s/opodsync/helm-chart/templates/ingress.yaml | 20 + .../helm-chart/templates/persistent-volumes.yaml | 27 + .../f3s/opodsync/helm-chart/templates/service.yaml | 15 + gemfeed/examples/conf/f3s/radicale/Justfile | 12 + .../conf/f3s/radicale/helm-chart/Chart.yaml | 5 + .../radicale/helm-chart/templates/deployment.yaml | 67 + .../f3s/radicale/helm-chart/templates/ingress.yaml | 20 + .../helm-chart/templates/persistent-volumes.yaml | 55 + gemfeed/examples/conf/f3s/registry/Justfile | 12 + .../conf/f3s/registry/helm-chart/Chart.yaml | 5 + .../registry/helm-chart/templates/deployment.yaml | 29 + .../conf/f3s/registry/helm-chart/templates/pv.yaml | 14 + .../f3s/registry/helm-chart/templates/pvc.yaml | 12 + .../f3s/registry/helm-chart/templates/service.yaml | 14 + gemfeed/examples/conf/f3s/syncthing/Justfile | 12 + .../conf/f3s/syncthing/helm-chart/Chart.yaml | 5 + .../syncthing/helm-chart/templates/deployment.yaml | 33 + .../syncthing/helm-chart/templates/ingress.yaml | 20 + .../helm-chart/templates/persistent-volume.yaml | 55 + .../syncthing/helm-chart/templates/service.yaml | 19 + gemfeed/examples/conf/f3s/wallabag/Justfile | 12 + .../conf/f3s/wallabag/helm-chart/Chart.yaml | 5 + .../wallabag/helm-chart/templates/deployment.yaml | 51 + .../f3s/wallabag/helm-chart/templates/ingress.yaml | 20 + .../helm-chart/templates/persistent-volumes.yaml | 55 + gemfeed/examples/conf/frontends/Rexfile | 648 +++++++ .../conf/frontends/etc/acme-client.conf.tpl | 41 + .../conf/frontends/etc/dserver/dtail.json.tpl | 127 ++ .../examples/conf/frontends/etc/gogios.cron.tpl | 3 + .../examples/conf/frontends/etc/gogios.json.tpl | 98 + gemfeed/examples/conf/frontends/etc/gorum.json.tpl | 18 + gemfeed/examples/conf/frontends/etc/httpd.conf.tpl | 184 ++ gemfeed/examples/conf/frontends/etc/inetd.conf | 2 + .../examples/conf/frontends/etc/login.conf.d/inetd | 3 + gemfeed/examples/conf/frontends/etc/mail/aliases | 103 ++ .../conf/frontends/etc/mail/smtpd.conf.tpl | 23 + .../conf/frontends/etc/mail/virtualdomains | 20 + .../examples/conf/frontends/etc/mail/virtualusers | 5 + gemfeed/examples/conf/frontends/etc/myname.tpl | 1 + gemfeed/examples/conf/frontends/etc/newsyslog.conf | 14 + gemfeed/examples/conf/frontends/etc/rc.conf.local | 5 + .../examples/conf/frontends/etc/rc.d/dserver.tpl | 16 + gemfeed/examples/conf/frontends/etc/rc.d/gorum.tpl | 16 + .../examples/conf/frontends/etc/relayd.conf.tpl | 86 + .../examples/conf/frontends/etc/rsyncd.conf.tpl | 28 + gemfeed/examples/conf/frontends/etc/taskrc.tpl | 40 + gemfeed/examples/conf/frontends/etc/tmux.conf | 24 + .../examples/conf/frontends/scripts/acme.sh.tpl | 68 + .../conf/frontends/scripts/dns-failover.ksh | 133 ++ .../scripts/dserver-update-key-cache.sh.tpl | 34 + .../examples/conf/frontends/scripts/fooodds.txt | 191 ++ .../examples/conf/frontends/scripts/foostats.pl | 1910 ++++++++++++++++++++ .../conf/frontends/scripts/gemtexter.sh.tpl | 65 + .../examples/conf/frontends/scripts/rsync.sh.tpl | 8 + .../conf/frontends/scripts/taskwarrior.sh.tpl | 5 + .../conf/frontends/var/nsd/etc/key.conf.tpl | 4 + .../conf/frontends/var/nsd/etc/nsd.conf.master.tpl | 17 + .../conf/frontends/var/nsd/etc/nsd.conf.slave.tpl | 17 + .../var/nsd/zones/master/buetow.org.zone.tpl | 124 ++ .../var/nsd/zones/master/dtail.dev.zone.tpl | 21 + .../var/nsd/zones/master/foo.zone.zone.tpl | 34 + .../var/nsd/zones/master/irregular.ninja.zone.tpl | 23 + .../var/nsd/zones/master/paul.cyou.zone.tpl | 20 + .../var/nsd/zones/master/snonux.foo.zone.tpl | 20 + .../var/www/htdocs/buetow.org/self/index.txt.tpl | 1 + gemfeed/examples/conf/playground/Rexfile | 24 + .../conf/playground/openbsd_cron_test.debug.txt | 766 ++++++++ .../examples/conf/playground/openbsd_cron_test.txt | 42 + gemfeed/index.md | 3 +- gemfeed/stunnel-nfs-quick-reference.txt | 78 - index.md | 5 +- uptime-stats.md | 2 +- 180 files changed, 10867 insertions(+), 760 deletions(-) create mode 100644 gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.md delete mode 100644 gemfeed/DRAFT-kubernetes-with-freebsd-part-7.md create mode 100644 gemfeed/examples/conf/Rexfile create mode 100755 gemfeed/examples/conf/babylon5/backup-start create mode 100755 gemfeed/examples/conf/babylon5/docker-start-anki-sync-server create mode 100755 gemfeed/examples/conf/babylon5/docker-start-audiobookshelf create mode 100755 gemfeed/examples/conf/babylon5/docker-start-nextcloud-aio create mode 100755 gemfeed/examples/conf/babylon5/docker-start-vaultwarden create mode 100755 gemfeed/examples/conf/babylon5/docker-start-wallabag create mode 100644 gemfeed/examples/conf/dotfiles/Rexfile create mode 100644 gemfeed/examples/conf/dotfiles/bash/bash_profile create mode 100644 gemfeed/examples/conf/dotfiles/bash/bashrc create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/ai.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/alternatives.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/config.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/dotfiles.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/editor.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/fuzzy.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/games.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/gos.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/k8s.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/quickedit.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/supersync.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/taskwarrior.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/timr.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/tmputils.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/tmux.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/update.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/utils.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/worktime.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/zoxide.fish create mode 100644 gemfeed/examples/conf/dotfiles/fish/conf.d/zsh.fish create mode 100644 gemfeed/examples/conf/dotfiles/ghostty/config create mode 100644 gemfeed/examples/conf/dotfiles/gitsyncer/config.json create mode 100644 gemfeed/examples/conf/dotfiles/helix/config.toml create mode 100644 gemfeed/examples/conf/dotfiles/helix/languages.toml create mode 100644 gemfeed/examples/conf/dotfiles/nvim/init.lua create mode 100644 gemfeed/examples/conf/dotfiles/pipewire/pipewire.conf create mode 100755 gemfeed/examples/conf/dotfiles/scripts/ai create mode 100644 gemfeed/examples/conf/dotfiles/scripts/brokenlinkfinder create mode 100755 gemfeed/examples/conf/dotfiles/scripts/gvim create mode 100755 gemfeed/examples/conf/dotfiles/scripts/hx.aichat-prompt create mode 100755 gemfeed/examples/conf/dotfiles/scripts/hx.chatgpt-prompt create mode 100755 gemfeed/examples/conf/dotfiles/scripts/hx.goformatter create mode 100755 gemfeed/examples/conf/dotfiles/scripts/hx.hexai-prompt create mode 100755 gemfeed/examples/conf/dotfiles/scripts/hx.nvim-copilot-prompt create mode 100755 gemfeed/examples/conf/dotfiles/scripts/hx.prompt create mode 100644 gemfeed/examples/conf/dotfiles/scripts/randomnote.rb create mode 100644 gemfeed/examples/conf/dotfiles/scripts/taskwarriorfeeder.rb create mode 100644 gemfeed/examples/conf/dotfiles/signature create mode 100644 gemfeed/examples/conf/dotfiles/ssh/config create mode 100644 gemfeed/examples/conf/dotfiles/sway/config.d/keyboard.conf create mode 100644 gemfeed/examples/conf/dotfiles/tmux/tmux.conf create mode 100644 gemfeed/examples/conf/dotfiles/tmux/tmux.local.conf create mode 100644 gemfeed/examples/conf/dotfiles/vale.ini create mode 100644 gemfeed/examples/conf/dotfiles/waybar/config.jsonc create mode 100644 gemfeed/examples/conf/dotfiles/waybar/style.css create mode 100644 gemfeed/examples/conf/f3s/anki-sync-server/Justfile create mode 100644 gemfeed/examples/conf/f3s/anki-sync-server/docker-image/Dockerfile create mode 100644 gemfeed/examples/conf/f3s/anki-sync-server/docker-image/Justfile create mode 100644 gemfeed/examples/conf/f3s/anki-sync-server/docker-image/entrypoint.sh create mode 100644 gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/Chart.yaml create mode 100644 gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/deployment.yaml create mode 100644 gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/ingress.yaml create mode 100644 gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/persistent-volume.yaml create mode 100644 gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/service.yaml create mode 100644 gemfeed/examples/conf/f3s/audiobookshelf/Justfile create mode 100644 gemfeed/examples/conf/f3s/audiobookshelf/helm-chart/Chart.yaml create mode 100644 gemfeed/examples/conf/f3s/audiobookshelf/helm-chart/templates/deployment.yaml create mode 100644 gemfeed/examples/conf/f3s/audiobookshelf/helm-chart/templates/ingress.yaml create mode 100644 gemfeed/examples/conf/f3s/audiobookshelf/helm-chart/templates/persistent-volumes.yaml create mode 100644 gemfeed/examples/conf/f3s/example-apache-volume-claim/Justfile create mode 100644 gemfeed/examples/conf/f3s/example-apache-volume-claim/helm-chart/Chart.yaml create mode 100644 gemfeed/examples/conf/f3s/example-apache-volume-claim/helm-chart/templates/apache-deployment.yaml create mode 100644 gemfeed/examples/conf/f3s/example-apache-volume-claim/helm-chart/templates/apache-ingress.yaml create mode 100644 gemfeed/examples/conf/f3s/example-apache-volume-claim/helm-chart/templates/apache-persistent-volume.yaml create mode 100644 gemfeed/examples/conf/f3s/example-apache-volume-claim/helm-chart/templates/apache-service.yaml create mode 100644 gemfeed/examples/conf/f3s/example-apache/Justfile create mode 100644 gemfeed/examples/conf/f3s/example-apache/helm-chart/Chart.yaml create mode 100644 gemfeed/examples/conf/f3s/example-apache/helm-chart/templates/apache-deployment.yaml create mode 100644 gemfeed/examples/conf/f3s/example-apache/helm-chart/templates/apache-ingress.yaml create mode 100644 gemfeed/examples/conf/f3s/example-apache/helm-chart/templates/apache-service.yaml create mode 100644 gemfeed/examples/conf/f3s/freshrss/Justfile create mode 100644 gemfeed/examples/conf/f3s/freshrss/helm-chart/Chart.yaml create mode 100644 gemfeed/examples/conf/f3s/freshrss/helm-chart/templates/deployment.yaml create mode 100644 gemfeed/examples/conf/f3s/freshrss/helm-chart/templates/ingress.yaml create mode 100644 gemfeed/examples/conf/f3s/freshrss/helm-chart/templates/persistent-volumes.yaml create mode 100644 gemfeed/examples/conf/f3s/miniflux/Justfile create mode 100644 gemfeed/examples/conf/f3s/miniflux/helm-chart/Chart.yaml create mode 100644 gemfeed/examples/conf/f3s/miniflux/helm-chart/templates/deployment.yaml create mode 100644 gemfeed/examples/conf/f3s/miniflux/helm-chart/templates/ingress.yaml create mode 100644 gemfeed/examples/conf/f3s/miniflux/helm-chart/templates/persistent-volumes.yaml create mode 100644 gemfeed/examples/conf/f3s/miniflux/helm-chart/templates/service.yaml create mode 100644 gemfeed/examples/conf/f3s/opodsync/Justfile create mode 100644 gemfeed/examples/conf/f3s/opodsync/helm-chart/Chart.yaml create mode 100644 gemfeed/examples/conf/f3s/opodsync/helm-chart/templates/configmap-nginx.yaml create mode 100644 gemfeed/examples/conf/f3s/opodsync/helm-chart/templates/deployment.yaml create mode 100644 gemfeed/examples/conf/f3s/opodsync/helm-chart/templates/ingress.yaml create mode 100644 gemfeed/examples/conf/f3s/opodsync/helm-chart/templates/persistent-volumes.yaml create mode 100644 gemfeed/examples/conf/f3s/opodsync/helm-chart/templates/service.yaml create mode 100644 gemfeed/examples/conf/f3s/radicale/Justfile create mode 100644 gemfeed/examples/conf/f3s/radicale/helm-chart/Chart.yaml create mode 100644 gemfeed/examples/conf/f3s/radicale/helm-chart/templates/deployment.yaml create mode 100644 gemfeed/examples/conf/f3s/radicale/helm-chart/templates/ingress.yaml create mode 100644 gemfeed/examples/conf/f3s/radicale/helm-chart/templates/persistent-volumes.yaml create mode 100644 gemfeed/examples/conf/f3s/registry/Justfile create mode 100644 gemfeed/examples/conf/f3s/registry/helm-chart/Chart.yaml create mode 100644 gemfeed/examples/conf/f3s/registry/helm-chart/templates/deployment.yaml create mode 100644 gemfeed/examples/conf/f3s/registry/helm-chart/templates/pv.yaml create mode 100644 gemfeed/examples/conf/f3s/registry/helm-chart/templates/pvc.yaml create mode 100644 gemfeed/examples/conf/f3s/registry/helm-chart/templates/service.yaml create mode 100644 gemfeed/examples/conf/f3s/syncthing/Justfile create mode 100644 gemfeed/examples/conf/f3s/syncthing/helm-chart/Chart.yaml create mode 100644 gemfeed/examples/conf/f3s/syncthing/helm-chart/templates/deployment.yaml create mode 100644 gemfeed/examples/conf/f3s/syncthing/helm-chart/templates/ingress.yaml create mode 100644 gemfeed/examples/conf/f3s/syncthing/helm-chart/templates/persistent-volume.yaml create mode 100644 gemfeed/examples/conf/f3s/syncthing/helm-chart/templates/service.yaml create mode 100644 gemfeed/examples/conf/f3s/wallabag/Justfile create mode 100644 gemfeed/examples/conf/f3s/wallabag/helm-chart/Chart.yaml create mode 100644 gemfeed/examples/conf/f3s/wallabag/helm-chart/templates/deployment.yaml create mode 100644 gemfeed/examples/conf/f3s/wallabag/helm-chart/templates/ingress.yaml create mode 100644 gemfeed/examples/conf/f3s/wallabag/helm-chart/templates/persistent-volumes.yaml create mode 100644 gemfeed/examples/conf/frontends/Rexfile create mode 100644 gemfeed/examples/conf/frontends/etc/acme-client.conf.tpl create mode 100644 gemfeed/examples/conf/frontends/etc/dserver/dtail.json.tpl create mode 100644 gemfeed/examples/conf/frontends/etc/gogios.cron.tpl create mode 100644 gemfeed/examples/conf/frontends/etc/gogios.json.tpl create mode 100644 gemfeed/examples/conf/frontends/etc/gorum.json.tpl create mode 100644 gemfeed/examples/conf/frontends/etc/httpd.conf.tpl create mode 100644 gemfeed/examples/conf/frontends/etc/inetd.conf create mode 100644 gemfeed/examples/conf/frontends/etc/login.conf.d/inetd create mode 100644 gemfeed/examples/conf/frontends/etc/mail/aliases create mode 100644 gemfeed/examples/conf/frontends/etc/mail/smtpd.conf.tpl create mode 100644 gemfeed/examples/conf/frontends/etc/mail/virtualdomains create mode 100644 gemfeed/examples/conf/frontends/etc/mail/virtualusers create mode 100644 gemfeed/examples/conf/frontends/etc/myname.tpl create mode 100644 gemfeed/examples/conf/frontends/etc/newsyslog.conf create mode 100644 gemfeed/examples/conf/frontends/etc/rc.conf.local create mode 100755 gemfeed/examples/conf/frontends/etc/rc.d/dserver.tpl create mode 100755 gemfeed/examples/conf/frontends/etc/rc.d/gorum.tpl create mode 100644 gemfeed/examples/conf/frontends/etc/relayd.conf.tpl create mode 100644 gemfeed/examples/conf/frontends/etc/rsyncd.conf.tpl create mode 100644 gemfeed/examples/conf/frontends/etc/taskrc.tpl create mode 100644 gemfeed/examples/conf/frontends/etc/tmux.conf create mode 100644 gemfeed/examples/conf/frontends/scripts/acme.sh.tpl create mode 100644 gemfeed/examples/conf/frontends/scripts/dns-failover.ksh create mode 100644 gemfeed/examples/conf/frontends/scripts/dserver-update-key-cache.sh.tpl create mode 100644 gemfeed/examples/conf/frontends/scripts/fooodds.txt create mode 100644 gemfeed/examples/conf/frontends/scripts/foostats.pl create mode 100644 gemfeed/examples/conf/frontends/scripts/gemtexter.sh.tpl create mode 100644 gemfeed/examples/conf/frontends/scripts/rsync.sh.tpl create mode 100644 gemfeed/examples/conf/frontends/scripts/taskwarrior.sh.tpl create mode 100644 gemfeed/examples/conf/frontends/var/nsd/etc/key.conf.tpl create mode 100644 gemfeed/examples/conf/frontends/var/nsd/etc/nsd.conf.master.tpl create mode 100644 gemfeed/examples/conf/frontends/var/nsd/etc/nsd.conf.slave.tpl create mode 100644 gemfeed/examples/conf/frontends/var/nsd/zones/master/buetow.org.zone.tpl create mode 100644 gemfeed/examples/conf/frontends/var/nsd/zones/master/dtail.dev.zone.tpl create mode 100644 gemfeed/examples/conf/frontends/var/nsd/zones/master/foo.zone.zone.tpl create mode 100644 gemfeed/examples/conf/frontends/var/nsd/zones/master/irregular.ninja.zone.tpl create mode 100644 gemfeed/examples/conf/frontends/var/nsd/zones/master/paul.cyou.zone.tpl create mode 100644 gemfeed/examples/conf/frontends/var/nsd/zones/master/snonux.foo.zone.tpl create mode 100644 gemfeed/examples/conf/frontends/var/www/htdocs/buetow.org/self/index.txt.tpl create mode 100644 gemfeed/examples/conf/playground/Rexfile create mode 100644 gemfeed/examples/conf/playground/openbsd_cron_test.debug.txt create mode 100644 gemfeed/examples/conf/playground/openbsd_cron_test.txt delete mode 100644 gemfeed/stunnel-nfs-quick-reference.txt diff --git a/about/resources.md b/about/resources.md index 18294e43..fa57796a 100644 --- a/about/resources.md +++ b/about/resources.md @@ -35,107 +35,107 @@ You won't find any links on this site because, over time, the links will break. In random order: -* The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton +* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly +* The Pragmatic Programmer; David Thomas; Addison-Wesley +* Ultimate Go Notebook; Bill Kennedy +* 97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly * C++ Programming Language; Bjarne Stroustrup; -* DNS and BIND; Cricket Liu; O'Reilly -* Site Reliability Engineering; How Google runs production systems; O'Reilly -* The Kubernetes Book; Nigel Poulton; Unabridged Audiobook -* Higher Order Perl; Mark Dominus; Morgan Kaufmann +* Modern Perl; Chromatic ; Onyx Neon Press * Funktionale Programmierung; Peter Pepper; Springer -* Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson -* Developing Games in Java; David Brackeen and others...; New Riders -* Raku Fundamentals; Moritz Lenz; Apress * DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible -* Terraform Cookbook; Mikael Krief; Packt Publishing -* Effective Java; Joshua Bloch; Addison-Wesley Professional -* Perl New Features; Joshua McAdams, brian d foy; Perl School +* Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt * The Docker Book; James Turnbull; Kindle -* The Pragmatic Programmer; David Thomas; Addison-Wesley -* Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook -* Raku Recipes; J.J. Merelo; Apress -* 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications -* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional -* 97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly +* Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson +* The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton * The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible -* Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly -* Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers -* The Practise of System and Network Administration; Thomas A. Limoncelli, Christina J. Hogan, Strata R. Chalup; Addison-Wesley Professional Pro Git; Scott Chacon, Ben Straub; Apress * Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications -* Data Science at the Command Line; Jeroen Janssens; O'Reilly -* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly -* Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly -* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly * Effective awk programming; Arnold Robbins; O'Reilly -* Concurrency in Go; Katherine Cox-Buday; O'Reilly -* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner -* Modern Perl; Chromatic ; Onyx Neon Press * Java ist auch eine Insel; Christian Ullenboom; -* Leanring eBPF; Liz Rice; O'Reilly -* Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers +* The Practise of System and Network Administration; Thomas A. Limoncelli, Christina J. Hogan, Strata R. Chalup; Addison-Wesley Professional Pro Git; Scott Chacon, Ben Straub; Apress +* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly +* Site Reliability Engineering; How Google runs production systems; O'Reilly +* Higher Order Perl; Mark Dominus; Morgan Kaufmann * Polished Ruby Programming; Jeremy Evans; Packt Publishing -* Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press +* Leanring eBPF; Liz Rice; O'Reilly +* Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly * Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly -* Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press +* Data Science at the Command Line; Jeroen Janssens; O'Reilly +* Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers +* Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf +* Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly +* Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook +* 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications +* Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly +* Raku Fundamentals; Moritz Lenz; Apress +* Terraform Cookbook; Mikael Krief; Packt Publishing +* Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers * Systemprogrammierung in Go; Frank Müller; dpunkt -* Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt +* The Kubernetes Book; Nigel Poulton; Unabridged Audiobook +* DNS and BIND; Cricket Liu; O'Reilly * Pro Puppet; James Turnbull, Jeffrey McCune; Apress -* Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf -* Ultimate Go Notebook; Bill Kennedy -* Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly +* Developing Games in Java; David Brackeen and others...; New Riders +* Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press +* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional +* Raku Recipes; J.J. Merelo; Apress +* Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press +* Perl New Features; Joshua McAdams, brian d foy; Perl School +* Effective Java; Joshua Bloch; Addison-Wesley Professional +* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner +* Concurrency in Go; Katherine Cox-Buday; O'Reilly ## Technical references I didn't read them from the beginning to the end, but I am using them to look up things. The books are in random order: * BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley +* Relayd and Httpd Mastery; Michael W Lucas +* Implementing Service Level Objectives; Alex Hidalgo; O'Reilly +* Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly * The Linux Programming Interface; Michael Kerrisk; No Starch Press +* Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley * Go: Design Patterns for Real-World Projects; Mat Ryer; Packt * Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly -* Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly -* Relayd and Httpd Mastery; Michael W Lucas -* Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley -* Implementing Service Level Objectives; Alex Hidalgo; O'Reilly ## Self-development and soft-skills books In random order: -* Ultralearning; Scott Young; Thorsons -* Getting Things Done; David Allen -* 97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook -* Solve for Happy; Mo Gawdat (RE-READ 1ST TIME) -* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books * Stop starting, start finishing; Arne Roock; Lean-Kanban University -* Atomic Habits; James Clear; Random House Business +* 97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook +* Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing * Never Split the Difference; Chris Voss, Tahl Raz; Random House Business -* The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK -* So Good They Can't Ignore You; Cal Newport; Business Plus -* Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion +* Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook +* 101 Essays that change the way you think; Brianna Wiest; Audiobook +* Eat That Frog; Brian Tracy * Influence without Authority; A. Cohen, D. Bradford; Wiley -* The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook -* Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing -* The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd +* Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook +* Psycho-Cybernetics; Maxwell Maltz; Perigee Books +* Atomic Habits; James Clear; Random House Business +* The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME) +* The Bullet Journal Method; Ryder Carroll; Fourth Estate * Eat That Frog!; Brian Tracy; Hodder Paperbacks -* 101 Essays that change the way you think; Brianna Wiest; Audiobook * Slow Productivity; Cal Newport; Penguin Random House -* Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook -* Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook +* Solve for Happy; Mo Gawdat (RE-READ 1ST TIME) +* The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd +* Ultralearning; Scott Young; Thorsons +* The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK +* Digital Minimalism; Cal Newport; Portofolio Penguin +* Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion +* Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne +* Meditation for Mortals, Oliver Burkeman, Audiobook +* Getting Things Done; David Allen +* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books +* The Good Enough Job; Simone Stolzoff; Ebury Edge * The Power of Now; Eckhard Tolle; Yellow Kite -* Soft Skills; John Sommez; Manning Publications -* The Joy of Missing Out; Christina Crook; New Society Publishers -* Eat That Frog; Brian Tracy +* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select * Deep Work; Cal Newport; Piatkus -* The Bullet Journal Method; Ryder Carroll; Fourth Estate -* The Good Enough Job; Simone Stolzoff; Ebury Edge +* So Good They Can't Ignore You; Cal Newport; Business Plus +* Soft Skills; John Sommez; Manning Publications * Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press -* Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne -* The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME) -* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select -* Digital Minimalism; Cal Newport; Portofolio Penguin -* Ultralearning; Anna Laurent; Self-published via Amazon +* The Joy of Missing Out; Christina Crook; New Society Publishers * Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly -* Psycho-Cybernetics; Maxwell Maltz; Perigee Books -* Meditation for Mortals, Oliver Burkeman, Audiobook +* The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook +* Ultralearning; Anna Laurent; Self-published via Amazon [Here are notes of mine for some of the books](../notes/index.md) @@ -144,21 +144,21 @@ In random order: Some of these were in-person with exams; others were online learning lectures only. In random order: * Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon -* F5 Loadbalancers Training; 2-day on-site training; F5, Inc. -* Functional programming lecture; Remote University of Hagen -* The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online -* Developing IaC with Terraform (with Live Lessons); O'Reilly Online +* Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online * MySQL Deep Dive Workshop; 2-day on-site training -* The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online -* Structure and Interpretation of Computer Programs; Harold Abelson and more...; * Red Hat Certified System Administrator; Course + certification (Although I had the option, I decided not to take the next course as it is more effective to self learn what I need) +* The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online +* F5 Loadbalancers Training; 2-day on-site training; F5, Inc. +* Developing IaC with Terraform (with Live Lessons); O'Reilly Online +* Scripting Vim; Damian Conway; O'Reilly Online * AWS Immersion Day; Amazon; 1-day interactive online training -* Ultimate Go Programming; Bill Kennedy; O'Reilly Online +* Structure and Interpretation of Computer Programs; Harold Abelson and more...; * Apache Tomcat Best Practises; 3-day on-site training -* Protocol buffers; O'Reilly Online +* The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online * Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training -* Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online -* Scripting Vim; Damian Conway; O'Reilly Online +* Protocol buffers; O'Reilly Online +* Ultimate Go Programming; Bill Kennedy; O'Reilly Online +* Functional programming lecture; Remote University of Hagen ## Technical guides @@ -174,20 +174,20 @@ These are not whole books, but guides (smaller or larger) which I found very use In random order: +* Wednesday Wisdom +* Fork Around And Find Out * The ProdCast (Google SRE Podcast) -* Backend Banter * The Changelog Podcast(s) +* Modern Mentor +* Backend Banter +* Pratical AI * Maintainable * Hidden Brain -* Deep Questions with Cal Newport -* Wednesday Wisdom -* Modern Mentor * BSD Now [BSD] -* Fork Around And Find Out * Fallthrough [Golang] * Dev Interrupted +* Deep Questions with Cal Newport * The Pragmatic Engineer Podcast -* Pratical AI * Cup o' Go [Golang] ### Podcasts I liked @@ -196,35 +196,35 @@ I liked them but am not listening to them anymore. The podcasts have either "fin * Go Time (predecessor of fallthrough) * CRE: Chaosradio Express [german] -* Java Pub House * Ship It (predecessor of Fork Around And Find Out) -* Modern Mentor +* Java Pub House * FLOSS weekly +* Modern Mentor ## Newsletters I like This is a mix of tech and non-tech newsletters I am subscribed to. In random order: -* Andreas Brandhorst Newsletter (Sci-Fi author) -* The Imperfectionist -* Register Spill -* Applied Go Weekly Newsletter -* VK Newsletter -* Golang Weekly * Monospace Mentor -* The Valuable Dev -* Changelog News -* The Pragmatic Engineer +* Golang Weekly +* The Imperfectionist +* Andreas Brandhorst Newsletter (Sci-Fi author) * Ruby Weekly +* Changelog News +* VK Newsletter * byteSizeGo +* The Pragmatic Engineer +* The Valuable Dev +* Register Spill +* Applied Go Weekly Newsletter ## Magazines I like(d) This is a mix of tech I like(d). I may not be a current subscriber, but now and then, I buy an issue. In random order: * LWN (online only) -* Linux User * freeX (not published anymore) +* Linux User * Linux Magazine # Formal education diff --git a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.md b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.md index f2735c9a..a404257a 100644 --- a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.md +++ b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.md @@ -397,6 +397,7 @@ E-Mail your comments to `paul@nospam.buetow.org` :-) Other *BSD related posts are: +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) diff --git a/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md b/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md index 89733b51..bc316eba 100644 --- a/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md +++ b/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md @@ -676,6 +676,7 @@ E-Mail your comments to `paul@nospam.buetow.org` :-) Other *BSD related posts are: +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) diff --git a/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.md b/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.md index 9f6f400d..ae0ce0c7 100644 --- a/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.md +++ b/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.md @@ -53,6 +53,7 @@ E-Mail your comments to `paul@nospam.buetow.org` :-) Other *BSD related posts are: +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) diff --git a/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.md b/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.md index 0c8455af..c72c4e0a 100644 --- a/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.md +++ b/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.md @@ -300,6 +300,7 @@ E-Mail your comments to `paul@nospam.buetow.org` :-) Other *BSD and KISS related posts are: +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) diff --git a/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.md b/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.md index 05ba7e53..a4603be6 100644 --- a/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.md +++ b/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.md @@ -14,6 +14,7 @@ These are all the posts so far: [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [![f3s logo](./f3s-kubernetes-with-freebsd-part-1/f3slogo.png "f3s logo")](./f3s-kubernetes-with-freebsd-part-1/f3slogo.png) @@ -162,6 +163,7 @@ Read the next post of this series: Other *BSD-related posts: +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) diff --git a/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.md b/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.md index 5337f8e4..7a5ce6c6 100644 --- a/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.md +++ b/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.md @@ -1,4 +1,4 @@ - f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation +# f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation > Published at 2024-12-02T23:48:21+02:00 @@ -14,6 +14,7 @@ These are all the posts so far: [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [![f3s logo](./f3s-kubernetes-with-freebsd-part-1/f3slogo.png "f3s logo")](./f3s-kubernetes-with-freebsd-part-1/f3slogo.png) @@ -23,6 +24,7 @@ Let's continue... ## Table of Contents +* [⇢ f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation](#f3s-kubernetes-with-freebsd---part-2-hardware-and-base-installation) * [⇢ Deciding on the hardware](#deciding-on-the-hardware) * [⇢ ⇢ Not ARM but Intel N100 ](#not-arm-but-intel-n100-) * [⇢ ⇢ Beelink unboxing](#beelink-unboxing) @@ -302,6 +304,7 @@ Read the next post of this series: Other *BSD-related posts: +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) diff --git a/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.md b/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.md index f11a637f..cdf1eb84 100644 --- a/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.md +++ b/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.md @@ -10,6 +10,7 @@ This is the third blog post about my f3s series for my self-hosting demands in m [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [![f3s logo](./f3s-kubernetes-with-freebsd-part-1/f3slogo.png "f3s logo")](./f3s-kubernetes-with-freebsd-part-1/f3slogo.png) @@ -364,6 +365,7 @@ Read the next post of this series: Other BSD related posts are: +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) diff --git a/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.md b/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.md index 9a80f5fe..96f4bc16 100644 --- a/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.md +++ b/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.md @@ -10,6 +10,7 @@ This is the fourth blog post about the f3s series for self-hosting demands in a [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs (You are currently reading this)](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [![f3s logo](./f3s-kubernetes-with-freebsd-part-1/f3slogo.png "f3s logo")](./f3s-kubernetes-with-freebsd-part-1/f3slogo.png) @@ -510,6 +511,7 @@ Read the next post of this series: Other *BSD-related posts: +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs (You are currently reading this)](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) diff --git a/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5.md b/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5.md index 1dca3454..f1e5d288 100644 --- a/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5.md +++ b/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5.md @@ -14,6 +14,7 @@ These are all the posts so far: [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network (You are currently reading this)](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [![f3s logo](./f3s-kubernetes-with-freebsd-part-1/f3slogo.png "f3s logo")](./f3s-kubernetes-with-freebsd-part-1/f3slogo.png) @@ -931,6 +932,7 @@ Read the next post of this series: Other *BSD-related posts: +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network (You are currently reading this)](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) diff --git a/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.md b/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.md index 490ae012..4e060a6d 100644 --- a/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.md +++ b/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.md @@ -10,6 +10,7 @@ This is the sixth blog post about the f3s series for self-hosting demands in a h [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage (You are currently reading this)](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [![f3s logo](./f3s-kubernetes-with-freebsd-part-1/f3slogo.png "f3s logo")](./f3s-kubernetes-with-freebsd-part-1/f3slogo.png) @@ -719,7 +720,7 @@ Whereas: Next, update `/etc/hosts` on all nodes (`f0`, `f1`, `f2`, `r0`, `r1`, `r2`) to resolve the VIP hostname: ``` -192.168.1.138 f3s-storage-ha f3s-storage-ha.lan f3s-storage-ha.lan.buetow.org +192.168.2.138 f3s-storage-ha f3s-storage-ha.wg0 f3s-storage-ha.wg0.wan.buetow.org ``` This allows clients to connect to `f3s-storage-ha` regardless of which physical server is currently the MASTER. @@ -1400,7 +1401,7 @@ To mount NFS through the stunnel encrypted tunnel, we run: clientaddr=127.0.0.1,local_lock=none,addr=127.0.0.1) # For persistent mount, add to /etc/fstab: -127.0.0.1:/data/nfs/k3svolumes /data/nfs/k3svolumes nfs4 port=2323,_netdev 0 0 +127.0.0.1:/k3svolumes /data/nfs/k3svolumes nfs4 port=2323,_netdev,soft,timeo=10,retrans=2,intr 0 0 ``` Note: The mount uses localhost (`127.0.0.1`) because stunnel is listening locally and forwarding the encrypted traffic to the remote server. @@ -1650,10 +1651,13 @@ MooseFS is a fault-tolerant, distributed file system that could provide proper h Both technologies could run on top of our encrypted ZFS volumes, combining ZFS's data integrity and encryption features with distributed storage capabilities. This would be particularly interesting for workloads that need either S3-compatible APIs (MinIO) or transparent distributed POSIX storage (MooseFS). What about Ceph and GlusterFS? Unfortunately, there doesn't seem to be great native FreeBSD support for them. However, other alternatives also appear suitable for my use case. -I'm looking forward to the next post in this series, where we will set up k3s (Kubernetes) on the Linux VMs. +Read the next post of this series: + +[f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) Other *BSD-related posts: +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) [2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage (You are currently reading this)](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) [2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) [2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) diff --git a/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.md b/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.md new file mode 100644 index 00000000..190bab41 --- /dev/null +++ b/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.md @@ -0,0 +1,960 @@ +# f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments + +> Published at 2025-10-02T11:27:19+03:00 + +This is the seventh blog post about the f3s series for my self-hosting demands in a home lab. f3s? The "f" stands for FreeBSD, and the "3s" stands for k3s, the Kubernetes distribution I use on FreeBSD-based physical machines. + +[2024-11-17 f3s: Kubernetes with FreeBSD - Part 1: Setting the stage](./2024-11-17-f3s-kubernetes-with-freebsd-part-1.md) +[2024-12-03 f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation](./2024-12-03-f3s-kubernetes-with-freebsd-part-2.md) +[2025-02-01 f3s: Kubernetes with FreeBSD - Part 3: Protecting from power cuts](./2025-02-01-f3s-kubernetes-with-freebsd-part-3.md) +[2025-04-05 f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs](./2025-04-05-f3s-kubernetes-with-freebsd-part-4.md) +[2025-05-11 f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network](./2025-05-11-f3s-kubernetes-with-freebsd-part-5.md) +[2025-07-14 f3s: Kubernetes with FreeBSD - Part 6: Storage](./2025-07-14-f3s-kubernetes-with-freebsd-part-6.md) +[2025-10-02 f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments (You are currently reading this)](./2025-10-02-f3s-kubernetes-with-freebsd-part-7.md) + +[![f3s logo](./f3s-kubernetes-with-freebsd-part-1/f3slogo.png "f3s logo")](./f3s-kubernetes-with-freebsd-part-1/f3slogo.png) + +## Table of Contents + +* [⇢ f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments](#f3s-kubernetes-with-freebsd---part-7-k3s-and-first-pod-deployments) +* [⇢ ⇢ Introduction](#introduction) +* [⇢ ⇢ Updating](#updating) +* [⇢ ⇢ Installing k3s](#installing-k3s) +* [⇢ ⇢ ⇢ Generating `K3S_TOKEN` and starting the first k3s node](#generating-k3stoken-and-starting-the-first-k3s-node) +* [⇢ ⇢ ⇢ Adding the remaining nodes to the cluster](#adding-the-remaining-nodes-to-the-cluster) +* [⇢ ⇢ Test deployments](#test-deployments) +* [⇢ ⇢ ⇢ Test deployment to Kubernetes](#test-deployment-to-kubernetes) +* [⇢ ⇢ ⇢ Test deployment with persistent volume claim](#test-deployment-with-persistent-volume-claim) +* [⇢ ⇢ ⇢ Scaling Traefik for faster failover](#scaling-traefik-for-faster-failover) +* [⇢ ⇢ Make it accessible from the public internet](#make-it-accessible-from-the-public-internet) +* [⇢ ⇢ ⇢ OpenBSD relayd configuration](#openbsd-relayd-configuration) +* [⇢ ⇢ Deploying the private Docker image registry](#deploying-the-private-docker-image-registry) +* [⇢ ⇢ ⇢ Prepare the NFS-backed storage](#prepare-the-nfs-backed-storage) +* [⇢ ⇢ ⇢ Install (or upgrade) the chart](#install-or-upgrade-the-chart) +* [⇢ ⇢ ⇢ Allow nodes and workstations to trust the registry](#allow-nodes-and-workstations-to-trust-the-registry) +* [⇢ ⇢ ⇢ Pushing and pulling images](#pushing-and-pulling-images) +* [⇢ ⇢ Example: Anki Sync Server from the private registry](#example-anki-sync-server-from-the-private-registry) +* [⇢ ⇢ ⇢ Build and push the image](#build-and-push-the-image) +* [⇢ ⇢ ⇢ Create the Anki secret and storage on the cluster](#create-the-anki-secret-and-storage-on-the-cluster) +* [⇢ ⇢ ⇢ Deploy the chart](#deploy-the-chart) +* [⇢ ⇢ NFSv4 UID mapping for Postgres-backed (and other) apps](#nfsv4-uid-mapping-for-postgres-backed-and-other-apps) +* [⇢ ⇢ ⇢ Helm charts currently in service](#helm-charts-currently-in-service) + +## Introduction + +In this blog post, I am finally going to install k3s (the Kubernetes distribution I use) to the whole setup and deploy the first workloads (helm charts, and a private registry) to it. + +[https://k3s.io](https://k3s.io) + +## Updating + +Before proceeding, I bring all systems involved up-to-date. On all three Rocky Linux 9 boxes `r0`, `r1`, and `r2`: + +```sh +dnf update -y +reboot +``` + +On the FreeBSD hosts, I upgraded from FreeBSD 14.2 to 14.3-RELEASE, running this on all three hosts `f0`, `f1` and `f2`: + +```sh +paul@f0:~ % doas freebsd-update fetch +paul@f0:~ % doas freebsd-update install +paul@f0:~ % doas reboot +. +. +. +paul@f0:~ % doas freebsd-update -r 14.3-RELEASE upgrade +paul@f0:~ % doas freebsd-update install +paul@f0:~ % doas freebsd-update install +paul@f0:~ % doas reboot +. +. +. +paul@f0:~ % doas freebsd-update install +paul@f0:~ % doas pkg update +paul@f0:~ % doas pkg upgrade +paul@f0:~ % doas reboot +. +. +. +paul@f0:~ % uname -a +FreeBSD f0.lan.buetow.org 14.3-RELEASE FreeBSD 14.3-RELEASE + releng/14.3-n271432-8c9ce319fef7 GENERIC amd64 +``` + +## Installing k3s + +### Generating `K3S_TOKEN` and starting the first k3s node + +I generated the k3s token on my Fedora laptop with `pwgen -n 32` and selected one of the results. Then, on all three `r` hosts, I ran the following (replace SECRET_TOKEN with the actual secret): + +```sh +[root@r0 ~]# echo -n SECRET_TOKEN > ~/.k3s_token +``` + +The following steps are also documented on the k3s website: + +[https://docs.k3s.io/datastore/ha-embedded](https://docs.k3s.io/datastore/ha-embedded) + +To bootstrap k3s on the first node, I ran this on `r0`: + +```sh +[root@r0 ~]# curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \ + sh -s - server --cluster-init --tls-san=r0.wg0.wan.buetow.org +[INFO] Finding release for channel stable +[INFO] Using v1.32.6+k3s1 as release +. +. +. +[INFO] systemd: Starting k3s +``` + +### Adding the remaining nodes to the cluster + +Then I ran on the other two nodes `r1` and `r2`: + +```sh +[root@r1 ~]# curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \ + sh -s - server --server https://r0.wg0.wan.buetow.org:6443 \ + --tls-san=r1.wg0.wan.buetow.org + +[root@r2 ~]# curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \ + sh -s - server --server https://r0.wg0.wan.buetow.org:6443 \ + --tls-san=r2.wg0.wan.buetow.org +. +. +. + +``` + +Once done, I had a three-node Kubernetes cluster control plane: + +```sh +[root@r0 ~]# kubectl get nodes +NAME STATUS ROLES AGE VERSION +r0.lan.buetow.org Ready control-plane,etcd,master 4m44s v1.32.6+k3s1 +r1.lan.buetow.org Ready control-plane,etcd,master 3m13s v1.32.6+k3s1 +r2.lan.buetow.org Ready control-plane,etcd,master 30s v1.32.6+k3s1 + +[root@r0 ~]# kubectl get pods --all-namespaces +NAMESPACE NAME READY STATUS RESTARTS AGE +kube-system coredns-5688667fd4-fs2jj 1/1 Running 0 5m27s +kube-system helm-install-traefik-crd-f9hgd 0/1 Completed 0 5m27s +kube-system helm-install-traefik-zqqqk 0/1 Completed 2 5m27s +kube-system local-path-provisioner-774c6665dc-jqlnc 1/1 Running 0 5m27s +kube-system metrics-server-6f4c6675d5-5xpmp 1/1 Running 0 5m27s +kube-system svclb-traefik-411cec5b-cdp2l 2/2 Running 0 78s +kube-system svclb-traefik-411cec5b-f625r 2/2 Running 0 4m58s +kube-system svclb-traefik-411cec5b-twrd7 2/2 Running 0 4m2s +kube-system traefik-c98fdf6fb-lt6fx 1/1 Running 0 4m58s +``` + +In order to connect with `kubectl` from my Fedora laptop, I had to copy `/etc/rancher/k3s/k3s.yaml` from `r0` to `~/.kube/config` and then replace the value of the server field with `r0.lan.buetow.org`. kubectl can now manage the cluster. Note that this step has to be repeated when I want to connect to another node of the cluster (e.g. when `r0` is down). + +## Test deployments + +### Test deployment to Kubernetes + +Let's create a test namespace: + +```sh +> ~ kubectl create namespace test +namespace/test created + +> ~ kubectl get namespaces +NAME STATUS AGE +default Active 6h11m +kube-node-lease Active 6h11m +kube-public Active 6h11m +kube-system Active 6h11m +test Active 5s + +> ~ kubectl config set-context --current --namespace=test +Context "default" modified. +``` + +And let's also create an Apache test pod: + +```sh +> ~ cat < apache-deployment.yaml +# Apache HTTP Server Deployment +apiVersion: apps/v1 +kind: Deployment +metadata: + name: apache-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: apache + template: + metadata: + labels: + app: apache + spec: + containers: + - name: apache + image: httpd:latest + ports: + # Container port where Apache listens + - containerPort: 80 +END + +> ~ kubectl apply -f apache-deployment.yaml +deployment.apps/apache-deployment created + +> ~ kubectl get all +NAME READY STATUS RESTARTS AGE +pod/apache-deployment-5fd955856f-4pjmf 1/1 Running 0 7s + +NAME READY UP-TO-DATE AVAILABLE AGE +deployment.apps/apache-deployment 1/1 1 1 7s + +NAME DESIRED CURRENT READY AGE +replicaset.apps/apache-deployment-5fd955856f 1 1 1 7s +``` + +Let's also create a service: + +```sh +> ~ cat < apache-service.yaml +apiVersion: v1 +kind: Service +metadata: + labels: + app: apache + name: apache-service +spec: + ports: + - name: web + port: 80 + protocol: TCP +