Offener Brief an Recruiter

Liebe Headhunter/Recruiter/Personalvermittler/sonstige:

Wir müssen reden!

Mir ist bewusst, dass ihr zu Plattformen wie Xing und LinkedIn inzwischen dazu gehört. Grade in der IT funktioniert der Arbeitsmarkt inzwischen ja fast nur noch so. Das ist auch eigentlich erstmal gar nicht so schlimm, ich habe auch durchaus immer ein offenes Ohr für interessante Angebote.

Personaler, die für ihr eigenes Unternehmen neue Mitarbeiter suchen dürfen an dieser Stelle aufhören zu lesen. Ihr seid leider in meinen Xing und LinkedIn Postfächern die Ausnahme, aber ich freue mich immer von euch zu hören.

Alle anderen lesen bitte weiter, ich möchte da gerne mal über 2-3 Dinge mit euch sprechen…….

Eure Anschreiben… Wo soll ich da anfangen? Es ist ein weites Feld….

Die durchschnittliche Nachricht, die ich erhalte (ich erhalte so zwischen 5-6 die Woche bis 5-6 am TAG) wird von mir unbeantwortet gelöscht. Warum? Der häufigste Grund ist, weil KEINERLEI RELEVANTE INFORMATIONEN enthalten sind. Die Programmiersprache alleine REICHT NICHT. Mir ist bewusst, dass ihr im Normalfall den technischen Hintergrund nicht habt, aber dann lasst eure Kunden zum Beispiel ein Stackshare Profil erstellen. Es ist in Ordnung, wenn ihr mir den Link nicht direkt schicken wollt, weil ihr Angst habt ich würde euch dann umgehen und mich direkt bei euren Kunden bewerben. Schreibt den Stack halt vom Profil ab.

Genau so sind „flexible Arbeitszeiten“, „angemessenes Gehalt“ und „Urlaubstage“ keine relevanten Informationen. Das sind STANDARDS, da geh ich von aus! Um entscheiden zu können ob ein Job für mich interessant/relevant ist muss ich mal als absolutes Minimum den TechStack kennen. Niemand hat etwas davon, wenn ich Lebenszeit in ein Bewerbungsgespräch reinbuttere, nur damit dann beim dritten Gespräch rauskommt, dass ich den Stack nicht abdecken kann oder nicht abdecken will.

Viele von euch möchten nichts derartiges in Nachrichten verpacken, sondern wollen direkt ein Telefongespräch führen. Ich bekomme in Stoßzeiten 5-6 Nachrichten AM TAG und ihr wollt alle ohne mir irgendwelche Infos zu geben, die mir ein sortieren ermöglichen würden direkt telefonieren. Würde ich darauf eingehen käme ich nicht mehr dazu den Job zu machen, den ich aktuell habe, nur um nach 45 Minuten belanglosem hin und her festzustellen, dass ihr euch mein Profil nicht angeguckt habt und mir einen Java-Job oder sonstiges unpassendes aufschwatzen wollt.

Daher werden auch diese Nachrichten direkt gelöscht.

Kommen wir zu den absurderen Nachrichten…

Ab und zu stöbere ich ganz gerne zum Beispiel im Stellenmarkt von Xing. Lese ich mir dabei ein Angebot durch und kontaktiere euch daraufhin nicht, dann WAR DIE STELLE NICHT INTERESSANT! Das heißt nicht, dass ich mich nicht traue euch anzuschreiben! Ich bin baff, dass ich das überhaupt dazu sagen muss… Genau so wenig heißt das, dass ich mich dringend über diese Stelle mit euch austauschen will!

Ich bin übrigens (Backend) Entwickler. Kein „Superheld“, kein „Traummann“, kein „Zauberer“ oder sonstiger Nonsens. Ich wünsche mir INFORMATIONEN von euch, kein Asskissing! Bekomme ich da Nachrichten mit Titeln wie „Habe ich meinen Traummann gefunden (C#)“ werden die auch direkt gelöscht.

Was ich auch gerne von euch bekomme sind Nachrichten, die mehr über euch sind als alles andere. Wenn von einer 50 Zeilen Nachricht 47 Zeilen nur davon handeln wie toll ihr seid, in einer Zeile „Hallo“ und in einer „Tschüss“ steht… Muss ich es noch extra sagen? -> Papierkorb

Und tut mir einen Gefallen… Ich weiß, dass es ein (wenn nicht sogar DAS) Klischee über IT Recruiter ist, dass ihr Java und Javascript nicht auseinander halten könnt und ja eigentlich alles ganz anderes ist… Bleibt von diesem Vergleich weg. Ich kann inzwischen nicht mehr zählen, wie viele Nachrichten ich bekommen habe von Personalvermittlern, die mir erklären sie wären die einzigen Vermittler, die einen technischen Hintergrund hätten, die den Unterschied zwischen Java und Javascript kennen würden, nur um mir dann auf Basis meines Profils einen Java Job anzubieten…

Nur leider steht in meinen Profilen nur was von Javascript….

Wenn es dann tatsächlich mal zu einem Gespräch kommt, weil sich durch den Sturm des Nonsens-Spam mal eine wage interessante Nachricht gemogelt hat und die ERSTE Frage, die ihr mir am Telefon stellt ist, an welchen Jobs ich denn noch so interessiert wäre oder wir direkt über einen ganz anderen Job reden ist mein Interesse auch DIREKT erloschen. Dass ich dann das Gespräch abbreche und keine Nachrichten mehr von euch beantworte sollte euch nicht überraschen.

Zunehmend aggressivere „Reminder“ braucht ihr mir übrigens auch nicht schicken. Wenn ich euch nicht binnen 24 Stunden geantwortet habe wurde eure Nachricht wegen einem oder mehreren der Gründe oben gelöscht und ich habe meistens auch nicht mehr den Hauch einer Ahnung, wovon ihr eigentlich redet.

Trotz allem Ärger über eine der nervigsten Professionen, die es aktuell gibt bleibe ich aber dabei: Für interessante Angebote, mit Informationen, die wenigstens einen wagen Bezug zu einem meiner Profile haben bin ich weiterhin offen.

Tut mir nur bitte einen Gefallen….

Denkt nach bevor ihr schreibt.

Cheers,

Felix

PS: Wenigstens grobes Korrekturlesen erhöht die Chance einer Antwort übrigens auch…

(Dieser Text wurde ursprünglich auf Xing als Beitrag veröffentlicht)

Captcha: 4×5=?

Himbeercluster (k3s) Teil 2: Software Setup

Weil wir auf dem Raspberry Pi unterwegs sind liegt natürlich nichts näher als Raspbian als OS für das Cluster zu wählen. Entscheidet man sich bei
den Varianten statt für k3s zum Beispiel für microk8s würde sich eventuell Ubuntu empfehlen, da beide Produkte aus der Feder von Canonical stammen. Rancher bietet auch ein eigenes leichtgewichtiges OS für den Betrieb von k3s
an (Rancher OS), zum Zeitpunkt zu dem der Autor für die Erstellung der
Inhalte dieses Buches herumexperimentiert gab es aber (noch) keine Version,
die wirklich mit dem Raspberry Pi 4 kompatibel war. Also Raspbian… Allerdings brauchen wir hier vieles der normalen Version nicht. Eine grafische Benutzeroberfläche ist für den Betrieb in einem Cluster zum Beispiel völlig unnötig. Daher werden wir unser Cluster auf der Lite Version von Raspbian aufbauen. Da diese zum Zeitpunkt, an dem ich die Kapitel für mein Buch geschrieben habe nur in einer 32bit Variante vorlag müssen wir hier noch etwas dran basteln.

Inzwischen gibt die 64bit Variante immerhin schon in einer Beta Version, die aktuell auch bei mir im Betrieb ist. Nach der Erläuterung der notwendigen Konfigurationen für die 32bit Variante werde ich daher auch noch mal kurz auf die Konfigurationsunterschiede zur 64bit Variante eingehen.

Vorbereitungen:

Ich kann nur DRINGEND empfehlen, den Raspberry Pi Imager (zu finden hier: https://www.raspberrypi.com/software/) zu verwenden, da dieser einem das Leben doch sehr erleichtert. Damit flashen wir nun Raspbian Lite (oder wie es eigentlich nun heißt: Raspberry OS lite) auf eine SD Karte. Es empfiehlt sich hier schon über das Super-Top-Secret-Spezial-Menü (*hust* Strg+X *hust*) SSH zu aktivieren, ein Passwort zu setzen und der Himbeere einen sinnvollen Hostnamen zu geben.

Die fertig geflashte SD Karte wandert dann in die Himbeere und die an den Strom. Nun heißt es etwas Geduld haben und den kleinen Rechner einmal booten und die SD Karte einrichten lassen. Nach diesem ersten Boot (zum feststellen ob die kleine Kiste gebootet hat empfiehlt sich die Kiste einfach anzupingen) muss der Pi wieder runtergefahren und die SD Karte entfernt werden.

Im nächsten Schritt öffnen wir die SD Karte mit unserem Hauptrechner und bearbeiten zwei Dateien:

Die erste Datei ist die bootconfig, auch bekannt als config.txt. Dort fügen wir ganz am Ende die folgende Zeile hinzu:

arm_64bit=1

Hiermit fordern wir Raspberry OS auf den 64bit Kernel zu nutzen. Als Nächstes müssen wir die Datei cmdline.txt ergänzen. Hier fügen wir am Ende der Zeile (KEINE neue Zeile) folgende Parameter an:

cgroup_memory=1 cgroup_enable=memory

Diese beiden Argumente sind etwas schwerer in wenigen Zeilen zu erklären, aber die Kurzfassung ist, dass sich mit den cgroups auf Linux zusammengehörige Prozesse gruppieren und organisieren lassen. Grade beim Thema Ressourcenmanagement sind cgroups hilfreich. Hier aktivieren wir das memory-Subsystem, was speziell den Speicherbedarf der gruppierten Prozesse kontrolliert.

Damit sind die Vorbereitungen weitestgehend abgeschlossen. Alles was jetzt noch nötig ist können wir direkt auf der Himbeere erledigen. Also SD Karte wieder im Raspi versenkt, den kleinen Rechenknecht an den Strom gehangen und die Konsole aufgemacht.

Raspi Vorbereitungen:

Im letzten Abschnitt haben wir in der bootconfig den Raspi aufgefordert den 64bit Kernel zu verwenden. Diesen müssen wir nun auch im ersten Schritt einmal updaten. Also flugs eine SSH Verbindung zum kleinen Taschencomputer aufgebaut und folgendes in die Tastatur gehackt:

$ sudo rpi-update

Das kann nun etwas dauern (Kaffee irgendjemand?). Wenn das Update durchgelaufen ist wird die kleine Kiste einmal neugestartet mit:

$ sudo reboot

Nun kommt das reguläre einrichten des Raspberry Pi via raspi-config. Da wir in der lite Version von Raspberry OS allerdings keine grafische Oberfläche zur Bedienung haben (und wir ja auch via SSH mit der Kiste Verbunden sind) muss das ganze über die Konsole passieren. Aufgerufen wird das Ganze mit:

$ sudo raspi-config

Das Menü ist vom Inhalt her das gleiche wie man es von der Desktop Bedienung her gewohnt ist. Im „Performance“ Menü setzen wir den für die GPU reservierten Speicher auf 16MB herunter und im „Localisation„-Menü können wir die deutschen Sprachdateien erzeugen. Das ist aber ggf. optional. Nun gehen wir noch in die „Advanced Options“ und aktivieren die Funktion „Expand Filesystem“ um Raspberry OS dazu zu bringen den kompletten Speicherplatz der SD Karte zu nutzen. Nach Bedarf kann jetzt noch der Wifi Zugang eingerichtet werden. Für ein Cluster empfiehlt sich aber üblicherweise eine Netzwerkverbindung via Kabel. Ist alles eingerichtet kommt -Überraschung- wieder ein reboot.

Ist die Kiste wieder anwesend muss im nächsten Schritt einmal die vorhandene Software aktualisiert werden. Das geht ganz klassisch mit:

$ sudo apt-get update && sudo apt-get upgrade

Das Update wird wieder einen Moment dauern, da es einiges zu tun geben wird. Wenn das Upgrade durchgelaufen ist folgt, mal wieder, ein:

$ sudo reboot

Nun fehlt nur noch eine Kleinigkeit um die Vorbereitungsarbeiten abzuschließen. Damit die Netzwerkkommunikation zwischen den Cluster Knoten mit k3s nachher richtig funktioniert müssen wir noch iptables auf die legacy Version umstellen. Das geht folgendermaßen:

$ sudo iptables -F

$ sudo update-alternatives --set iptables /usr/sbin/iptables-legacy

$ sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

$ sudo reboot

Damit sind die Vorbereitungsarbeiten ENDLICH abgeschlossen. Diese Arbeiten müssen für jeden Raspberry Pi vorgenommen werden, der nachher als Teil des Clusters laufen soll. In nicht übermäßig ferner Zukunft werde ich dafür vermutlich auch auf meinem GitHub Account ein Ansible Playbook zur Verfügung stellen.

Und was ist nun mit der versprochenen 64bit-Beta Version???

Jaaaajaaa, nicht drängeln. Zunächst einmal brauchen wir das Image. Leider ist das nicht im Raspberry Pi Imager hinterlegt, aber wir können es hier (https://downloads.raspberrypi.org/raspios_lite_arm64/images/) runterladen. Auch wenn es „nur“ eine Beta Version ist, ich habe mein Cluster jetzt seit annähernd einem halbem Jahr auf Basis dieser Version im Betrieb und konnte (noch) keine Probleme feststellen. Von den oben erwähnten Schritten können wir uns beim Verwenden der Beta Version alles sparen, was mit dem Kernel zu tun hat. Dementsprechend müssen wir die bootconfig nicht anpassen und auch kein Firmware Update mit rpi-update durchführen.

Im nächsten Abschnitt folgt dann die Installation von k3s auf den Knoten des Clustert.

Himbeercluster (k3s) Teil 1: Setup

Der vermutlich einfachste Weg ein Rechnercluster zu nutzen ist aktuell Kubernetes. An diesem Punkt werden vermutlich schon die ersten Leute aufschreien, dass ein Raspberry Pi, selbst in der Raspberry Pi 4 mit 8GB RAM Variante, eine absolut ungeeignete technische Basis wäre, selbst ein durchschnittlicher Laptop mehr leisten würde, uuund und und und und….

Da ist natürlich was dran. Ein Produktivcluster für den Einsatz in einem großen Unternehmen können wir so natürlich nicht auf die Beine stellen. Aber das ist auch gar nicht der Punkt hier. Zum einen kann ich aus eigener Erfahrung sagen, dass man immens viel lernt, wenn man mal so ein Bare-Metal Kubernetes von null an aufsetzt und etwas damit herumexperimentiert (was man dann auch nachher 1:1 auf „sinnvolle“ Cluster übertragen kann), zum anderen ist im heimischen Netzwerk ja dann doch tendenziell nicht ganz so viel los wie in einem Rechenzentrum von Google und so ein Cluster ist ein schöner Weg kleine Dienste (Gitea, Pi-Hole, Minecraft,….) für den Heimgebrauch im eigenen Netzwerk anzubieten.

Außerdem… Warum zum Teufel nicht? 😀 Welcher Nerd, der etwas auf sich hält findet die Idee sagen zu können „Ich hab ein Rechnercluster in meiner Wohnung stehen“ nicht an sich schon irre cool 😀 Ok, vielleicht bin auch nur ich so wahnsinnig, aber zurück zum Thema:

Die erste Frage, die sich stellt ist, welche Variante von Kubernetes wollen wir eigentlich nutzen? Die „große“, komplette Variante (quasi das Original k8s) bekommt man angeblich auch auf dem Raspberry Pi 4 zum laufen, durchaus auch nutzbar, aber persönlich würde ich eher zu SUSEs k3s (https://k3s.io) oder Canonicals microk8s (https://microk8s.io) greifen. Dabei handelt es sich um etwas kompaktere Versionen, die mit etwas weniger Ansprüchen an die Hardware daher kommen und wir wollen ja nachher so viel Leistung wie möglich für das Cluster zur Verfügung haben. Für diesen Artikel habe ich mich jetzt für k3s entschieden.

Material:

Hat man nun vor der Himbeere ein paar Kollegen an die Seite zu stellen und ein Cluster aufzusetzen braucht man natürlich erstmal Material. Hier ist was ich benutze und empfehlen würde (die Links sind Affiliate Links, ich bekomme also eine kleine Provision, falls ihr darüber kauft):

  • Zunächst mal natürlich mindestens zwei Raspberry Pi 4. Ich würde dringend die 8GB Variante empfehlen, mit der 4GB Variante müsste man aber auch noch davon kommen.
  • Mindestens eine Mini-SD Karte pro Raspi. Die Karte darf gerne etwas größer sein, mehr als 3264GB braucht man aber eigentlich nicht, wir werden später ein NAS nutzen um die Daten der Services, die im Cluster laufen zu sichern.
  • Da ein Cluster davon lebt, Daten so schnell wie möglich zwischen den Knoten hin und her schieben zu können empfiehlt sich für den Netzwerkzugang das gute, alte Ethernetkabel.

Damit haben wir das Pflichtprogramm an Material zusammen. Im Folgenden erwähne ich noch 2-3 Dinge, die ich benutze und die sich als praktisch erwiesen haben, aber für das Ziel dieses Artikels nicht unbedingt nötig sind.

Wenn man anfängt ein Cluster mit mehr als zwei Knoten zu bauen erstickt man früher oder später in massivem Kabelsalat. Dazu kommt ja auch, dass man die Netzwerkkabel irgendwo unterbringen muss und der durchschnittliche Heimrouter hat dann ja auch nicht soooo viele Lan-Dosen. Die Lösung?

POE!

Oder genau genommen: POE+

POE steht for Power Over Ethernet (das „+“ von „POE+“ steht einfach nur für etwas mehr Power Over Ethernet). Hier kommt der Strom, wie der Name vermuten lässt direkt über das Ethernetkabel. Nötig dafür sind aber zwei Dinge:

  • Ein POE+ fähiger Switch
  • Ein POE+ Hat pro Raspberry Pi. Ich selbst benutze den originalen POE+ Hat der Raspberry Pi Foundation, der scheint aber aktuell nicht besonders gut zu bekommen zu sein. Wichtig ist hier nur, dass es sich tatsächlich um einen POE+ Hat nach IEEE 802.3at Standard handelt. Der reguläre POE Hat (IEEE 802.3af) liefert etwas zu wenig Power um den Raspi 4 in jeder Lebenslage sicher zu versorgen.

Das wäre es auch eigentlich schon an Material. Damit es nicht ganz so chaotisch wird empfiehlt sich vielleicht noch ein Gehäuse. Hier kann ich aber nichts direktes empfehlen, da grade auch die Wahl des POE+ Hats die Höhe des Raspberry Pi’s doch stark beeinflusst. Eine sehr einfache Variante ist ein stapelbares „Gehäuse“ wie dieses. Es wird zwar nicht nutzbar sein wie vom Verkäufer beworben, aber die Standoffs zwischen den einzelnen Ebenen lassen sich stapeln und so der Abstand zwischen den Schichten vergrößern. Dazu ist das Gehäuse recht offen, was dem Temperaturmanagement zugute kommt. Für Leute, die einen 3D Drucker besitzen empfiehlt sich auch ein Blick auf Thingiverse, da es dort für jede denkbare Variante von Himbeerenkonfiguration eigentlich eine Unterbringung zu finden gibt… Wenn man bereit ist etwas Geld in die Hand zu nehmen gibt es auch schon professionell gefertigte Schienen für 19 Zoll Serverschränke um Raspis samt POE+ Hats unterzubringen.

Damit hätten wir die Hardware Seite abgehakt. Im nächsten Teil geht es weiter mit der Vorbereitung der Software.

Himbeeren und Reptilien?

Leider gibt es schlechte Nachrichten. Also fast, je nach Perspektive. Wie das so ist mit dem „echten Leben“ kommt ja doch gerne mal alles anders als man denkt (oder geplant hat), weswegen sich mein erstes Buch wohl noch verzögern wird. Da sich der Fokus auch ändern wird und ich nicht alle bereits geschriebenen Teile weiterverwenden können werde habe ich beschlossen die Kapitel hier als Blogeinträge zu veröffentlichen.

Das Buch sollte ursprünglich einen Überblick darüber geben, was man mit meiner Lieblingssprache Python und dem guten, alten Raspberry Pi so alles anstellen kann. Daher werden hier in den nächsten Wochen Artikel zu den folgenden Themen erscheinen:

  • Kurze Einführung in Python und OOP
  • Kurze Einführung in die Mehrzweckhimbeere
  • GPIO mit Python
  • Webentwicklung auf dem Raspberry Pi
  • Der Raspi im Netzwerk
  • Clustering mit dem Raspberry Pi

Erscheinen werden die Artikel vermutlich in wilder Reihenfolge (logische Folge wäre halt auch zu einfach), beginnend mit dem Setup von Kubernetes in Form von k3s auf Raspis, in Kombination mit dem Rancher Dashboard.

Content coming soon

Hier wird es in naher Zukunft Artikel zu meinem Raspberry Pi-basierten Kubernetes Cluster, meinem bald erscheinenden Buch und diversen anderen Themen geben, die hoffentlich interessant sind.