<?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>DEV Community: Isaac kumi</title>
    <description>The latest articles on DEV Community by Isaac kumi (@isaackumi).</description>
    <link>https://dev.to/isaackumi</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%2F333533%2F3a4902f0-d158-4140-9a93-eccadef9e5e3.jpeg</url>
      <title>DEV Community: Isaac kumi</title>
      <link>https://dev.to/isaackumi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/isaackumi"/>
    <language>en</language>
    <item>
      <title>Configure SSL for Free with Let's Encrypt</title>
      <dc:creator>Isaac kumi</dc:creator>
      <pubDate>Mon, 22 Jan 2024 14:29:05 +0000</pubDate>
      <link>https://dev.to/isaackumi/configure-ssl-for-free-with-lets-encrypt-5ebd</link>
      <guid>https://dev.to/isaackumi/configure-ssl-for-free-with-lets-encrypt-5ebd</guid>
      <description>&lt;p&gt;Update the Snap application, which is used to download application bundles. Snap comes pre-installed on Ubuntu 22.04.&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 &lt;/span&gt;snap &lt;span class="nb"&gt;install &lt;/span&gt;core &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;snap refresh core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Remove the default Ubuntu Certbot installation.&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 &lt;/span&gt;apt remove certbot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1a2jug9pgp9zkkifmxs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1a2jug9pgp9zkkifmxs.png" alt="remove pre-installed certbot" width="800" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install Certbot.&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 &lt;/span&gt;snap &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--classic&lt;/span&gt; certbot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Download a certificate for the domain using certbot&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 &lt;/span&gt;certbot &lt;span class="nt"&gt;--apache&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enter domain name when asked eg: isaackumi.com&lt;/p&gt;

</description>
      <category>linux</category>
      <category>ssl</category>
      <category>devops</category>
    </item>
    <item>
      <title>Elevate Your Workflow Automation with StackStorm: A Quick Docker Setup Guide</title>
      <dc:creator>Isaac kumi</dc:creator>
      <pubDate>Thu, 16 Nov 2023 14:49:35 +0000</pubDate>
      <link>https://dev.to/isaackumi/elevate-your-workflow-automation-with-stackstorm-a-quick-docker-setup-guide-bgp</link>
      <guid>https://dev.to/isaackumi/elevate-your-workflow-automation-with-stackstorm-a-quick-docker-setup-guide-bgp</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;br&gt;
Automating workflows just got easier with StackStorm, a powerful open-source automation platform. In this guide, we'll walk you through setting up StackStorm using Docker and Docker Compose, providing a seamless experience for workflow development and execution.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Getting Started:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone the StackStorm Docker repository:
```shell
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/stackstorm/st2-docker" rel="noopener noreferrer"&gt;https://github.com/stackstorm/st2-docker&lt;/a&gt;&lt;br&gt;
   cd st2-docker&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
2. Familiarize yourself with the directory structure:
   ![Folder structure](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a2oozil5kqwdjt1w07bi.png)

3. Optionally, customize your setup by modifying variables in the `docker-compose.yml` file. Key options include:
   - `ST2_VERSION`: Tag for the Docker image.
   - `ST2_IMAGE_REPO`: Image or path to images (default is `stackstorm/`).
   - `ST2_EXPOSE_HTTP`: Port for exposing the st2web service (default is `127.0.0.1:80`).
   - `ST2_PACKS_DEV`: Directory for development packs (default is `./packs.dev`).

---

**Launching StackStorm:**
Execute the following command to start the containers:
```shell


docker-compose up -d


&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%2Fij08lnw1x29gyge3lkee.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%2Fij08lnw1x29gyge3lkee.png" alt="Start StackStorm Containers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inspect the running containers:&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%2Futeg1uhvpidxfsnzxm6k.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%2Futeg1uhvpidxfsnzxm6k.png" alt="StackStorm Containers"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Accessing StackStorm UI:&lt;/strong&gt;&lt;br&gt;
Navigate to the UI at &lt;a href="http://localhost/" rel="noopener noreferrer"&gt;http://localhost/&lt;/a&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%2Fyck2ukdmueefvdx64t16.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%2Fyck2ukdmueefvdx64t16.png" alt="StackStorm UI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Login with the default credentials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Username: &lt;code&gt;st2admin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Password: &lt;code&gt;Ch@ngeMe&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Configuration and CLI Access:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure your password in &lt;code&gt;files/htpasswd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Access the StackStorm CLI within the container:
```shell
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;docker-compose exec st2client bash&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ![StackStorm CLI](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/an84fzc4kq6x5pqdrt1d.png)

---

**Conclusion:**
With StackStorm up and running in Docker, you're ready to streamline your workflows. Explore the intuitive UI, harness the power of automation, and elevate your development experience. Happy automating!

---

*Feel the Pulse of Automation: Dive into StackStorm with Docker!*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Deploying ArgoCD on Minikube with Terraform and Helm: A Step-by-Step Guide</title>
      <dc:creator>Isaac kumi</dc:creator>
      <pubDate>Thu, 19 Oct 2023 11:09:41 +0000</pubDate>
      <link>https://dev.to/isaackumi/deploying-argocd-on-minikube-with-terraform-and-helm-a-step-by-step-guide-598c</link>
      <guid>https://dev.to/isaackumi/deploying-argocd-on-minikube-with-terraform-and-helm-a-step-by-step-guide-598c</guid>
      <description>

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before diving into deploying ArgoCD on Minikube, make sure you have the following prerequisites installed on your system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Minikube&lt;/li&gt;
&lt;li&gt;Terraform&lt;/li&gt;
&lt;li&gt;Helm&lt;/li&gt;
&lt;li&gt;kubectl&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this guide, we're using a two-node cluster on Minikube, although one node should suffice.&lt;/p&gt;

&lt;p&gt;Start Minikube with two nodes using this command:&lt;/p&gt;

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

minikube start &lt;span class="nt"&gt;--nodes&lt;/span&gt; 2 &lt;span class="nt"&gt;-p&lt;/span&gt; argocd-helm


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Verify your Minikube setup with:&lt;/p&gt;

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

kubectl get nodes


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Next, set up your project directory:&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;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; terraform/values
&lt;span class="nb"&gt;cd &lt;/span&gt;terraform &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;touch &lt;/span&gt;provider.tf main.tf
&lt;span class="nb"&gt;cd &lt;/span&gt;terraform/values &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;touch &lt;/span&gt;argocd.yaml


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now, let's configure Terraform to deploy ArgoCD using Helm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;terraform/provider.tf&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;

&lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="s2"&gt;"helm"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;kubernetes&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;config_path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"~/.kube/config"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;terraform/main.tf&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;

&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"helm_release"&lt;/span&gt; &lt;span class="s2"&gt;"argocd"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"argocd"&lt;/span&gt;

  &lt;span class="nx"&gt;repository&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://argoproj.github.io/argo-helm"&lt;/span&gt;
  &lt;span class="nx"&gt;chart&lt;/span&gt;            &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"argo-cd"&lt;/span&gt;
  &lt;span class="nx"&gt;namespace&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"argocd"&lt;/span&gt;
  &lt;span class="nx"&gt;create_namespace&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="nx"&gt;version&lt;/span&gt;          &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"3.35.4"&lt;/span&gt;

  &lt;span class="nx"&gt;values&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"values/argocd.yaml"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In &lt;code&gt;terraform/values/argocd.yaml&lt;/code&gt;, you can override some default ArgoCD Helm chart values:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;

&lt;span class="na"&gt;global&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;v2.6.6"&lt;/span&gt;

&lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;extraArgs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--insecure&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;After setting up your Terraform configuration, execute the following commands in your terminal:&lt;/p&gt;

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

terraform init
terraform apply &lt;span class="nt"&gt;--auto-approve&lt;/span&gt;


&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%2Fnyyf80yi3ytvy4tzxmlv.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%2Fnyyf80yi3ytvy4tzxmlv.png" alt="terraform init"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Verify the ArgoCD deployment with:&lt;/p&gt;

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

kubectl get pods &lt;span class="nt"&gt;-n&lt;/span&gt; argocd


&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%2Fmu8ubjfvbd0nyodx4bu6.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%2Fmu8ubjfvbd0nyodx4bu6.png" alt="kubectl get pods -n argocd"&gt;&lt;/a&gt;&lt;br&gt;
To access the ArgoCD web UI, you'll need to port forward to the &lt;code&gt;argocd-server&lt;/code&gt; service:&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:80


&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%2Fzn8ck0j07mx81cz7mqz8.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%2Fzn8ck0j07mx81cz7mqz8.png" alt="kubectl port-forward "&gt;&lt;/a&gt;&lt;br&gt;
Now, open your browser and navigate to &lt;code&gt;localhost:8080&lt;/code&gt;. You should see the ArgoCD login page.&lt;/p&gt;

&lt;p&gt;The default username is &lt;code&gt;admin&lt;/code&gt;. Retrieve the password from the secret using:&lt;/p&gt;

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

kubectl get secrets argocd-initial-admin-secret &lt;span class="nt"&gt;-o&lt;/span&gt; yaml &lt;span class="nt"&gt;-n&lt;/span&gt; argocd


&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%2Fvm5to3ofnupbsq7ic6vf.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%2Fvm5to3ofnupbsq7ic6vf.png" alt="kubectl get secrets"&gt;&lt;/a&gt;&lt;br&gt;
Copy the password and decode it with the base64 utility:&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;echo&lt;/span&gt; &lt;span class="s2"&gt;"copied_password_here"&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;&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%2Fvm5to3ofnupbsq7ic6vf.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%2Fvm5to3ofnupbsq7ic6vf.png" alt="echo "&gt;&lt;/a&gt;&lt;br&gt;
Now, paste the decoded password without the &lt;code&gt;%&lt;/code&gt; sign at the end into the password field on the login page.&lt;/p&gt;

&lt;p&gt;Voila! You've successfully deployed ArgoCD on Minikube.&lt;/p&gt;




</description>
      <category>argo</category>
      <category>terraform</category>
      <category>kubernetes</category>
      <category>helm</category>
    </item>
    <item>
      <title>A Quick Introduction to Docker for Absolute Beginners</title>
      <dc:creator>Isaac kumi</dc:creator>
      <pubDate>Mon, 09 Oct 2023 11:46:21 +0000</pubDate>
      <link>https://dev.to/isaackumi/a-quick-introduction-to-docker-for-absolute-beginners-5180</link>
      <guid>https://dev.to/isaackumi/a-quick-introduction-to-docker-for-absolute-beginners-5180</guid>
      <description>&lt;p&gt;Are you new to containerization and wondering what all the buzz is about Docker? You're in the right place! Docker simplifies the process of developing, deploying, and managing applications. We'll introduce Docker for absolute beginners in this blog post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Docker?&lt;/strong&gt;&lt;br&gt;
Docker is an open-source platform designed to make it easier to develop, deploy, and run applications using containers. Containers are lightweight, portable, and self-sufficient units that package an application and its dependencies, ensuring consistency and reproducibility across different environments.&lt;br&gt;
&lt;strong&gt;Why Use Docker?&lt;/strong&gt;&lt;br&gt;
Some of the key benefits of using Docker:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Isolation: Containers isolate applications and their dependencies from the underlying system, averting conflicts and ensuring consistency.&lt;/li&gt;
&lt;li&gt;Portability: Docker containers can run on any system that supports Docker, making it easy to move applications between different environments.&lt;/li&gt;
&lt;li&gt;Scalability: Docker makes it simple to scale applications horizontally by running multiple containers, improving performance and reliability.
**
Getting Started with Docker**&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To begin your Docker journey, follow these simple steps:&lt;br&gt;
1.** Installation**: Start by installing Docker on your machine. You can find installation instructions for various platforms on the &lt;a href="https://docs.docker.com/get-docker/"&gt;Docker website&lt;/a&gt;. &lt;br&gt;
&lt;code&gt;For Mac and Windows, you should download the Docker Desktop onto your laptop.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;2*&lt;em&gt;. Docker Hub&lt;/em&gt;*: Docker Hub is a repository of pre-built container images that you can use to get started quickly. You can search for popular images or even publish your own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your First Docker Container&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once Docker is installed, open a terminal and run the following command to pull and run the "nginx" container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; docker run nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will download the "nginx" image and run a container from it. &lt;/p&gt;

&lt;p&gt;Here are some useful Docker commands you should know:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/strong&gt;: This command lists all the running containers on your system. By default, it shows the container ID, image name, status, ports, and more.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker ps -a&lt;/code&gt;&lt;/strong&gt;: To view all containers, including stopped ones, you can use the &lt;code&gt;-a&lt;/code&gt; flag.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker ps &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker images&lt;/code&gt;&lt;/strong&gt;: This command lists all the Docker images you've pulled or created on your machine.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker images
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker pull&lt;/code&gt;&lt;/strong&gt;: Use this command to download a Docker image from Docker Hub or another container registry.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker pull image_name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker run&lt;/code&gt;&lt;/strong&gt;: To start a new container, you can use the &lt;code&gt;docker run&lt;/code&gt; command.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker run  nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker stop&lt;/code&gt;&lt;/strong&gt;: This command stops a running container by specifying its container ID or name.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker stop container_id_or_name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker start&lt;/code&gt;&lt;/strong&gt;: To restart a stopped container, you can use the &lt;code&gt;docker start&lt;/code&gt; command.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker start container_id_or_name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Docker restart&lt;/code&gt;&lt;/strong&gt;: This command stops and then starts a container, which can be useful for applying configuration changes.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker restart container_id_or_name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;docker rm&lt;/code&gt;&lt;/strong&gt;: To remove a stopped container, you can use the &lt;code&gt;docker rm&lt;/code&gt; command. Be cautious, as this action is irreversible.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker &lt;span class="nb"&gt;rm &lt;/span&gt;container_id_or_name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;docker rmi&lt;/code&gt;&lt;/strong&gt;: To remove a Docker image from your local machine, use the &lt;code&gt;docker rmi&lt;/code&gt; command. Make sure no containers are currently using the image you want to remove.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker rmi image_name_or_id
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;docker exec&lt;/code&gt;&lt;/strong&gt;: You can use this command to run a command inside a running container. This is useful for debugging or executing specific tasks within a container.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; container_id_or_name &lt;span class="nb"&gt;command&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;docker logs&lt;/code&gt;&lt;/strong&gt;: To view the logs of a running container, use the &lt;code&gt;docker logs&lt;/code&gt; command.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker logs container_id_or_name
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Learning Resources&lt;/strong&gt;: You can learn more about Docker by exploring the many tutorials, documents, and online courses that are accessible. Websites like the official Docker documentation and tools like &lt;a href="https://www.docker.com/play-with-docker"&gt;Play with Docker&lt;/a&gt; are both excellent sources of information.&lt;br&gt;
Aside from what we've covered here, keep in mind that Docker is a big ecosystem with many other features and possibilities. These fundamentals provide you with a strong starting point for your exploration and experimentation with Docker containers as a complete novice. Good luck containerizing!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>webdev</category>
      <category>microservices</category>
    </item>
    <item>
      <title>Generate YAML Manifests with Ease! 🚀</title>
      <dc:creator>Isaac kumi</dc:creator>
      <pubDate>Tue, 01 Aug 2023 17:14:52 +0000</pubDate>
      <link>https://dev.to/isaackumi/generate-yaml-manifests-with-ease-9dm</link>
      <guid>https://dev.to/isaackumi/generate-yaml-manifests-with-ease-9dm</guid>
      <description>&lt;p&gt;🚀 Kubernetes Pro Tip: Generate YAML Manifests with Ease! 🚀&lt;/p&gt;

&lt;p&gt;Are you tired of manually creating YAML manifests for your Kubernetes pods? Here's a handy trick to make your life easier! 😎&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;kubectl run&lt;/code&gt; command is a powerful tool for deploying containers in Kubernetes. But did you know it can also help you generate YAML manifests effortlessly? 📋&lt;/p&gt;

&lt;p&gt;Let's say you want to deploy an Nginx pod. Instead of crafting the YAML file from scratch, you can use the &lt;code&gt;--dry-run&lt;/code&gt; flag to preview the YAML output without actually creating the pod. Here's how you can do it:&lt;/p&gt;

&lt;p&gt;1️⃣ Open your terminal and ensure you have &lt;code&gt;kubectl&lt;/code&gt; installed.&lt;/p&gt;

&lt;p&gt;2️⃣ 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;kubectl run nginx &lt;span class="nt"&gt;--image&lt;/span&gt; nginx &lt;span class="nt"&gt;--dry-run&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;client &lt;span class="nt"&gt;-o&lt;/span&gt; yaml &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; pod-definition.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3️⃣ Ta-da! You've just generated a YAML manifest named &lt;code&gt;pod-definition.yaml&lt;/code&gt; for your Nginx pod.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;--dry-run&lt;/code&gt; flag prevents the pod from being created, and the &lt;code&gt;-o yaml&lt;/code&gt; flag instructs &lt;code&gt;kubectl&lt;/code&gt; to output the YAML representation of the resource.&lt;/p&gt;

&lt;p&gt;Now, you can easily modify this YAML file to suit your specific needs. Adjust resource limits, add environment variables, or define volume mounts—all without starting from scratch! 🛠️&lt;/p&gt;

&lt;p&gt;So, the next time you need to deploy a new pod, save time and effort by using &lt;code&gt;kubectl run&lt;/code&gt; with &lt;code&gt;--dry-run&lt;/code&gt; to create your YAML manifests like a pro! 💪&lt;/p&gt;

&lt;p&gt;Happy YAML manifesting! 😄🎉&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>microservices</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How I Passed the AWS DevOps Engineer Professional Exam: Resources and Tips</title>
      <dc:creator>Isaac kumi</dc:creator>
      <pubDate>Mon, 17 Jul 2023 11:36:36 +0000</pubDate>
      <link>https://dev.to/isaackumi/how-i-passed-the-aws-devops-engineer-professional-exam-resources-and-tips-47e9</link>
      <guid>https://dev.to/isaackumi/how-i-passed-the-aws-devops-engineer-professional-exam-resources-and-tips-47e9</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;:&lt;br&gt;
Passing the AWS DevOps Engineer Professional exam is a significant achievement for professionals in the field. In this blog post, I will share my experience and provide valuable resources and tips that helped me succeed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exam Overview:&lt;/strong&gt;&lt;br&gt;
The AWS DevOps Engineer Professional exam is designed to assess your knowledge and skills in various domains, including continuous delivery and automation, infrastructure as code, monitoring and logging, security, and more. Hands-on experience and practical knowledge are crucial for success.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preparation Strategy:&lt;/strong&gt;&lt;br&gt;
To prepare for the exam, I followed a well-structured study plan. I allocated dedicated time each day for studying and hands-on practice. This allowed me to cover all the relevant topics and gain confidence in my abilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommended Resources:&lt;/strong&gt;&lt;br&gt;
During my preparation, I found the following resources to be highly valuable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Acloud Guru: Acloud Guru offers comprehensive AWS training courses, including a specific course for the AWS DevOps Engineer Professional exam. Their well-structured content and hands-on labs provided a solid foundation for exam topics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stephane Mareek's DevOps Professional Course on Udemy: Stephane Mareek's course on Udemy is highly regarded in the DevOps community. His detailed explanations and practical examples helped me deepen my understanding of AWS DevOps concepts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Official AWS Documentation: The official AWS documentation provides comprehensive coverage of AWS services, their features, and best practices. It is an essential resource for understanding the intricacies of various services and their integration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AWS Whitepapers and FAQs: AWS whitepapers and FAQs are excellent sources for gaining in-depth knowledge about specific services and concepts. They provide insights into architectural patterns, design principles, and recommended practices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exam Readiness Training: AWS offers Exam Readiness training courses specifically tailored for the DevOps Engineer Professional exam. These courses provide detailed guidance on exam topics, key concepts, and sample questions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Practice Exams: Taking practice exams is essential for familiarizing yourself with the exam format, identifying knowledge gaps, and improving time management skills. I used Tutorials Dojo and Whizlabs for their comprehensive and realistic practice exams.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Online Communities and Forums: Engaging with the DevOps community through online forums and communities can be immensely helpful. Discussions, tips, and shared experiences from professionals can provide valuable insights and additional resources.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tips for Success:&lt;br&gt;
To increase your chances of success, consider the following tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Focus on hands-on experience: Practical knowledge of deploying, managing, and troubleshooting AWS services is critical. Practice building and automating infrastructure using AWS tools and services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Learn AWS best practices: Familiarize yourself with AWS's recommended architectural patterns, security practices, and service-specific best practices. Understanding these principles will help you answer questions related to designing secure and scalable solutions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Time management during the exam: The exam duration is limited, so managing your time effectively is essential. Read each question carefully, eliminate obviously incorrect answers, and prioritize questions that you can answer confidently. Use the "Review" feature to revisit challenging questions before submitting.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;** Mock Exams and Practice Questions:**&lt;br&gt;
Taking mock exams and practicing with sample questions is highly recommended. These resources will help you identify weak areas and build your confidence. I used Tutorials Dojo and Whizlabs for their comprehensive practice exams that closely resemble the actual AWS exams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exam-Day Strategies:&lt;/strong&gt;&lt;br&gt;
On the day of the exam, ensure you get a good night's sleep and have a nutritious meal to optimize your focus and concentration. Arrive at the exam center early to minimize any unnecessary stress or rush.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br&gt;
Preparing for and passing the AWS DevOps Engineer Professional exam requires dedication, hands-on experience, and access to reliable resources. By following a well-structured study plan, leveraging recommended resources, and practicing with mock exams, you can increase your chances of success. Best of luck in your exam preparation journey!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources Used:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acloud Guru&lt;/li&gt;
&lt;li&gt;Stephane Mareek's DevOps Professional Course on Udemy&lt;/li&gt;
&lt;li&gt;Official AWS Documentation&lt;/li&gt;
&lt;li&gt;AWS Whitepapers and FAQs&lt;/li&gt;
&lt;li&gt;Exam Readiness Training&lt;/li&gt;
&lt;li&gt;Tutorials Dojo (Mock Exam Provider)&lt;/li&gt;
&lt;li&gt;Whizlabs (Mock Exam Provider)&lt;/li&gt;
&lt;li&gt;Online Communities and Forums&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>certification</category>
    </item>
    <item>
      <title>Dockerizing a Flask Application: A Multi-Stage Dockerfile Approach</title>
      <dc:creator>Isaac kumi</dc:creator>
      <pubDate>Tue, 11 Jul 2023 17:25:50 +0000</pubDate>
      <link>https://dev.to/isaackumi/dockerizing-a-flask-application-a-multi-stage-dockerfile-approach-389a</link>
      <guid>https://dev.to/isaackumi/dockerizing-a-flask-application-a-multi-stage-dockerfile-approach-389a</guid>
      <description>&lt;p&gt;The provided code sets up a basic Flask application and Dockerfile for containerizing the application. Here's a brief comment on each part of the code:&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="c"&gt;# project setup&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;app
&lt;span class="nb"&gt;cd &lt;/span&gt;app
&lt;span class="nb"&gt;touch &lt;/span&gt;app.py
&lt;span class="nb"&gt;touch &lt;/span&gt;Dockerfile
&lt;span class="nb"&gt;touch &lt;/span&gt;requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This snippet creates the necessary files and directories for the project. It creates a directory named app, then creates files &lt;code&gt;app.py&lt;/code&gt;, &lt;code&gt;Dockerfile&lt;/code&gt;, and &lt;code&gt;requirements.txt&lt;/code&gt; within the &lt;code&gt;app&lt;/code&gt; directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Flask
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The requirements.txt file lists the dependencies required by the Flask application. In this case, it only includes the Flask dependency.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;'Hello, World!'&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;'__main__'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'0.0.0.0'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;app.py&lt;/code&gt; file contains a simple Flask application. It imports the &lt;code&gt;Flask&lt;/code&gt; module, creates an instance of the Flask class, defines a route for the root URL ("/"), and returns a &lt;code&gt;"Hello, World!"&lt;/code&gt; message when the route is accessed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;
&lt;span class="c"&gt;# Stage 1: Build stage&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;python:3.9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="c"&gt;# Copy requirements.txt to the container&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; requirements.txt .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--upgrade&lt;/span&gt; pip
&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--upgrade&lt;/span&gt; setuptools wheel

&lt;span class="c"&gt;# Install dependencies&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--no-cache-dir&lt;/span&gt; &lt;span class="nt"&gt;--upgrade&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

&lt;span class="c"&gt;# Copy the application source code&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;rm &lt;/span&gt;requirements.txt

&lt;span class="c"&gt;# Stage 2: Production stage&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; builder&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="c"&gt;# Copy the installed dependencies from the previous stage&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages&lt;/span&gt;

&lt;span class="c"&gt;# Copy the application source code from the previous stage&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/* .&lt;/span&gt;

&lt;span class="c"&gt;# Expose port 5000&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 5000&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python","app.py"]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Dockerfile is divided into two stages. The first stage, named &lt;code&gt;builder&lt;/code&gt;, sets up the build environment. It copies the &lt;code&gt;requirements.txt&lt;/code&gt; file, upgrades pip, and installs the required dependencies. Then, it copies the application source code and removes the requirements.txt file.&lt;/p&gt;

&lt;p&gt;The second stage, which is the production stage, inherits from the builder stage. It sets the working directory, copies the installed dependencies from the builder stage, and copies the application source code. The &lt;code&gt;EXPOSE&lt;/code&gt; instruction exposes &lt;code&gt;port 5000&lt;/code&gt;, and the &lt;code&gt;CMD&lt;/code&gt; instruction specifies the command to run the application.&lt;/p&gt;

&lt;h2&gt;
  
  
  conclusion
&lt;/h2&gt;

&lt;p&gt;One of the key benefits of using a multi-stage Dockerfile approach is the ability to create more optimized and efficient Docker images.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smaller Image Size and Enhanced Security&lt;/strong&gt;: With multi-stage builds, you can significantly reduce the size of the final Docker image. By separating the build environment from the runtime environment, only the necessary artifacts and dependencies are included in the production stage. This optimization results in smaller image sizes, which reduces disk space usage and speeds up image transfers. Additionally, by excluding build tools and dependencies from the final image, you minimize potential security risks. This approach ensures that only the essential components required for running the application are present, reducing the attack surface and enhancing the overall security posture of your containerized Flask application.&lt;/p&gt;

&lt;p&gt;By incorporating a multi-stage Dockerfile into your containerization process, you can reap the benefits of smaller image sizes, improved security, and faster builds. This approach is particularly advantageous for large-scale projects and scenarios where optimizing image size and reducing security vulnerabilities are critical factors.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>webdev</category>
      <category>flask</category>
      <category>python</category>
    </item>
    <item>
      <title>Setting up a single or multi-Node Cluster on KinD</title>
      <dc:creator>Isaac kumi</dc:creator>
      <pubDate>Tue, 11 Jul 2023 11:23:51 +0000</pubDate>
      <link>https://dev.to/isaackumi/setting-up-a-single-or-multi-node-cluster-on-kindo-6o2</link>
      <guid>https://dev.to/isaackumi/setting-up-a-single-or-multi-node-cluster-on-kindo-6o2</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Welcome, fellow tech adventurers! Today, we're about to embark on an exciting journey into the wonderful world of &lt;code&gt;Kind clusters&lt;/code&gt;. So buckle up, tighten your seatbelts (metaphorically, of course), and get ready for an epic quest to conquer the realm of &lt;code&gt;container orchestration&lt;/code&gt;. Together, we'll navigate the treacherous seas of setup and configuration to emerge victorious with our very own Kind cluster. Are you ready? Let's dive in!&lt;/p&gt;

&lt;h3&gt;
  
  
  Table of Contents:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prerequisites&lt;/strong&gt;: What You'll Need&lt;/li&gt;
&lt;li&gt;The Birth of a Kind Cluster Hero&lt;/li&gt;
&lt;li&gt;Gearing Up for the Journey&lt;/li&gt;
&lt;li&gt;Unveiling the Treasure Map: Installation&lt;/li&gt;
&lt;li&gt;Configuring the Gem: Cluster Setup&lt;/li&gt;
&lt;li&gt;Unleashing the Magic: Interacting with Your Kind Cluster&lt;/li&gt;
&lt;li&gt;Conclusion: Your Adventure Begins Now!&lt;/li&gt;
&lt;li&gt;Resources&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Prerequisites: What You'll Need
&lt;/h5&gt;

&lt;p&gt;Before setting off on this grand adventure, make sure you have the following:&lt;/p&gt;

&lt;p&gt;A computer or laptop with a supported operating system (e.g., Linux, macOS, or Windows).&lt;br&gt;
Docker installed on your machine. You can find installation instructions &lt;a href="https://docs.docker.com/"&gt;here&lt;/a&gt;.&lt;br&gt;
kubectl, the Kubernetes command-line tool, installed. You can follow the installation guide &lt;a href="https://kubernetes.io/docs/home/"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  The Birth of a Kind Cluster Hero
&lt;/h4&gt;

&lt;p&gt;Every great adventure needs a hero, and you, my friend, are about to become one! But first things first: What on earth is a Kind cluster? Well, Kind, short for Kubernetes IN Docker, is a fantastic tool that enables you to run local Kubernetes clusters using Docker containers. It's like having a pocket-sized version of Kubernetes right at your fingertips. Impressive, right?&lt;/p&gt;
&lt;h4&gt;
  
  
  Gearing Up for the Journey
&lt;/h4&gt;

&lt;p&gt;Before setting off on our grand adventure, we need to make sure we have all the necessary tools and provisions. Don't worry; we won't need a sword or a suit of armor (unless you really want to dress up for the occasion). The essentials for this quest include Docker, kubectl (the Kubernetes command-line tool), and, of course, a dash of patience and a sprinkle of curiosity. With these tools in hand, we're ready to conquer the Kind cluster universe!&lt;/p&gt;
&lt;h4&gt;
  
  
  Unveiling the Treasure Map: Installation
&lt;/h4&gt;

&lt;p&gt;Ah, the thrill of discovery! The first step in our grand adventure is to install Kind itself. Fear not, brave traveler, for this part is surprisingly simple. Just run the provided commands in your terminal, and Kind will be up and running, ready to unleash its containerized magic.&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;-Lo&lt;/span&gt; ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ./kind
&lt;span class="nb"&gt;sudo mv&lt;/span&gt; ./kind /usr/local/bin/kind
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remember to take a moment to revel in your achievement because, my friend, you're now the proud parent of a Kind cluster!&lt;/p&gt;

&lt;h4&gt;
  
  
  Configuring the Gem: Cluster Setup
&lt;/h4&gt;

&lt;p&gt;Now that we have our Kind cluster at our beck and call, it's time to tailor it to our needs. Cluster configuration is where the real fun begins. We get to decide the number of worker nodes, choose the Kubernetes version, and even customize networking options. It's like playing a video game where you're the game master, architect, and rule-breaker all at once. Trust me; this is where your inner tech wizard can truly shine!&lt;/p&gt;

&lt;p&gt;To create a single node Kind cluster, 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;kind create cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kind create cluster &lt;span class="nt"&gt;--name&lt;/span&gt; test-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a multi-node cluster, use a config file to add extra nodes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vi cluster-config.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# A sample multi-node cluster config file&lt;/span&gt;
&lt;span class="c1"&gt;# A three node (two workers, one controller) cluster config&lt;/span&gt;
&lt;span class="c1"&gt;# To add more worker nodes, add another role: worker to the list&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Cluster&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kind.x-k8s.io/v1alpha4&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test-cluster&lt;/span&gt;
&lt;span class="na"&gt;nodes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;control-plane&lt;/span&gt;
  &lt;span class="na"&gt;kubeadmConfigPatches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;kind: InitConfiguration&lt;/span&gt;
    &lt;span class="s"&gt;nodeRegistration:&lt;/span&gt;
      &lt;span class="s"&gt;kubeletExtraArgs:&lt;/span&gt;
        &lt;span class="s"&gt;node-labels: "ingress-ready=true"    &lt;/span&gt;
  &lt;span class="na"&gt;extraPortMappings&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
    &lt;span class="na"&gt;hostPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
    &lt;span class="na"&gt;protocol&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;TCP&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;443&lt;/span&gt;
    &lt;span class="na"&gt;hostPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;443&lt;/span&gt;
    &lt;span class="na"&gt;protocol&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;TCP&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;worker&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;worker&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Then run the cluster config file&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kind create cluster &lt;span class="nt"&gt;--config&lt;/span&gt; cluster-config.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Unleashing the Magic: Interacting with Your Kind Cluster
&lt;/h4&gt;

&lt;p&gt;Now that our Kind cluster is up and running, let's tap into its immense power. With kubectl as our trusty companion, we can deploy applications, manage pods, and even perform awe-inspiring scaling tricks. Your Kind cluster is like a stage, and kubectl is your backstage pass to control and orchestrate the most dazzling performances. Prepare to be amazed as you witness the seamless integration of containers and Kubernetes!&lt;/p&gt;

&lt;p&gt;verify your setup 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 nodes
kubectl get po
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;➜  ~ kubectl get nodes
NAME                 STATUS   ROLES           AGE   VERSION
kind-control-plane   Ready    control-plane   36h   v1.25.3
➜  ~
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;: Your Adventure Begins Now!
&lt;/h4&gt;

&lt;p&gt;Congratulations, intrepid explorer! You've successfully set up your very own Kind cluster, and your journey into the world of container orchestration has only just begun. But remember, this is only the first step on a thrilling path filled with countless opportunities for growth and learning. So embrace the challenges, celebrate your victories (big or small), and always keep that jovial spirit alive as you embark on your adventures with Kind clusters. Happy clustering!&lt;/p&gt;

&lt;h4&gt;
  
  
  Resources:
&lt;/h4&gt;

&lt;p&gt;Kind Documentation: &lt;a href="https://kind.sigs.k8s.io/"&gt;https://kind.sigs.k8s.io/&lt;/a&gt;&lt;br&gt;
Kubernetes Documentation: &lt;a href="https://kubernetes.io/docs/home/"&gt;https://kubernetes.io/docs/home/&lt;/a&gt;&lt;br&gt;
Docker Documentation: &lt;a href="https://docs.docker.com/"&gt;https://docs.docker.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>kind</category>
      <category>docker</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
