<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ArgoCD Basics Training on ArgoCD Techlab</title><link>https://deploy-preview-349--argocd-basics-techlab.netlify.app/</link><description>Recent content in ArgoCD Basics Training on ArgoCD Techlab</description><generator>Hugo</generator><language>en</language><atom:link href="https://deploy-preview-349--argocd-basics-techlab.netlify.app/index.xml" rel="self" type="application/rss+xml"/><item><title>Footer</title><link>https://deploy-preview-349--argocd-basics-techlab.netlify.app/pdf/footer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-349--argocd-basics-techlab.netlify.app/pdf/footer/</guid><description>&lt;!-- markdownlint-disable MD033 -->
&lt;div class="pdf-footer">
&lt;p>&lt;span class="page">&lt;/span> / &lt;span class="topage">&lt;/span>&lt;/p>
&lt;/div>
&lt;!-- markdownlint-enable MD033 --></description></item><item><title>Header</title><link>https://deploy-preview-349--argocd-basics-techlab.netlify.app/pdf/header/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-349--argocd-basics-techlab.netlify.app/pdf/header/</guid><description>&lt;!-- markdownlint-disable MD033 -->
&lt;div class="pdf-header">
&lt;p>
 - acend gmbh&lt;/p>
&lt;/div>
&lt;!-- markdownlint-enable MD033 --></description></item><item><title>5.1 Helm</title><link>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/05/helm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/05/helm/</guid><description>&lt;p>This lab explains how to use &lt;a href="https://helm.sh/" target="_blank" rel="noopener">Helm&lt;/a>
 as manifest format together with Argo CD.&lt;/p>
&lt;h2 id="helm-introduction">Helm Introduction&lt;/h2>
&lt;p>&lt;a href="https://github.com/helm/helm" target="_blank" rel="noopener">Helm&lt;/a>
 is a &lt;a href="https://www.cncf.io/" target="_blank" rel="noopener">Cloud Native Foundation&lt;/a>
 project to define, install and manage applications in Kubernetes.&lt;/p>
&lt;p>It can be used to package multiple Kubernetes resources into a single logical deployment unit.&lt;/p>
&lt;p>Helm Charts are configured using &lt;code>values.yaml&lt;/code> files. (e.g. images, image tags, hostnames, &amp;hellip;).&lt;/p>
&lt;p>When using &lt;code>helm&lt;/code> charts together with Argo CD we can specify the &lt;code>values.yaml&lt;/code> like this:&lt;/p></description></item><item><title>5.2 Kustomize</title><link>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/05/kustomize/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/05/kustomize/</guid><description>&lt;p>This lab explains how to use &lt;a href="https://kustomize.io/" target="_blank" rel="noopener">kustomize&lt;/a>
 as manifest format together with Argo CD.&lt;/p>
&lt;h2 id="kustomize-introduction">Kustomize Introduction&lt;/h2>
&lt;p>&lt;a href="https://kustomize.io/" target="_blank" rel="noopener">Kustomize&lt;/a>
 introduces a template-free way to customize application configuration that simplifies the use of off-the-shelf applications. It is built into &lt;code>kubectl&lt;/code> and &lt;code>oc&lt;/code> with the command &lt;code>kubectl apply -k&lt;/code> or &lt;code>oc apply -k&lt;/code>.&lt;/p>
&lt;p>It uses a concept called overlays, which allows to reduce redundant configuration for multiple stages (e.g. dev, prod, test) without a use of a template language.&lt;/p></description></item><item><title>5.3 Jsonnet (Optional)</title><link>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/05/jsonnet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/05/jsonnet/</guid><description>&lt;p>This lab explains how to use &lt;a href="https://jsonnet.org/" target="_blank" rel="noopener">jsonnet&lt;/a>
 as manifest format together with Argo CD.&lt;/p>
&lt;h2 id="jsonnet">Jsonnet&lt;/h2>
&lt;p>&lt;a href="https://jsonnet.org/" target="_blank" rel="noopener">Jsonnet&lt;/a>
 is a templating language which adds the possibility to programmatically work with the underlying data. It basically is a simple extension of &lt;a href="https://json.org" target="_blank" rel="noopener">JSON&lt;/a>
.&lt;/p>
&lt;p>Let&amp;rsquo;s have a look at an example first. The following jsonnet file&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a40000">application1:&lt;/span> &lt;span style="color:#a40000">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a40000">name:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;jsonnet-application1&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a40000">basepath:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;/application/test&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a40000">path:&lt;/span> &lt;span style="color:#a40000">self.basepath&lt;/span> &lt;span style="color:#a40000">+&lt;/span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;/&amp;#34;&lt;/span> &lt;span style="color:#a40000">+&lt;/span> &lt;span style="color:#a40000">self.name&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>&lt;span style="color:#a40000">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a40000">application&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">2&lt;/span>&lt;span style="color:#a40000">:&lt;/span> &lt;span style="color:#a40000">self.application&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span> &lt;span style="color:#a40000">name:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;jsonnet-application2&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>&lt;span style="color:#a40000">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>will render into:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;application1&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;basepath&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;/application/test&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;jsonnet-application1&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;path&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;/application/test/jsonnet-application1&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;application2&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;basepath&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;/application/test&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;jsonnet-application2&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;path&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;/application/test/jsonnet-application2&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Among many other features, Jsonnet can help to reduce duplications.&lt;/p></description></item><item><title>8.1 Tracking and Deployment Strategies</title><link>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/08/tracking_deployment_strategies/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/08/tracking_deployment_strategies/</guid><description>&lt;p>If you are using ArgoCD with Git or Helm tools, ArgoCD gives you the availability to configure different tracking and deployment strategies.&lt;/p>
&lt;h2 id="helm">Helm&lt;/h2>
&lt;p>For Helm you can use Semver versions either to pin to a specific version or to track minor / patch changes.&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Use Case&lt;/th>
 &lt;th>How&lt;/th>
 &lt;th>Examples&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Pin to a version (e.g. in production)&lt;/td>
 &lt;td>Use the version number&lt;/td>
 &lt;td>1.2.0&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Track patches (e.g. in pre-production)&lt;/td>
 &lt;td>Use a range&lt;/td>
 &lt;td>1.2.* or &amp;gt;=1.2.0 &amp;lt;1.3.0&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Track minor releases (e.g. in QA)&lt;/td>
 &lt;td>Use a range&lt;/td>
 &lt;td>1.* or &amp;gt;=1.0.0 &amp;lt;2.0.0&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Use the latest (e.g. in local development)&lt;/td>
 &lt;td>Use star range&lt;/td>
 &lt;td>* or &amp;gt;=0.0.0&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="git">Git&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Use Case&lt;/th>
 &lt;th>How&lt;/th>
 &lt;th>Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Pin to a version (e.g. in production)&lt;/td>
 &lt;td>Either tag the commit with (e.g. v1.2.0) and use that tag, or using commit SHA.&lt;/td>
 &lt;td>See commit and version pinning.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Use the latest (e.g. in local development)&lt;/td>
 &lt;td>Use HEAD or master (assuming master is your master branch).&lt;/td>
 &lt;td>See HEAD / Branch Tracking&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="head--branch-tracking">Head / Branch Tracking&lt;/h3>
&lt;p>Either a branch name or a symbolic reference (like HEAD). For branches ArgoCD will take the latest commit of this branch.
This method is often used in development environment where you want to apply the latest changes.&lt;/p></description></item><item><title>8.2 Sync Windows</title><link>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/08/sync_windows/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/08/sync_windows/</guid><description>&lt;p>With Sync windows the user can define at which time applications can be synchronized automatically and manually by Argo CD. Allowed and forbidden time windows can be defined. Sync windows can be restricted to a subset of applications, clusters and namespaces and thus offer great flexibility.&lt;/p>
&lt;h2 id="task-821-create-application-and-project">Task 8.2.1: Create application and project&lt;/h2>
&lt;p>Now we want to create a new empty Argo CD project.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>argocd proj create -s &lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span> -d &lt;span style="color:#4e9a06">&amp;#34;*,*&amp;#34;&lt;/span> project-sync-windows-&lt;span style="color:#000">$USER&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>argocd app create sync-windows-&lt;span style="color:#000">$USER&lt;/span> --repo https://github.com/acend/argocd-training-examples.git --path &lt;span style="color:#4e9a06">&amp;#39;example-app&amp;#39;&lt;/span> --dest-server https://kubernetes.default.svc --dest-namespace &lt;span style="color:#000">$USER&lt;/span> --project project-sync-windows-&lt;span style="color:#000">$USER&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>argocd app sync sync-windows-&lt;span style="color:#000">$USER&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You should see the following message after a successful sync&lt;/p></description></item><item><title>6.1 App of Apps</title><link>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/06/app_of_apps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/06/app_of_apps/</guid><description>&lt;p>The &lt;a href="https://argoproj.github.io/argo-cd/operator-manual/cluster-bootstrapping/#app-of-apps-pattern" target="_blank" rel="noopener">App of apps&lt;/a>
 pattern is a declarative specification of one ArgoCD app that consists only of &lt;strong>other ArgoCD applications&lt;/strong>.
This way we have the possibility to deploy multiple apps within just one single App definition.&lt;/p>
&lt;p>In Lab &lt;a href="https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/02/">2.7&lt;/a>
 you learnt how ArgoCD stores its state as Application Custom Resources. The basic idea behind the App of Apps pattern therefore is to store those Application Custom Resources within an Argo CD Application.&lt;/p></description></item><item><title>6.2 Application Sets</title><link>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/06/application_sets/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/06/application_sets/</guid><description>&lt;p>With the ApplicationSet ArgoCD adds support for managing ArgoCD Application across a large number of clusters and environments. Plus it adds the capability of managing multitenant Kubernetes clusters.&lt;/p>
&lt;p>ApplicationSets are defined through Custom Resource Definition and are processed by the ApplicationSet controller.&lt;/p>
&lt;p>The ApplicationSet provides following features&lt;/p>
&lt;ul>
&lt;li>The ability to use a single Kubernetes manifest to target multiple Kubernetes clusters with Argo CD&lt;/li>
&lt;li>The ability to use a single Kubernetes manifest to deploy multiple applications from one or multiple Git repositories with Argo CD&lt;/li>
&lt;li>Improved support for monorepos: in the context of Argo CD, a monorepo is multiple Argo CD Application resources defined within a single Git repository&lt;/li>
&lt;li>Within multitenant clusters, improves the ability of individual cluster tenants to deploy applications using Argo CD (without needing to involve privileged cluster administrators in enabling the destination clusters/namespaces)&lt;/li>
&lt;/ul>
&lt;p>A list of parameters, which come from so called &lt;a href="https://argocd-applicationset.readthedocs.io/en/stable/Generators/" target="_blank" rel="noopener">generators&lt;/a>
, render the ArgoCD Application Template to create a list of Applications.&lt;/p></description></item><item><title>9.1 Orphaned Resources</title><link>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/additional/orphaned_resources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/additional/orphaned_resources/</guid><description>&lt;p>This lab contains demonstrates how to find orphaned top-level resources with Argo CD. Orphaned resources are not managed by Argo CD and could be potentially removed from cluster.&lt;/p>
&lt;h2 id="task-911-create-application-and-project">Task 9.1.1: Create application and project&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>argocd app create argo-&lt;span style="color:#000">$USER&lt;/span> --repo https://github.com/acend/argocd-training-examples.git --path &lt;span style="color:#4e9a06">&amp;#39;example-app&amp;#39;&lt;/span> --dest-server https://kubernetes.default.svc --dest-namespace &lt;span style="color:#000">$USER&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>argocd app sync argo-&lt;span style="color:#000">$USER&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Create new Argo CD project without restrictions for Git source repository (&amp;ndash;src) nor destination cluster/namespace (&amp;ndash;dest)&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>argocd proj create --src &lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span> --dest &lt;span style="color:#4e9a06">&amp;#34;*,*&amp;#34;&lt;/span> apps-&lt;span style="color:#000">$USER&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Enable visualization and monitoring of Orphaned Resources for the newly created project &lt;code>apps-&amp;lt;username&amp;gt;&lt;/code>&lt;/p></description></item><item><title>9.2 Backup and Restore</title><link>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/additional/backup_restore/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-349--argocd-basics-techlab.netlify.app/docs/additional/backup_restore/</guid><description>&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>

This Lab only works on your local machine.

&lt;/div>

&lt;h2 id="backup-and-restore">Backup and Restore&lt;/h2>
&lt;p>As ArgoCD holds the whole state in native Kubernetes objects it&amp;rsquo;s quite straightforward to make a backup and restore it in case of a disaster recovery.&lt;/p>
&lt;p>ArgoCD provides the utility &lt;a href="https://argoproj.github.io/argo-cd/operator-manual/server-commands/argocd-util" target="_blank" rel="noopener">argocd-util&lt;/a>
 which is used by ArgoCD internally. The functions &lt;a href="https://argoproj.github.io/argo-cd/operator-manual/server-commands/argocd-util_export" target="_blank" rel="noopener">export&lt;/a>
 and &lt;a href="https://argoproj.github.io/argo-cd/operator-manual/server-commands/argocd-util_import" target="_blank" rel="noopener">import&lt;/a>
 can be used for backup and restore of a ArgoCD instance.&lt;/p>
&lt;p>As the tool is contained inside the ArgoCD server image you just can execute it from inside the container.&lt;/p></description></item></channel></rss>