The road to Kubernetes

I finally wanted to setup my own kubernetes cluster as everyone I talk to, said its the hottest shit.

I’m using three VMs, hosted at Netcup running the latest Debian 9 Stretch build. I’ve installed most basic tools for me and also already set up docker using this amazing ansible role. Make sure to disable any swap you have configured – kubelet will not start otherwise.

The documentation on how to install things is pretty good, but I’ve missed some details, that I banged my head on, so I will copy most snippets over for future reference. Keep in mind, that this might have already changed and is no longer working at the time you read this.

First install all needed CLI tools on each of the three hosts:

apt-get update && apt-get install -y apt-transport-https
curl -s | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb kubernetes-xenial main
apt-get update
apt-get install -y kubelet kubeadm kubectl

Start the systemd Service for kubelet, our kubernetes manager – also on every node.

systemctl enable kubelet && systemctl start kubelet

Now the docs are a bit unspecific, but here’s a command to set the correct cgroup on Debian 9.


First check what cgroup docker is running under:

docker info | grep -i cgroup

Then use this replacement command to add the cgroup to the systemd service file and restart kubelet:

sed -i "s/bin\/kubelet/bin\/kubelet --cgroup-driver=cgroupfs/g" /lib/systemd/system/kubelet.service
systemctl daemon-reload
systemctl restart kubelet


Verify everything is working with:

systemctl status kubelet

If you see a failed state, you can use journalctl -xe to check for the error message. (You did disable your swap right? ;] – Hint swapoff -a)

Now we should be ready to setup our master node.

kubeadm init

If anything goes wrong, you can reset your master node using the following:

kubeadm reset

At this point init took me all the way and got stuck on the following message:

[init] This might take a minute or longer if the control plane images have to be pulled.

In my logs (journalctl) I could see some message related to docker, cni and Network problems. A quick google search lated lead me to this quickfix:


Comment out the domain and search part in that file.

Then I got the following message:

"server4" is forbidden: not yet ready to handle request

Turns out, I had a service listening on port 80/443/8080 – make sure to stop that before you run init.

After that we need to install a pod network, that will allow our pods to talk to each other. By default kubernetes only bundles rudimentary networking but to fully utilize all feature, we will use weave:

export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "$kubever"

To enable the master to run pods, run the following command:

kubectl taint nodes --all

Then run the following command on your two other servers:

kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

To finish up, we will copy the kube config file to our local machine in order to administer the cluster locally.

mkdir -p $HOME/.kube
scp .kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

Now we have a ready to go cluster and start using it.

I’ll post some basic commands in the next days.

Bachelor thesis published

So in the last four months (October 2015 to January 2016) I had the pleasure to work with the team of students at Texas A&M university. I got to experience a whole different culture of studying and learning – a different approach to tackle the issues of the future.

Compared to German universities, Americans have adopted a class like education even in higher education. While we at the TUM have to aggregate and learn most of the material ourselves, students at A&M tend to get the content and materials prepared in form of text books.

My main goal was to work on my bachelor thesis though, where I looked at a new way to develop web applications using Meteor and Angular to integrate wearables into the web-experience.

You can download the thesis here. It’s also on the website of the “Lehrstuhl für Betriebssysteme”.

Featured on Codementor – 25 PHP Interview Questions

I’m glad to be part of the amazing community at In the past years I’ve been able to talk and help many different people with a range of problems. Often some hints and good advice was enough to point them in the right direction and I really enjoy teaching other people.

Codementor recently approached me and asked me if I could contribute some questions from my experience in the last years to their blog post “25 PHP Interview Questions”. I’m happy they found my suggestions useful and featured me in that article! Hope it helps some developers that are just getting to know the world of PHP and all its hiccups.

Don’t forget to check out my profile on codementor!

Der Erfolg von Cities: Skylines

Nachdem das Sim City von EA so ein Flopp war, ergab sich eine große Marktlücke. Mit Aktionen wie ‘nur Online spielbar’ und limitierter Spielfläche, die eher sehr mager war, hat man einfach nicht bei den Spielern Punkten können. Zwar wurden viele Dinge verbessert, aber gewisse Trade-Offs gemacht, welche das Spiel nicht zu einem Kassenschlager gemacht hat, obwohl die Vorfreude und Hoffnungen im Vorfeld enorm waren.

Colosssal Order, hat in dem Moment die Ohren offen gehalten und mit dem Vorgänger Cities in Motion, der eher in Richtung von Transport Tyccon geht, eine solide Basis für ein Sim City gehabt. Folgende Punkte waren die größten Kritiken am alten Spiel:

  • Online Zwang
  • Limitierte Städte Größen
  • Crappy traffic management
  • City Interaktion ist zwar ein nettes Feature, aber keiner hat lust den Kontext zu wechseln und komplett von null anzufangen.
  • Geld aus der Tasche ziehen mit DLC, der ein paar Wochen nach der Veröffentlichung verfügbar war

Das Problem dabei ist folgendes: Gamer die solche Sims bzw. Strategie spiele zocken, sind Gelegenheitsspieler. Es geht nicht darum, immer die neueste Version zu spielen, sondern das Spiel muss gut und flüssig funktionieren. Der Trick mit DLC und Jährlich ‘neuer’ Shooter Edition (Siehe Call of Duty und Konsorten), funktioniert bei dieser Zielgruppe nicht .Wenn ich heute Age of Empires 2 oder Open Transport Tycoon spiele, dann funktionieren die Spiele einwandfrei und sind super spielbar. Kaum Bugs, gute Spiellogik und Erweiterbarkeit, sind Punkte die Spiele Zukunftssicher machen.

Cities Skylines trifft alle diese drei Punkte exakt und hat die Fehler von Sim City vermieden. Für einen unschlagbaren Preis von knappen dreißig Euro, muss man da einfach zuschlagen. Ich hab jetzt gute 40 Stunden in dem Spiel verbracht und es ist mir kein einziges Mal abgestürzt, sowie sind mir keine groben Markel aufgefallen. Die Erweiterbarkeit durch das Steam Workshop ist solide und Deppen sicher. Zusätzlich gibt es sogar Mac und Linux Support, alleine deswegen sollte man dieses Studio unterstützen. Leider haben sie auf Steam gesetzt, doch das kann man alle mal verkraften.

Ich bin gespannt wie die Zukünftige Update Politik aussehen wird oder ob sie doch noch DLCs veröffentlichen. Aber selbst dann, kann würde ich mir Content bei dem Preis doch gerne noch dazu kaufen. Mit dem Workshop hat man sowieso schon viel zu viele Möglichkeiten.

Falls du dir das Spiel noch nicht geholt hast: großer Fehler! Sofort kaufen!


Encoding videos for streaming on an Android device

I’ve been getting random hickups in playback when including a video in a webview on Android Kitkat (4.4.4). So I’ve been on this issue for quite some time now and couldn’t figure out why I was getting these messages in the verbose logcat:

2987-2998/ W/MediaPlayer﹕ info/warning (703, 38137)
2987-2987/ I/MediaPlayer﹕ Info (700,595)
2987-2998/ W/MediaPlayer﹕ info/warning (701, 0)
2987-2998/ W/MediaPlayer﹕ info/warning (702, 0)

Especially the 700 error was what I focused on, cause it made no sense really. I’ve used Handbrake to encode the videos and selected the “android” preset.

Unfortunately they’ve set the profile to ‘main’ instead of the suggested ‘baseline’ profile which is recommended. Took me a while to figure this out and including a lot of trial and error =/

Working now, anyways.

Read more on the optimal settings here….

Serving files with access control (Apache/PHP)

When serving files over PHP often people end up using an incorrect implementation which is open to attacks or has really bad performance (especially with big files). Well you shouldn’t reinvent the wheel every time! When you are using Apache in the first place, why do you need to re-implement the feature, that Apache is best at?

To avoid having to deal with complicated RFCs for HTTP Ranges and Caching use the Apache Module called xsendfileSome apt magic and you are up an running:

apt-get install libapache2-mod-xsendfile
service apache2 restart

Then add this to your vhost configuration:

XSendFile on
XSendFilePath /var/atis/Storage

All set! To send a file via. PHP simply do this:

header('X-Sendfile: ' . $file);
header('Content-Type: ' . contentType($file));
header('Content-Disposition: inline;');

(Make sure you have a function to determine the contenttype of your file)



Degeneration der Spieleindustrie

Seit Farmville auf Facebook haben Spiele mit der Pay2Win (oder auch Free2Play gennant) einen regelrechten Boom hingelegt. Man wird durch einen stetigen Fluss an Lob und Erfolgsgefühle dazu getrieben, weiter in ein Spiel mit echtem Geld zu investieren.

Als erstes weit verbreitetes Spiel hat dies vor einigen Jahren Farmville gemacht. Durch geschicktes einsetzen von Sperrzeiten, welche mit Spielwährungen verkürzt oder gar entfernt werden konnten, schaffte man Reize Geld auszugeben. Dies war erstmalig so Erfolgreich, weil man ja bekanntlich “mit seinen Freunden gemeinsam” gespielt hat und somit des Nachbars Neid einen noch mehr befriedigt hat.


Durch die Umwandlung von echtem Geld in Spielgeld den Bezug zur Wertigkeit. Dies haben bereits viele andere Anbieter von digitalen Gütern kapiert, wie etwa Microsoft in deren Xbox Universum. Vor allem junge Leute sind durch Virtuelle Währungen eher dazu verleitet dieses auszugeben.

Am Ende des Tages ist es der Spieler der draufzahlt. Waren Spiele früher noch durch deren Spielkomplexität und nicht durch deren Aussehen erfolgreich, reicht es heute einen Vogel nur einfaches Clicken/Berühren fliegen zu lassen. Verglichen mit Spielen wie Eve Online oder den frühen RPG Spielen, sind die heutigen neuen Spiele darauf optimiert, ein stetiges Gefühl von Erfolg zu vermitteln. 



Was erzielt man mit dieser Reduzierung? Eine breite Spielerbasis! Was noch? Verblödung des Volkes! Wuheeee!