<?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: 💻:~:$ That DevOps Guy</title>
    <description>The latest articles on DEV Community by 💻:~:$ That DevOps Guy (@marceldempers).</description>
    <link>https://dev.to/marceldempers</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%2F414049%2F6cf48f78-71bd-4262-b445-319016d3cfd6.jpg</url>
      <title>DEV Community: 💻:~:$ That DevOps Guy</title>
      <link>https://dev.to/marceldempers</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marceldempers"/>
    <language>en</language>
    <item>
      <title>Introduction to Linkerd for beginners</title>
      <dc:creator>💻:~:$ That DevOps Guy</dc:creator>
      <pubDate>Sat, 24 Oct 2020 03:32:49 +0000</pubDate>
      <link>https://dev.to/marceldempers/introduction-to-linkerd-for-beginners-4ael</link>
      <guid>https://dev.to/marceldempers/introduction-to-linkerd-for-beginners-4ael</guid>
      <description>&lt;p&gt;I had a blast learning about Linkerd lately. It's a service mesh designed to help with traditional issues regarding service to service communication&lt;/p&gt;

&lt;p&gt;Many times we would have to write a lot of code and operational overhead to achieve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSL between microservices&lt;/li&gt;
&lt;li&gt;Auto retry for failed requests&lt;/li&gt;
&lt;li&gt;Metrics (Request per second &amp;amp; Latency)&lt;/li&gt;
&lt;li&gt;Tracing &lt;/li&gt;
&lt;li&gt;and More&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A service mesh can help here by injecting a discrete proxy next to every application which hijacks requests coming in and out of that service.&lt;/p&gt;

&lt;p&gt;I cover these challenges and service mesh basics in my &lt;a href="https://youtu.be/rVNPnHeGYBE" rel="noopener noreferrer"&gt;Introduction to Service mesh&lt;/a&gt; video on YouTube.&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%2Fi%2F6pafxhvm6s9lx6muc4z3.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%2Fi%2F6pafxhvm6s9lx6muc4z3.jpg" alt="maxresdefault"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1 : We need a Kubernetes Cluster
&lt;/h2&gt;

&lt;p&gt;Lets create a Kubernetes cluster to play with using &lt;a href="https://kind.sigs.k8s.io/docs/user/quick-start/" rel="noopener noreferrer"&gt;kind&lt;/a&gt;&lt;br&gt;
Kind is great for running throwaway test clusters :)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kind create cluster --name linkerd --image kindest/node:v1.19.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure you have &lt;code&gt;kubectl&lt;/code&gt; installed and its pointing to your cluster. You should be able to contact your cluster like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#test cluster access:

kubectl get nodes
NAME                    STATUS   ROLES    AGE   VERSION
linkerd-control-plane   Ready    master   26m   v1.19.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Example Microservice Architecture
&lt;/h2&gt;

&lt;p&gt;I have a few components that makes up a video catalog application.&lt;br&gt;
This architecture consists of :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ingress controller: A gateway for receiving traffic&lt;/li&gt;
&lt;li&gt;Videos Web : A web interface to show video catalog&lt;/li&gt;
&lt;li&gt;Playlists API: An API to retrieve lists of playlists&lt;/li&gt;
&lt;li&gt;Playlists DB: A small redis database to store playlists&lt;/li&gt;
&lt;li&gt;Videos API: An API to retrieve video data by ID&lt;/li&gt;
&lt;li&gt;Videos DB: A small redis database to store video data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                              servicemesh.demo/home            +--------------+
                              +------------------------------&amp;gt; | videos-web   |
                              |                                |              |
servicemesh.demo/home  +------+------------+                   +--------------+
   +------------------&amp;gt;+ingress-nginx      |
                       |Ingress controller |
                       +------+------------+                   +---------------+    +--------------+
                              |                                | playlists-api +---&amp;gt;+ playlists-db |
                              +------------------------------&amp;gt; |               |    |              |
                              servicemesh.demo/api/playlists   +-----+---------+    +--------------+
                                                                     |
                                                                     v
                                                               +-----+------+       +-----------+
                                                               | videos-api +------&amp;gt;+ videos-db |
                                                               |            |       |           |
                                                               +------------+       +-----------+



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

&lt;/div&gt;



&lt;p&gt;To follow along with this tutorial, all the code is in my &lt;a href="https://github.com/marcel-dempers/docker-development-youtube-series/tree/master/kubernetes/servicemesh/linkerd" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; repo&lt;/p&gt;

&lt;p&gt;Clone the repo, and lets deploy all the applications to our cluster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# ingress controller
kubectl create ns ingress-nginx
kubectl apply -f kubernetes/servicemesh/applications/ingress-nginx/

# applications
kubectl apply -f kubernetes/servicemesh/applications/playlists-api/
kubectl apply -f kubernetes/servicemesh/applications/playlists-db/
kubectl apply -f kubernetes/servicemesh/applications/videos-api/
kubectl apply -f kubernetes/servicemesh/applications/videos-web/
kubectl apply -f kubernetes/servicemesh/applications/videos-db/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Make sure all our apps are up and running
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE  
playlists-api-d7f64c9c6-rfhdg   1/1     Running   0          2m19s
playlists-db-67d75dc7f4-p8wk5   1/1     Running   0          2m19s
videos-api-7769dfc56b-fsqsr     1/1     Running   0          2m18s
videos-db-74576d7c7d-5ljdh      1/1     Running   0          2m18s
videos-web-598c76f8f-chhgm      1/1     Running   0          100s 

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

&lt;/div&gt;



&lt;p&gt;Let's double check the Ingress controller too :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl -n ingress-nginx get pods
NAME                                        READY   STATUS    RESTARTS   AGE  
nginx-ingress-controller-6fbb446cff-8fwxz   1/1     Running   0          2m38s
nginx-ingress-controller-6fbb446cff-zbw7x   1/1     Running   0          2m38s

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

&lt;/div&gt;



&lt;p&gt;Next up we'll need a fake DNS name &lt;code&gt;servicemesh.demo&lt;/code&gt; &lt;br&gt;&lt;br&gt;
Let's fake one by adding the following entry in our hosts (&lt;code&gt;C:\Windows\System32\drivers\etc\hosts&lt;/code&gt;) file: &lt;br&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;127.0.0.1  servicemesh.demo

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

&lt;/div&gt;



&lt;p&gt;Now we have a DNS &lt;code&gt;servicemesh.demo&lt;/code&gt;, lets connect to our Ingress controller using &lt;code&gt;port-forward&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl -n ingress-nginx port-forward deploy/nginx-ingress-controller 80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we can access our site under &lt;code&gt;http://servicemesh.demo/home/&lt;/code&gt; &lt;a href="http://servicemesh.demo/home/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Installing LinkerD
&lt;/h2&gt;

&lt;p&gt;Firstly, I like to do most of my work in containers so everything is reproducible and my machine remains clean. Let's get a small lightweight Alpine Linux container so we can get to work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -it --rm -v ${HOME}:/root/ -v ${PWD}:/work -w /work --net host alpine sh

# install curl &amp;amp; kubectl
apk add --no-cache curl nano
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
chmod +x ./kubectl
mv ./kubectl /usr/local/bin/kubectl

#test cluster access:
/work # kubectl get nodes
NAME                    STATUS   ROLES    AGE   VERSION
linkerd-control-plane   Ready    master   26m   v1.19.1

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

&lt;/div&gt;



&lt;p&gt;Now let's install the &lt;code&gt;linkerd&lt;/code&gt; CLI in our container:&lt;br&gt;
I grabbed the &lt;code&gt;edge-20.10.1&lt;/code&gt; release using &lt;code&gt;curl&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -L -o linkerd https://github.com/linkerd/linkerd2/releases/download/edge-20.10.1/linkerd2-cli-edge-20.10.1-linux-amd64 
chmod +x linkerd &amp;amp;&amp;amp; mv ./linkerd /usr/local/bin/

linkerd --help
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's do some preflight checks &lt;br&gt;
Linkerd has a great capability to check compatibility with the target cluster&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Let's grab the YAML from the &lt;code&gt;linkerd&lt;/code&gt; CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Grab YAML:
linkerd install &amp;gt; ./kubernetes/servicemesh/linkerd/manifest/linkerd-edge-20.10.1.yaml

# Deploy it:
kubectl apply -f ./kubernetes/servicemesh/linkerd/manifest/linkerd-edge-20.10.1.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's wait until all components are running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;watch kubectl -n linkerd get pods
kubectl -n linkerd get svc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also do a final check:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Access the LinkerD Dashboard
&lt;/h2&gt;

&lt;p&gt;Let's access the &lt;code&gt;linkerd&lt;/code&gt; dashboard via &lt;code&gt;port-forward&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl -n linkerd port-forward svc/linkerd-web 8084
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feel free to have a browse around to familiarise yourself with the dashboard features.&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 6: Mesh our video catalog services
&lt;/h1&gt;

&lt;p&gt;There are 2 ways to mesh services:&lt;/p&gt;

&lt;p&gt;1) We can add an annotation to your deployment to persist the mesh if our YAML is part of a GitOps flow:&lt;/p&gt;

&lt;p&gt;This is a more permanent solution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  template:
    metadata:
      annotations:
        linkerd.io/inject: enabled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) Or inject &lt;code&gt;linkerd&lt;/code&gt; on the fly:&lt;br&gt;
This may only be temporary as your CI/CD system may roll out the previous YAML&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 deploy
NAME            READY   UP-TO-DATE   AVAILABLE   AGE
playlists-api   1/1     1            1           8h 
playlists-db    1/1     1            1           8h 
videos-api      1/1     1            1           8h 
videos-db       1/1     1            1           8h 
videos-web      1/1     1            1           8h 

kubectl get deploy playlists-api -o yaml | linkerd inject - | kubectl apply -f -
kubectl get deploy playlists-db -o yaml | linkerd inject - | kubectl apply -f -
kubectl get deploy videos-api -o yaml | linkerd inject - | kubectl apply -f -
kubectl get deploy videos-db -o yaml | linkerd inject - | kubectl apply -f -
kubectl get deploy videos-web -o yaml | linkerd inject - | kubectl apply -f -
kubectl -n ingress-nginx get deploy nginx-ingress-controller  -o yaml | linkerd inject - | kubectl apply -f -

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 7: Generate some traffic to our services
&lt;/h2&gt;

&lt;p&gt;Let's run a &lt;code&gt;curl&lt;/code&gt; loop to generate some traffic to our site &lt;br&gt;
We'll make a call to &lt;code&gt;/home/&lt;/code&gt; and to simulate the browser making a call to get the playlists, &lt;br&gt;&lt;br&gt;
we'll make a follow up call to &lt;code&gt;/api/playlists&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;While ($true) { curl -UseBasicParsing http://servicemesh.demo/home/;curl -UseBasicParsing http://servicemesh.demo/api/playlists; Start-Sleep -Seconds 1;}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 8: Failure and Observability
&lt;/h2&gt;

&lt;p&gt;In my video, I inject a fault to my &lt;code&gt;videos-api&lt;/code&gt; using some faulty code that can be enabled by setting Environment variable &lt;code&gt;FLAKY=true&lt;/code&gt; on the &lt;code&gt;videos-api&lt;/code&gt; deploy.yaml file. I redeploy that service once the environment variable is set.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl apply -f kubernetes/servicemesh/applications/videos-api/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can observe cascading failures in the &lt;code&gt;linkerd&lt;/code&gt; dashboard once failures start to occur.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 9: Service Profiles &amp;amp; Auto Retry
&lt;/h2&gt;

&lt;p&gt;Now that we have a failure, we can test out the auto retry feature by creating a service profile. A service profile can be generated using the &lt;code&gt;linkerd&lt;/code&gt; CLI or you can just apply one I created already:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; kubectl apply -f kubernetes/servicemesh/linkerd/serviceprofiles/videos-api.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can notice retries are occuring when effective RPS is different to the actual RPS&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;linkerd routes -n default deploy/playlists-api --to svc/videos-api -o wide
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We will also see the playlist API recover in the &lt;code&gt;linkerd&lt;/code&gt; dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 10: Mutual TLS
&lt;/h2&gt;

&lt;p&gt;A cool feature of Linkerd is every meshed service gets mutual TLS which means all internal meshed service traffic is encrypted using TLS. We can view this by running :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;linkerd -n default edges deployment
SRC                  DST             SRC_NS    DST_NS    SECURED       
playlists-api        videos-api      default   default   √
linkerd-prometheus   playlists-api   linkerd   default   √
linkerd-prometheus   playlists-db    linkerd   default   √
linkerd-prometheus   videos-api      linkerd   default   √
linkerd-prometheus   videos-db       linkerd   default   √
linkerd-prometheus   videos-web      linkerd   default   √
linkerd-tap          playlists-api   linkerd   default   √
linkerd-tap          playlists-db    linkerd   default   √
linkerd-tap          videos-api      linkerd   default   √
linkerd-tap          videos-db       linkerd   default   √
linkerd-tap          videos-web      linkerd   default   √
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also &lt;code&gt;tap&lt;/code&gt; deployments to get a &lt;code&gt;tcpdump&lt;/code&gt; style view which will also show tls on traffic between services:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;linkerd -n default tap deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hope you found this guide useful!&lt;br&gt;
Be sure to checkout my LinkerD episode on YT&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Hc-XFPHDDk4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Peace!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
      <category>kubernetes</category>
      <category>docker</category>
    </item>
    <item>
      <title>My DevOps Videos for July 2020 📺</title>
      <dc:creator>💻:~:$ That DevOps Guy</dc:creator>
      <pubDate>Fri, 07 Aug 2020 04:41:56 +0000</pubDate>
      <link>https://dev.to/marceldempers/my-devops-videos-for-july-2020-2dc7</link>
      <guid>https://dev.to/marceldempers/my-devops-videos-for-july-2020-2dc7</guid>
      <description>&lt;p&gt;July has been jam packed with many DevOps and software engineering videos. &lt;/p&gt;

&lt;p&gt;I cover Terraform with Azure AKS and planning to do a lot more Terraform coverage in the future&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/bHjS4xqwc9A"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;How I deploy monitoring components for Kubernetes in 10 minutes&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/abq-6FBn0fo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Jenkins on AWS EKS, the easy way!&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/eqOCdNO2Nmk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;K8s Kustomize: Simplifying YAML on Kubernetes&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/5gsHYdiD6v8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;GitOps with Flux CD&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/OFgziggbCOg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;K8s Persistent Volumes&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ZxC6FwEc9WQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Intro to GKE&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/-fbH5Qs3QXU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>devops</category>
      <category>docker</category>
      <category>kubernetes</category>
      <category>100daysofcode</category>
    </item>
    <item>
      <title>RabbitMQ series for beginners</title>
      <dc:creator>💻:~:$ That DevOps Guy</dc:creator>
      <pubDate>Thu, 06 Aug 2020 07:39:00 +0000</pubDate>
      <link>https://dev.to/marceldempers/rabbitmq-series-for-beginners-3dm3</link>
      <guid>https://dev.to/marceldempers/rabbitmq-series-for-beginners-3dm3</guid>
      <description>&lt;p&gt;Are you new to Message brokers, Queue and messaging services ?&lt;br&gt;
If you're a programmer or a DevOps engineer, this one's for you. 🤓&lt;/p&gt;

&lt;p&gt;I've started a new series on RabbitMQ 📺&lt;br&gt;
In the first video, we cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to run RabbitMQ&lt;/li&gt;
&lt;li&gt;What is a message queue&lt;/li&gt;
&lt;li&gt;What is asynchronous messaging&lt;/li&gt;
&lt;li&gt;What role RabbitMQ plays in microservice architectures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also cover basic features, configurations and we finally write some code that produces a message and another application that consumes the message from the queue.&lt;/p&gt;

&lt;p&gt;During this video, I showcase the entire process and provide you with source code on GitHub so you can follow along&lt;/p&gt;

&lt;p&gt;Let's start with the basics of RabbitMQ:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/hfUIWe1tK8E"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Once we get the basics right, we'll learn how to run a RabbitMQ cluster in a highly available manner with replication and clustering&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/FzqjtU2x6YA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Now that we've learnt how to run RabbitMQ in HA, the best place to run containers would be on a platform like Kubernetes.&lt;br&gt;
In this video we take everything we learned and see what it takes to get it running on Kubernetes.&lt;/p&gt;

&lt;p&gt;This focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;Persistence&lt;/li&gt;
&lt;li&gt;The Statefulset&lt;/li&gt;
&lt;li&gt;Deployment&lt;/li&gt;
&lt;li&gt;Failover testing&lt;/li&gt;
&lt;li&gt;Replication testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/_lpDfMkxccc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>devops</category>
      <category>developers</category>
      <category>programming</category>
      <category>rabbitmq</category>
    </item>
    <item>
      <title>The Best Cloud for Kubernetes ?</title>
      <dc:creator>💻:~:$ That DevOps Guy</dc:creator>
      <pubDate>Sun, 02 Aug 2020 04:09:22 +0000</pubDate>
      <link>https://dev.to/marceldempers/the-best-cloud-for-kubernetes-3okf</link>
      <guid>https://dev.to/marceldempers/the-best-cloud-for-kubernetes-3okf</guid>
      <description>&lt;p&gt;As a DevOps engineer, understanding how Kubernetes is cloud native is important. Kubernetes decouples our software from the infrastructure. It allows us to thinking less about scheduling, compute instances, health checks, load balancing, service discovery and more.&lt;/p&gt;

&lt;p&gt;We can simply package our app in a container, and throw it at Kubernetes and then tell Kubernetes how we want the app to be distributed, scaled and it will keep it running.&lt;/p&gt;

&lt;p&gt;When people ask me where is the best place to run Kubernetes, i always say LOCALHOST is the best. &lt;/p&gt;

&lt;p&gt;This is because it simply does not matter anymore.&lt;br&gt;
As a developer, I run Kubernetes on Kind, or Docker for Windows.&lt;br&gt;
Enable it with a click of a button.&lt;br&gt;
With a small YAML file, I can run my app as if it's running in the cloud.&lt;/p&gt;

&lt;p&gt;No matter the cloud, the YAML - where you fundamentally define how Kubernetes should run your app - is the same, regardless if you're on AWS, Azure or Google cloud.&lt;/p&gt;

&lt;p&gt;As a DevOps engineer it really helps having a bit of knowledge on what it takes to get a Kubernetes in each cloud provider. Each having their own niche, features and challenges.&lt;/p&gt;

&lt;p&gt;For that, I have started a series called "Kubernetes in the Cloud"&lt;/p&gt;

&lt;p&gt;We cover all the basics to be learnt about running Kubernetes in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft Azure&lt;/li&gt;
&lt;li&gt;Amazon AWS&lt;/li&gt;
&lt;li&gt;Google Cloud&lt;/li&gt;
&lt;li&gt;Digital Ocean&lt;/li&gt;
&lt;li&gt;Linode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check it out &amp;amp; Enjoy!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/3jA9EfkSAUU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>automation</category>
      <category>cloudnative</category>
    </item>
    <item>
      <title>Software is Hard, so Keep it Simple</title>
      <dc:creator>💻:~:$ That DevOps Guy</dc:creator>
      <pubDate>Fri, 17 Jul 2020 10:18:23 +0000</pubDate>
      <link>https://dev.to/marceldempers/software-is-hard-so-keep-it-simple-nk7</link>
      <guid>https://dev.to/marceldempers/software-is-hard-so-keep-it-simple-nk7</guid>
      <description>&lt;p&gt;Hey folks, welcome to my first post on dev.to 🤓&lt;br&gt;
I've been a software developer for many years and have moved into engineering roles, currently a solution architect.&lt;/p&gt;

&lt;p&gt;Working closely with DevOps engineers and software developers, and having a decent understanding of both roles, I've wanted to pursue a dream in filmmaking and making content as an aim to help guide developers and ops engineers to learn new technologies. &lt;/p&gt;

&lt;p&gt;Software engineering can be challenging for many. There are so many things to learn. Not only do you have to know about software and code, but also Virtual Machines, Load Balancers, Proxies, Microservices, Docker, Kubernetes, Linux, Cloud and the list never ends.&lt;/p&gt;

&lt;p&gt;My aim is to demystify the adoption of some of these technologies with the philosophy of Keeping it Simple.&lt;/p&gt;

&lt;p&gt;Checkout my introduction video here, it's short and sweet 🤓&lt;br&gt;
If you're a Dev, a System Admin, or just passionate about software engineering, come follow my journey 👇🏽&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/bseGaoZk8Ds"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>devops</category>
      <category>softwaredeveloper</category>
      <category>coding</category>
      <category>developer</category>
    </item>
  </channel>
</rss>
