Does a container have an OS inside? Do you always need an image to run a container? What happens when you build a container image? Are containers really just Linux processes, or a Virtual Machine can also be a container sometimes? Find answers to these and not only questions in the series!
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.
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.
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.
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.
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 😍
Books on Computer Networking are often intimidating - thousands of pages, boring diagrams... This colorful series walks you through the networking basics in just a few thousand words! It also offers hands-on labs to practice the obtained knowledge. I wish I had such a condensed resource at my disposal during my university days.
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.
A work-in-progress series on writing a simple web-server in Python. Not a shallow tutorial but a learn-by-doing attempt to explain how computers communicate via network and how servers typically handle requests (processes, threads, asyncio).
The Event Loop pattern is at the core of asynchronous programming. This short series shows how to implement an event loop (from scratch!) in just about 100 lines of pure Python and how to add support of
async/await in 200 more lines using generators. Say no to callback hell!