Photo by Patrick Schneider on Unsplash

Edge computing covers a wide spectrum of configurations from a multi-node Kubernetes cluster running as an edge unit to a single node Raspberry Pi Zero or perhaps a micro-controller sending data over MQTT channel. Each of these configurations requires a different way of thinking for workload management. For instance, if the edge device is a Kubernetes cluster, we could leverage Git-Ops for deploying applications on it. However, if the edge device is a Raspberry Pi Zero with a single core processor, limited memory and ARM v6 architecture, there are only a few options to run applications on such devices.


Recently I purchased a GPS sensor to integrate with Raspberry Pi. It’s been fun and a good learning experience to collect GPS data from it using Go code. The sensor I have is a PA1010D connected to a Raspberry Pi Zero W over I²C bus. With a battery-pack powering the Raspberry Pi, the whole setup turned out to be highly portable.

Below is the final output from the setup showing overlay of GPS data on Google maps. This overlay was produced using Google drive’s map feature that allows importing GPX formatting GPS coordinates. …

RPi Zero with battery pack (left), BME280 sensor (right)

BME280 sensor is a pressure, humidity and temperature sensor from Bosche and wonderfully packaged with I²C interface by Adafruit Industries, which makes it very easy to use with devices such as Raspberry Pi.

I have written about monitoring temperature and humidity in the past and this post is about evaluating its barometric pressure measurement capabilities. In particular, I took this sensor on a bike ride and correlated data captured using this sensor against what was reported by GPS sensing Strava app running on my phone. Let’s dig into details…

GPX Data from Strava

Strava is a very popular ride tracking app that can be…

Photo by Markus Spiske on Unsplash

Every API call to Kubernetes API server is made using an authorization bearer token. These tokens come in two flavors:

  • Short lasting user identity tokens
  • Long lasting service account tokens

Both these tokens are so called JWT tokens, which are increasingly becoming a standard way to communicate identity during API calls. The key property of these JWT tokens is that they are open and can be decoded, but at the same time they contain a signature which can be cryptographically verified. This property allows JWT tokens to be portable in the sense that they can be remotely verified using the…

My BME280 sensor setup to monitor temperature and humidity

I was looking for a sensor to monitor temperature, humidity and pressure using Raspberry Pi and came across BME280 sensor. The sensor is very nicely packaged by Adafruit Industries as you see in the image above. In particular, the stemma QT connectors on the board, make it very easy to connect the sensor board with GPIO pins of the Raspberry Pi. From a point of view of hardware assembly, getting the sensor connected was very easy and I used this diagram to connect it to the Raspberry Pi Zero.

The sensor uses I2C bus, which requires following setup on the…

Photo by Kristin Hillery on Unsplash

This post addresses a special case of arriving at a multi-architecture container manifest, i.e., the container image name and tag that work the same across multiple OS architectures such as x_86 and arm.

Imagine you are pulling ubuntu:21.04 container image on two separate OS architectures, say linux/amd64 and linux/arm64. As you would expect, the contents of container image on these two architectures would differ despite the fact that both were pulled using the same container image name and tag. Let’s see this in action:

On linux/amd64 machine we can display the arch on the command line and then pull ubuntu:21.04

California Seascape near Half-Moon Bay, (Photo by author)

As you may have guessed from my previous posts, I am currently busy putting together a Kubernetes based cloud-native software stack for working with Raspberry Pi’s, and other IoT devices for that matter. This post is a quick overview of a use case where we want to track sensor data from a device and visualize it on a dashboard, but do so in a cloud-native way using Kubernetes primitives.

In this case we have a device topology with a central hub running Kubernetes cluster (running on Raspberry Pi, but it can be any k8s cluster) and several IoT devices scattered…

Golden Gate Bridge, Photo by author

Kubernetes has two types of workloads:

  • Stateless
  • Stateful

Stateless workloads do not require persistent storage, however, the stateful workloads do need storage which needs to work in a distributed manner across nodes. There are various approaches to configuring storage layer on Kubernetes (link) but the scope here is to document the workflow to get Rook-Ceph running on a single-node k0s based Raspberry Pi Kubernetes cluster.

Getting your cluster up and running is definitely the first step as I documented here.

The steps are for single-node deployment and are not suitable for production or mission critical deployment. Pl. …

Photo by Jainath Ponnala on Unsplash

Recently I have been looking at Kubernetes in ways that were not apparent to me initially when I had started working with it a few years ago. In particular, Kubernetes (or k8s for short) is not just an orchestration platform for containerized apps, but also a platform to build API’s using so-called custom resource definitions (or CRDs).

CRDs, along with controllers, allow you to implement custom business logic, which operates seamlessly with other k8s resources. It is this ability, to extend the k8s API, that, I think, is very powerful. We can delegate a lot of heavy lifting on Kubernetes…

Mt. Tamalpais above the fog near San Francisco. © Saurabh Deoras

We have seen the growth of cloud computing and what it has done in terms of democratizing computing. It is easier than ever to rent arbitrary amount of compute and experiment with different ideas. It is almost a natural progression to then link these wonderful cloud computing capabilities to the so-called edge devices where actual data generation typically occurs. For instance, we may have a sensor mesh collecting temperature data in a warehouse or a swarm of camera devices to monitor a farmland for pests and diseases. These edge devices are typically tiny in terms of their compute powers, but…

Saurabh Deoras

Software engineer and entrepreneur currently building Kubernetes infrastructure and cloud native stack for edge/IoT and ML workflows.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store