commit 1db5827e15eec0e1c756d2a2fecedbaa0f4c92eb
Author: MTRNord <mtrnord1@gmail.com>
Date: Fri, 25 Oct 2024 10:54:35 +0200
Initial commit
Diffstat:
4 files changed, 480 insertions(+), 0 deletions(-)
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
@@ -0,0 +1,22 @@
+name: Build PDF
+
+on:
+ push:
+ paths:
+ - '**/*.tex'
+ - '**/*.bib'
+
+jobs:
+ build-pdf:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: docker://ghcr.io/qjoly/xelatex:latest
+ with:
+ args: |
+ root.tex
+ - uses: actions/upload-artifact@v2
+ with:
+ name: document
+ path: |
+ root.pdf
diff --git a/.gitignore b/.gitignore
@@ -0,0 +1,309 @@
+## Core latex/pdflatex auxiliary files:
+*.aux
+*.lof
+*.log
+*.lot
+*.fls
+*.out
+*.toc
+*.fmt
+*.fot
+*.cb
+*.cb2
+.*.lb
+
+## Intermediate documents:
+*.dvi
+*.xdv
+*-converted-to.*
+# these rules might exclude image files for figures etc.
+# *.ps
+# *.eps
+# *.pdf
+
+## Generated if empty string is given at "Please type another file name for output:"
+.pdf
+
+## Bibliography auxiliary files (bibtex/biblatex/biber):
+*.bbl
+*.bcf
+*.blg
+*-blx.aux
+*-blx.bib
+*.run.xml
+
+## Build tool auxiliary files:
+*.fdb_latexmk
+*.synctex
+*.synctex(busy)
+*.synctex.gz
+*.synctex.gz(busy)
+*.pdfsync
+*.rubbercache
+rubber.cache
+
+## Build tool directories for auxiliary files
+# latexrun
+latex.out/
+
+## Auxiliary and intermediate files from other packages:
+# algorithms
+*.alg
+*.loa
+
+# achemso
+acs-*.bib
+
+# amsthm
+*.thm
+
+# beamer
+*.nav
+*.pre
+*.snm
+*.vrb
+
+# changes
+*.soc
+
+# comment
+*.cut
+
+# cprotect
+*.cpt
+
+# elsarticle (documentclass of Elsevier journals)
+*.spl
+
+# endnotes
+*.ent
+
+# fixme
+*.lox
+
+# feynmf/feynmp
+*.mf
+*.mp
+*.t[1-9]
+*.t[1-9][0-9]
+*.tfm
+
+#(r)(e)ledmac/(r)(e)ledpar
+*.end
+*.?end
+*.[1-9]
+*.[1-9][0-9]
+*.[1-9][0-9][0-9]
+*.[1-9]R
+*.[1-9][0-9]R
+*.[1-9][0-9][0-9]R
+*.eledsec[1-9]
+*.eledsec[1-9]R
+*.eledsec[1-9][0-9]
+*.eledsec[1-9][0-9]R
+*.eledsec[1-9][0-9][0-9]
+*.eledsec[1-9][0-9][0-9]R
+
+# glossaries
+*.acn
+*.acr
+*.glg
+*.glo
+*.gls
+*.glsdefs
+*.lzo
+*.lzs
+*.slg
+*.slo
+*.sls
+
+# uncomment this for glossaries-extra (will ignore makeindex's style files!)
+# *.ist
+
+# gnuplot
+*.gnuplot
+*.table
+
+# gnuplottex
+*-gnuplottex-*
+
+# gregoriotex
+*.gaux
+*.glog
+*.gtex
+
+# htlatex
+*.4ct
+*.4tc
+*.idv
+*.lg
+*.trc
+*.xref
+
+# hypdoc
+*.hd
+
+# hyperref
+*.brf
+
+# knitr
+*-concordance.tex
+# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files
+# *.tikz
+*-tikzDictionary
+
+# listings
+*.lol
+
+# luatexja-ruby
+*.ltjruby
+
+# makeidx
+*.idx
+*.ilg
+*.ind
+
+# minitoc
+*.maf
+*.mlf
+*.mlt
+*.mtc[0-9]*
+*.slf[0-9]*
+*.slt[0-9]*
+*.stc[0-9]*
+
+# minted
+_minted*
+*.pyg
+
+# morewrites
+*.mw
+
+# newpax
+*.newpax
+
+# nomencl
+*.nlg
+*.nlo
+*.nls
+
+# pax
+*.pax
+
+# pdfpcnotes
+*.pdfpc
+
+# sagetex
+*.sagetex.sage
+*.sagetex.py
+*.sagetex.scmd
+
+# scrwfile
+*.wrt
+
+# svg
+svg-inkscape/
+
+# sympy
+*.sout
+*.sympy
+sympy-plots-for-*.tex/
+
+# pdfcomment
+*.upa
+*.upb
+
+# pythontex
+*.pytxcode
+pythontex-files-*/
+
+# tcolorbox
+*.listing
+
+# thmtools
+*.loe
+
+# TikZ & PGF
+*.dpth
+*.md5
+*.auxlock
+
+# titletoc
+*.ptc
+
+# todonotes
+*.tdo
+
+# vhistory
+*.hst
+*.ver
+
+# easy-todo
+*.lod
+
+# xcolor
+*.xcp
+
+# xmpincl
+*.xmpi
+
+# xindy
+*.xdy
+
+# xypic precompiled matrices and outlines
+*.xyc
+*.xyd
+
+# endfloat
+*.ttt
+*.fff
+
+# Latexian
+TSWLatexianTemp*
+
+## Editors:
+# WinEdt
+*.bak
+*.sav
+
+# Texpad
+.texpadtmp
+
+# LyX
+*.lyx~
+
+# Kile
+*.backup
+
+# gummi
+.*.swp
+
+# KBibTeX
+*~[0-9]*
+
+# TeXnicCenter
+*.tps
+
+# auto folder when using emacs and auctex
+./auto/*
+*.el
+
+# expex forward references with \gathertags
+*-tags.tex
+
+# standalone packages
+*.sta
+
+# Makeindex log files
+*.lpz
+
+# xwatermark package
+*.xwm
+
+# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib
+# option is specified. Footnotes are the stored in a file with suffix Notes.bib.
+# Uncomment the next line to have this generated file ignored.
+#*Notes.bib
+
+*.ist
+*.pdf
diff --git a/bibliography.bib b/bibliography.bib
@@ -0,0 +1,20 @@
+@online{helm,
+ title = {The Helm Webpage},
+ urldate = {2024-10-24},
+ url = {https://helm.sh},
+ %shorthand={helm},
+}
+
+@online{helm:functions_and_pipelines,
+ title = {Template Functions and Pipelines},
+ urldate = {2024-10-24},
+ url = {https://helm.sh/docs/chart_template_guide/functions_and_pipelines/},
+ %shorthand={helm functions and pipelines},
+}
+
+@online{go_template,
+ title = {Go "template" Standard Library},
+ urldate = {2024-10-24},
+ url = {https://pkg.go.dev/text/template},
+ %shorthand={go template},
+}
+\ No newline at end of file
diff --git a/root.tex b/root.tex
@@ -0,0 +1,128 @@
+\documentclass[english]{scrreprt}
+\usepackage[english]{babel}
+\usepackage{scrhack}
+\usepackage[headsepline,automark,autooneside=false]{scrlayer-scrpage}
+\usepackage{xcolor}
+\usepackage{hyperref}
+\usepackage{minted}
+\usepackage{csquotes}
+\usepackage{lastpage}
+\usepackage{tcolorbox}
+\usepackage{setspace}
+\usepackage[acronym,automake]{glossaries-extra}
+\usepackage[
+ backend=biber,
+ %style=alphabetic,
+ sorting=ynt
+]{biblatex}
+\usepackage{comment}
+
+\addbibresource{bibliography.bib}
+
+\onehalfspacing
+
+% Setup hyperref
+\hypersetup{
+ colorlinks=true,
+ linkcolor=blue,
+ urlcolor=blue
+}
+
+% Setup headers
+\clearpairofpagestyles
+\ihead{Helm - A Quickstart Guide and Styleguide}
+\ohead{\leftmark}
+\cfoot*{\pagemark\ of \pageref*{LastPage}}
+\setkomafont{pagenumber}{}
+\renewcommand\chapterpagestyle{scrheadings}
+
+% Title Page
+\title{Helm - A Quickstart Guide and Styleguide}
+\subtitle{An opinionated starter to Helm Charts}
+\author{Marcel Radzio}
+
+% Setup glossary
+\setabbreviationstyle[acronym]{long-short}
+% Glossary definitions
+\newglossaryentry{k8s_resources}{
+ name={Kubernetes Resource},
+ description={A Kubernetes Resource is a YAML document defining a thing inside of a Kubernetes Cluster. This for example can be a Pod}
+}
+\newacronym{k8s}{k8s}{Kubernetes}
+\newacronym{oci}{OCI}{Open Container Initiative}
+\newacronym{ux}{UX}{User Experience}
+% Make it
+\makeglossaries
+
+\begin{document}
+\maketitle
+\tableofcontents
+
+\chapter{What is Helm?}
+Helm is a system for managing \Glspl{k8s_resources} and being able to deliver a simple to deploy bundle to administrators using \Gls{k8s} similar to Docker Compose or Ansible.
+
+It is one of the most used packaging systems in the \Gls{k8s} ecosystem and helps to provide a consistent \gls{ux} in the ecosystem.
+
+\section{Helm as a packaging system}
+Helm itself describes itself as \enquote{The package manager for Kubernetes}\cite{helm}
+This means it's main goal and design is centered around being able to package an application, deal with dependencies and versioning.
+
+As a result of this Helm is a generic way to define an application deployment.
+In doing that it shares similarities with systems like Ansible, nix and other packaging solutions in the Linux world.
+In the typical Docker illustration style the Helm deployment would be a delivery which contains a given set of Containers which are delivered together to build a single big thing.
+
+\section{Helm as a template engine}
+As part of being a package manager for Kubernetes it has to deal with definitions written in pure YAML.
+Therefor it features a powerful template engine which works similar to how Ansible's template engine works.
+
+Under the hood this is archived by using the Go template language\cite{helm:functions_and_pipelines,go_template} as well as additional go functions provided to the users.
+
+On top of the template language itself it also provides the option to print messages at the end of the installation or upgrade as well as nesting charts, having libraries for charts and using a global value context.
+These are needed to provide consistent helm charts across a company or set of related charts and to ensure a nice \gls{ux} for those deploying said chart.
+
+\section{Features Helm gives us over pure \Glspl{k8s_resources}}
+Pure \Glspl{k8s_resources} come with multiple downsides over helm or similar packaging systems for \Gls{k8s}.
+
+\Gls{k8s} brings no update management or atomic deployment management itself.
+This means that an admin would need to ensure that they manually deploy each thing every time, possibly in the correct order and then has to ensure that it did not break.
+If despite all efforts it did break you now end up with no easy way to rollback.
+Ideally one has a git to go from but this might not be a safe operation either and may lead to new issues.
+
+Helm on the other side brings two major things to the table.
+It provides a way to manage the version independent of the product version.
+This is called the \emph{version} of the Helm package, while the version of the product is called \enquote{\emph{appVersion}} in Helm.
+Helm also provides you with a history of deployments.
+This list tracks if a deployment is in progress, successful, failed or rolled back.
+Due to this list helm allows you to seamlessly \emph{rollback} to any prior deployment you made.\footnote{While a \emph{rollback} is possible it is not possible to jump forward afterwards}
+Additionally to the manual rollback Helm has the feature of atomic updates, which automatically will rollback to the last successful deployment version in case of invalid templates, values\footnote{Only syntactic errors} or failures to rollout the deployment in the given timeout.
+
+Beyond the managing of versions and updates Helm also provides a way to share and therefor depend on other charts.
+To do this Helm has their own Chart Repo setup or can use regular \gls{oci} repositories.
+Using these repositories it allows then to define dependencies on existing helm charts.
+This is especially useful to fulfill the goal of having a single deployable bundle for an application.
+For example an API server might want to bundle a PostgreSQL helm chart as a dependency.
+Instead of then defining it themselves it can then depend on existing Charts and provide a consistent experience for consumers in the ecosystem.
+
+\chapter{Structure of a Helm Package}
+
+\section{The Chart.yaml}
+
+\begin{comment}
+\begin{minted}[numbers=left, frame=lines]{yaml}
+apiVersion: v2
+name: matrix-neoboard-widget
+description: A whiteboard widget for the Element messenger
+type: application
+version: 0.1.0
+appVersion: "0.0.0"
+home: https://github.com/nordeck/matrix-neoboard
+\end{minted}
+\end{comment}
+
+%%%%%%%%%%%%%%%%%%%%%%%%
+\printglossaries
+%\printglossary[type=\acronymtype]
+
+\nocite{*}
+\printbibliography[heading=bibintoc,title={Sources}]
+\end{document}