One of the most prevalent errors one encounters when developing an operator is ‘the object has been modified; please apply your changes to the latest version and try again’. Please raise your hand if you’ve seen this in your logs… Yeah, that’s what I thought :-)

To understand why this is happening, it’s worth noting that API server uses an optimistic concurrency control to deal with possible conflicts between two users updating the same resource at the same time. This makes it possible to avoid locking, that would normally be required. It relies on a field called `resourceVersion` and as…


There’s a lot of hidden knowledge in core controllers and api conventions doc that is not followed by many controllers in the wild. One of these patterns is observedGeneration. Let’s take a closer look at what problems it can help solve.

Kubernetes resources typically enforce spec and status separation. That means that the desired state (‘spec’ part of the object) and status (‘status’ part of an object) are updated via different API calls and typically also by different personas. While spec is something that the user maintains e.g. via kubectl, status is what your controller owns. …


Having regular retrospectives is important and that is even more true when working remotely. It’s a good way to connect and bond with your teammates while discussing work stuff and improving the way you work as a team.

There’s tons of paid tools that can help you facilitate. In the end I believe that tools won’t help you experience significantly better retrospectives, so you might as well use something that’s free of charge. The best experience I had so far is with Trello. …


When I approach a function that is combining running a piece of code in a goroutine and communication/cancellation using channels, I am usually tempted to look deeper as that is a great place to introduce a goroutine leak pretty easily and these errors are pretty easy to miss even for non-beginner golang developer. And that’s what I did for this piece of code I found in KUDO.

What is a goroutine leak?

Leaking goroutine is basically a type of memory leak. You start a goroutine but that will never terminate, forever occupying a memory it has reserved. …


I got burned by this several days ago that forced me to push to write this blogpost to prevent other people from having the same experience. Before we start with example, let’s have a quick detour to what is shallow and deep copy in go.

Shallow copy in go is an assignment. Everything in go is passed by value so assigning variable with a struct to another variable makes a copy of that struct. The same thing goes if you pass a variable to a function. Method always gets a copy of your variable (if you pass in a pointer…


I started working on a new golang project today and I spent bigger portion of my morning just trying to understand the formatter situation in the golang space. The project in question was running build time checks using `gofmt` and `goimports` to see if the code entering the repo is properly formatted. So that’s two different formatters already. And then I went into settings of my VSCode to find out it’s using `goreturns` to format code. And then I was like (╯°□°)╯︵ ┻━┻ and I had to understand what all those tools actually bring and which one to choose.

After…


Container space seems to be very fragmented in the past months and it’s getting more and more crowded every day. To be honest I miss times, when there was just one monolithic Docker and basically everything in the container lifecycle was Docker. Right now it’s pretty much the opposite. I kind of lost track of all these new projects appearing on the horizon like containerd, runc, kata containers, cri-o, rkt… Are these like on the same level as Docker? What’s actually Docker nowadays? I had to do quite some reading to answer that question for myself. …

Alena Varkockova

Passionate about traveling, food and programming. Tennis player that works on container orchestration at Mesosphere. Always trying to improve.

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