Hello 👋 Ivan's here with a slightly delayed September roundup of all things Linux, Containers, Kubernetes, and Server Side 🧙 What I was working onThis month, I worked on an assorted set of topics. Skill PathsFirst off, the skill paths! I finally finished the underlying machinery, and now iximiuz Labs supports a new type of content - short roadmaps that you can use to develop or improve a specific skill: how to debug distroless containers, how to copy images from one repository to another, how to forward TCP ports, how to control system resource consumption, etc. The cumulative number of tutorials, course lessons, and challenges on iximiuz Labs has crossed 70, and I'm getting more and more questions about the "right" order to consume the available materials. While it's rather unrealistic to develop a comprehensive "DevOps learning path" that would work for everyone, it's definitely possible to prepare curated lists of practical challenges (sprinkled with a little bit of theory and colorful diagrams) to master more scoped topics, one skill at a time. Here are the first two examples that I prepared in September: 🛠️ Get Started with Linux Control Groups (cgroup v2) 🛠️ Copy Container Images Like a Pro ...and many more to come! Kamal 2 PlaygroundKamal by DHH and 37signals folks (rather unexpectedly for me) got a major version upgrade, and it's a good one! Kamal is an imperative alternative to declarative orchestrators like Docker Swarm or Kubernetes. The idea is that you have a single "deploy" machine with the The "deploy" machine can be your laptop, and the "worker" hosts are just vanilla Linux VMs. Workers don't run any When Kamal showed up on my radar ~a year ago, it immediately caught my attention because I helped to implement something like Kamal twice in the (relatively) recent past for some of my clients. From my experience, many businesses running on Kubernetes would be better off using a simpler infra - if you have just a few servers to manage, there is nothing wrong with an Ansible playbook executing Docker commands on them to roll out your app. But Kamal made it even easier. I liked Kamal so much that I even created a Kamal playground on iximiuz Labs. Kamal 2 was released this month (replacing declarative Traefik with its own imperative The playground consists of three hosts:
The deploy machine has a simple Kamal-ized Python app at Better labctl experienceI'm a frequent user of
Just a reminder, here is how easy it is to start a remote playground, copy a file to it, and then SSH into it right from your local terminal: Some work-in-progress Docker contentWhen I'm not adding features or rebuilding playgrounds, I'm working on my "panoramic" Docker course. Here is a by-product that you might find useful on its own: iximiuz Labs updateOne of the traditionally less appreciated parts of my work finally starts getting more attention. I personally use iximiuz Labs playgrounds a lot - in my daily work, research, and learning. It's super handy when you can get a fresh Docker host or a Kubernetes cluster in just one click and ~10 seconds of waiting, launch some less trusted stuff on it, experiment, and then tier it all down without leaving the slightest trace on your precious host system. iximiuz Labs playgrounds are also always up-to-date - I keep a close eye on a bunch of Linux distros, Kubernetes, Docker, Podman, Dagger, and a number of other tools and upgrade playgrounds within a day or two after a new version is released. However, my understanding was that the majority of the iximiuz Labs users valued the platform primarily for its content part... However, in September, I got a fresh influx of feedback, and it seems that more and more people are buying premium memberships to get faster playgrounds with unlimited Internet access, which they use for their "free-form" study and even work! This is heartwarming and reassuring 🙏 September was also the best ever month financially - the cumulative "revenue" from Gumroad and Patreon crossed $3,000. I am not claiming a $3k MRR yet because the recurrence is not guaranteed, but fingers crossed for October 🤞 Last but not least, thanks to Gumroad making it really easy to do, I launched an affiliate program. If you're a frequent iximiuz Lab user and want to help me spread the word about the platform and make some money on referred sales, go click that link and register. What I was readingalpine, distroless or scratch? - While the article tries to promote the use of Choosing the best Node.js Docker image by Snyk (continuing the above topic) - Articles like that tend to age quickly, but this particular example seems to have been well maintained for two years already. Picking the right base image for your app often feels like rocket science (or black magic or art, depending on how you see it). The whole post is definitely worth reading, but the conclusion (which I fully agree with) is - unless you know what you’re doing, go with Kubernetes 1.31: Moving cgroup v1 Support into Maintenance Mode - Progress is great, so I’m all for the wider adoption of cgroup v2. Just beware that this move might not be as harmless as it tries to sound. Funnily, one of the links in this blog post is a merged GitHub PR that enabled cgroup-aware OOM killer in all Kubernetes clusters that use cgroup v2. And apparently, it broke even Kubernetes’ own CI jobs (running atop Kubernetes, I presume) 🙈 Kubernetes 1.31: Custom Profiling in Kubectl Debug Graduates to Beta - A very weak shot at fixing the What every SRE should know about GNU/Linux resolvers and Dual-Stack applications - Yet another masterpiece by Viacheslav Biriukov, this time on the Linux networking subsystem. Make sure to check out two other deep dives - on file descriptors, pipes & terminals and on Linux page cache. I Like Makefiles - This post mixes together the concepts of a build tool and a task runner, but apart from that, I do share the author's sentiment. Every project I started in the past ~7 years has a top-level Makefile, even if it invokes some trivial commands like Go structs are copied on assignment (and other things about Go I’d missed) - I admire Julia's courage in admitting that she didn't know these (rather basic) parts of Go. Every senior engineer should foster this honest quality in themselves and set the right example to other, potentially more junior team members. It’s absolutely fine not to know some things about your language or immediate stack. We all learn something new at the job daily, regardless of our level of maturity. Good programmers worry about data structures and their relationships - Oh, yes! It’s not the first time I have run into this quote by Linus Torvalds, and every time, I have the urge to share it with as many people as I can. Linus goes even further and, in his traditional tough manner, states that "…the difference between a bad programmer and a good one is whether he considers his code or his data structures more important". I'm not sure if it’s a real differentiator for good and bad programmers, but it definitely is for readable & maintainable vs. "flow of mind that only the author can understand" kinds of code. Monolith First by Martin Fowler. You actually wouldn't believe how far a company can get with a single stateless HTTP backend, a Postgres database, and a bunch of async workers crunching non-OLTP workloads. I personally "scaled" such architecture to millions of users, and the truth is that not much of "scaling" was needed. Just add a couple more backend servers and maybe shard your DB a little. No Kubernetes, no even cloud. And, of course, no microservices - "even experienced architects working in familiar domains have great difficulty getting boundaries right at the beginning." Wrapping upThat is it for September. Hope there was something in this email that you personally found useful. Have a productive month! ☕ Ivan P.S. My traditional reminder - if you want to learn the Server Side craft faster and support my work, consider getting the premium membership. There is a very good chance you will be able to expense it using your learning and development budget. |
Building labs.iximiuz.com - a place to help you learn Containers and Kubernetes the fun way 🚀
Hey, fellow server dweller 👋 Ivan here with an exciting iximiuz Labs update! The month isn't over yet, so it's not quite time for the traditional monthly roundup. However, there have been so many updates on the platform in the past couple of weeks that they couldn't possibly fit into a single email. So, let's dive in 🚀 Backend Revamp: Faster, Smarter, Stronger Over the past few weeks, I rolled out a significant backend rewrite at iximiuz Labs, and I couldn't be more excited to share the...
Hello 👋 Ivan's here with November's roundup of all things Linux, Containers, Kubernetes, and Server Side 🧙 What I was working on This month was (extremely) development-heavy. Two-thirds of it went into the implementation of custom playground machinery and a new Kubernetes "Omni" playground, and in the last part, I was unexpectedly busy with expanding the platform's capacity and launching a new server in India 🎉 The latter became possible thanks to the support of all of you who got the premium...
Hello, fellow server dweller 👋 I've got two exciting announcements to make. Starting with the shorter one, this year, I decided to give Black Friday a try. This is an experiment - iximiuz Labs hasn't done sales before and won't have any in the foreseeable future, at least not until next November. So, if you wanted to get a premium membership but the price felt too high, this is your rare chance to get it with a 50% discount. The offer is limited to exactly one week. Now, to the second, much...