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. …
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…
Strava is a very popular ride tracking app that can be…
Every API call to Kubernetes API server is made using an authorization bearer token. These tokens come in two flavors:
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…
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…
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
Imagine you are pulling
ubuntu:21.04 container image on two separate OS architectures, say
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:
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.
Kubernetes has two types of workloads:
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. …
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…
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…
Software engineer and entrepreneur currently building Kubernetes infrastructure and cloud native stack for edge/IoT and ML workflows.