Image for post
Image for post
Photo by Andrew Tanglao on Unsplash

While a cup of coffee may seem like its two parts of hot water and coffee grinds there is much more to it. The same can be said for a well designed API. A good API does more then just taking input and returning output. It offers a few key items that make it enjoyable and easy to work with.

These few key items can sometimes be overlooked or not get the extra polish they deserve which detract from the API. Below we’ll touch upon these and how they can enhance the API experience.


The first interaction any developer will have with an API is its documentation. Good documentation is informative and clear which allows developers to quickly start integrating with the API. …

Image for post
Image for post
Photo by Dakota Roos on Unsplash

What is the GVR in Kubernetes? It stands for Group Version Resource and this is what drives the Kubernetes API Server structure. We will cover exactly what the terminology means for Groups, Versions, Resources (and Kinds) and how they fit into the Kubernetes API.


Kinds in Kubernetes relate to the object you are trying to interact with. A pod or deployment would be your Kind.

There are three categories of Kinds

  • Objects : These are your pods, endpoints, deployments, etc.
  • Lists : These would be collections of one or more Kinds. Example would be pod list or node list.
  • Special Purpose : These are used as specific actions on objects or none persistent objects. Examples would be /binding or…

Image for post
Image for post
Photo by Alex Duffy on Unsplash

This guide is meant to help you configure a private container registry running on your Kubernetes cluster that is backed by an S3 backend.

What you will need:

  • Basic working knowledge of Kubernetes
  • A running Kubernetes cluster: We will using Kubernetes resources such as Load Balancers that require cloud provider support.
  • Basic working knowledge of Helm
  • Valid Domain

All of the instructions in this guide can be swapped out for your cloud provider of choice with minor changes. We will be using Vultr as our cloud provider for this guide.

If you wish to also use Vultr there is an open-source Terraform Module that Vultr provides called Condor which bootstraps a working cluster in a few minutes. To find out more visit

Image for post
Image for post


What is Traefik? Traefik is a load balancer and HTTP reverse proxy that makes working with microservices and integrating with your infrastructure seamless.

Traefik design in a nutshell :
Traefik design in a nutshell :
Traefik design in a nutshell :

As you you see above Traefik will allow you to define public routes that the internet can access which will then get routed to a docker container. These publicly accessible routes are called “frontend-rules” which get routed to “backends”.

What will you learn?

By the end of this article you will learn how to setup Traefik to route http traffic to your Docker containers and have these calls go through HTTPS with Lets Encrypt.

Getting started

You are going to need a web server that has Docker running on it. I deployed a high frequency instance on Vultr with Docker already preinstalled. …

Image for post
Image for post
Photo by ammiel jr on Unsplash


This post is meant to help you get a Kubernetes cluster up and running with kubeadm in no time. This guide will be using Vultr to deploy two servers, one master and one worker, however you can deploy as many servers as you would like.

So what is kubeadm?

Kubeadm is a tool developed by Kubernetes which allows you to create a minimum viable cluster up and running by following best practices. It will only bootstrap your cluster not provision machines. Things such as addons, the Kubernetes dashboard, monitoring solutions, etc is not something kubeadm will do for you.


With this guide you can essentially deploy this Kubernetes cluster on any cloud provider. …

Part One : Basic Example

Image for post
Image for post

During one of my recent projects, I needed to find a new CI/CD service that could meet my needs. This service needed to be lightweight, affordable, and offer me the ability to define my workflow in code.

Enter Concourse CI. This isn’t your grandpa’s CI, Concourse CI is a free, open source CI written in Go and Elm. With all my criteria met, I decided to give it a shot and I was quickly won over.

In adopting Concourse CI, I wanted to share with you all two examples to help you get started. I’ll be splitting these examples into two parts; part one focusing on having Concourse build your Docker image from GitHub and deploying to ECR, part two being a more advanced version of this where Concourse can update your code and create pull requests. …

Image for post
Image for post

I spend a lot of time writing microservices in Go. Therefore, I found myself needing a concrete way to hand errors back to the client that was predictable and repeatable.

So I decided to follow the error response structure from This spec makes it very clear and concise to where the client can always expect a well formatted response that will never stray.

A few notable takeaways with this spec are:

  • A server MAY chose to stop processing as soon as a problem is encountered.
  • A server MAY chose to continue processing and encounter multiple problems.
  • Error objects MUST be returned as an array keyed by errors in the top level of the json api document. …

Recently, I had an opportunity to deploy a Go application into AWS Elastic Beanstalk, and I was surprised at how painless the deployment was. Without having to worry about infrastructure issues, I was able to get my Go app deployed.

Below is a break down, from start to finish, on how to get a simple Go app out to Elastic Beanstalk using docker.


Before we get started, there are a few things that need to be setup/installed:

And away we go!

Directory and Beanstalk initialization

Once all of the prerequisites are setup, we can begin by creating a new folder for where our application will live. …


David Dymko

Gopher with a keen interest in cloud native

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