MicroK8s on 64 Bit OS Raspberry Pi

Microk8s on Raspberry Pi

kubernetes plus raspberrypi

I have written a few post on running Kubernetes on Raspberry Pi’s. The size of the platform is perfect for tinkerers to developers wanting to learn more. You can cluster them, as I wrote before or you can use them as a single cluster. For the price they give someone the ability to run a small home server for around $50.

But this time I am setting up a new cluster to run my Twitter bot. Sure I don’t need another Raspberry Pi 4. And $50 is a bit pricy for a single use Pi. But I had a few Pi’s laying around so I thought this would be a great use of one of them. I have a few idea’s for my Twitter bot and this gives me a small platform to expand upon.

I have a few post on how I have set up Kubernetes on Raspberry Pi 4s. This post I want to organize this to a one pager to get started. We are going to use MicroK8s on a Raspberry Pi. And of course we are going to use a 64-bit OS. Where we are going to depart from my other post is going to focus on getting our app running. So I am going to use some tools that have long term support or LTS.

Shopping List

  1. Raspberry Pi 4 Model B - 4GB DDR4
  2. Raspberry Pi 4 Official 15W Power Supply US - Black
  3. SanDisk Ultra PLUS 32GB microSDHC
  4. GeeekPi Raspberry Pi 4 Case

Yes the price of everything listed is over $50. I did benefit from a few sales at Micro Center. So to save a few bucks I recommend you shop around. The case is arguably needed. I love this case, the fan is quiet and keeps my Pi cool with ease. The microSDHC is another splurge but this one is necessary. Going cheap on a microSDHC card will cause problems in the long run.

Prepping the Drive

First let’s get the OS. Where from my first post on doing a 64-bit OS I used Ubuntu 19.10 for this one we are going to roll to Ubuntu 20.04 LTS. We moving to long term support operating systems. I don’t want too update these if I don’t have to.

So to install the OS to the drive. Nothing new here same thing we did previously.

# unmount disk
diskutil unmountdisk /dev/disk2

# flash sd card
sudo dd if=ubuntu-ubuntu-20.04-preinstalled-server-arm64+raspi.img of=/dev/disk2 bs=2m

When the dd command is done you should see something like:

1479+1 records in
1479+1 records out
3102821376 bytes transferred in 769.989419 secs (4029694 bytes/sec)

I added another step to this:

sync /dev/disk2

Setting up the Pi

Once the flash drive is done we need to log in to the Pi. So insert the flash drive in to the Pi and power it up. To log in the default username and password is both ubuntu. This is a perfect time to change it so do so now. You will need to plug an ethernet cable in to your router and Pi. Next we need to update so run the following commands:

sudo apt update
sudo apt upgrade

This will take a few minutes to run.

Adding WIFI

For me I don’t have the space to keep my Pi close to my router. I need to configure the networking but I am going going make sure WIFI is set up so I can move my Pi to a better spot in my office. With this version of Ubuntu the netplan file is located here /etc/netplan/50-cloud-init.yaml from the terminal find this directory and file. Then run this command:

sudo nano 50-cloud-init.yaml

This will require a password of the ubuntu user. The file should look like this:

network:
    ethernets:
        eth0:
        addresses: []
        dhcp4: true
    version: 2

I will not go in to detail on what is in this file and what you need to add, I wrote that up before but you are going to want to set some static IP address for both the ethernets and wifis. This file should look like this when you are done:

network:
    ethernets:
        eth0:
            addresses: [192.168.1.5x/24] # note the x here is supposed to be a number I masked it in my example
            gateway4: 192.168.1.1
            nameservers:
              addresses: [8.8.8.8,8.8.4.4]
            dhcp4: no
    wifis:
        wlan0:
            dhcp4: no
            dhcp6: no
            addresses: [192.168.1.5x/24] # note the x here is supposed to be a number I masked it in my example
            gateway4: 192.168.1.1
            nameservers:
              addresses: [8.8.8.8,8.8.4.4]
            access-points:
              "network_ssid":
                password: "xxxxxxxxxxxxxxxxxx"
    version: 2

Few things to note network_ssid is the name of your WIFI network, you will need the quotes around it, as with you need the quotes around the password for that network.

Save the file or hitting control + X and then hit enter. From there run the following command:

sudo netplan try

If you have your yaml spacing correct all should work well. Feel free to remove the ethernet cable.

Installing MicroK8s

We need to enable cgroups and to do so we need to add a line to the nobtcmd.txt to do so run the following command:

sudo nano /boot/firmware/cmdline.txt

Add this to the end of the file:

cgroup_enable=memory cgroup_memory=1

Save the file and reboot the Pi to do this run this command:

sudo reboot

Now we are ready to use Snap to install MicroK8s:

sudo snap install microk8s --classic --channel=1.18/stable

This will take a few minutes. After this is done we can configure the network around this:

sudo iptables -P FORWARD ACCEPT

Next we need to upgrade the permission of the user ubuntu so run the following command:

sudo usermod -a -G microk8s ubuntu
logout

Once you logged back in to your Pi, you can start up MicroK8s:

microk8s.start

We need to enable a few things as well:

microk8s.enable dns
microk8s.enable storage
microk8s.enable helm3

Wrapping Up

This post is an organized post of a few that I did in getting Kubernetes running on a Raspberry Pi. As I am using this for my Twitter bot I wanted to write this up for anyone following my project. MicroK8s on a Raspberry Pi is an easy place to run our Twitter bot.