Tag: english

When I accidentally Longhorn CSI

Symptoms: CPU load on all the nodes, but not the pods. Looking at Grafana, I noticed that CPU load on some of my nodes was constantly very high. At the same time, even the total CPU use of all the pods summed wasn’t above 0.4. What gives? This usually gives that the control plane is getting fried by something. It may be trying to relieve disk pressure, or in this case, trying to revive CSI.

Trying to figure out what was causing problems I checked the pods in kube-system with kubectl get pods -n kube-system. It quickly became apparent that there is a problem: disk-related pods like csi-resizer, csi-snapsotter and csi-provisioner were in CrashLoopBackOff.

I’ll be quite honest in that I’m not sure what the problem was. A few searches later I came to the conclusion that an earlier node reboot had left the pods with a corrupted DNS cache or something along those lines. Basically every issue I found with the symptoms I was seeing came down to DNS problems (longhorn/longhorn#2225, longhorn/longhorn#3109, rancher/k3os#811).

Alas I haven’t touched any of the networking machinery of Kubernetes (nor configured any of it for k3s) so my first idea was just the good old one from IT Crowd: “have you tried turning it off and on again?” So I did. Luckily another restart of the afflicted nodes solved the issue. I’m glad it did because I dread what I’d have had to do otherwise.


Steps to a more stable k3s cluster

It’s all too easy to kill a k3s cluster. I’ve been using k3s for years now and I’ve had plenty of adventures tweaking various aspects of running it. Before it’d take just a small change to an Argo Application to trigger a cascading failure. Hopefully now it’s a bit more resilient. Just a bit.

ship helm

PDF export with the Ruby 3.0.3 docker image

You might happen to use the wicked_pdf gem for PDF output in your Rails app. You might happen to use the wkhtmltopdf-binary gem to provide the required binaries. You might want to get the above to work on the latest (at this point 3.0.3-bullseye) Ruby docker image. Short answer: give up. A bit longer answer: it’s easier than you think.


Patching delayed_job for Ruby 3

Monkey patching is bad. That’s where you should start from. It can cause trouble where you’d least expect it, conflicts with libraries you’d least expect in ways you’d least expect. And yet here I am sharing code for patching the delayed_job gem to (more or less) work with Ruby 3. Doesn’t this violate my own policies? There are a few choices.

  1. give up upgrading to Ruby 3 altogether
  2. monkey patch delayed_job as an emergency fix and make time to figure out what to do
  3. contribute to delayed_job making sure the gem is solid on Ruby 3
  4. get rid of all the .delay calls and switch to another async job library

Stuff that broke in Rails 6.1

Rails uses a “shifted” “semantic” “versioning” which pretty much comes down to the following. Major version: “we’ll most definitely break everything you ever depended on, half of them without warning.” Minor version: “we’ll probably break many stuff you depend on, some of them without warning.” Patch version: “we might accidentally some core APIs, but we promise it’s not intentional (or documented).” Knowing that, I still embarked on the grand endeavor of upgrading from Ruby on Rails 6.0.4.1 to 6.1.4.1. What could possibly go wrong, right?

Railway tracks are suspended above the washed out Tank Hill underpass of the Trans Canada Highway 1 after devastating rain storms caused flooding and landslides, northeast of Lytton, British Columbia, Canada November 17, 2021. B.C. Ministry of Transportation and Infrastructure/Handout via REUTERS
Rails in Canada and on Ruby share (un)surprising similarities (source)

OpenTTD revisited

OpenTTD is the open source clone of Transport Tycoon Deluxe. It’s an amazingly addictive time sink that you absolutely should not start playing unless you’re ready to come to half a day later realizing it’s 5am and you haven’t gotten any sleep yet. It’s fun just playing around too, but things get real when you set a goal like “connect every primary industry.” I haven’t played against AI or people, but I’m not that interested in that either just yet. This is actually my second time playing—I spent insane amounts of time on the game during university (too).

A junction that ended up way more complicated than intended

Homeworld 2 (remastered)

I had fond memories of Homeworld 2 from my childhood. Mostly along the lines of “it was pretty,” but fond nonetheless. (I must’ve not played the campaign then…) The remastered edition lived up to my expectations regarding the visuals. The various colorful areas of space with occasional clouds of dust and massive runs of massive things, with my massive (though tiny in comparison) Mothership cruising comfortably are a rich source of pretty screenshots.


My tents

The first time I spent nights in the mountains was back in 2018, when I hiked from Mt Kobushi all the way to Mt Mizugaki. At that point I was staying in mountain huts, so I didn’t need a sleeping bag or mat. I think my first time sleeping in a tent in the wild was actually in the foothills of Elbrus in 2019 (not counting sleeping in a tent during summer festivals back in Hungary). Then it was even later, the summer of 2020 that I first stayed in my own tent during a multi-day trip. It was soon after that I actually hiked up a mountain, Mt Kai-koma to stay in a tent at altitude.


Breaking bad, or versioning is hard

Rich Hickey will tell you that breaking changes are horrible and versioning is stupid. The idea is nice. No breaking changes, ever. You get the API design of whatever you’re building perfectly at the first try. Oh wait. Obviously no one can do that, and no one could ever do that.

The question then becomes just how long exactly are you willing to carry the dead weight of code you don’t really want to carry anymore. Or rather even, how long exactly are you able to pay the costs of maintaining a possibly very problematic old API design.


Pink

Sitting in the field

Title: Sitting in the field
Creator: PascalsProxy