<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Daniel Cardozo</title><link>/de/</link><description>Recent content on Daniel Cardozo</description><generator>Hugo</generator><language>de</language><copyright>&lt;a href="https://creativecommons.org/licenses/by-nc/4.0/" target="_blank" rel="noopener"&gt;cc by-nc 4.0&lt;/a&gt;</copyright><lastBuildDate>Fri, 10 May 2024 10:00:00 +0100</lastBuildDate><atom:link href="/de/index.xml" rel="self" type="application/rss+xml"/><item><title>Helm-Templates im Detail</title><link>/de/posts/helm-templates/</link><pubDate>Fri, 10 May 2024 10:00:00 +0100</pubDate><guid>/de/posts/helm-templates/</guid><description>&lt;h2 id="einführung"&gt;Einführung&lt;/h2&gt;
&lt;p&gt;Helm-Templates sind Kubernetes-Manifeste, die mit der Go-Templatesprache &lt;code&gt;text/template&lt;/code&gt; angereichert wurden. Sie befinden sich im Verzeichnis &lt;code&gt;templates/&lt;/code&gt; Ihres Charts und werden von Helm mithilfe der Werte aus &lt;code&gt;values.yaml&lt;/code&gt; und benutzerseitiger Überschreibungen gerendert. Sie zu verstehen ist der Schlüssel zu wartbaren und wiederverwendbaren Charts.&lt;/p&gt;
&lt;h2 id="template-grundlagen"&gt;Template-Grundlagen&lt;/h2&gt;
&lt;p&gt;Ein minimales Deployment-Template:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;apiVersion&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;apps/v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Deployment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: {{ &lt;span style="color:#ae81ff"&gt;.Release.Name }}-app&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;labels&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;app&lt;/span&gt;: {{ &lt;span style="color:#ae81ff"&gt;.Chart.Name }}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;replicas&lt;/span&gt;: {{ &lt;span style="color:#ae81ff"&gt;.Values.replicaCount }}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;selector&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;matchLabels&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;app&lt;/span&gt;: {{ &lt;span style="color:#ae81ff"&gt;.Chart.Name }}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;template&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;labels&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;app&lt;/span&gt;: {{ &lt;span style="color:#ae81ff"&gt;.Chart.Name }}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;containers&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: {{ &lt;span style="color:#ae81ff"&gt;.Chart.Name }}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;image&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;{{ .Values.image.repository }}:{{ .Values.image.tag }}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="eingebaute-objekte"&gt;Eingebaute Objekte&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Objekt&lt;/th&gt;
					&lt;th&gt;Beschreibung&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;.Release&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Aktuelle Release-Informationen: &lt;code&gt;.Release.Name&lt;/code&gt;, &lt;code&gt;.Release.Namespace&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;.Chart&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Inhalt von &lt;code&gt;Chart.yaml&lt;/code&gt;: &lt;code&gt;.Chart.Name&lt;/code&gt;, &lt;code&gt;.Chart.Version&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;.Values&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Zusammengeführte Werte aus &lt;code&gt;values.yaml&lt;/code&gt; und Benutzerüberschreibungen&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;.Files&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Zugriff auf nicht-Template-Dateien im Chart&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="template-funktionen"&gt;Template-Funktionen&lt;/h2&gt;
&lt;p&gt;Helm enthält die Go-Sprig-Bibliothek mit über 60 Hilfsfunktionen:&lt;/p&gt;</description></item><item><title>Helm-Tutorial: Kubernetes-Anwendungen verwalten</title><link>/de/posts/helm-tutorial/</link><pubDate>Wed, 20 Mar 2024 10:00:00 +0100</pubDate><guid>/de/posts/helm-tutorial/</guid><description>&lt;h2 id="was-ist-helm"&gt;Was ist Helm?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Helm&lt;/strong&gt; ist der Paketmanager für Kubernetes. Er ermöglicht es, komplexe Kubernetes-Anwendungen mithilfe wiederverwendbarer Pakete, sogenannter &lt;strong&gt;Charts&lt;/strong&gt;, zu definieren, zu installieren und zu aktualisieren. Stellen Sie sich Helm als &lt;code&gt;apt&lt;/code&gt; oder &lt;code&gt;brew&lt;/code&gt; für Kubernetes vor.&lt;/p&gt;
&lt;h2 id="schlüsselkonzepte"&gt;Schlüsselkonzepte&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Begriff&lt;/th&gt;
					&lt;th&gt;Beschreibung&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Chart&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Paket mit allen Kubernetes-Ressourcendefinitionen einer Anwendung&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Release&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Eine laufende Instanz eines im Cluster installierten Charts&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Repository&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Ort, an dem Charts gespeichert und geteilt werden&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Values&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Konfigurationsparameter, die ein Chart zur Installationszeit anpassen&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# macOS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew install helm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Installation überprüfen:&lt;/p&gt;</description></item><item><title>Einstieg in ArgoCD</title><link>/de/posts/argocd-getting-started/</link><pubDate>Mon, 15 Jan 2024 10:00:00 +0100</pubDate><guid>/de/posts/argocd-getting-started/</guid><description>&lt;h2 id="was-ist-argocd"&gt;Was ist ArgoCD?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;ArgoCD&lt;/strong&gt; ist ein deklaratives, GitOps-basiertes Continuous-Delivery-Tool für Kubernetes. Es automatisiert den Anwendungs-Deployment, indem es den in einem Git-Repository definierten Sollzustand kontinuierlich mit dem Kubernetes-Cluster synchronisiert – das Git-Repository wird zur einzigen Quelle der Wahrheit.&lt;/p&gt;
&lt;h2 id="voraussetzungen"&gt;Voraussetzungen&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ein laufender Kubernetes-Cluster (oder &lt;a href="https://kind.sigs.k8s.io/"&gt;kind&lt;/a&gt; für lokale Tests)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kubectl&lt;/code&gt; konfiguriert für den Cluster-Zugriff&lt;/li&gt;
&lt;li&gt;Ein Git-Repository mit Kubernetes-Manifesten&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="argocd-installieren"&gt;ArgoCD installieren&lt;/h2&gt;
&lt;p&gt;Erstellen Sie den ArgoCD-Namespace und wenden Sie das offizielle Installationsmanifest an:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl create namespace argocd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Warten Sie, bis alle Pods bereit sind:&lt;/p&gt;</description></item><item><title>Telekom Speedport als Modem (Bridge-Modus) mit ASUS RT-AC86U nutzen</title><link>/de/posts/telekom-modem/</link><pubDate>Sun, 24 Jul 2022 16:45:08 +0000</pubDate><guid>/de/posts/telekom-modem/</guid><description>&lt;h2 id="einführung"&gt;Einführung&lt;/h2&gt;
&lt;p&gt;Vor Kurzem wechselte ich meinen Internetanbieter zu Telekom, da ich mit meinem vorherigen Anbieter Probleme hatte. Nach dem Wechsel und der ersten Begutachtung des Telekom Speedport Smart 4 waren die Konfigurationsmöglichkeiten vielversprechend – sogar WireGuard, Mesh-Netzwerk und vieles mehr war enthalten. Zunächst lief alles gut, bis ich merkwürdige Probleme feststellte: Auf Mobiltelefonen brach die Verbindung manchmal plötzlich ab, Videoanrufe funktionierten ebenfalls nicht – sie liefen ein paar Minuten und brachen dann zusammen.&lt;/p&gt;</description></item><item><title>Backups mit Velero erstellen</title><link>/de/posts/velero/</link><pubDate>Thu, 30 Jun 2022 19:46:08 +0000</pubDate><guid>/de/posts/velero/</guid><description>&lt;h2 id="einführung"&gt;Einführung&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Velero&lt;/strong&gt; ist ein Open-Source-Tool zur Erstellung von Backups Ihrer Kubernetes-Cluster – einschließlich Ihrer Kubernetes-Volumes! Velero funktioniert, indem es die &lt;code&gt;Kubernetes API&lt;/code&gt; nach den gewünschten Manifests fragt, ohne direkten Zugriff auf die &lt;code&gt;etcd&lt;/code&gt;-Datenbank zu benötigen. Das ist besonders nützlich bei verwalteten Kubernetes-Clustern wie &lt;code&gt;AWS&lt;/code&gt;, &lt;code&gt;GCP&lt;/code&gt; oder &lt;code&gt;Digital Ocean&lt;/code&gt;, bei denen kein direkter Zugang zu den Master-Nodes besteht.&lt;/p&gt;

 &lt;img src="/velero/backup-process.png" alt="Velero Backup-Prozess" class="center" style="border-radius: 8px;" /&gt;


&lt;p&gt;Wie im Diagramm dargestellt, erstellt der Benutzer eine Velero-Backup-Ressource. Der auf dem Cluster installierte Velero-Controller fragt daraufhin die Kubernetes API ab und führt das Backup der gewünschten Ressourcen durch. Die Backup-Daten können dann in einen S3-Bucket oder einen anderen Backup-Speicherort hochgeladen werden.&lt;/p&gt;</description></item><item><title>Über mich</title><link>/de/about-me/</link><pubDate>Sat, 11 Dec 2021 14:26:28 +0100</pubDate><guid>/de/about-me/</guid><description>&lt;p&gt;Hallo, mein Name ist Daniel Cardozo und ich bin begeistert von DevOps-Kultur, Kubernetes und Automatisierung. Mit über 12 Jahren Erfahrung in der IT und 8+ Jahren als DevOps Engineer habe ich die nötigen Fähigkeiten aufgebaut, um verschiedene Workflows zu erstellen, die Teams bei der Entwicklung, dem Deployment, der Skalierung und dem Betrieb von Anwendungen in unterschiedlichsten Szenarien unterstützen.&lt;/p&gt;
&lt;p&gt;Mein Schwerpunkt liegt auf &lt;strong&gt;Kubernetes&lt;/strong&gt; und &lt;strong&gt;Automatisierung&lt;/strong&gt; — von CI/CD-Pipelines bis hin zur Konfigurationsverwaltung mit Tools wie Ansible und darüber hinaus. Ich bin außerdem aktives Mitglied der &lt;strong&gt;Cloud Native Computing Foundation (CNCF)&lt;/strong&gt; Community.&lt;/p&gt;</description></item></channel></rss>