<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Axiom Design Studio Blog</title>
        <link>https://www.axiomdesignstudio.com.au/blog</link>
        <description>Axiom Design Studio Blog</description>
        <lastBuildDate>Tue, 05 Jan 2021 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Kubernetes on Raspberry Pi]]></title>
            <link>https://www.axiomdesignstudio.com.au/blog/kubernetes-on-raspberry-pi</link>
            <guid>https://www.axiomdesignstudio.com.au/blog/kubernetes-on-raspberry-pi</guid>
            <pubDate>Tue, 05 Jan 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Raspberry Pi 4]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="Raspberry Pi 4" src="https://www.axiomdesignstudio.com.au/assets/images/raspberry-pi-208de18ea80f8cfb2a48c508bbe75738.jpg" width="1920" height="1080" class="img_ev3q"></p>
<blockquote>
<p>"Challenge: Create a cheap Kubernetes cluster to run Kubernetes workloads."</p>
</blockquote>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="gathering-the-parts">Gathering the parts<a href="https://www.axiomdesignstudio.com.au/blog/kubernetes-on-raspberry-pi#gathering-the-parts" class="hash-link" aria-label="Direct link to Gathering the parts" title="Direct link to Gathering the parts" translate="no">​</a></h2>
<p>The first step was selecting the components. With prior Kubernetes
experience, the hardware needed to be specced appropriately while staying
within budget. The parts list was built around gear from Australian
Raspberry Pi reseller <a href="https://core-electronics.com.au/" target="_blank" rel="noopener noreferrer" class="">Core Electronics</a>.</p>
<p><strong>Raspberry Pi inventory</strong></p>
<table><thead><tr><th>Component</th><th>Qty</th></tr></thead><tbody><tr><td>Raspberry Pi 4 — 4GB</td><td>4</td></tr><tr><td>Raspberry Pi 4 — 8GB</td><td>4</td></tr><tr><td>Argon NEO cases</td><td>8</td></tr><tr><td>Raspberry Pi 4 power supplies</td><td>8</td></tr></tbody></table>
<p>Rounding out the build: 8× 64GB SanDisk Extreme cards, a Netgear 16-port
switch, and ten 1TB Samsung SSDs for distributed cluster storage.</p>
<p>:::tip Hindsight
It would have been worth getting the PoE HAT to cut down on cabling —
something to consider for a future 10-node cluster.
:::</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="software-installation">Software installation<a href="https://www.axiomdesignstudio.com.au/blog/kubernetes-on-raspberry-pi#software-installation" class="hash-link" aria-label="Direct link to Software installation" title="Direct link to Software installation" translate="no">​</a></h2>
<p>Once assembled, each Raspberry Pi was set up with Ubuntu 20.04 across all
eight SanDisk cards, with a personal user and an <code>ansible</code> user added for
automation. To reduce SD card wear, <a href="https://github.com/azlux/log2ram" target="_blank" rel="noopener noreferrer" class="">log2ram</a>
was installed on every node — the foundation for building out the cluster.</p>
<p>Next came the real work: writing Ansible scripts to install Docker, then
<code>kubeadm</code> and <code>kubelet</code>, across the fleet. Spread over roughly three weekends
at about four hours each, this eventually produced a stable, repeatable set
of scripts.</p>
<p>Running the finished playbooks installed Docker and the Kubernetes base
software across all the machines in about 45 minutes. Bootstrapping the
cluster itself — one master node and seven worker nodes — was a manual step
that took only 10–15 minutes. Adding <a href="https://www.tigera.io/project-calico/" target="_blank" rel="noopener noreferrer" class="">Calico</a>
for cluster networking completed the setup: a fully operational cluster.</p>
<p>Software still on the list to add:</p>
<ul>
<li class=""><strong>Istio</strong> — no ARM build was available at the time</li>
<li class=""><strong>MetalLB</strong> — load balancer for cluster services (6 IPs allocated)</li>
<li class=""><strong>Tyk / Solo Gloo Edge</strong> — API gateway for deployed components</li>
<li class=""><strong>Longhorn</strong> — cluster storage management</li>
<li class=""><strong>Ceph</strong> — distributed storage</li>
</ul>
<p>Like most homelab projects, this one is ongoing, with the long-term goal of
building toward a software development capability.</p>]]></content:encoded>
            <category>Kubernetes</category>
            <category>Raspberry Pi</category>
            <category>Cloud</category>
            <category>Homelab</category>
        </item>
    </channel>
</rss>