Mastering Container Networking

Container Networking is simple! Just kidding, it's not ๐Ÿ™ˆ But this series will help you understand it! It starts from a very thorough step-by-step guide on how to reproduce a single-host container networking using only standard Linux tools. Then it moves to higher-level concepts such as proxy sidecars and service discovery, and finally touches upon cross-host container networking in Kubernetes.

Linux network namespaces used for container isolation.

Read more

Debugging Containers Like a Pro

Debugging even simple containerized applications is challenging. Debugging applications that run in distroless containers is hard. And debugging distroless containers running in a Kubernetes cluster is close to impossible. Unless you know a trick a two. This series will teach you how to use different container debugging tools and techniques to troubleshoot your containerized workloads.

Using a special sidecar to debug a potentially distroless container.

Read more

Working with Kubernetes API

Kubernetes has become the lingua franca for many of us tinkering with infrastructure. To a large extent, it happened due to the portable API that Kubernetes came up with to manage server resources. Much like POSIX defined a standard way to consume a single computer's resources, the Kubernetes API enabled the consumption of data center resources in a provider-agnostic manner.

This is a WiP series on working with the Kubernetes API from the command line and from code:

  • The series starts with an overview of the most fundamental API concepts.
  • Explains the much-needed basics like Resource, Kind, and Object.
  • Touches upon the API structure and terminology.
  • Has a ton of practical examples of how to access and extend the API.

The series also can help the reader understand the contemporary Kubernetes API clients (Go and Rust), starting from the basic REST functionality and ending with advanced abstractions like Informers and Work Queues, so it'll be useful for folks writing all sorts of Kubernetes automation including custom operators and controllers.

Kubernetes API structure.

Read more

Writing Kubernetes Controllers/Operators

This is a work-in-progress series on writing Kubernetes Controllers and/or Operators. The series starts from an overview of the Kubernetes Operator pattern and will continue with more practical posts on how to access the Kubernetes API, how to use client-go, including its advanced functionality such as informers and watchers, etc.

Kubernetes control loop.

Read more

Implementing Container Manager

This series of articles takes you on the journey of writing a Container Manager - a piece of software that makes containers on a single host happily coexist. The goal of this series is not to write yet another full-blown manager like containerd, docker, or podman, but to help you understand better the responsibilities of the manager and its typical architecture. And, of course, to practice some systems programming in Go and Rust on the way ๐Ÿ˜

Futurama's Bender saying - I'll make my own Kubernetes, with blackjack and h@@kers!

Read more

Learning Prometheus and PromQL

Prometheus is not a time-series database. It's a monitoring system that happens to use a TSDB under the hood. This TSDB is optimized to serve monitoring use cases efficiently, sometimes at the expense of correctness or completeness of query results. That's why periodically, it might be tricky to reason about the observed behavior. This series helps you to understand Prometheus better.

Prometheus metrics.

Read more