<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Abhinav Dubey</title>
    <description>The latest articles on Forem by Abhinav Dubey (@abhinavd26).</description>
    <link>https://forem.com/abhinavd26</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F533875%2F82711ceb-6308-4df7-a68c-ad861cfb27f1.jpeg</url>
      <title>Forem: Abhinav Dubey</title>
      <link>https://forem.com/abhinavd26</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/abhinavd26"/>
    <language>en</language>
    <item>
      <title>From Cluster UI to Operational Plane: Lessons from the Kubernetes Dashboard Deprecation</title>
      <dc:creator>Abhinav Dubey</dc:creator>
      <pubDate>Sat, 24 Jan 2026 23:00:33 +0000</pubDate>
      <link>https://forem.com/abhinavd26/from-cluster-ui-to-operational-plane-lessons-from-the-kubernetes-dashboard-deprecation-48k0</link>
      <guid>https://forem.com/abhinavd26/from-cluster-ui-to-operational-plane-lessons-from-the-kubernetes-dashboard-deprecation-48k0</guid>
      <description>&lt;p&gt;The official Kubernetes Dashboard has been deprecated.&lt;/p&gt;

&lt;p&gt;With the &lt;a href="https://github.com/kubernetes/dashboard/commit/0ba796d9b85f7070dbd4a5c88354fc79f88763bb" rel="noopener noreferrer"&gt;Kubernetes Dashboard officially deprecated&lt;/a&gt;, many teams are reassessing how they manage visibility and operations in Kubernetes environments and for many teams, this didn’t change much day-to-day. The dashboard had already faded into the background of real production workflows. But the decision itself is still worth paying attention to; not because a UI is going away, but because of what that decision reflects about how Kubernetes is operated today.&lt;/p&gt;

&lt;p&gt;The original Kubernetes Dashboard was built at a time when clusters were smaller, teams were centralized, and direct interaction with cluster resources was common. A simple web interface for inspecting and modifying resources made sense.&lt;/p&gt;

&lt;p&gt;That context no longer exists.&lt;/p&gt;

&lt;p&gt;Kubernetes today is multi-cluster by default, driven by GitOps, guarded by strict access controls, and operated by platform teams serving dozens or hundreds of developers. In that world, a generic, cluster-scoped UI isn’t just limited, it’s misaligned.&lt;/p&gt;

&lt;p&gt;The deprecation of the Kubernetes Dashboard is less a removal of functionality and more an acknowledgment: Kubernetes operations have moved up the abstraction stack.&lt;/p&gt;

&lt;p&gt;And that shift from cluster UI to operational plane is the real lesson here.&lt;/p&gt;

&lt;p&gt;For more details about the Kubernetes Dashboard, please &lt;a href="https://devtron.ai/what-is-kubernetes-dashboard" rel="noopener noreferrer"&gt;check out this article&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Deprecation Is a Symptom, Not the Story
&lt;/h2&gt;

&lt;p&gt;If you’ve been running Kubernetes in production for a while, this move probably felt inevitable.&lt;/p&gt;

&lt;p&gt;Many teams stopped relying on the official dashboard years ago. Not because it was “bad,” but because it was built for a very different phase of Kubernetes adoption.&lt;/p&gt;

&lt;p&gt;The dashboard wasn’t deprecated because it failed. It was deprecated because the operating model outgrew it.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Kubernetes Dashboard Was Originally Built For
&lt;/h2&gt;

&lt;p&gt;The original Kubernetes Dashboard made perfect sense at the time.&lt;/p&gt;

&lt;p&gt;It was designed for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A single cluster&lt;/li&gt;
&lt;li&gt;A small group of operators&lt;/li&gt;
&lt;li&gt;Direct, imperative actions (similar to kubectl)&lt;/li&gt;
&lt;li&gt;Basic visibility into pods, services, and deployments&lt;/li&gt;
&lt;li&gt;Minimal assumptions around RBAC and organizational boundaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In early Kubernetes adoption, this was enough. Clusters were smaller in size, teams were centralized, production workflows were simpler (although the dashboard was just an UI), it was easier to set it up and have a graphical visibility into workloads.&lt;/p&gt;

&lt;p&gt;The dashboard answered one basic question well:&lt;br&gt;
“What’s running in my cluster right now?”&lt;/p&gt;

&lt;h2&gt;
  
  
  How Kubernetes Is Actually Operated Today
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2z5or6p80ugptgnurw55.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2z5or6p80ugptgnurw55.gif" alt="k8s-today" width="498" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fast forward to today, and that question is no longer sufficient.&lt;/p&gt;

&lt;p&gt;Modern Kubernetes environments look very different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple clusters across regions and environments&lt;/li&gt;
&lt;li&gt;GitOps-first workflows, where Git is the source of truth&lt;/li&gt;
&lt;li&gt;Helm everywhere, managing application lifecycles&lt;/li&gt;
&lt;li&gt;Strict RBAC, often tied to SSO and org structure&lt;/li&gt;
&lt;li&gt;Platform teams enabling developers, not operating clusters manually&lt;/li&gt;
&lt;li&gt;Deployment state and observability matter more than raw resources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In most real-world setups:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You don’t “edit” live resources inside the cluster&lt;/li&gt;
&lt;li&gt;You don’t want everyone to see everything&lt;/li&gt;
&lt;li&gt;You care more about applications than individual pods&lt;/li&gt;
&lt;li&gt;You need context across clusters, not inside just one&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A generic, cluster-scoped UI starts to feel out of place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a Generic Cluster UI No Longer Works
&lt;/h2&gt;

&lt;p&gt;This is where the original dashboard begins to break down, not functionally, but conceptually.&lt;/p&gt;

&lt;p&gt;A few realities many teams ran into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Resource-centric views don’t match how teams think&lt;br&gt;
Developers reason in terms of applications and releases, not ReplicaSets and Services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Single-cluster visibility doesn’t scale&lt;br&gt;
Troubleshooting modern systems requires aggregation and comparison across environments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;RBAC becomes painful fast&lt;br&gt;
“Just give dashboard access” stops working once security and compliance are involved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Drift between Git and cluster is invisible&lt;br&gt;
The dashboard shows what is, not what should be.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point, the dashboard becomes either read-only and underused or powerful but risky. Neither is a sustainable operational model.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a Kubernetes Dashboard Needs to Be Today
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zq8owlsnyzoa98qszx8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zq8owlsnyzoa98qszx8.jpg" alt="simple-dashboard" width="596" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This naturally leads to a better question:&lt;/p&gt;

&lt;p&gt;What should a Kubernetes dashboard actually do in 2026?&lt;/p&gt;

&lt;p&gt;Based on how Kubernetes is used in practice, a modern dashboard should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Be application-aware, not just resource-aware&lt;/li&gt;
&lt;li&gt;Work across clusters, not inside one&lt;/li&gt;
&lt;li&gt;Be RBAC-first, not RBAC-as-an-afterthought&lt;/li&gt;
&lt;li&gt;Understand deployments, rollbacks, and failures&lt;/li&gt;
&lt;li&gt;Complement GitOps and automation, not bypass them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this level, the dashboard stops being a UI for cluster inspection and becomes a thin operational layer providing context, guardrails, and visibility without encouraging ad-hoc changes.&lt;/p&gt;

&lt;p&gt;This is less about UI design and more about operational philosophy.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Dashboards to Operational Planes
&lt;/h2&gt;

&lt;p&gt;This shift explains why many teams moved away from the official dashboard long before it was deprecated.&lt;/p&gt;

&lt;p&gt;They weren’t necessarily looking for “a better dashboard.” They were looking for a way to operate Kubernetes that aligned with their scale, security posture, and delivery workflows.&lt;/p&gt;

&lt;p&gt;This is where Kubernetes management platforms like &lt;a href="https://devtron.ai/" rel="noopener noreferrer"&gt;Devtron&lt;/a&gt; come into the picture; not as replacements for kubectl, and not as generic UIs, but as operational planes that sit above the cluster and becomes the orchestration layer for managing applications on Kubernetes.&lt;/p&gt;

&lt;p&gt;These platforms focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application-centric visibility&lt;/li&gt;
&lt;li&gt;Deployment and Helm awareness&lt;/li&gt;
&lt;li&gt;Multi-cluster context&lt;/li&gt;
&lt;li&gt;Guardrails instead of unrestricted access&lt;/li&gt;
&lt;li&gt;K8s-native CI/CD&lt;/li&gt;
&lt;li&gt;Integration with GitOps (ArgoCD, FluxCD)&lt;/li&gt;
&lt;li&gt;Security and policies preventing unintentional production downtime&lt;/li&gt;
&lt;li&gt;Enables automation instead of writing custom scripting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It represent a different generation of tooling, built for how Kubernetes is actually run today.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Devtron is a Kubernetes Management Platform, born in Kubernetes and provides the best conventional way of operating your workloads on K8s&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The deprecation of the Kubernetes Dashboard isn’t a gap that needs to be “filled” by another UI.&lt;/p&gt;

&lt;p&gt;It’s a reminder that Kubernetes is no longer operated at the level of individual resources and ad-hoc actions. As clusters, teams, and delivery pipelines scale, the center of gravity shifts from cluster inspection to &lt;a href="https://devtron.ai/platform/application-management" rel="noopener noreferrer"&gt;application lifecycle management&lt;/a&gt;, from visibility to &lt;a href="https://devtron.ai/platform/security-compliance" rel="noopener noreferrer"&gt;security &amp;amp; governance&lt;/a&gt;, and from manual operations to guardrailed automation.&lt;/p&gt;

&lt;p&gt;This is where Kubernetes management platforms like Devtron naturally fits in; not as dashboards in the traditional sense, but as operational planes that reflect the reality of modern Kubernetes operations.&lt;/p&gt;

&lt;p&gt;The dashboard didn’t disappear.&lt;br&gt;
It evolved; just not in the place many originally expected.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>devtron</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Getting Started with External Secrets Operator</title>
      <dc:creator>Abhinav Dubey</dc:creator>
      <pubDate>Sat, 18 Feb 2023 20:24:45 +0000</pubDate>
      <link>https://forem.com/abhinavd26/getting-started-with-external-secrets-operator-kah</link>
      <guid>https://forem.com/abhinavd26/getting-started-with-external-secrets-operator-kah</guid>
      <description>&lt;p&gt;Kubernetes has one of the most simple and flexible methods for storing and retrieving sensitive data in form of secrets. Kubernetes allows creating and storing of secrets such as database passwords, tokens, etc within Kubernetes namespaces. These secrets can be retrieved in form of environment variables or from the files mounted at a certain location within the pod and then can be used in the applications. Even though the native process is seamless and easy, it has certain disadvantages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Base64 Encodings:&lt;/strong&gt; The default secrets encodings are base64 encoding which doesn't ensure the security of secrets stored within Kubernetes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Missing Single Source of Truth:&lt;/strong&gt; There is no single source of truth for managing all your Kubernetes secrets in one place. It is not recommended to store secrets in static YAML files in a git repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lack of Vault Integrations:&lt;/strong&gt; Kubernetes secrets don't come with any mechanisms to integrate with cloud vaults such as AWS secret manager, Azure Key Vault, etc to offer enterprise-grade protection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thus, KES was Born!
&lt;/h2&gt;

&lt;p&gt;To address the above challenges, Kubernetes External Secret (KES) was born. It was created by Godaddy for their internal usages and later on open-sourced for the community. It comes with the default integration of multiple cloud-based secret stores and solves the all issues discussed above.&lt;/p&gt;

&lt;p&gt;However, the GoDaddy team have stopped maintaining the project and is publicly archived on July 26, 2022.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing External Secrets Operator
&lt;/h2&gt;

&lt;p&gt;External Secrets Operator (ESO) is a Kubernetes operator that helps you integrate with third-party external secrets like Hashicorp Vault, AWS Secrets Manager, Azure Key Vault, IBM Cloud Secrets Manager and many more within your Kubernetes secrets. The main objective of ESO is to synchronize secrets from external APIs into Kubernetes. It is a collection of custom API resources - SecretStore, ExternalSecrets, and ClusterSecretStore that helps you maintain the lifecycle of secrets from third-party vaults.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83goyrcfx3i8ntcutdlb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83goyrcfx3i8ntcutdlb.png" alt="ESO-Architecture" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ESO controller is installed in a Kubernetes cluster and is a cluster-specific object. To communicate with other secret managers, the API resource - SecretStore / ClusterSecretStore is deployed within the namespace/ cluster and is responsible for the authentication with external APIs. There are different ways you can authenticate using such as generic secret (using access key &amp;amp; secret key), IAM roles, ServiceAccount, etc that can be seen here in the documentation.&lt;/p&gt;

&lt;p&gt;Once authentication is done, it will create an API resource called ExternalSecret that is responsible for interacting with your secrets stored in vaults and then creating a secret out of the box in respective namespaces.&lt;/p&gt;

&lt;p&gt;This is a high-level architecture on how ESO works. Now, let's try some hands-on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Started with ESO
&lt;/h3&gt;

&lt;p&gt;ESO installation is pretty straightforward. We need to install the ESO controller and then we are ready to get our external secrets into Kubernetes. For controller installation, we will use the helm. It is the Kubernetes package manager. For more information about helm, feel free to read the below blog.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/abhinavd26" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F533875%2F82711ceb-6308-4df7-a68c-ad861cfb27f1.jpeg" alt="abhinavd26"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/abhinavd26/all-about-helm-the-k8s-package-manager-2gmj" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;All About Helm, The K8s Package Manager&lt;/h2&gt;
      &lt;h3&gt;Abhinav Dubey ・ Feb 8 '22&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#kubernetes&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Execute the following commands to install ESO Controller&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm repo add external-secrets https://charts.external-secrets.io

helm install external-secrets \
   external-secrets/external-secrets \
   -n external-secrets \
   --create-namespace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the controller is deployed, you can see all three pods up and running in external-secrets namespace as shown in the below image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm7cg6mz57ow2hus7b0rv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm7cg6mz57ow2hus7b0rv.png" alt="ESO-Controller" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yayy!! The controller is up and running. It is all you need to get started with External Secrets. Now let's take the example of AWS Secrets Manager and fetch secrets from AWS and create Kubernetes secrets.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Secret Manager with ESO
&lt;/h2&gt;

&lt;p&gt;Execute the following steps to create a secret in AWS Secret Manager and get it into Kubernetes using ESO.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-1:&lt;/strong&gt; Create a secret using GUI named user-creds with two key-value pairs, username &amp;amp; password. Once created, you can see the dashboard something like this -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpm9x4bd0xbokzbw7nmkx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpm9x4bd0xbokzbw7nmkx.png" alt="AWS Secrets Manager" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-2:&lt;/strong&gt; Let's now create a generic secret with an access key and secret access key that would be used by SecretStore for authentication. Execute the below command to create a secret.&lt;/p&gt;

&lt;p&gt;[Note: Make sure KeyId &amp;amp; SecretKey generated should have access to the secrets manager]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo -n 'KEYID' &amp;gt; ./access-key
echo -n 'SECRETKEY' &amp;gt; ./secret-access-key
kubectl create secret generic awssm-secret --from-file=./access-key --from-file=./secret-access-key -n external-secrets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuqt7wc0r3zc0ad09tr0a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuqt7wc0r3zc0ad09tr0a.png" alt="Generic Secret" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-3:&lt;/strong&gt; Create SecretStore uses the generic secret for authentication. Execute the following manifest to create SecretStore named cncf-thane-demo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | kubectl apply -f - 
apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
  name: cncf-thane-demo
  namespace: external-secrets
spec:
  provider:
    aws:
      service: SecretsManager
      region: us-east-1
      auth:
        secretRef:
          accessKeyIDSecretRef:
            name: awssm-secret
            key: access-key
          secretAccessKeySecretRef:
            name: awssm-secret
            key: secret-access-key
EOF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8e8m3i1p8o71wsuxsgtf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8e8m3i1p8o71wsuxsgtf.png" alt="SecretStore" width="800" height="575"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-4:&lt;/strong&gt; Now create a ExternalSecret would fetch the secrets from the AWS secrets manager and bring them to Kubernetes. Execute the following manifest to create ExternalSecret named cncf-thane-demo and provide the necessary details to fetch secrets.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | kubectl apply -f - 
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: cncf-thane-demo
  namespace: external-secrets
spec:
  refreshInterval: 1h
  secretStoreRef:
    name: cncf-thane-demo
    kind: SecretStore
  target:
    name: eso-secret
    creationPolicy: Owner
  data:
  - secretKey: credentials
    remoteRef:
      key: user-creds
      property: username
EOF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F82xmqdl91b7zr7x4zr80.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F82xmqdl91b7zr7x4zr80.png" alt="ExternalSecrets" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After ExternalSecrets being deployed, you can check the secret it created. In our case, it has created a secret named eso-secret that we have specified in ExternalSecret manifest. Let's now check if we get the value of the username key that we have added in the secrets manager.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get secrets eso-secret -nexternal-secrets -o jsonpath='{.data.credentials}' | base64 -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feux6l3e1tgg0641hiwfj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feux6l3e1tgg0641hiwfj.png" alt="ESO-Secret" width="800" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hurray!! We have successfully fetched the value from AWS Secret Manager and imported it into Kubernetes secrets using ESO. We can also use ESO to get multiple secrets or even the plan text secrets into Kubernetes in a similar fashion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this blog post, we have seen the need for an External Secrets Operator, KES and how to get started with ESO to fetch secrets from AWS Secrets Manager. Feel free to connect with me on Twitter and LinkedIn and ask your questions if you have any.&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>OpenLens Deprecated Logs &amp; Shell</title>
      <dc:creator>Abhinav Dubey</dc:creator>
      <pubDate>Thu, 29 Dec 2022 04:12:37 +0000</pubDate>
      <link>https://forem.com/abhinavd26/openlens-deprecated-logs-shell-k91</link>
      <guid>https://forem.com/abhinavd26/openlens-deprecated-logs-shell-k91</guid>
      <description>&lt;p&gt;OpenLens is the open-source project behind one of the most adopted Kubernetes IDE, Lens. In simple terms, it is nothing less than Lens without its proprietary components. OpenLens falls under the MIT license and has been actively maintained by the community and the Lens team. The installation of OpenLens is a bit complex as you have to build it from the source, but many open-source contributors maintain builds depending upon the operating system. OpenLens also releases the same release that Lens IDE does and is a mirror image in terms of appearance. With the latest release, i.e. v6.3.0, the OpenLens governance team has deprecated some of its best features, causing chaos in the open-source community. In this blog, we will talk about the deprecated feature and an alternative solution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6j4rrp87rllx4hw7ocwn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6j4rrp87rllx4hw7ocwn.png" alt="OpenLens" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is missing on the OpenLens v6.3.0?
&lt;/h2&gt;

&lt;p&gt;With the latest release of OpenLens v6.3.0, you won’t be able to access logs and the terminal of your Kubernetes workloads/nodes attached to the cluster from the IDE by default. These extensions are permanently removed from the OpenLens and moved to Lens Desktop. Here are some references for the same -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/lensapp/lens/issues/6819" rel="noopener noreferrer"&gt;https://github.com/lensapp/lens/issues/6819&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lensapp/lens/issues/6823" rel="noopener noreferrer"&gt;https://github.com/lensapp/lens/issues/6823&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2sf7ubtpe354r1gt3iom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2sf7ubtpe354r1gt3iom.png" alt="Github Issue" width="800" height="108"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, let’s dive a bit into the history. Lens 6 is by far the most important release from the Lens team that comes with many new additional features but only with the paid subscriptions. With the Lens6 release, they talked about their vision and introduced new subscription models primarily in two tiers: Lens Personal (with limited support) and Lens Pro. They have also updated their terms and conditions, which can be read from their &lt;a href="https://medium.com/k8slens/lens-6-released-vision-for-the-future-new-subscription-model-and-features-available-628ff21fe14a" rel="noopener noreferrer"&gt;official blog&lt;/a&gt;. Lens Personal is free to use but comes with limited features and is limited for educational purposes or for startups with less than $10 million in annual revenue or funding.&lt;/p&gt;

&lt;p&gt;The recent OpenLens v0.6.3 release doesn't provide the capability to access logs and shell extensions. This has impacted the community, and the heavy users who relied on these extensions are looking for ways to resolve this redacted feature. They are limited to two options. The first is either to use a personal license or to move to the pro version by paying a subscription fee if their organization exceeds the $10mn revenue or funding criteria. The second option is to look for alternatives.  &lt;/p&gt;

&lt;p&gt;Users looking for an alternative open-source project that can provide them the capability to access real-time logs and a shell extension should consider Devtron.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Devtron, An Open source alternative to OpenLens
&lt;/h2&gt;

&lt;p&gt;Devtron is an open-source alternative to OpenLens with all your standard features and a lot more. The Devtron project is completely open-source and offers a much wider range of capabilities over and beyond shell and log extensions. It helps you to deploy and manage all your Kubernetes workloads. It is built in a modular fashion that comprises of two primary components - &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kubernetes Dashboard by Devtron&lt;/li&gt;
&lt;li&gt;Devtron Dashboard with CI/CD&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Kubernetes dashboard by Devtron helps you manage the lifecycle of Helm applications and Kubernetes objects associated with the chart, circumventing all the complexities and challenges of dealing with Kubernetes directly. Read about the &lt;a href="https://devtron.ai/blog/the-ultimate-kubernetes-dashboard-for-helm/" rel="noopener noreferrer"&gt;challenges that Devtron’s Dashboard solves&lt;/a&gt; to explore ways you can simplify operations at your organization.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Kubernetes Dashboard by Devtron over other alternatives
&lt;/h3&gt;

&lt;p&gt;Adopting Devtron only for bash and log extensions will be throttling the power that Devtron can unleash for your application teams. Let's understand how Devtron can become your go-to tool for managing your clusters and workloads in Kubernetes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Cluster Management&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;use your custom images of your favorite tools like - k9s/ netshoot/ busybox/ helm/ kubectl from the cluster terminal in the browser,&lt;/li&gt;
&lt;li&gt;Multi-cluster enabled,&lt;/li&gt;
&lt;li&gt;Preconfigured RBAC, so you don't have to use kubeconfig,&lt;/li&gt;
&lt;li&gt;Dedicated panel to view resource usage details&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Workload Management &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;grep logs across multiple pods with ease,&lt;/li&gt;
&lt;li&gt;exec into the pods,&lt;/li&gt;
&lt;li&gt;deploy any helm chart or K8s application,&lt;/li&gt;
&lt;li&gt;easy rollback with configurations,&lt;/li&gt;
&lt;li&gt;compare configurations diff,&lt;/li&gt;
&lt;li&gt;manage helm app across multiple clusters,&lt;/li&gt;
&lt;li&gt;easily upgrade helm charts,&lt;/li&gt;
&lt;li&gt;faster debugging of helm charts with resource grouping, events, manifests, logs, and a lot more.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;While you are evaluating your options, Devtron may be able to tick all of your requirements at one go. &lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/devtron-labs" rel="noopener noreferrer"&gt;
        devtron-labs
      &lt;/a&gt; / &lt;a href="https://github.com/devtron-labs/devtron" rel="noopener noreferrer"&gt;
        devtron
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      The only Kubernetes dashboard you need
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>emptystring</category>
    </item>
    <item>
      <title>The Kubernetes Dashboard for Helm</title>
      <dc:creator>Abhinav Dubey</dc:creator>
      <pubDate>Thu, 10 Nov 2022 07:15:56 +0000</pubDate>
      <link>https://forem.com/abhinavd26/the-kubernetes-dashboard-for-helm-20f4</link>
      <guid>https://forem.com/abhinavd26/the-kubernetes-dashboard-for-helm-20f4</guid>
      <description>&lt;p&gt;Configuring and managing Kubernetes requires a lot of effort and domain expertise. From writing Kubernetes manifests to deploying and upgrading them manually every time a new change comes in, it makes your workflow more and more complex. Sooner or later, most teams end up with tools to simplify their application deployment.  Helm happens to be the most adopted package manager for deploying applications on Kubernetes. Though widely adopted because it reduces the complexities of deploying applications on Kubernetes, Helm CLI has posed few challenges that we will talk about in this blog. &lt;/p&gt;

&lt;p&gt;If you are new to helm and probably wondering about what exactly it is, have a look at the detailed breakdown on what is helm and how to build your own helm chart.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/abhinavd26" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--43Dcp-i7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--q8iPXPph--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/533875/82711ceb-6308-4df7-a68c-ad861cfb27f1.jpeg" alt="abhinavd26"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/abhinavd26/all-about-helm-the-k8s-package-manager-2gmj" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;All About Helm, The K8s Package Manager&lt;/h2&gt;
      &lt;h3&gt;Abhinav Dubey ・ Feb 8 ・ 8 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#kubernetes&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Challenges with Helm
&lt;/h2&gt;

&lt;p&gt;While Helm is great at packaging Kubernetes applications,  it still needs to catch up when it comes to debugging and troubleshooting applications using Helm CLI. The community currently faces some burning challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No active/real-time monitoring of Kubernetes resources with time series data - using Helm CLI just presents the current state of applications which is rarely enough for troubleshooting&lt;/li&gt;
&lt;li&gt;Improper grouping of resources&lt;/li&gt;
&lt;li&gt;Accessing the chart’s readme documentation is not seamless&lt;/li&gt;
&lt;li&gt;Missing unified interface for managing Helm Apps across multi-clusters&lt;/li&gt;
&lt;li&gt;No easy way to compare deployment values across deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Peripheral Challenges
&lt;/h3&gt;

&lt;p&gt;Apart from the native helm challenges, there are some other issues as well which can be solved using Helm Dashboard and can help you to manage the entire team and optimize the infra costs. The other challenges are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No out-of-the-box support for hibernation of workloads&lt;/li&gt;
&lt;li&gt;Complex access management for team members&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Devtron is aware of the community's difficulty with existing Helm CLI features. Considering these common problems that the community faces today with Helm CLI, we built an intuitive Helm dashboard for managing the lifecycle of Helm apps, abstracting out all the complexities and challenges. Let's take a look into the challenges and how the Devtron dashboard helps to solve those challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Helm Dashboard in Devtron
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--za6FmAYE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5pmi49dcqidjt3uh3m8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--za6FmAYE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5pmi49dcqidjt3uh3m8.png" alt="Helm Dashboard" width="880" height="523"&gt;&lt;/a&gt;&lt;br&gt;
Before we look out for the solution, let me grab a minute of yours. &lt;a href="https://github.com/devtron-labs/devtron"&gt;Devtron&lt;/a&gt; is an open-source cloud-native tool integration platform for Kubernetes. It provides an intuitive dashboard for all your Kubernetes and Helm-related challenges and enables teams to easily collaborate and work on faster delivery of applications on the top of Kubernetes.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Devtron helps to solve all your challenges
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Active Monitoring
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--isVqIuma--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/csjxgaoksaca8lctcief.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--isVqIuma--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/csjxgaoksaca8lctcief.png" alt="Active Monitoring" width="880" height="495"&gt;&lt;/a&gt;&lt;br&gt;
If you are using helm CLI, there’s no real-time monitoring of your workloads. Once you deploy/install a chart using &lt;code&gt;helm install repo/chart&lt;/code&gt;, helm status will always show you as deployed even if some of the k8s resources are missing or not deployed successfully. With Devtron’s Helm Dashboard, it becomes effortless to actively monitor all the Kubernetes Resources deployed using the Helm charts. It shows the real-time status of applications deployed through the dashboard or a terminal.&lt;/p&gt;

&lt;p&gt;Let’s assume, you deployed a helm chart and there is some configs error in it. Unlike helm CLI, Devtron will show the status as Degraded since the chart configs were not correct. If everything was good and deployed successfully, the status will be shown as Healthy. Again if the chart is deployed, and someone deletes any k8s workload associated with it, Devtron will immediately change the status to missing. &lt;/p&gt;

&lt;h3&gt;
  
  
  Resource Grouping
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h3hLDJrz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/civlq0jmb2ahh31vdmjj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h3hLDJrz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/civlq0jmb2ahh31vdmjj.png" alt="Resource Grouping" width="880" height="495"&gt;&lt;/a&gt;&lt;br&gt;
In the official &lt;code&gt;kube-prometheus-stack&lt;/code&gt; chart, about 174 Kubernetes resources get deployed when you install the chart. Imagine if there’s an error in any of the config files of the multiple Kubernetes resources. How difficult would it be to debug using helm CLI or just kubectl?&lt;/p&gt;

&lt;p&gt;You would have to fire a lot of kubectl/helm commands to figure out which workload is not working. Then check out the logs, describe the pods, etc just to figure out what went wrong and all that from the terminal. But Devtron greatly simplifies that.&lt;/p&gt;

&lt;p&gt;Devtron does the grouping of resources of all your applications and categorizes them into different buckets, which makes it easy to find the right resources while debugging. As you can see in the above screenshot, all the networking-related components are categorized under Networking (like Ingress, Service, and Endpoints), ConfigMap, secrets under Config &amp;amp; Storage, etc. Also, if you hover over any workload, you will get an option to check out the k8s manifest and events, check logs in real-time, and even exec into a pod for debugging directly in the Devtron UI.&lt;/p&gt;

&lt;p&gt;Here is an additional read on &lt;a href="https://devtron.ai/blog/helm-debugging-logging-made-easy-devtron/"&gt;a detailed understanding of debugging and logging capabilities of Devtron for Helm apps&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Referring to Chart’s Documentation In Your Workflow
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O1v3QLaK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gr7hw10hs7ewak2tw58v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O1v3QLaK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gr7hw10hs7ewak2tw58v.png" alt="charts-readme" width="880" height="494"&gt;&lt;/a&gt;&lt;br&gt;
If you want to try out a new Helm chart, you will use its README to check out the different parameters exposed, the values to be passed, and so forth. If using Helm CLI, it becomes a hassle to refer to README, again and again, navigate to different tabs in the browser, making typo errors or mismatched parameters and values in the process, all leading to spending more time to get the job done. With Devtron’s Helm Dashboard, you can see the chart’s README beside the values and check out the parameters, their descriptions, and values to be passed all at the same place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Managing Helm Apps Across Multi-Clusters
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RtPedEzx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4iioklnuaoq6uqj9hu12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RtPedEzx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4iioklnuaoq6uqj9hu12.png" alt="multi-clusters" width="880" height="497"&gt;&lt;/a&gt;&lt;br&gt;
One of the big pain points of using helm CLI or kubectl is that there isn’t any unified platform/dashboard to manage deployments across multi-cluster in a hybrid cloud. As seen in the above image, Devtron does it very smoothly. With Devtron’s application tab, you can easily observe and manage your deployments across multiple environments and clusters, irrespective of the cloud providers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployment Values Comparison
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--66AwqPQX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i8w6coau2c8rft6wwyjf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--66AwqPQX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i8w6coau2c8rft6wwyjf.png" alt="Deployment Values Comparision" width="880" height="494"&gt;&lt;/a&gt;&lt;br&gt;
One of the primary questions that SREs and developers ask while troubleshooting is “what changed” since the last time the application was stable? In the context of Helm, comparing value.yaml files are one of the most common workflows for all teams. Devtron’s Helm Dashboard provides a handy way to compare Helm configurations when you are dealing with an incident or troubleshooting&lt;/p&gt;

&lt;h3&gt;
  
  
  Hibernation of Workloads
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6tvteG8P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y5ecwyw63nrsiddawwd4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6tvteG8P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y5ecwyw63nrsiddawwd4.png" alt="Workload Hybernation" width="880" height="494"&gt;&lt;/a&gt;&lt;br&gt;
There’s no Out-of-the-Box support for the Hibernation of workloads in Helm or raw Kubernetes. When it comes down to cost optimization, it becomes essential to consume the resources as per requirements, and especially talking about small-scale industries or startups, features like hibernation of workloads can help them save dollars just with a few clicks.&lt;/p&gt;

&lt;p&gt;It becomes very effective for environments like non-prod or staging. With a few clicks, as shown in the image above, you can quickly scale down your workloads, not in use, and save the infra costs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Access Management
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ikwsdEfb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sbwf193m896rfjf6nd98.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ikwsdEfb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sbwf193m896rfjf6nd98.png" alt="Access Management" width="880" height="493"&gt;&lt;/a&gt;&lt;br&gt;
When you use raw Kubernetes or Helm CLI, collaborating with other team members becomes a bit complex. For adding any user or upgrading any user's access, you will need to write RBAC rules every time. But Devtron significantly simplifies that. Internally it also uses RBAC, inheriting all its advantages and abstracting out the complexities by providing this intuitive user interface, as seen in the above image. You can add users just in seconds.&lt;br&gt;
Devtron also has its flavor for access management and enables teams to provide access at different levels - for entire projects, environments, and even for a single application. It also comes with Group permissions wherein users can create a group of accesses, for e.g - View only access to maybe staging environment for all new joiners and add the group permissions while adding new users. Please refer to the &lt;a href="https://docs.devtron.ai/getting-started/global-configurations/authorization/user-access"&gt;documentation&lt;/a&gt; for more detailed information about fine-grained access management for helm apps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://devtron.ai/contact-us.html"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bd6X51XQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mycxkvmgnkr3obvmc3tu.png" alt="Devtron Helm Dashboard" width="880" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The adoption of Kubernetes is increasing, and so is the usage of Helm. To ensure business agility with minimal errors in deploying Kubernetes with better management and debugging capabilities, community users can adopt the Helm Dashboard in Devtron.&lt;/p&gt;

&lt;p&gt;As part of our commitment to open source, we will strive to improve this dashboard further.  We are always looking to learn about what problems we can solve for our community. If you have suggestions or feature requests, submit them on &lt;a href="https://github.com/devtron-labs/devtron/issues/new/choose"&gt;Github&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>opensource</category>
      <category>devops</category>
      <category>devrel</category>
    </item>
    <item>
      <title>Deploying a custom Mongodb operator using Helm Charts</title>
      <dc:creator>Abhinav Dubey</dc:creator>
      <pubDate>Tue, 28 Jun 2022 11:00:31 +0000</pubDate>
      <link>https://forem.com/devtron_/deploying-a-custom-mongodb-operator-using-helm-charts-5hg2</link>
      <guid>https://forem.com/devtron_/deploying-a-custom-mongodb-operator-using-helm-charts-5hg2</guid>
      <description>&lt;p&gt;Building a Helm chart and managing it, are two different aspects of packaging an application for Kubernetes. Helm is efficient enough to package a complex K8s application and deploy it. When it comes down to app management, there are certain challenges with Helm. In this short blog, we will see how easy it is to deploy and manage a custom mongodb chart using Devtron.&lt;/p&gt;

&lt;p&gt;So, let’s get started&lt;/p&gt;

&lt;p&gt;If you are not aware of Helm, please have a read of my previous blog for detailed understanding of Helm charts.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/abhinavd26" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F533875%2F82711ceb-6308-4df7-a68c-ad861cfb27f1.jpeg" alt="abhinavd26"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/abhinavd26/all-about-helm-the-k8s-package-manager-2gmj" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;All About Helm, The K8s Package Manager&lt;/h2&gt;
      &lt;h3&gt;Abhinav Dubey ・ Feb 8 '22&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#kubernetes&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;[Note: The only prerequisite of getting started with Devtron is to have a Kubernetes cluster]&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding Helm repository
&lt;/h2&gt;

&lt;p&gt;Devtron comes with a number of pre-added, commonly used Helm charts that can be seen in the &lt;code&gt;Charts&lt;/code&gt; section. But if you want to install your custom chart, let's say MongoDB, it can be easily achieved using Devtron.&lt;/p&gt;

&lt;p&gt;To add any custom chart, go to &lt;code&gt;Global Configurations&lt;/code&gt; → &lt;code&gt;Chart Repository&lt;/code&gt; → &lt;code&gt;Click on Add Repository&lt;/code&gt; → &lt;code&gt;Click Save&lt;/code&gt;  → &lt;code&gt;Click on Refresh Charts&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Note: If you do not see any charts in Charts section, click on Refresh Charts to sync all the charts from added repositories]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl96klwl0r1lp5w9iiztz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl96klwl0r1lp5w9iiztz.png" alt="add-repository"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploying Helm charts
&lt;/h2&gt;

&lt;p&gt;Now that we have added our custom chart repository i.e, &lt;code&gt;percona&lt;/code&gt;, let’s deploy it.&lt;/p&gt;

&lt;p&gt;To deploy any chart through Devtron, goto &lt;code&gt;Charts&lt;/code&gt; → &lt;code&gt;Click on Chart to Deploy&lt;/code&gt; → &lt;code&gt;Click Deploy&lt;/code&gt;  → &lt;code&gt;Change Values as per required&lt;/code&gt; → &lt;code&gt;Click Deploy Chart&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For instance, I want to deploy Percona's MongoDB operator. Let’s see how we can deploy it with just a few clicks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-1:&lt;/strong&gt; Select the chart to deploy i.e, &lt;code&gt;percona/psmdb-operator&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fon0qm5ia0si8kfp4js5i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fon0qm5ia0si8kfp4js5i.png" alt="chart-store"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-2:&lt;/strong&gt; Click on Deploy to edit default values as per your requirements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjbjj2phzwjvj2yq9u0n1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjbjj2phzwjvj2yq9u0n1.png" alt="edit-default-values"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-3:&lt;/strong&gt; Edit the default configuration and click on Deploy Chart. You can also see the description for all the parameters, from the sidebar - README of the particular chart.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxayvw1qc4c0gjl010ajk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxayvw1qc4c0gjl010ajk.png" alt="chart-values-and-readme"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-4:&lt;/strong&gt; Congratulations, you have successfully deployed! You can see all the details of your deployed chart such as current status, different workloads, manifests, events, logs, deployment history, etc within Devtron dashboard itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6j3dgk6g92jai8t7k48w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6j3dgk6g92jai8t7k48w.png" alt="chart-details"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reach out to us through the &lt;a href="https://discord.devtron.ai/" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; channel and refer to &lt;a href="https://docs.devtron.ai/hyperion/hyperion" rel="noopener noreferrer"&gt;Devtron&lt;/a&gt; documentation, to find all the features of Devtron.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>helm</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>Unleash the blogger in you!</title>
      <dc:creator>Abhinav Dubey</dc:creator>
      <pubDate>Mon, 30 May 2022 10:32:42 +0000</pubDate>
      <link>https://forem.com/devtron_/unleash-the-blogger-in-you-2d48</link>
      <guid>https://forem.com/devtron_/unleash-the-blogger-in-you-2d48</guid>
      <description>&lt;p&gt;Are you a technical blogger passionate about writing interesting &amp;amp; exciting content to create a meaningful impact in people’s lives using technology? Using your writing skills, do you love to break down complex IT scenarios and explain them in simple terms? &lt;/p&gt;

&lt;p&gt;If yes, &lt;a href="http://github.com/devtron-labs/devtron" rel="noopener noreferrer"&gt;Devtron&lt;/a&gt; brings an exciting opportunity to all the tech writers across the globe. Participate now and stand a chance to win exciting prizes and goodies. The published blogs between 5th May - 30th June, can be submitted to &lt;a href="https://contest.konfhub.com/" rel="noopener noreferrer"&gt;https://contest.konfhub.com/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prizes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8xiuhqma50rishmnd1ic.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8xiuhqma50rishmnd1ic.png" alt="prices"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Roll-up your selves, become a blogging sifu 🥋 and get a chance to win exciting prizes along with Devtron branded swags.&lt;/p&gt;

&lt;h4&gt;
  
  
  Top 3 winners
&lt;/h4&gt;

&lt;p&gt;Amazon Gift vouchers + Devtron Swag Kit&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Winner: $350&lt;/li&gt;
&lt;li&gt;Runner up: $200&lt;/li&gt;
&lt;li&gt;2nd Runner up: $100&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  4th position to 10th position
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;$25 Amazon Gift voucher + Devtron Swag Kit&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  All valid submitters
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Devtron Swag Kit&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Blogathon Themes
&lt;/h2&gt;

&lt;p&gt;Participants can write about any topics on the given themes, covering relevant scenarios and use cases.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;AppOps&lt;/li&gt;
&lt;li&gt;DevOps/DevSecOps&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Participate?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Write technical blogs on one or multiple themes mentioned above.&lt;/li&gt;
&lt;li&gt;Your blog must cover examples, scenarios, or relevant use-cases of the technology themes on which you are writing.&lt;/li&gt;
&lt;li&gt;You are allowed to publish any number of blogs. There are no restrictions.&lt;/li&gt;
&lt;li&gt;Publish your blogs on any platform like Dev.to, Medium, Hackernoon, Dzone, Hashnode, etc. The blogs must be publicly accessible to anyone visiting the submitted blog page.&lt;/li&gt;
&lt;li&gt;You can submit blog entries only as an individual. Team participation is not eligible.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Judging Criteria
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Your blog should be written in English.&lt;/li&gt;
&lt;li&gt;Your blog has to be original (not plagiarized) and new material (not a republication) published between 5th May 2022 to 30th June 2022 (both dates inclusive).&lt;/li&gt;
&lt;li&gt;Your blog must be non-trivial with a minimum of 500 words.
Videos that explain relevant aspects of your topic inside the blogs will carry additional points.&lt;/li&gt;
&lt;li&gt;The popularity of your blogs (number of blogs, likes, shares, views, etc) will carry additional points.
Blogs that are aligned with Devtron will carry additional points.&lt;/li&gt;
&lt;li&gt;Blogs talking about any software or tool should have a fair comparison against Devtron.&lt;/li&gt;
&lt;li&gt;Include back-links to the Devtron website and GitHub in a prominent section of the blog, with relevant hashtags at the end of your blog.&lt;/li&gt;
&lt;li&gt;You give KonfHub &amp;amp; Devtron, permission to share your blogs in their online resources, newsletters, and social media (you will still own all the rights to your submission).&lt;/li&gt;
&lt;li&gt;Winner selections will be at the sole discretion of Devtron.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Scoreboard
&lt;/h2&gt;

&lt;p&gt;Signup for free on our &lt;a href="https://discord.devtron.ai/" rel="noopener noreferrer"&gt;Discord server&lt;/a&gt; and join the &lt;code&gt;#devtron-blogathon&lt;/code&gt; channel to view the scoreboard. Scores will be updated weekly on the channel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is promoting a Blog allowed?
&lt;/h2&gt;

&lt;p&gt;Yes, Definitely! You should promote your published blogs on whichever platforms you want to. You can promote your blogs via Twitter, LinkedIn, Emails, Newsletters, etc. This would help increase the visibility and reach! &lt;/p&gt;

&lt;p&gt;While sharing your blogs, Do mention Devtron’s official handles and relevant hashtags including #DevtronBlogathon2022 and #devtron. &lt;/p&gt;

&lt;p&gt;The top 10 blogs will be shared from Devtron’s official social handles. Feel free to reach out to us on our &lt;a href="https://discord.devtron.ai/" rel="noopener noreferrer"&gt;discord server&lt;/a&gt; for any issues or help.&lt;/p&gt;

</description>
      <category>writing</category>
      <category>productivity</category>
      <category>opensource</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>Decrease your Organization's Carbon footprints using Kubernetes</title>
      <dc:creator>Abhinav Dubey</dc:creator>
      <pubDate>Tue, 26 Apr 2022 10:56:44 +0000</pubDate>
      <link>https://forem.com/abhinavd26/decrease-your-organizations-carbon-footprints-using-kubernetes-4oep</link>
      <guid>https://forem.com/abhinavd26/decrease-your-organizations-carbon-footprints-using-kubernetes-4oep</guid>
      <description>&lt;p&gt;If you are running micro-services these days there is a high probability that you're running it on a cloud provider like AWS, GCP, MS Azure etc. The services of these cloud providers are powered by data centres, which typically comprise tens to thousands of interconnected servers and consumes a substantial amount of electrical energy. It is estimated that data centres will use anywhere between 3% and 13% of global electricity by the year 2030 and henceforth will be responsible for a similar share of carbon emission. This post will step through an example with a case study of how to use Kubernetes to minimize the amount of carbon in the atmosphere that your Organization's infrastructure is responsible for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Carbon Footprint
&lt;/h2&gt;

&lt;p&gt;What exactly is Carbon Footprint? It is the total amount of greenhouse gases (carbon dioxide, methane, etc) released into the atmosphere due to human interventions. Sounds familiar, isn’t it? We all have read about the different ways greenhouse gases get released into the atmosphere and the need to prevent it.&lt;/p&gt;

&lt;p&gt;But why are we talking about it in a technical blog? And how can Kubernetes help to reduce your organization's Carbon footprint?&lt;/p&gt;

&lt;p&gt;In the era of technology, everything is hosted on cloud servers, which are backed by massive data centers. In other words, we can say data centers are the brain of the internet. Right from the servers to storage blocks, everything is present in these Data Center.&lt;/p&gt;

&lt;p&gt;All the machines in the data centers requires energy to operate, i.e, electricity. Irrespective of the source of generation, renewable or nonrenewable.  According to a survey conducted by &lt;a href="https://www.agci.org/"&gt;Aspen Global Change Institute&lt;/a&gt;, data centers account for being one of the direct contributors of climate change due to the release of greenhouse gases.  According to an article by &lt;a href="https://energyinnovation.org/2020/03/17/how-much-energy-do-data-centers-really-use/"&gt;Energy Innovation&lt;/a&gt;, a large data center may contain around tens of thousands of hardware and can use around 100 megawatts (MW) of electricity.&lt;/p&gt;

&lt;p&gt;But again, how does using another technology i.e, Kubernetes can contribute to this? Before answering the above question let’s learn how to calculate the carbon footprint of a server that we usually create with a public cloud provider like aws. In AWS, we create Instances of different sizes, computation power, storage capacity, etc as per our needs. Let’s calculate the carbon footprint emitted by initializing an instance of type - m5.2xlarge in region - ap-south-1 which runs for 24 hours. &lt;/p&gt;

&lt;p&gt;We can calculate the Carbon Footprint, by using the &lt;a href="https://engineering.teads.com/sustainability/carbon-footprint-estimator-for-aws-instances/?estimation=true&amp;amp;instance_id=2310&amp;amp;region_id=2238&amp;amp;compute_hours=24#calculator"&gt;Carbon Footprint Estimator for AWS instances&lt;/a&gt;. As you can see in the below image, after giving the values, we can easily estimate the carbon footprint for the respective instance which is 1,245.7 gCO₂eq.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qqw6qiKZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ipsxuh86sz1ex0uj2yay.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qqw6qiKZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ipsxuh86sz1ex0uj2yay.png" alt="carbon-footprint" width="880" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Factors Considered while Calculating
&lt;/h2&gt;

&lt;p&gt;There are primarily two factors which contribute to carbon emissions in the Compute Resource carbon footprint analysis, which are discussed as below -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Carbon emissions related to running the instance, including the data center PUE&lt;/strong&gt;&lt;br&gt;
Carbon emissions from electricity consumed is the major source of carbon footprint in the Tech Industry. The &lt;a href="https://docs.google.com/spreadsheets/d/1DqYgQnEDLQVQm5acMAhLgHLD8xXCG9BIrk-_Nv6jF3k/edit#gid=504755275"&gt;AWS EC2 Carbon Footprint Dataset&lt;/a&gt; available is used for the calculation of Carbon emissions on the basis of how much wattage is used on various CPU consumption levels.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Carbon emissions related to manufacturing the underlying hardware&lt;/strong&gt;&lt;br&gt;
Carbon emissions from manufacturing of hardware components is another major contributor when it comes to carbon footprint calculations within the scope of this study.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Kubernetes can help?
&lt;/h2&gt;

&lt;p&gt;Kubernetes is one of the most adopted technologies. As per the survey by &lt;a href="https://www.purestorage.com/content/dam/pdf/en/analyst-reports/ar-portworx-pure-storage-2021-kubernetes-adoption-survey.pdf"&gt;Portworx&lt;/a&gt;, 68% of the companies have increased the usages of Kubernetes and IT automation and the adoption metrics is still increasing. For any application to be deployed over kubernetes, we need to create a kubernetes cluster which comprises any number of master and worker nodes. These are nothing but instances/servers which are being initialized where all the applications will be deployed. The number of nodes keep on increasing as the load increases which eventually will contribute more and more to the Carbon footprint. But with the help of Kubernetes Autoscaling, we can lower down the count of nodes i.e, reduce the number of instances created as per the requirements.&lt;/p&gt;

&lt;p&gt;Let’s try to understand it with a use-case.&lt;/p&gt;

&lt;p&gt;A logistic company uses Kubernetes in their production to deploy all their micro-services. A single micro-service requires around 60 replicas which initializes around 20 instances of type - m5.2xlarge in region ap-south-1. If we calculate the Carbon Footprint of a single micro-service in 24 hours, it would be around &lt;strong&gt;24,914 gCO₂eq&lt;/strong&gt;. This is the amount of carbon footprint emitted just by a single micro-service for 24hrs, and there are thousands of micro-services in a well-versed organization which runs 24*7. Now if you are wondering how this can be reduced. Well you are at the right place.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OoHQGmJW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4cmwwn6mhub5s5ojsua1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OoHQGmJW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4cmwwn6mhub5s5ojsua1.png" alt="throughput-metrics-based-autoscaling" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The maximum traffic that a logistic company's First mile / Last mile app experiences is during the day-time, when the deliveries happen. Generally, from morning around 8:00 AM, there’s a steep increase in the traffic and it experiences its peak in afternoon hours. That's when it would have the most number of pod replicas and nodes/instances. Then post 8:00 PM the traffic decreases spontaneously. During the off hours, when the traffic decreases, the count of replicas also drops to 6 from an average of 60 for each micro-service, which requires only 2 nodes/instances. The micro-service uses throughput metrics based horizontal pod auto scaling using Keda. &lt;br&gt;
Now if we talk about the carbon emissions by 1 micro service after deploying it on Kubernetes paired with horizontal pod auto-scaling, it would drop to around -&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;51.9 gCO₂eq x 2 (nodes) x 12 (hrs 8pm to 8am non-peak hours) + 51.9 gCO₂eq x 20 (nodes) x 12 (hrs 8am to 8pm peak traffic hours) = 13,701.6 gCO₂eq&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;51.9 gCO₂eq x 20 (nodes) x 24 (hrs no autoscaling) = 24,912 gCO₂eq&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's a whooping &lt;strong&gt;11,211 gCO₂eq (45% reduction)&lt;/strong&gt; in carbon emissions [1], and this is just by 1 micro-service in 24hrs. Which translates to &lt;strong&gt;4092 KgCo2eq&lt;/strong&gt; per year! For the reference of how much this is, a Boeing 747-400 releases about &lt;strong&gt;90 KgCo2eq&lt;/strong&gt; per hour of flight when it covers around 1000 Kms [2].&lt;/p&gt;

&lt;p&gt;Now think of how much your organization is capable to reduce per year by migrating 1000s of micro-services on Kubernetes paired with efficient autoscaling.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D-H2VFm---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pcnu2ilgoiuvwlfc9gbm.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D-H2VFm---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pcnu2ilgoiuvwlfc9gbm.gif" alt="wao-meme" width="498" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Migrating to Kubernetes?
&lt;/h2&gt;

&lt;p&gt;Kubernetes is the best container orchestration technology out there in the cloud native market but the learning curve for adopting Kubernetes is still a challenge for the organizations looking to migrate to Kubernetes. There are a many Kubernetes specific tools out there in marketplace like ArgoCD, Flux for deployments, Prometheus and Grafana for monitoring, Argo workflows for creating parallel jobs etc. Kubernetes space has so many options but they need to be configured separately, which again has it's own complexities. &lt;/p&gt;

&lt;p&gt;That's where &lt;a href="https://github.com/devtron-labs/devtron"&gt;Devtron&lt;/a&gt; helps you, Devtron stack configures and integrates all these tools that you would have to otherwise configure separately and let's you manage everything from one stunning dashboard. Devtron is an open source software delivery workflow for Kubernetes. Devtron is trusted by thousands of users and giants like &lt;a href="https://www.delhivery.com/"&gt;Delhivery&lt;/a&gt;, &lt;a href="https://www.bharatpe.com"&gt;Bharatpe&lt;/a&gt;, &lt;a href="https://www.livspace.com/in"&gt;Livspace&lt;/a&gt;, &lt;a href="https://www.moglix.com/"&gt;Moglix&lt;/a&gt; etc and has a broad range of community all across the globe. And the best thing is, it gives you a no-code Kubernetes deployment experience which means there's no need to write Kubernetes yamls at all.&lt;/p&gt;

&lt;p&gt;Devtron is also running an initiative &lt;a href="https://devtron.ai/support.html"&gt;#AdoptK8sWithDevtron&lt;/a&gt; where they are offering expert assistance and help to first 100 organizations to migrate their micro-services to Kubernetes.&lt;/p&gt;

&lt;p&gt;[1] When compared to micro-services which are not configured to scale efficiently.&lt;/p&gt;

&lt;p&gt;[2] Ref: &lt;a href="https://catsr.vse.gmu.edu/SYST460/LectureNotes_AviationEmissions.pdf"&gt;https://catsr.vse.gmu.edu/SYST460/LectureNotes_AviationEmissions.pdf&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>opensource</category>
      <category>devops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>All About Helm, The K8s Package Manager</title>
      <dc:creator>Abhinav Dubey</dc:creator>
      <pubDate>Tue, 08 Feb 2022 06:16:08 +0000</pubDate>
      <link>https://forem.com/abhinavd26/all-about-helm-the-k8s-package-manager-2gmj</link>
      <guid>https://forem.com/abhinavd26/all-about-helm-the-k8s-package-manager-2gmj</guid>
      <description>&lt;p&gt;&lt;a href="https://helm.sh" rel="noopener noreferrer"&gt;Helm&lt;/a&gt; is one of the most powerful and community adopted Kubernetes Package manager used in industry. It is used to install and manage all the Kubernetes application. In laymen language, think of it as &lt;code&gt;npm&lt;/code&gt; or &lt;code&gt;pip&lt;/code&gt; for Kubernetes. Helm deploys all the k8s applications in a packaging format called helm charts. It is used to install, upgrade, delete even the most complex Kubernetes applications. Now let's try to understand why do we even need helm charts at the first place?&lt;/p&gt;

&lt;h2&gt;
  
  
  Need of Helm Charts
&lt;/h2&gt;

&lt;p&gt;Kubernetes provides a command line utility called, &lt;code&gt;kubectl&lt;/code&gt; which is efficient enough to deploy, inspect, update, delete, your Kubernetes resources. All the k8s resources are defined in YAML files and can be deployed, update, etc by using &lt;code&gt;kubectl&lt;/code&gt;. But then why the hell we need helm charts? Let's try to understand this with an example.&lt;/p&gt;

&lt;p&gt;For instance you have a Kubernetes application which have different resources say, deployment, service, service account, role, role-binding, configmap, secret and ingress. Now we need to deploy all these resources in our cluster. Either we can use &lt;code&gt;kubectl apply -f Yamls&lt;/code&gt; command to deploy all resources present in &lt;code&gt;Yamls&lt;/code&gt; directory, or we can use helm charts. If we are using yamls, then for any new resource, we need to create a new yaml file and then deploy it. In this case, eventually we will have to write multiple yaml files, each for different resource. But this is not the case with helm charts.&lt;/p&gt;

&lt;p&gt;Helm charts packages all the different resources of your k8s application in an organized way. It contains a directory called &lt;code&gt;templates&lt;/code&gt; where all the different resources are defined which needs to be deployed. The environment variables and deployment-specific parameters are extracted out and put in a separate file called &lt;code&gt;Values.yaml&lt;/code&gt; which can be configured every-time you deploy the chart. The advantage of doing so is that you can deploy it to different clusters and even in different environments say, development, staging or production environment without creating the whole chart again.&lt;/p&gt;

&lt;p&gt;So, this one of the major advantage of using helm. If you still have doubts, don't worry. We will create a chart from scratch and deploy it on a k8s cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Installing and creating helm charts are quite straight-forward. You can always refer to their &lt;a href="https://helm.sh/docs/intro/install/" rel="noopener noreferrer"&gt;installation-docs&lt;/a&gt; for installation as they provide a rich documentation to install helm in different distributions. For this example, we will be using script to install helm. Please execute the below commands -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First we need to download the script in our machine
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Now we need to give execute permission to the shell script
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;700 get_helm.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Finally need to execute it which will install helm in your system
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./get_helm.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Great. We are done with installing helm in our system. To verify the installation please run - &lt;code&gt;helm version --short&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfhlsb57bfnmb023bgxz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfhlsb57bfnmb023bgxz.jpg" alt="helm-version"&gt;&lt;/a&gt;&lt;br&gt;
If you could see the version, the installation is successful.&lt;/p&gt;
&lt;h3&gt;
  
  
  Create Your First Helm Chart
&lt;/h3&gt;

&lt;p&gt;As we have successfully installed helm in our system, its time to create our own helm chart and deployed a Kubernetes application. We will be creating a chart for a simple go application which can be cloned from &lt;a href="https://github.com/devtron-labs/demo-go-app.git" rel="noopener noreferrer"&gt;here&lt;/a&gt;. &lt;br&gt;
&lt;strong&gt;[Note: In this blog, I will not be demonstrating how to wrap the application in an image using Dockerfile. Rather I will use an image which I created before and can be accessed from &lt;a href="https://hub.docker.com/r/alex43/go-demo-app/tags" rel="noopener noreferrer"&gt;here&lt;/a&gt;]&lt;/strong&gt;&lt;br&gt;
Now let's begin with the hands-on part and create our first helm chart. Please follow the steps below -&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-1:&lt;/strong&gt; Helm is efficient enough to provide you with the basic template to begin with. To create the template, execute -&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm create demo-go-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It will create a helm chart named &lt;code&gt;demo-go-app&lt;/code&gt; which contains the basic configuration files &amp;amp; directories in the helm syntactical order as you can see in the below image.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22cc3tq5j09q02ary00u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22cc3tq5j09q02ary00u.jpg" alt="helm-create"&gt;&lt;/a&gt;&lt;br&gt;
Let's understand the files &amp;amp; directories created by-default&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chart.yaml&lt;/td&gt;
&lt;td&gt;The file contains the information of your chart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;chart&lt;/td&gt;
&lt;td&gt;Its an empty directory which may contain any dependent charts if you have&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;templates&lt;/td&gt;
&lt;td&gt;The directory contains all the yaml files needs to be deployed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tests&lt;/td&gt;
&lt;td&gt;It contains files used for testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;values.yaml&lt;/td&gt;
&lt;td&gt;This file contains the values which needs to be given while installation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Step-2:&lt;/strong&gt; Now you can add/remove the files which you don't need for your application. In our case let's delete chart dir, tests dir, ingress.yaml and hpa.yaml as we don't need these for our demo.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcb9gk60yy7cb3f13l5sf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcb9gk60yy7cb3f13l5sf.jpg" alt="rm-command"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-3:&lt;/strong&gt; Now we need to provide the image where our application has been wrapped and needs to be deployed. In our case as I already mentioned above, we already have our application wrapped in an image and pushed in &lt;a href="https://hub.docker.com/r/alex43/go-demo-app/tags" rel="noopener noreferrer"&gt;public container registry&lt;/a&gt;, so I will be using it. &lt;br&gt;
Feel free to use it if you don't have your own image. One of the benefits of helm charts as we discussed, we just need to make changes in our &lt;code&gt;values.yaml&lt;/code&gt;, which contains the parameters extracted from all the resources which we want to deploy. In the files, we just have to add our own image details and we are done with the bare min config to deploy our application. In the default &lt;code&gt;value.yaml&lt;/code&gt; file, there are a lot different parameters which can be tweaked as per our requirements. As you can see an extract of few parameters from values.yaml, where I have just manipulated the image details and added &lt;code&gt;fullnameOverride&lt;/code&gt;, rest everything goes default.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;replicaCount: 1

image:
  repository: alex43/go-demo-app
  pullPolicy: IfNotPresent
  &lt;span class="c"&gt;# Overrides the image tag whose default is the chart appVersion.&lt;/span&gt;
  tag: &lt;span class="s2"&gt;"v1.0"&lt;/span&gt;

imagePullSecrets: &lt;span class="o"&gt;[]&lt;/span&gt;
nameOverride: &lt;span class="s2"&gt;""&lt;/span&gt;
fullnameOverride: &lt;span class="s2"&gt;"go-app"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now you can make these changes and save the file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-4:&lt;/strong&gt; Since we are ready with the necessary changes, now we can install our chart. To install the chart in default namesapce we can use the following command.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm &lt;span class="nb"&gt;install &lt;/span&gt;go-app demo-go-app/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If we want to install the chart in specific namespace, we can use the following command. It will create a new namespace and will install the chart in that namespace. If the namespace already exists, we can omit the &lt;code&gt;--create-namespace&lt;/code&gt; parameter&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm &lt;span class="nb"&gt;install &lt;/span&gt;go-app demo-go-app &lt;span class="nt"&gt;--create-namespace&lt;/span&gt; &lt;span class="nt"&gt;--namespace&lt;/span&gt; helm-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;To verify weather the helm app has been created or not, we can simply use the following command with the namespace where it was installed as you can see in the below image.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm list &lt;span class="nt"&gt;-n&lt;/span&gt; helm-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpy7nfldv6wqdtkupa2bq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpy7nfldv6wqdtkupa2bq.jpg" alt="helm-install"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we have successfully installed/deployed our k8s application with helm chart. Now let's play a bit around helm chart. In the &lt;code&gt;values.yaml&lt;/code&gt;, let's say, if we want to add some more parameters which we want to configure while installation or upgrading the chart, we can easily do that. From &lt;code&gt;deployment.yaml&lt;/code&gt;, for instance we want to make &lt;code&gt;containerPort: 80&lt;/code&gt; a generic parameter by passing it in &lt;code&gt;values.yaml&lt;/code&gt; file so that it can be changed or updated while installation. To pass any value, we need to grab the values by using the syntax - &lt;code&gt;{{ .Values.&amp;lt;AttributeNameGiven_in_Values.yaml&amp;gt; }}&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a parameter in values.yaml file say,
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;port:
  containerPort: 80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Now add the following in the &lt;code&gt;containerport&lt;/code&gt; parameter in your &lt;code&gt;deployment.yaml&lt;/code&gt; so that it can receive the values passed through &lt;code&gt;values.yaml&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ports:
 - name: http
   containerPort: {{ .Values.port.containerPort }}
   protocol: TCP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now if you want to check if the Values you added is properly working or not, you can render the chart locally by using the below command. It will render all the templates with values given in &lt;code&gt;values.yaml&lt;/code&gt;. This is mostly used to debug and test your custom created helm charts.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm template &lt;span class="nt"&gt;--debug&lt;/span&gt; demo-go-app/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The output would look like something in the below image if there isn't any error.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxewd2qplux5ezi4ql4bc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxewd2qplux5ezi4ql4bc.jpg" alt="helm-template-debug"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The advantage of doing so is that, we can override the values while installing or upgrading the chart just by using a parameter called &lt;code&gt;--set&lt;/code&gt;. Lets upgrade the chart which we have installed.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm upgrade go-app demo-go-app/ &lt;span class="nt"&gt;--set&lt;/span&gt; port.containerPort&lt;span class="o"&gt;=&lt;/span&gt;8080 &lt;span class="nt"&gt;-n&lt;/span&gt; helm-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The command will update the installed chart and will also update the &lt;code&gt;REVISION&lt;/code&gt; automatically as you can see in the below image.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flrej5c2y4tevwimb4y77.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flrej5c2y4tevwimb4y77.jpg" alt="helm-upgrade"&gt;&lt;/a&gt;&lt;br&gt;
Similarly, we can update any parameter passed in &lt;code&gt;values.yaml&lt;/code&gt; file while installation or upgradation. Now if we want to access our deployed application, just copy-paste the commands given in &lt;code&gt;NOTES&lt;/code&gt; section after upgrading the chart. It will port-forward the port number &lt;code&gt;8080&lt;/code&gt; of your localhost to the container port you have given. In our case we set it to 8080 so the output would look something like the below image.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl31l6nvsget7t8ig0wyz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl31l6nvsget7t8ig0wyz.jpg" alt="port-forward"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now if you visit &lt;code&gt;127.0.0.1:8080/&lt;/code&gt;, you would be able to see your application. In my case, I have given an endpoint &lt;code&gt;layout.html&lt;/code&gt; so I will be able to see my application at the given endpoint as you can see in the image below.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbygd43b8f9sgkbyvz7u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbygd43b8f9sgkbyvz7u.jpg" alt="deployed-app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So this was all about helm, and how you can create your own helm charts and deploy over k8s. Now if you want to delete the chart installed, simply execute the below command. It will delete all the resources it created along with it.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm delete go-app &lt;span class="nt"&gt;-n&lt;/span&gt; helm-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Since we are familiar with the helm chart concepts, let's talk a bit about its advantages and some of its challenges.&lt;/p&gt;
&lt;h3&gt;
  
  
  Advantages of Helm Charts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Can package complex applications to deploy over k8s&lt;/li&gt;
&lt;li&gt;Easy to get started with per-defined templates&lt;/li&gt;
&lt;li&gt;Can use nested helm charts as dependencies&lt;/li&gt;
&lt;li&gt;Values can be overridden while installation and you don't have to create helm charts for different environments&lt;/li&gt;
&lt;li&gt;Just one click away for deploying all the resources of a k8s application&lt;/li&gt;
&lt;li&gt;Helm by-default maintains the database of REVISIONs (version) providing an ease to rollback if something goes wrong&lt;/li&gt;
&lt;li&gt;Easy collaborations among team and scalability&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Challenges with Helm Charts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It can easily package complex applications, but creating a helm chart for complex applications is itself quite complex&lt;/li&gt;
&lt;li&gt;Troubleshooting and debugging is quite difficult in helm for complex applications as it uses templates for different resources&lt;/li&gt;
&lt;li&gt;It doesn't provide any UI to manage applications deployed through helm. In scenarios where 100s of helm charts are deployed, it would be very difficult to manage helm apps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  So What next, Introducing Hyperion
&lt;/h2&gt;

&lt;p&gt;In the blog, we have talked about helm, its requirements, creating helm charts, its advantages and some of its challenges. To overcome its challenges and sustain the originality of helm, let me take the pleasure to introduce you to a tool called &lt;a href="https://docs.devtron.ai/hyperion/hyperion" rel="noopener noreferrer"&gt;&lt;code&gt;Hyperion&lt;/code&gt;&lt;/a&gt;. It is one of its rare kind open source tool where you can easily look for all the helm charts deployed on a cluster through an intuitive dashboard. Hyperion is a lightweight in nature packed with full-fledged debugging features for your Kubernetes workloads. To know more about it, feel free to install &amp;amp; explore Hyperion and let me know your views through comments. I am working on a dedicated blog for Hyperion which will be releasing soon.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/devtron-labs" rel="noopener noreferrer"&gt;
        devtron-labs
      &lt;/a&gt; / &lt;a href="https://github.com/devtron-labs/devtron" rel="noopener noreferrer"&gt;
        devtron
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Tool integration platform for Kubernetes
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>kubernetes</category>
      <category>beginners</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>All About ArgoCD, A Beginner's Guide</title>
      <dc:creator>Abhinav Dubey</dc:creator>
      <pubDate>Wed, 19 Jan 2022 13:58:29 +0000</pubDate>
      <link>https://forem.com/abhinavd26/all-about-argocd-a-beginners-guide-33c9</link>
      <guid>https://forem.com/abhinavd26/all-about-argocd-a-beginners-guide-33c9</guid>
      <description>&lt;p&gt;ArgoCD, being one of their 1st in the market known for having a declarative GitOps based deployment over Kubernetes is one of the most adopted Continuous Delivery tool. It has been known for its excellent application deployment and management over Kubernetes and features such as auto healing clusters, user-access management, status check, etc. It is &lt;a href="https://github.com/argoproj/argo-cd" rel="noopener noreferrer"&gt;open-sourced on github&lt;/a&gt;  under Apache 2.0 License.&lt;/p&gt;

&lt;h1&gt;
  
  
  ArgoCD Existence, Why 🤔?
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fec6gjcpw7vvlrkj88cvs.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fec6gjcpw7vvlrkj88cvs.jpeg" alt="but-why"&gt;&lt;/a&gt;&lt;br&gt;
There are already hell lots of tools in the market, so why do we need another one? To justify the existence of ArgoCD, let's try to understand the workflow for application deployment before-and-after ArgoCD.&lt;/p&gt;
&lt;h2&gt;
  
  
  Workflow Before ArgoCD
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff9dxi44lpvq97pkg03al.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff9dxi44lpvq97pkg03al.jpg" alt="before-argocd"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before the existence of ArgoCD, the pipeline seems something like the image above. A common ci-cd tool is used for both the Continuous Integration and Continuous Deployment.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;once the code is being pushed to version-control let's say Github, the tool triggers the other jobs&lt;/li&gt;
&lt;li&gt;it runs the test-cases, build images, push the image to respective container registry&lt;/li&gt;
&lt;li&gt;then changes the deployment manifests as per the new image build, and then deploy the new manifest using &lt;code&gt;kubectl&lt;/code&gt; commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All these jobs/tasks are being performed by a ci-cd tool. This is how traditional ci-cd workflow works before the existence of ArgoCD. However there are some challenges in this workflow.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We need to install and configure tools like kubectl, helm, etc in the ci-cd tools&lt;/li&gt;
&lt;li&gt;We will have to provide access to k8s cluster and cloud providers if using managed services like eks to the respective ci-cd tool&lt;/li&gt;
&lt;li&gt;It may lead to security loopholes as credentials are provided to external tools&lt;/li&gt;
&lt;li&gt;There's no visibility of deployment metrics, your ci-cd tools doesn't know the status of deployed application once they apply the manifests&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Workflow After ArgoCD
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj6pnk2lfu0hixq09avgj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj6pnk2lfu0hixq09avgj.jpg" alt="after-argocd"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the ArgoCD was launched in the market, the complete workflow has been changed. As you can see in the image, the Continuous Integration and Continuous Deployment has been separated now. ArgoCD uses declarative GitOps based deployment which states that the best practices is to have two different git repositories, one for application source code and another for deployment manifest files. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;once the code has been pushed to version, the CI pipeline trigger the job&lt;/li&gt;
&lt;li&gt;starts to run test cases, build images, push images to respective container registry and then update the manifest according and push manifests to its respective git repository&lt;/li&gt;
&lt;li&gt;once the updated manifests is pushed to its respective repository be it Github, Gitlab, etc as shown in the image, ArgoCD installed within the cluster automatically checks for the updates and apply within the cluster.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is how, the respective ci-cd tool is limited to CI and ArgoCD handles the CD part and thus separating both the operations. There are many different advantages of using this workflow, some of them are -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it uses git as a single source of truth, thus incorporating GitOps principles for the deployment&lt;/li&gt;
&lt;li&gt;since ArgoCD is installed within the cluster and is the only one that makes changes within the cluster, it doesn't require any extra credentials unlike the case of a ci-cd tool&lt;/li&gt;
&lt;li&gt;ArgoCD provides a dashboard to manage all the deployed applications hence enables you to get the status of application being deployed or not which we doesn't get in case of previous workflow&lt;/li&gt;
&lt;li&gt;easy rollback, as the cluster is synced with a separate git repository so we just need to revert the changes in git and the cluster will be automatically synced with the git repository&lt;/li&gt;
&lt;li&gt;disaster recovery, as in case of any disaster you just need to point the git repository to the newly created cluster and it will have all the configurations of the previous cluster&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, these are some of the major advantages of the Workflow after ArgoCD. Now let's dive into ArgoCD and do some practical stuffs.&lt;/p&gt;
&lt;h1&gt;
  
  
  ArgoCD Getting Started
&lt;/h1&gt;

&lt;p&gt;As we have seen some background concepts of ArgoCD and its need, let dive into some hands-on part. There are two different ways to install and setup ArgoCD in you cluster, &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install using script&lt;/li&gt;
&lt;li&gt;Install using helm chart&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's look into each of these.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Note: kubectl command must be installed and kubeconfig file should be at the default location(~/.kube/config) before installing argocd]&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Installation by script
&lt;/h2&gt;

&lt;p&gt;Just with few commands you can have your ArgoCD installed in your cluster and ready to deploy an application over it. Please execute the below commands for installation - &lt;/p&gt;

&lt;p&gt;Create a namespace &lt;code&gt;argocd&lt;/code&gt; where all ArgoCD resources will be installed&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl create namespace argocd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Install all resources in the created namespace&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-n&lt;/span&gt; argocd &lt;span class="nt"&gt;-f&lt;/span&gt; https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After installation, you need to access the dashboard. There are different methods given in their &lt;a href="https://argo-cd.readthedocs.io/en/stable/getting_started/#3-access-the-argo-cd-api-server" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; for accessing the dashboard. We will be using port-forward as we are installing in our local machine. Please execute the command below&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl port-forward svc/argocd-server &lt;span class="nt"&gt;-n&lt;/span&gt; argocd 8080:443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now your ArgoCD dashboard can be accessed in &lt;code&gt;127.0.0.1:8080&lt;/code&gt; as you can see in the image below.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnofuzua4039l96mekfna.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnofuzua4039l96mekfna.png" alt="argocd-dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the credentials to login, the username is &lt;code&gt;admin&lt;/code&gt; and for password, execute the following command -&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; argocd get secret argocd-initial-admin-secret &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"{.data.password}"&lt;/span&gt; | &lt;span class="nb"&gt;base64&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Congratulation 🥳 You have successfully logged into the argocd dashboard. &lt;br&gt;
Now, this was one of the method. It can also be installed using helm chart. Let's see how.&lt;/p&gt;
&lt;h2&gt;
  
  
  Installation by helm
&lt;/h2&gt;

&lt;p&gt;Recently argo-project has launched their official helm-chart support for ArgoCD, which enables us to install it with helm as well. Please execute the following command to install ArgoCD with helm -&lt;/p&gt;

&lt;p&gt;Add the helm repository in your system&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm repo add argo https://argoproj.github.io/argo-helm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now install the ArgoCD helm chart&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm &lt;span class="nb"&gt;install &lt;/span&gt;my-release argo/argo-cd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The advantage of installing with helm chart is that, you can easily provide the configuration as you want during the installation. For details of the parameters support by ArgoCD helm chart, please have a look at this detailed &lt;a href="https://github.com/argoproj/argo-helm/tree/master/charts/argo-cd#general-parameters" rel="noopener noreferrer"&gt;README&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After installation, to access the dashboard and credentials, you can follow the same commands as we did earlier. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Note: Make sure to remove namespace i.e, &lt;code&gt;-n argocd&lt;/code&gt; if you have not provided any namespace during the installation from commands to access dashboard &amp;amp; credentials. To provide the namespace, append this with helm install command &lt;code&gt;--create-namespace --namespace argocd&lt;/code&gt;]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is how easily you can install ArgoCD with the two different methods. For detailed documentation of getting started with ArgoCD, please have a &lt;a href="https://argo-cd.readthedocs.io/en/stable/getting_started/#getting-started" rel="noopener noreferrer"&gt;look at this&lt;/a&gt;. Now, lets deploy a simple application and configure it to manage by ArgoCD.&lt;/p&gt;
&lt;h1&gt;
  
  
  Application Deployment
&lt;/h1&gt;

&lt;p&gt;For any application to be deployed and managed by ArgoCD, we need to create a config file say, &lt;code&gt;application.yaml&lt;/code&gt; which will have all the configurations required by ArgoCD containing the repository URL to sync with, Path where all manifests are being stored which needs to be deployed, namespace, and other configs. Here's a &lt;a href="https://github.com/Abhinav-26/ArgoCD-Config-Test" rel="noopener noreferrer"&gt;demo project&lt;/a&gt; which we will deploy in our cluster having all &lt;code&gt;yamls&lt;/code&gt; and &lt;code&gt;application.yaml&lt;/code&gt; file with bare minimum configs.&lt;/p&gt;

&lt;p&gt;Let's deploy our application. Please follow along with the following steps.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;First, we need to store all the config files, including the &lt;code&gt;application.yaml&lt;/code&gt; in a separate gitHub (gitlab, bitbucket, etc) repository as you &lt;a href="https://github.com/Abhinav-26/ArgoCD-Config-Test" rel="noopener noreferrer"&gt;can see here&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then we just need to deploy the &lt;code&gt;application.yaml&lt;/code&gt; which consists config required by ArgoCD in the cluster by using the following command -&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; application.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjctvbkokfrlqazr975ho.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjctvbkokfrlqazr975ho.png" alt="kubectl-apply"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now only just by applying the ArgoCD application config file, all other k8s yamls will automatically gets deployed and synced with the cluster. In the below image you can see that, the application, &lt;code&gt;go-app-argo-config&lt;/code&gt; is responsible for creating all other resources.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbrglesoh6gl1155uaifw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbrglesoh6gl1155uaifw.png" alt="argo-config"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we want to update the deployment, service or add any other k8s manifests (yamls), we simply need to makes the changes and push in the github repository synced with it and rest will be taken care ArgoCD.&lt;/p&gt;

&lt;p&gt;So, this was all about ArgoCD which you need to kick-start and play around it. If you have any doubts or suggestions, please feel free to comment it down, I would be happy enough to answer all your queries.&lt;/p&gt;

&lt;p&gt;For more details about ArgoCD please feel free to check out their &lt;a href="https://github.com/argoproj/argo-cd/" rel="noopener noreferrer"&gt;Github Repository&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  What I am Working on
&lt;/h1&gt;

&lt;p&gt;As you have seen in the blog, ArgoCD is specifically used for deployment and for other operations you still need other tools. &lt;a href="https://github.com/devtron-labs/devtron" rel="noopener noreferrer"&gt;Devtron&lt;/a&gt; is an ecosystem of open source tools for Kubernetes. Devtron also uses ArgoCD for GitOps driven deployment along with other industry recognized open source tools like Prometheus and Grafana (for Monitoring), Clair (for image scanning), Casbin (for rbac auth implementation) and many more open source and enterprise level tools all integrated seamlessly in one package.&lt;/p&gt;

&lt;p&gt;Currently I am working on another blog, where I will be explaining how Devtron leverages ArgoCD and other tools to provides a seamless experience of the complete Software Delivery lifecycle on Kubernetes.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/devtron-labs" rel="noopener noreferrer"&gt;
        devtron-labs
      &lt;/a&gt; / &lt;a href="https://github.com/devtron-labs/devtron" rel="noopener noreferrer"&gt;
        devtron
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Tool integration platform for Kubernetes
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>opensource</category>
      <category>github</category>
    </item>
    <item>
      <title>K3d for Local Kubernetes Development</title>
      <dc:creator>Abhinav Dubey</dc:creator>
      <pubDate>Mon, 27 Dec 2021 06:19:37 +0000</pubDate>
      <link>https://forem.com/abhinavd26/k3d-for-local-kubernetes-development-5f13</link>
      <guid>https://forem.com/abhinavd26/k3d-for-local-kubernetes-development-5f13</guid>
      <description>&lt;p&gt;Hello folks, back here again with another blog. In this blog, we will discuss k3d and how easily it allows developers to set up Kubernetes developer environments. For this example, we will set up Devtron’s local development environment over k3d. Let me quickly introduce k3d and Devtron if you are not familiar with them.&lt;/p&gt;

&lt;p&gt;K3d, the name itself suggests k3s-in-docker is a wrapper around k3s - Lightweight Kubernetes that runs it in docker. It is widely known for its rapid cluster creation and deletion and is most widely used for local Kubernetes development.&lt;/p&gt;

&lt;p&gt;Now let’s talk a bit about Devtron. It is an open-source software delivery workflow for Kubernetes written in Go. It is known for its slick user interface which allows developers to deploy their microservices over Kubernetes in no time. Not only application deployment, but also it helps in monitoring and logging just through the Devtron dashboard itself. Moreover, it allows developers to integrate their existing open-source systems like ArgoCD, Jenkins, Clair, and others.&lt;/p&gt;

&lt;h2&gt;
  
  
  K3d - K3s in Docker
&lt;/h2&gt;

&lt;p&gt;K3d has the capability to run &lt;a href="https://dev.to/abhinavd26/all-about-k3s-lightweight-kubernetes-3ell"&gt;k3s - lightweight Kubernetes&lt;/a&gt; inside docker within a few seconds. It has been highly recognised by the community and is widely used for Kubernetes local development.&lt;/p&gt;

&lt;p&gt;Let’s quickly start with k3d and spin up a cluster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Note: Docker must be installed as a prerequisite for k3d installation]&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;K3d provides a rich installation method for different operating systems. For details about k3d installation please &lt;a href="https://k3d.io/v4.4.8/#installation" rel="noopener noreferrer"&gt;visit their documentation&lt;/a&gt;. I will continue with the installation script.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Note: I will be using MacOS for the demonstration. You can use any OS and install k3d from their documentation as per your requirements]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Please execute the following command to install k3d in your system.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="nt"&gt;-O&lt;/span&gt; - https://raw.githubusercontent.com/rancher/k3d/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let’s check whether it is installed correctly or not. Please execute the following command. It will print the k3d version installed in your system. Ideally, if you are installing from the above command, it will install the latest version.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;k3d version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwa3z15rthpr9cylxxxu4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwa3z15rthpr9cylxxxu4.png" alt="k3d version"&gt;&lt;/a&gt;&lt;br&gt;
Congratulations! That’s it for the installation. If you can see the version, k3d has been installed and now we are ready to spin up a cluster and set up our local development environment.&lt;/p&gt;
&lt;h3&gt;
  
  
  K3d Playaround
&lt;/h3&gt;

&lt;p&gt;Now that we have successfully installed k3d, let's create a k3d cluster and playaround k3d a bit. Please execute the following commands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I) Creating a cluster&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;k3d cluster create demo-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzc6639xf68884eaehota.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzc6639xf68884eaehota.png" alt="k3d-cluster-create"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It will create a cluster named demo-cluster in your system and run k3s inside docker containers. To verify whether containers are running or not, please execute &lt;code&gt;$ docker ps&lt;/code&gt;,it will list down the container running k3s.&lt;/p&gt;

&lt;p&gt;If you have multiple clusters created, then you can switch context to the newly created cluster to work on that specific cluster.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ kubectl config use-context k3d-demo-cluster&lt;/code&gt;, you can also see this command when a new cluster is being created as you can see in the above image.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;II) Listing down nodes&lt;/strong&gt;&lt;br&gt;
The below command lists down the nodes available only in the demo cluster, as we have used grep command. If you don't provide the grep command, it will list down all the nodes available for all the clusters created using k3d.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;k3d node list | &lt;span class="nb"&gt;grep &lt;/span&gt;demo-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7gqvtzuik7qnqwsl89gb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7gqvtzuik7qnqwsl89gb.png" alt="node-list"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;III) Listing down cluster&lt;/strong&gt;&lt;br&gt;
The below command is used to list down all clusters created using k3d but you can always use grep to find out specific clusters if you have several clusters installed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;k3d cluster list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8rctc48qn7dclfuycb4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8rctc48qn7dclfuycb4.png" alt="cluster-list"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IV) Stop &amp;amp; start your cluster&lt;/strong&gt;&lt;br&gt;
K3d also provides this exciting feature to stop your cluster and again start it where you stopped within seconds. The below command shows how easily you can stop and start your cluster in no time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;k3d cluster stop demo-cluster
k3d cluster start demo-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flw88d5yktekj1layznm9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flw88d5yktekj1layznm9.png" alt="cluster-stop-start"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;V) Deleting the cluster&lt;/strong&gt;&lt;br&gt;
As with other commands, it's also very simple to delete the entire cluster within seconds.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;k3d cluster delete demo-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22vobeahntjssyythl31.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22vobeahntjssyythl31.png" alt="delete-cluster"&gt;&lt;/a&gt;&lt;br&gt;
So this is how easily we can start working with k3d. For more detailed information about k3d and its commands, please refer to &lt;a href="https://k3d.io/v4.4.8/usage/commands/k3d/" rel="noopener noreferrer"&gt;this documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Local Dev Setup
&lt;/h2&gt;

&lt;p&gt;Now as we have understood k3d and its commands, we are ready to set up our development environment with k3d and play around with it.&lt;/p&gt;
&lt;h3&gt;
  
  
  k3d Cluster Setup
&lt;/h3&gt;

&lt;p&gt;For any Kubernetes development, the basic requirement is to have a Kubernetes cluster be it k3s or k8s. Here the role of k3d comes in. As we have already discussed above it can spin up a cluster in seconds and that’s why it's widely used for local k8s development. Let’s create a cluster.&lt;/p&gt;

&lt;p&gt;The below command will create a cluster and expose host port 8082 with 30080 port of the agent which we are creating. Here we need to expose the port  because we want to access the application running over k3s inside the docker container.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;k3d cluster create devtron-local-dev &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"8082:30080@agent[0]"&lt;/span&gt; &lt;span class="nt"&gt;--agents&lt;/span&gt; 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the cluster is being created, switch context to the newly created cluster as specified above by using the command -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl config use-context k3d-devtron-local-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the cluster has been created and we have switched to the newly created cluster. You can verify the weather cluster by listing down nodes and by listing down the containers running in your system as we discussed above in the K3d Playaround section.&lt;/p&gt;

&lt;h2&gt;
  
  
  Devtron Local Setup
&lt;/h2&gt;

&lt;p&gt;Now we need to set up Devtron locally over the k3d cluster which we created. If you are using MacOS or Windows, make sure you have given the minimum resources required for Devtron installation through Docker Desktop as k3d runs k3s inside docker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[NOTE: k3d doesn’t have any resource limitations, it takes up all the resources specified in Docker Desktop or Docker-cli if using linux]&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Minimum Requirements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;2+ cores CPU&lt;/li&gt;
&lt;li&gt;4 GB Memory&lt;/li&gt;
&lt;li&gt;20+ GB Storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my case, I have given 4 CPU and 6 Memory to Docker Desktop as you can see in the image below.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdqiepn096qqv6feshpfb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdqiepn096qqv6feshpfb.png" alt="docker-desktop"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Devtron Installation
&lt;/h2&gt;

&lt;p&gt;After setting up the minimum resources and creating a cluster, we are ready to install devtron locally over the k3s cluster. Please execute the following steps to set up Devtron locally. I will be using helm3 as it is the recommended way as per their &lt;a href="https://docs.devtron.ai/setup/install" rel="noopener noreferrer"&gt;official docs&lt;/a&gt;. You can also use other methods provided in the documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-1:&lt;/strong&gt; Add Devton helm repo. If the helm is not installed, you can refer to their installation guide.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm repo add devtron https://helm.devtron.ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can check if it’s installed or not by using the following command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm repo list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvn3gmta5f6dr2szbih71.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvn3gmta5f6dr2szbih71.png" alt="repo-list"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-2:&lt;/strong&gt; Install Devtron using helm3.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm &lt;span class="nb"&gt;install &lt;/span&gt;devtron devtron/devtron-operator &lt;span class="nt"&gt;--create-namespace&lt;/span&gt; &lt;span class="nt"&gt;--namespace&lt;/span&gt; devtroncd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The install command will take up around 15-20 minutes to spin up all the Devtron micro-services required for installation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-3:&lt;/strong&gt; Check Installation status.&lt;br&gt;
You can also check the installation status by using the following command. If it is installed successfully it will print &lt;code&gt;Applied&lt;/code&gt; else it will print &lt;code&gt;Downloaded&lt;/code&gt; as you can see in the below image.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz22ri1bfufc2z6ut1kic.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz22ri1bfufc2z6ut1kic.png" alt="installation-status"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-4:&lt;/strong&gt; Change the &lt;code&gt;devtron-service&lt;/code&gt; to &lt;code&gt;NodePort&lt;/code&gt; with port number assigned while creating the cluster. It will allow us to access the dashboard using &lt;code&gt;localhost:8082&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Use the command - &lt;code&gt;$ kubectl edit svc devtron-service -n devtroncd&lt;/code&gt; to edit the service and change the service type to NodePort and NodePort port number to 30080 which you assigned while creating the cluster.&lt;br&gt;
After editing the service, you can check the changes by using the following command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get svc &lt;span class="nt"&gt;-n&lt;/span&gt; devtroncd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqdwijyqa4rgiqh9ae7zh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqdwijyqa4rgiqh9ae7zh.png" alt="get-service"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-5:&lt;/strong&gt; Access the dashboard locally.&lt;br&gt;
To access the dashboard use &lt;code&gt;localhost:8082&lt;/code&gt;  in your browser. For admin credentials use username as admin and for password run the following command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; devtroncd get secret devtron-secret &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{.data.ACD_PASSWORD}'&lt;/span&gt; | &lt;span class="nb"&gt;base64&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can easily login in your dashboard and start using Devtron.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Furmupu84j94ayosc47am.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Furmupu84j94ayosc47am.png" alt="Devtron-Dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For detailed information about Devtron and deploying your application over it, please refer to their well-maintained &lt;a href="https://docs.devtron.ai/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Devtron Local Development Setup
&lt;/h2&gt;

&lt;p&gt;Following  the installation of Devtron over the k3s cluster, now we need to set up the local development environment so that developers can start building and contributing to the open-source project. For building any features or fixing bugs, we need to have the source code of the project in the very first place. Let’s clone the project and run it. Please execute the following steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Note: Please make sure wire module is installed in your system]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-1:&lt;/strong&gt; Clone the project.&lt;br&gt;
The below command will clone the Devtron repo in your system. If you haven’t installed git, please &lt;a href="https://git-scm.com/downloads" rel="noopener noreferrer"&gt;install it from here&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/devtron-labs/devtron.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step-2:&lt;/strong&gt; Build the project.&lt;br&gt;
Go to the Devtron directory which you cloned, using the command  &lt;code&gt;$ cd devtron&lt;/code&gt; and build the Devtron source code into an executable file using the following command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;make build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step-3:&lt;/strong&gt; Port Forwarding the Services.&lt;br&gt;
Now we need to port forward a few services to establish a connection between Devtron running with the binary we will execute in the next step. Execute the following commands in different terminals which can help you to check the logs and debug if any connection issues occurs and also do not close the terminal or stop these commands until the work is done.&lt;/p&gt;

&lt;p&gt;If any commands are stopped, then please execute them again to maintain the connection with the local setup.&lt;/p&gt;

&lt;p&gt;1)&lt;code&gt;kubectl -n devtroncd port-forward svc/argocd-server 8000:80&lt;/code&gt;&lt;br&gt;
2)&lt;code&gt;kubectl -n devtroncd port-forward svc/argocd-dex-server 5556:5556&lt;/code&gt;&lt;br&gt;
3)&lt;code&gt;kubectl -n devtroncd port-forward svc/postgresql-postgresql 5432:5432&lt;/code&gt;&lt;br&gt;
4)&lt;code&gt;kubectl -n devtroncd port-forward svc/devtron-nats 4222:4222&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-4:&lt;/strong&gt; Setting up Environment Variables and executing Binary&lt;br&gt;
Now we need to set up a few environment variables to connect the source code with the Devtron which we installed initially. Please run the following commands from the root directory where you build the project. It will set up the environment variable and execute the binary as well. Do not stop the command until the work is not done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Note: python3 must be installed in the system]&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://raw.githubusercontent.com/devtron-labs/devtron/main/developers-guide/scripts/exporter.py
python3 exporter.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yayy! We have successfully set up the Devtron locally in our system and now we can start building features, fixing bugs, etc and start contributing to the project.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>opensource</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Start your Open Source Journey with Git</title>
      <dc:creator>Abhinav Dubey</dc:creator>
      <pubDate>Tue, 12 Oct 2021 14:41:41 +0000</pubDate>
      <link>https://forem.com/abhinavd26/start-your-open-source-journey-with-git-20o3</link>
      <guid>https://forem.com/abhinavd26/start-your-open-source-journey-with-git-20o3</guid>
      <description>&lt;p&gt;Here, we are again with another beginner friendly blog. In this blog we will learn about one of the most popular version control tool, yes you guessed it right. I am talking about git.&lt;/p&gt;

&lt;p&gt;In the blog we shall learn about -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is Version Control&lt;/li&gt;
&lt;li&gt;Why do we need Version Control&lt;/li&gt;
&lt;li&gt;Git, One of the best Version Control tool&lt;/li&gt;
&lt;li&gt;Start with Open Source Contributions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's start with the Version Control.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Version Control?
&lt;/h2&gt;

&lt;p&gt;Version Control is a system which helps you to keep a track of all the changes you made in files or codes by keeping the track of each version you build so that you can rollback to previous version if needed. In layman language, it helps you to organize the things in a better way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do we need Version Control?
&lt;/h2&gt;

&lt;p&gt;Version Control provides an efficient way to manage your codes or files, but if you are thinking why exactly do we need it, let me give you an example.&lt;br&gt;
Let's assume a scenario, today most of the companies are adopting Work From Home culture. Let's say we have 10 developers working on a product, building features for it from their home, so now how will they organize their code. Here comes the role of Version Control tools like git. &lt;/p&gt;

&lt;p&gt;Still confused 🤔!&lt;/p&gt;

&lt;p&gt;Let me give you another use-case. For example, you have build an application and deployed it. Everything works fine in the current version. Maybe you have added few new features and again deployed it but this time the application breaks. Now again comes the role of Version Control. By using version control tools such as git you can easily rollback to the previous version of your code.&lt;br&gt;
This is how Version Control tools acts as a &lt;code&gt;Savior&lt;/code&gt; for almost every organization.&lt;/p&gt;
&lt;h2&gt;
  
  
  Introducing Git
&lt;/h2&gt;

&lt;p&gt;In the above section we learned about Version Control and its need. Now let's understand what exactly is Git and why it is so popular in the industry. Git is a version control system which is adopted by many companies and OSS users to maintain their code in local as well as remote repositories. The term repository here refers to storage container where project files are being stored and it can be any repository, be it GitHub, GitLab or Bitbucket. It is mostly used in the Software Development Industry to keep a track of changes made in code and also helps to increase the speed of development by providing a better support for distributed/collaborative development environment.&lt;/p&gt;
&lt;h2&gt;
  
  
  Begin your opensource contributions
&lt;/h2&gt;

&lt;p&gt;Now let's start with the open source contributions and learn about some of the most useful git commands which are used commonly. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Note: The blog is specific for open source contributions so we will discuss only those commands which are related to it]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-1:&lt;/strong&gt; For making any Open Source Contribution, first we need to fork the respective repository to your account. Here's how you can fork it - &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyz27jooqm5g8ndoy3ayc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyz27jooqm5g8ndoy3ayc.png" alt="Devtron-Repo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the fork is being completed, it would look something like this in your account - &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq82ot8sz67ecblu2f1ts.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq82ot8sz67ecblu2f1ts.png" alt="Abhinav-26"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-2:&lt;/strong&gt; Now clone the forked repo in your system using the following command.&lt;br&gt;
Replace &lt;code&gt;RemoteUrl&lt;/code&gt; with the URL of Repository you want to clone&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone RemoteUrl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Step-3:&lt;/strong&gt; Create a new branch for adding your changes. Use the below command, it will create a new branch and checkout into the newly created branch.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; NewBranchName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;To verify your current branch you can use &lt;code&gt;git status&lt;/code&gt; command. It will give you all necessary details of git initialized repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-4:&lt;/strong&gt; Now make the changes which you want as your contributions. After the changes has been done, you need to add those changes to git. Use the following command to add those changes.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add ChangedFileName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Also you can add all the changes by using period(.) If you have changed multiple files this can be really useful. Move to the root directory of the project and then run the following command.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Step-5:&lt;/strong&gt; Now commit the changes you made with a commit message. The message should be relevant to the change you did as it would be helpful for tracing. &lt;br&gt;
For example, I made changes in README.md file so the command would be something like this -&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Added discord link in README"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;[Note: It is not mandatory, but as a best practice you should add relevant commit messages]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-6:&lt;/strong&gt; Now we need to push the changes we did. We have to push in the same branch in which we are working. Use the below command to push your change -&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin NewBranchName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Congratulations 🎉! Now we are ready to raise our first Pull Request and make our first open source contribution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-7:&lt;/strong&gt; Go-to your forked Github Repository, you will see something like the below image. Click on &lt;code&gt;Compare &amp;amp; pull request&lt;/code&gt; button in the UI.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr9i3cs5viuwctwxsdm27.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr9i3cs5viuwctwxsdm27.png" alt="PR-Raise"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-8:&lt;/strong&gt; After that add the necessary details asked, like title of PR, Description, etc and then click on &lt;code&gt;Create pull request&lt;/code&gt; button as you can see in the image below.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuc5pla2kfrokgewml1ru.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuc5pla2kfrokgewml1ru.png" alt="Create-PR"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tada! We just did our first open source contribution 🎊. &lt;/p&gt;
&lt;h2&gt;
  
  
  What next?
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Contribute &amp;amp; Earn Swags
&lt;/h3&gt;

&lt;p&gt;Now we understood how we can start our open source contributions. If you want to do some quality contributions and be the part of biggest opensource fest, yes I am talking about Hacktoberfest, feel free to check out this repository and unlock the cool giveaways along with the Hacktoberfest swags. &lt;br&gt;
Yes! You read it right. You will get some awesome giveaways from Devtron for contributing on their repositories apart from the hacktoberfest swags. Everyone at any level is invited to contribute and take the giveaways. Please refer the below repository for better understanding of the swags and contributions guidelines. &lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/devtron-labs" rel="noopener noreferrer"&gt;
        devtron-labs
      &lt;/a&gt; / &lt;a href="https://github.com/devtron-labs/hacktoberfest2022" rel="noopener noreferrer"&gt;
        hacktoberfest2022
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Opensource Celebration 
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>github</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Different Ways of Creating k3s Cluster</title>
      <dc:creator>Abhinav Dubey</dc:creator>
      <pubDate>Thu, 07 Oct 2021 03:43:18 +0000</pubDate>
      <link>https://forem.com/abhinavd26/different-ways-of-creating-k3s-cluster-p7m</link>
      <guid>https://forem.com/abhinavd26/different-ways-of-creating-k3s-cluster-p7m</guid>
      <description>&lt;p&gt;Creating a Kubernetes cluster was quite a tedious task until Rancher Labs introduced k3s - Lightweight Kubernetes. K3s is nothing but a lightweight kubernetes, where the developers has removed millions of lines of code from straight Kubernetes and wrapped it in a binary less than 100mb. Yes, you read it right, "millions of lines of codes". &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiqh6pe35ifg6ul2unzfe.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiqh6pe35ifg6ul2unzfe.gif" alt="Waao-meme"&gt;&lt;/a&gt;&lt;br&gt;
In straight Kubernetes, we have different ways of creating a k8s cluster such as by using kops, eksctl, kubeadm, kubectl, etc, we also have few different ways of creating k3s cluster. In this blog we'll discuss different ways through which we can create k3s cluster.&lt;/p&gt;
&lt;h1&gt;
  
  
  1. With k3s
&lt;/h1&gt;

&lt;p&gt;The traditional way of creating a k3s cluster is by using k3s itself as a server and as agent. We can create single as well as multi node or HA cluster using k3s. &lt;/p&gt;

&lt;p&gt;[Note] There's no prerequisite for creating a cluster using k3s, you just need to have a system with &lt;strong&gt;minimum 512MB RAM&lt;/strong&gt; and &lt;strong&gt;1 core CPU&lt;/strong&gt; &lt;/p&gt;
&lt;h3&gt;
  
  
  K3s single node cluster
&lt;/h3&gt;

&lt;p&gt;Creating a single node k3s cluster or setting up k3s server is just a piece of cake. We need deploy a single command and it will create k3s server for you.&lt;/p&gt;

&lt;p&gt;Please execute the following command and its done. Just with single command we can create our k3s single node cluster.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sfL&lt;/span&gt; https://get.k3s.io | sh &lt;span class="nt"&gt;-s&lt;/span&gt; - &lt;span class="nt"&gt;--write-kubeconfig-mode&lt;/span&gt; 644
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;[Note: We will not go in-depth of commands and flags used, if you want to know, please let me know in the comment section]&lt;/p&gt;
&lt;h3&gt;
  
  
  K3s HA Cluster
&lt;/h3&gt;

&lt;p&gt;Well in a single command we have created our k3s cluster single node cluster, but for High Availability cluster, we have to fire 3 commands which is pretty less as compared to straight Kubernetes.&lt;/p&gt;

&lt;p&gt;Please follow the steps below to create your HA cluster.&lt;br&gt;
&lt;strong&gt;Step-1 :&lt;/strong&gt; Install k3s cluster in our server&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sfL&lt;/span&gt; https://get.k3s.io | sh &lt;span class="nt"&gt;-s&lt;/span&gt; - &lt;span class="nt"&gt;--write-kubeconfig-mode&lt;/span&gt; 644
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Step-2 :&lt;/strong&gt; Extract the node-token for adding agent nodes&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo cat&lt;/span&gt; /var/lib/rancher/k3s/server/node-token
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Step-3 :&lt;/strong&gt; Add worker nodes to the master created. This command should be fired on another instance/VM to add it with the master. Replace &lt;code&gt;my-server&lt;/code&gt; with master IP which we created above and &lt;code&gt;node-token&lt;/code&gt; with the token extracted from above command.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sfL&lt;/span&gt; https://get.k3s.io | &lt;span class="nv"&gt;K3S_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://my-server:6443 &lt;span class="nv"&gt;K3S_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;node-token sh -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Hurray! We are done with the k3s HA Setup as well. For futhur in-depth intuition about the k3s, please refer to my previous article.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/abhinavd26" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F533875%2F82711ceb-6308-4df7-a68c-ad861cfb27f1.jpeg" alt="abhinavd26"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/abhinavd26/all-about-k3s-lightweight-kubernetes-3ell" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;All about k3s - Lightweight Kubernetes&lt;/h2&gt;
      &lt;h3&gt;Abhinav Dubey ・ Aug 11 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#kubernetes&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#containers&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#github&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;h2&gt;
  
  
  Using k3d
&lt;/h2&gt;

&lt;p&gt;One of the most popular and second method of creating k3s cluster is by using k3d. By the name itself it suggests, k3s-in-docker. I have contributed an article as guest author for a community where I wrote about k3d. Please &lt;a href="https://collabnix.com/top-10-kubernetes-tool-you-need-for-2021-part-2/" rel="noopener noreferrer"&gt;refer to this link&lt;/a&gt; to get brief insights of this wonderful tool.&lt;br&gt;
Now let's directly jump into creating our k3s cluster using k3d.&lt;/p&gt;

&lt;p&gt;[Note : For using k3d you must have docker installed in your system]&lt;/p&gt;
&lt;h3&gt;
  
  
  k3d single node cluster
&lt;/h3&gt;

&lt;p&gt;Creating a single node k3s cluster using k3d is like having a conversation with your dad.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl99jjbjow352tcp240xa.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl99jjbjow352tcp240xa.gif" alt="Call-meme"&gt;&lt;/a&gt;&lt;br&gt;
Before installing your cluster, you need to install k3d on your system. Please execute the following commands to install k3s and create your single node cluster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-1 :&lt;/strong&gt; Install k3d&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="nt"&gt;-O&lt;/span&gt; - https://raw.githubusercontent.com/rancher/k3d/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step-2 :&lt;/strong&gt; Create a single node cluster.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;k3d cluster create demo-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and its done. Just this single command can create your single node k3s cluster in seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  k3d HA Cluster
&lt;/h3&gt;

&lt;p&gt;Now let's install k3s HA Cluster using k3d. Well its just a cup of tea. Here's how easily you can install a HA Cluster using k3d.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;k3d cluster create &lt;span class="nt"&gt;--servers&lt;/span&gt; 3 &lt;span class="nt"&gt;--image&lt;/span&gt; your/docker-image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Its done. This is how easily you can spin up your cluster using k3d. Fore more detailed information about k3d HA Cluster, please refer to rancher lab's &lt;a href="https://rancher.com/blog/2020/set-up-k3s-high-availability-using-k3d" rel="noopener noreferrer"&gt;official blog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[Note : We will not discuss the tools &amp;amp; commands in depth as it is beyond the scope of this blog, but if you want depth intuition, please let me know through comments]&lt;/p&gt;

&lt;h2&gt;
  
  
  Using k3sup
&lt;/h2&gt;

&lt;p&gt;Now, let's move into our third tool K3sup, called as &lt;code&gt;ketcup&lt;/code&gt; developed by Alex Ellis. K3sup is really an amazing tool which helps us to create a k3s cluster. I have written a twitter thread around it, feel free to check it out.&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1442892364519858181-411" src="https://platform.twitter.com/embed/Tweet.html?id=1442892364519858181"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1442892364519858181-411');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1442892364519858181&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h3&gt;
  
  
  k3sup single node cluster
&lt;/h3&gt;

&lt;p&gt;Let's create our single node k3s cluster using k3sup. It require few commands to setup k3sup and then it automates the process of k3s cluster.&lt;br&gt;
I would recommend to create an AWS ec2 instance or any other VM before getting started with the commands.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpasbsdxlzmyb3xq0o91x.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpasbsdxlzmyb3xq0o91x.gif" alt="Typing-meme"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Step-1 :&lt;/strong&gt; Download k3sup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sLS&lt;/span&gt; https://get.k3sup.dev | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step-2 :&lt;/strong&gt; Install k3sup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /usr/local/bin
&lt;span class="nb"&gt;sudo install &lt;/span&gt;k3sup /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step-3 :&lt;/strong&gt; Install k3s Cluster in Instance/VM. &lt;br&gt;
Replace the &lt;code&gt;SERVER_IP&lt;/code&gt; with your instance/Vm IP and &lt;code&gt;ec2-user&lt;/code&gt; with your username. In case of ec2 instance, default will be the same as given.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;k3sup &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--ip&lt;/span&gt; SERVER_IP &lt;span class="nt"&gt;--user&lt;/span&gt; ec2-user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step-4 :&lt;/strong&gt; Export kubeconfig file&lt;br&gt;
Execute the following command from the directory where you have executed the above command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;KUBECONFIG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;/kubeconfig
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step-5 :&lt;/strong&gt; Switch Context to default and start firing your kubectl commands.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl config set-context default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and here we go. We are done with the single node k3s cluster setup using k3sup. The beauty of k3sup is that from localhost itself you can run all the commands in your k3s cluster created on server through establishing a ssh connection with the instance. &lt;/p&gt;

&lt;h3&gt;
  
  
  k3sup HA Cluster
&lt;/h3&gt;

&lt;p&gt;Finally, let move ahead and setup our HA Cluster using k3sup. Well the installation and the process of setting up a k3s cluster would be the same as that in case of single node. We just have to execute a single command and it will join agent nodes to the server running up there.&lt;/p&gt;

&lt;p&gt;Please execute the following command to add multiple nodes to your k3s cluster running using k3sup.&lt;br&gt;
Here &lt;code&gt;AGENT_IP&lt;/code&gt; will be replaced with IP of Agent Node and &lt;code&gt;SERVER_IP&lt;/code&gt; with IP of server and &lt;code&gt;ec2-user&lt;/code&gt; with username.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;k3sup &lt;span class="nb"&gt;join&lt;/span&gt; &lt;span class="nt"&gt;--ip&lt;/span&gt; AGENT_IP &lt;span class="nt"&gt;--server-ip&lt;/span&gt; SERVER_IP &lt;span class="nt"&gt;--user&lt;/span&gt; ec2-user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now if we try to list down the nodes using &lt;code&gt;kubectl get nodes&lt;/code&gt;, we can see the agent/worker node has been added in our cluster.&lt;/p&gt;

&lt;p&gt;For other configurations such as adding external database or load balancers, please refer to this &lt;a href="https://github.com/alexellis/k3sup" rel="noopener noreferrer"&gt;github repository&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>opensource</category>
      <category>github</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
