<?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: Lars van Erp</title>
    <description>The latest articles on Forem by Lars van Erp (@larsverp).</description>
    <link>https://forem.com/larsverp</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%2F1154652%2F8bbef6b4-26fb-448d-abcd-a31d95dd0d61.jpeg</url>
      <title>Forem: Lars van Erp</title>
      <link>https://forem.com/larsverp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/larsverp"/>
    <language>en</language>
    <item>
      <title>Setting up Kubernetes, Rancher and auto certificates using Let's encrypt.</title>
      <dc:creator>Lars van Erp</dc:creator>
      <pubDate>Tue, 14 Nov 2023 08:15:26 +0000</pubDate>
      <link>https://forem.com/larsverp/setting-up-kubernetes-rancher-and-auto-certificates-using-lets-encrypt-2145</link>
      <guid>https://forem.com/larsverp/setting-up-kubernetes-rancher-and-auto-certificates-using-lets-encrypt-2145</guid>
      <description>&lt;h2&gt;
  
  
  A quick introduction about myself
&lt;/h2&gt;

&lt;p&gt;Hey there, I'm Lars, a 23-year-old software developer with a keen interest in DevOps. And let's be honest, in 2023 when you say "DevOps," you're essentially saying "Kubernetes". I'm a firm believer in the "learn by doing" approach. Stumble, fall, but remember: each misstep is a lesson in disguise.&lt;/p&gt;

&lt;p&gt;So, here's the deal. I'm diving headfirst into Kubernetes, despite facing two key challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Running Kubernetes locally is not rewarding enough.&lt;/li&gt;
&lt;li&gt;I like to keep my monthly costs predictable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Given these constraints, I've decided to roll out my own Kubernetes server. Spoiler alert: I'm a Kubernetes newbie. So, don't treat this guide as a perfect "How to setup Kubernetes", but rather as an open invitation to join my Kubernetes journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Setup
&lt;/h2&gt;

&lt;p&gt;What I'm Working With:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transip's most budget-friendly Performance VPS: &lt;a href="https://www.transip.nl/vps/performancevps/"&gt;Check it out here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ubuntu 22.04 (Pre-installed, so that's a win)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Let's Roll Up Our Sleeves
&lt;/h2&gt;

&lt;p&gt;Enough chit-chat, let's get our hands dirty. Here's a rundown of the commands I threw in my terminal.😎&lt;/p&gt;

&lt;p&gt;I decided to roll with k3s as my base. I did start with Minukube at first, since it's praised as the easiest to start with. However k3s is made by Rancher, so that is an easier combination (I guess).&lt;/p&gt;

&lt;p&gt;Installing k3s is simple:&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check the node's status:&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;k3s kubectl get node
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Download kubectl (A Kubernetes command line tool)&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; https://dl.k8s.io/release/&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; https://dl.k8s.io/release/stable.txt&lt;span class="si"&gt;)&lt;/span&gt;/bin/linux/amd64/kubectl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install kubectl&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 install&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; root &lt;span class="nt"&gt;-g&lt;/span&gt; root &lt;span class="nt"&gt;-m&lt;/span&gt; 0755 kubectl /usr/local/bin/kubectl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify installation by checking the version&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl version &lt;span class="nt"&gt;--client&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy k3s config&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;cp&lt;/span&gt; /etc/rancher/k3s/k3s.yaml ~/.kube/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install Helm (The npm of Kubernetes)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo snap install helm --classic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If snap is unavailable please follow the Helm installation guide (&lt;a href="https://helm.sh/docs/intro/install/"&gt;https://helm.sh/docs/intro/install/&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Add Rancher stable repo&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 rancher-stable https://releases.rancher.com/server-charts/stable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create cattle-system namespace for Rancher&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 cattle-system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install Cert Manager CRDs&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;-f&lt;/span&gt; https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.crds.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create cert-manager 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 create namespace cert-manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add jetstack Helm repo and update&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 jetstack https://charts.jetstack.io
helm repo update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install cert-manager&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;cert-manager jetstack/cert-manager &lt;span class="nt"&gt;--namespace&lt;/span&gt; cert-manager &lt;span class="nt"&gt;--version&lt;/span&gt; v1.13.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check cert-manager pods and wait till they are ready&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 pods &lt;span class="nt"&gt;--namespace&lt;/span&gt; cert-manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We need to install an older version on k3s because Rancher is not able to support the latest k3s yet:&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://github.com/k3s-io/k3s/releases/download/v1.26.6%2Bk3s1/k3s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Move this older version of the k3s binary&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 cp &lt;/span&gt;k3s /usr/local/bin/k3s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart k3s&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;systemctl restart k3s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify node status again&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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🥳 Install Rancher 🥳&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please ensure you use the correct domain and email. The domain already needs to point to the server on install. If not, the LetsEncrypt verification will fail and your server will not receive a valid ssl certificate.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&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;rancher rancher-stable/rancher 
     &lt;span class="nt"&gt;--namespace&lt;/span&gt; cattle-system 
     &lt;span class="nt"&gt;--set&lt;/span&gt; &lt;span class="nb"&gt;hostname&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;rancher.yourdomain.com
     &lt;span class="nt"&gt;--set&lt;/span&gt; &lt;span class="nv"&gt;bootstrapPassword&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;admin 
     &lt;span class="nt"&gt;--set&lt;/span&gt; ingress.tls.source&lt;span class="o"&gt;=&lt;/span&gt;letsEncrypt 
     &lt;span class="nt"&gt;--set&lt;/span&gt; letsEncrypt.email&lt;span class="o"&gt;=&lt;/span&gt;youremail@email.com 
     &lt;span class="nt"&gt;--set&lt;/span&gt; letsEncrypt.ingress.class&lt;span class="o"&gt;=&lt;/span&gt;traefik
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! You should now be able to visit rancher.yourdomain.com and setup the application. Please note that the default password is set as "admin" (unless you changes the bootstrapPassword in the install command).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next up: Creating a second node and connecting it 🚀&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;To be continued in a new post...&lt;/em&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
