Kubernetes Cluster installieren und betreiben- Tagebuch

    • Offizieller Beitrag

    Moin,

    ----------------------------

    Anmerkung (05.01.2023):

    Das ist ein Tagebuch, von daher kein Tutorial ... einige Irrungen und Wirrungen vieles tat nicht - bis ich auf RKE2 und Promox als hosting lösung gegangen bin. Also halbwegs produktiv wird es ab RE: Kubernetes Cluster installieren und betreiben- Tagebuch alles davor könnte man auch sehen als: "mach es nicht so / Erfahrung sammeln".

    BTW: wer eine "Spielumgebung" sucht sollte sich mal RancherDesktop anschauen. Kubernetes im kleinen.

    ----------------------------

    ich habe ja schon für den Voron 2.4 und V0 ein Tagebuch hier erstellt - das ist quasi readonly für Euch... Wenn Diskussionsbedarf mach ich separate Diskussionsfreds. Warum das also nicht auch mal für IT zeuchs machen?

    Boom here we are... :)

    Vorweg wenn Ihr das nachmachen wollt: Braucht Ihr mindestens 2 VMs oder halbswegsbrauchbare Rechner mit Linux (ubuntu) oder mehrere am besten PI4 mit Ubuntu core. HyperV oder mehr als 2 VMs sind eigentlich nicht nötig um die "Mechanik" zu lernen.

    WTF ist Kubernetes und warum überhaupt. Zur Zeit betreibe ich ja eine HyperV Cluster mit mehr und mehr VMs. Hmm OK was ist ein Hyper-V Cluster und was ist eine VM. Also eine VM (virtuelle Maschine) ist quasi so etwas wie ein ganzer Computer mit Betriebssystem und all der Software die man braucht installiert. Eine VM läuft nur nicht direkt auf einer Hardware sondern über einen Hypervisor, bei mir HyperV, das könnte aber auch VMWare oder ähnliches sein. Cluster sind dann mehrere Hypervisoren?? die zusammenarbeiten und die VMs untereinander verteilen können (loadsharing ausfallsicherheit etc.). Kubernetes ist dann so etwas ähnliches wie so ein Orchestrator, aber eben nicht für VMs, sondern für Container. OK Container noch was neues. Im Gegensatz zu VMs haben Container kein komplette OS an board, sondern greifen auf den Host durch. Container werden meist auch nur für eine Anwendung gemacht (also webserver, db, piholes...) auf eine VM läuft ja meist alles mögliche. Statt von Anwendungen spricht man auch von services die ein Container anbietet.

    Warum jetzt also nochmals der Umsteig von HyperV-Cluster auf Kubernetes?

    • Resourcen sparen durch weniger overhead bei einem Container
    • Strikte trennung der Services - bei VMs tendiert man ja schon mal dazu mehr auf eine VM zu packen um den OS overhead zu verkleinern
    • Ich will das endlich mal lernen - Docker, container, kubernetes! Ich hatte ja schon mal einen Anlauf genommen; dann aber aufgehört, weil es mir viel zu kompliziert für privat erschien. Jetzt fast zwei Jahre später... nochmals von vorne :)

    Mein Cluster hat gerade 4 Server (1 Fileserver + 3 Worker für VMs) und darauf laufen ca. 20 VMs + etliches anderes Zeug. Die Idee ist nun Ubuntu VMs zu erzeugen... moment dann hab ich ja noch mehr VMs?! Ja richtig aber nur ein paar und dann ziehen ja die alten VMs hoffentlich in ihre Container... Also nochmas VMs erzeugen ala X Master und Y Worker. Warum Ubuntu? Weil ich Ubuntu ein bisserl kenn, ich bin ja sonst eher auf Windows unterwegs und weil mit Ubuntu Core auch ein OS für Raspberries vorhanden ist. Also ja ich möchte meine RPIs als Worker mit einbinden (das aber eher spaßeshalber). Das ist vor allem weil ARM und x64 dann gemischt läuft, mal schauen wie das funktionieren wird.

    In dem Bild seht Ihr meine X VMs die auf den 3 Cluster servern laufen. Unten dann schon zwei VMs die einen ersten Master und Worker mit Ubuntu (20 LTS Server) beinhalten. Ach ja als Kubernetes habe ich mich für K3S von Rancher entschieden, hautpsächlich weil es sehr leichtgewichtig ist und auch auf PIs läuft. Deswegen auch der Name der VMs K3-<type des Knotens>-<OS>-<Host>-<instanz>, US steht für Ubuntu Server, HV HyperV als Host und Instanz ist klar die laufende Nummer - könnt Ihr aber machen wie Ihr wollt.

    IP-Adresse für Server vergebe ich immer statisch, DHCP nur für unwichtigen kram wie Ipads und anders IOT gedöns wo die IP egal ist (reine clients).

    Speicherbedarf ist nackig <1GB auf dem Master habe ich noch etwas mehr software installiert, der Worker ist komplett minimales Ubuntu Server ohne extra Pakete.

    Ach ja Ubuntu läuft unter HyperV probemlos wenn man den Secureboot deaktiviert. Ihr braucht nat. auch keinen Cluster Hyper-V auf Eurem WIndows system oder VMware oder gar eine klassische Hardwareinstallation auf einem alten Rechner tut es auch.


    Bevor es die Tage dann weiter geht hier mal ein paar Youtubevideos zur Unterhaltung

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Habt Geduld mit mir - eines von vielen Projekten ...

    Ach ja und das eigentlich deployment von k3s werde ich versuchen mit Ansible oder ähnlichen Tools zu automatisieren. D.h. wenn man eine Grundkonfig (sprich VMs and PIs laufen) hat soll der Cluster am Ende vollautomatisch erstellt werden können. Das VM deployment könnte man jetzt auch automatisieren, aber darauf werde ich verzichten denke ich. Ich werde die VMs, wenn initial erstellt und für gut befunden, einmal sichern und als Testgrundlage nehmen. Bei den PIs images sichern.

    Noch ein Nachtrag:

    Hier seht Ihr den Platzverbrauch der virtuellen Platten der beiden Ubuntu Server contra Ubuntu Dektop (standard installationen). Also nimmt auf jeden Fall die Server Version, wenn Ihr auf die GUI verzichten könnt. Es fällt einem am Anfang etwas schwer, aber wenn man sich auf eine bestimmt Linux Distro einschiesst kommt man auf der Shell recht schnell zurecht.

  • Olaf Krause 24. November 2021 um 20:47

    Hat den Titel des Themas von „Kubernetes Cluster - Tagebuch“ zu „Kubernetes Cluster installieren und betreiben- Tagebuch“ geändert.
    • Offizieller Beitrag

    Sodele weiter gehts mit Vorbereitungen. Was wir sicher brauchen ist WSL (Window Subsystem für Linux) zumindest wenn ich meine WIndows Workstation hier einbringen möchte. Zumindest ANsible möchte ich so laufen lassen. Es findest sich sicher auch einiges andere was aus der Linux Welt kommt und so "direkt" unter windows laufen kann.

    Erster Schritt WSL Feature aktivieren: Such einfach nach "Windows Feature aktivieren" oder "Turn on Windows Features" in der Windows Suchleiste. Dann bekommt Ihr das Controfenster und könnt WSL akltiveren.

    Oops neu starten (Windows Krankheit das immer zu verlangen) geht jetzt nicht. Also anders

    Macht eine Powershell mit Adminrechten auf und gebt wsl --install ein (damit das geht braucht Ihr eine aktuelle Windows 10 version).

    Code
    PS C:\Users\olaf.krause\AppData> wsl --install
    Installation: VM-Plattform
    VM-Plattform wurde installiert.
    Herunterladen: WSL-Kernel
    Installation: WSL-Kernel
    WSL-Kernel wurde installiert.
    Herunterladen: Ubuntu
    Der angeforderte Vorgang wurde erfolgreich abgeschlossen. Änderungen werden erst nach einem Neustart des Systems wirksam.

    OK war einen Versuch wert :( - aber Ihr seht schon hier comes Ubuntu. Wenn das nicht "zufällig" zu dem passt was ich oben als Zielplatform gesehen habe (pssst es war Ubuntu).

    Ach ja meine WIndows Version ist:

    Dann muss ich wohl wirklich warten, bis der aktuell Task fertig ist damit ich meinen Rechner neu starten kann ... also bis die Tage.

    Ach hier wieder ein paar Youtubes

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Windows feature via DISM installieren, macht es auch so - geht am einfachsten und schnellsten.

    Hilft aber nix jetzt muss man rebooten damit man weiter machen kann.

    • Offizieller Beitrag

    Tage später nach etlichen Reboots und installationen. Hatte wohl einen leichten updatestau (Grafikkarte, USB driver, Windows H2 und wat weiss ich) wieder online.

    Jetzt geht auch

    Code
    S C:\Windows\system32> wsl --set-default-version 2
    Informationen zu den wichtigsten Unterschieden zu WSL 2 finden Sie unter https://aka.ms/wsl2
    Der Vorgang wurde erfolgreich beendet.

    Damit habe wir WSL 2 als default eingestellt.

    Wenn wir das Windowsfeature control nochmals öffnen sollte wir unsere zwei Features enabled sehen:

    Kurzer check ob wir schon ein Linux drauf haben

    Code
    PS C:\Windows\system32> wsl -l -v
    Für das Windows-Subsystem für Linux wurden keine Distributionen installiert.
    Distributionen zur Installation finden Sie im Microsoft Store:
    https://aka.ms/wslstore

    wie erwartet nein also weiter im Text mit der eigentlich Installation von Ubuntu. Dazu müsst Ihr den Windows Store öffnen und dort nach ubutu suchen - ich habe die latest LTS 20.04 genommen.

     

    Herunterladen und dann öffnen klicken. Es sollte ein VM Fenster aufgehen, dass Dir sagt das die installation läuft.

    Oops geht nicht

       

    Ursache CPU Virtualisierung aus hoppala. Bei Asus heisst das SMV im Bios.

    jetzt geht es aber

     

    Wir sollen einen Benutzernamen vergeben für Linux und das pwd. Hurray wir sind da:

    Die Welcome message sagt richtiges Ubuntu und WSL 2. Jetzt noch kurz das Ubuntu auf den neuesten stand gebracht und dann ist es gut für heute:

    Code
    apt update
    apt upgrade
    apt autoremove

    obiges als root mit sudo oder sudo -i und dann direkt. Bei mir waren 87 Paket abzudaten oder uptodaten denglish sorry zu aktualisieren halt.

    ach ja die powershell auf windows sagt jetzt

    Code
    PS C:\Windows\system32> wsl -l -v
    NAME            STATE           VERSION
    * Ubuntu-20.04    Running         2

    Also alles gut und Gute Nacht :)

    • Offizieller Beitrag

    Sodele 6 VMs mit Ubuntu Server laufen alle mit Standard Einstellungen und keiner zusätzlichen Software (habe master-01 auch nochmals neu erstellt). Alle 6 Maschienen sind exportiert unm diese später in Minuten wieder auf den Ausgangszustand bringen zu können. Je 3 weil die ja auch ausfallsicher laufen sollen.

     

    Fragt mich nicht warum die alle eine andere größe haben - sind alle tupfergleich installiert bis auf den maschinennamen. Die PIs kommen auch noch

    IP Adressen zwischen 81 und 100 und ein paar PIs liegen bereit
    uc steht in dem Fall für Ubuntu Core

    Bzgl. Raspberries - das sehe ich eher erst noch als Spielerei und lernen (eigentlich das ganze Projekt ist ein IT Kurs für mich), aber wenn denn der Touring PI2 raus kommt (irgendwann 2022) werde ich die PI compute Module wohl intensiver nutzen. Es wird sich eine Anwendung finden lassen.

    Nächster Schritt feste IP adressen vergeben - alles was als Server dienen Soll bekommt be mir eine feste IP. Die geplanten sind ja oben in dem Bild schon sichtbar. Feste IP Adresse unter Ubuntu 20.04 geht ja anscheinend über netplan hier mal der Stand noch mit DHCP vor der Umstellung. Hmm das müsste doch auch mit Ansible gehen oder?

    Sodele mehr wird heute nicht gehen, da ich mich auch mal wieder um meine 3D Drucke kümmern muss...

    • Offizieller Beitrag

    Ganz kurz Mittagspausen install von Ansible auf Windows (WSL)

    Code
    apt install python3-pip
    pip install ansible
    ansible --version

    ergibt bei mir

    Code
    -----:~# ansible --version
    ansible [core 2.11.6]
    config file = None
    configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
    ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
    ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
    executable location = /usr/local/bin/ansible
    python version = 3.8.10 (default, Sep 28 2021, 16:10:42) [GCC 9.3.0]
    jinja version = 2.10.1
    libyaml = True

    ab minute 20 ungefähr in dem Livestream

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    • Offizieller Beitrag

    Lange ruhig hier - hatte auch absolute keine Zeit mich weiter um das Tema K8S zu kümmern :(

    Aktueller Stand die 6 virtuellen Maschinen wie oben aufgesetzt laufen noch (oder wieder) aber als Ubuntu 22 LTS Version (also auf die neueste LTS aktualisiert). Gestern mal wieder darüber gehirnt, ob ich wirklich eine spezielle Distro nehme ala Mikrok8s (damit wirbt mein Ubuntu schon beim einloggen) oder k3S oder oder
    ==> werde aber bei dem maximal neutralen aber wohl etwas holperigem Weg via kubeamd bleiben und nicht wie letztes Jahr mal angedacht k3s nehmen.

    Statt Ansible (https://adamtheautomator.com/install-ansible/) auf windows werde ich ein Ubuntu Desktop 22 LTS (Minimale Installation) als automation host nutzen (also die 7te VM) - wenn schon denn schon alles auf Ubuntu. Name der Maschine autobot-ud-hv-01. Vergesst also den Exkurs mit WSL auf Windows - könnt Ihr nat. auch nutzen wenn man/frau möchte.

    Kopiert man den Fingerprint der autobot maschine auf die worker und master funktioniert ssh auch wunderschön ohne login kram (ssh-keygen -t rsa und dann den pubkey in die fingerprint datei der server kopieren)

    Danach dann Kubernetes master in HA ausführungaufsetzen mit Kubeadm aufsetzen: https://www.velotio.com/engineering-bl…s-using-kubeadm

    Statt wie im Link habe ich die 1.62 cfssl tools genommen ala:

    wget https://github.com/cloudflare/cfs…6.2_linux_amd64

    wget https://github.com/cloudflare/cfs…6.2_linux_amd64

    yum ist nat. apt unter Ubuntu.

    • Offizieller Beitrag

    Um die Schritte zum Einrichten von etcd zu automatisieren habe ich wie angedeutet Ansible eingesetzt. Muss man sich leider in die Playbook syntax einarbeiten aber für ein paar Basics geht das recht schnell. Hier mal mein erstes Playbook um die certs die generiert wurden auf die master zu verteilen.

    k8master sind die master welche ich im ansible host inventory hinterlegt habe. Mastercontroller ist die Maschine 1 auf welcher ich die connection certs erstellt habe. Das Playbook macht nix anderes wie die certs auf meinen automatisierungsrechner zu kopieren und von dort aus zu verteilen. Um nicht interaktiv mit sudo passwörtern zu arbeiten liegt dieses in einer mit ansible-vault create erstellen pwd datei. Um diese zu entschlüsseln habe ich eine vault_secret datei die dass pwd enthält beigelegt. Das Playbook wird dann wioe folgt aufgerufen:

    Zitat

    ansible-playbook ansi_playbooks/etcd_server_certs.yaml --vault-password-file=~/ansi_vault_pwd

    das ist dann nat. im Klartext. Die passwörter sollten also unterschiedlich sein.

    die Ausgabe sieht dann folgermaßen aus

    • Offizieller Beitrag

    so den etcd service habe ich jetzt zumindest zumal im Cluster am laufen - komplett mit ansible automatisiert eingerichtet auf den 3 mastern. Problem ist das teils systemd mit segmentation fault abgesemmelt ist und nur noch reset der Maschine half :( Nächstes Problem: hatte den Cluster komplett mit httpS eingerichtet statt http (weil es sonst warnungen beim start gibt) dann funktioniert aber der Healtcheck natrüclih nur wenn man auch mit TLS arbeitet also in etwa so:

    Zitat

    sudo etcdctl --endpoints https://k3-master-us-hv-01:2379 --ca-file=/etc/kubernetes/pki/etcd/ca.pem --cert-file=/etc/kubernetes/pki/etcd/server.pem --key-file=/etc/kubernetes/pki/etcd/server-key.pem --no-sync --debug cluster-health

    dann bekommt man hoffentlich so etwas: und alles ist gut

    Code
    Cluster-Endpoints: https://k3-master-us-hv-01:2379
    cURL Command: curl -X GET https://k3-master-us-hv-01:2379/v2/members
    member 9b1e7dc65d12c5f1 is healthy: got healthy result from https://192.168.0.81:2379
    member a63f04b621828336 is healthy: got healthy result from https://192.168.0.82:2379
    member dd37165657fa24ff is healthy: got healthy result from https://192.168.0.83:2379
    • Offizieller Beitrag

    Soweit so gut - hatte die prereqs alle am laufen etcd im ha cluster containerd, cgroups/systemd... dann aber kläglich an den gefühlt 50 tausend Parametern von kubeadm gescheitert. Oder vor allem an der Versionsabhängigkeit in Kombi mit den Parameteroptionen.

    ==> das Vorhaben wirklich auf die Basis kubeadm zu setzen legen wir mal zu den AKten

    ====> RKE2 von Rancher wird dann der nächste Versuch, ist von vornherein sicherheitscertifiziert und für cluster ausgelegt mal schauen (evtl. dann ja doch noch Mikrok8s :) noch nicht...)

    • Offizieller Beitrag

    Nach ein paar Stolpersteinen läuft der Cluster. IPv6 habe ich aus und keepalived als virtuelle IP (k8-master-cluster), Swap ist aus und Speicher 4GB min + 4 cores. Mit weniger Speicher funktioniert das setup nicht. Es sind nur ein paar Kommandos nötig und man muss sich nicht um die tausenden Kubeadm settings kümmern. Einfach https://docs.rke2.io/install/quickstart/ bzw. https://docs.rke2.io/install/ha/ folgen.

    Im schnelldurchgang für eine 3 Server installation z.B. auch hier

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    GitHub - clemenko/rke_install_blog
    Contribute to clemenko/rke_install_blog development by creating an account on GitHub.
    github.com

    Master 1:

    Code
    tls-san:
      - k8-master-us-hv-01
      - k8-master-us-hv-01.research.ok-edv.de   
      - k8-master-cluster.research.ok-edv.de 
      - k8-master-cluster
      - 192.168.0.80

    Master 2+3 das token kommt vom ersten server siehe anleitung von RKE (02 ist beim 3ten server durch 03 zu ersetzen)

    Code
    server: https://k8-master-cluster.research.ok-edv.de:9345
    token: <dein token>
      - k8-master-us-hv-02
      - k8-master-us-hv-02.research.ok-edv.de   
      - k8-master-cluster.research.ok-edv.de 
      - k8-master-cluster
      - 192.168.0.80

    Agents:

    Code
    server: https://k8-master-cluster.research.ok-edv.de:9345
    token: <dein token>

    Das Ergbenis sieht dann so aus (3 master + 3 agents):

    oder die nodes mit extra infos

    Code
    root@k8-master-us-hv-01:~# /var/lib/rancher/rke2/bin/kubectl         --kubeconfig /etc/rancher/rke2/rke2.yaml get nodes -o wide
    NAME                 STATUS   ROLES                       AGE     VERSION          INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
    k8-master-us-hv-01   Ready    control-plane,etcd,master   3h52m   v1.24.6+rke2r1   192.168.0.81   <none>        Ubuntu 22.04.1 LTS   5.15.0-48-generic   containerd://1.6.8-k3s1
    k8-master-us-hv-02   Ready    control-plane,etcd,master   3h41m   v1.24.6+rke2r1   192.168.0.82   <none>        Ubuntu 22.04.1 LTS   5.15.0-48-generic   containerd://1.6.8-k3s1
    k8-master-us-hv-03   Ready    control-plane,etcd,master   3h37m   v1.24.6+rke2r1   192.168.0.83   <none>        Ubuntu 22.04.1 LTS   5.15.0-48-generic   containerd://1.6.8-k3s1
    k8-worker-us-hv-01   Ready    <none>                      159m    v1.24.6+rke2r1   192.168.0.91   <none>        Ubuntu 22.04.1 LTS   5.15.0-48-generic   containerd://1.6.8-k3s1
    k8-worker-us-hv-02   Ready    <none>                      155m    v1.24.6+rke2r1   192.168.0.92   <none>        Ubuntu 22.04.1 LTS   5.15.0-48-generic   containerd://1.6.8-k3s1
    k8-worker-us-hv-03   Ready    <none>                      153m    v1.24.6+rke2r1   192.168.0.93   <none>        Ubuntu 22.04.1 LTS   5.15.0-48-generic   containerd://1.6.8-k3s1
    • Offizieller Beitrag

    Der resourcenverbrauch auf dem HyperV Server:

    Also 3*4GB Hauptspeicher (leere Worker/agents) + 3x6GB für die server (leer) + ca. 6+12GB Disk im Leerlauf nach der Installation.

    Also TOLL k8s läuft und NUN? Sprich wir müssen container drauf kriegen und lauffähig machen. Das werden dann die nächsten Schritte.

    • Offizieller Beitrag

    Bisserl zu früh gefreut, da ich nicht gesehen habe das der ingress controller nicht startet. Nach etwas suche in den logs iptables ist nicht installiert. ALso apt install iptables nachgeholt und neu installiert dann geht alles.

    Hilfreich ist auch die .bashrc um

    Code
    export PATH=$PATH:/var/lib/rancher/rke2/bin
    export KUBECONFIG=/etc/rancher/rke2/rke2.yaml

    zu ergänzen um sich die tipparbeit mit den Pfaden zu sparen.


    Hier die pod situation mit allen 6 Knoten

    • Offizieller Beitrag

    Ich parke dieses Tagebuch mal bis ich meine Hypervisor Infra neu aufgesetzt habe (höhere Prio). Hierzu werde ich ProxMox verwenden: Proxmox Virtual Environment aufsetzen - Tagebuch

    • Offizieller Beitrag

    Sodele wieder back to kubernetes die X-te. Proxmox läuft jetzt stabil also habe ich mich auch mal wieder an kubernetes gewagt.

    Im prinzip hier RE: Kubernetes Cluster installieren und betreiben- Tagebuch wieder eingestiegen:

    Vorraussetzungen: VM mit 4+GB RAM, 16GB Platte, 4 cores, kein swap und kein IPv6.

    Ich habe mir dafür Ubuntu Server Minimized LTS 22 als template in Proxmox erstellt. Hier kurz was ich nach der Standard installation gemacht habe (wie man ein temlate erstellt findet sich hier):

    • No IPV6 (via Grub): disable_ipv6 entries
    • No ssh hostkey: rm /etc/ssh/ssh_host*
    • No machine-id: truncate -s 0 /etc/machine-id & ln -s /var/lib/dbus/machine-id /etc/machine-id
    • qemu-guest-agent is installed
    • nano is installed
    • htop is installed (find ich besser als top)
    • iftop is installed (muss nicht sein, manchmal aber nett zu sehen wohin gesprochen wird)
    • net-tools are installed
    • iptables installiert (wichtig siehe RE: Kubernetes Cluster installieren und betreiben- Tagebuch)

    Nach dem klonen muss man leider noch mit dpg-reconfigure openssh-server die hostkeys neu erstellen (sollte cloudinit eigentlich machen) und den hostnamen anpassen. Dann noch sicherstellen das der DHCP server eine passende reservierung hat oder man eine statische IP konfiguriert.

    IPAdressen 192.168.0.80 (cluster vip), 81-83 für master und 84-86 für worker nodes reserviert.
    Anmerkung: das habe ich später in ein anderes Subnetz (192.168.1.x) geschoben, also nicht wundern wenn die IPs nicht in allen Bildern passen.

    Auch die Namen vorher festgelegt

    • lx-k8s-thor-01 bis -03 für master
    • lx-k8s-loki-01 bis -03 für worker
    • lx-k8s-cluster-01 für den ersten cluster

    Den ersten Master instalieren (siehe auch https://docs.rke2.io/install/quickstart) mit

    Code
    curl -sfL https://get.rke2.io | sh -
    systemctl enable rke2-server.service
    # wenn Ihr eine spezielle konfig braucht diese anpassen siehe paar Zeilen weiter unten BEVOR ihr den service startet.
    systemctl start rke2-server.service

    Prüfen ob er läuft mit

    Code
    journalctl -u rke2-server -f 

    das Hochfahren kann ein paar Minuten dauern.

    wenn Ihr einen Cluster aufsetzen möchtet bitte das config file /etc/rancher/rke2/config.yaml anpassen ala

    Code
    tls-san:
    - lx-k8s-thor-01
    - lx-k8s-thor-01.dmz.ok-edv.de
    - lx-k8s-cluster-01.dmz.ok-edv.de
    - lx-k8s-cluster-01
    - 192.168.1.30
    - 192.168.1.31
    node-taint:
    - "CriticalAddonsOnly=true:NoExecute"

    In meinem Fall habe ich noch einen node-taint hinzugefügt um z verhindern, das diese Server auch workloads bekommt. Unter tls-san listet Ihr alle namen und IPs auf unter denen der Server erreichbar sein wird. Also oben hostname, fqdn, den CLusternamen (via VIP) und die IPs.

    Dann nochmals per kubectl checken

    Code
    # link all the things - kubectl
    ln -s $(find /var/lib/rancher/rke2/data/ -name kubectl) /usr/local/bin/kubectl
    
    # add kubectl conf
    export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
     
    # check node status
    kubectl  get node

    Den Link braucht man natürlich nur einmal erstellen und das export in euer shell start sequence.

    Code
    Rauskommen sollte etwas wie:
    
    root@lx-k8s-thor-01:/etc/rancher/rke2# kubectl get node
    NAME             STATUS   ROLES                       AGE   VERSION
    lx-k8s-thor-01   Ready    control-plane,etcd,master   40m   v1.24.9+rke2r1

    Mein erster Master läuft also mit RKE Version 1.24.9

    oder

    Code
    root@lx-k8s-thor-01:/etc/rancher/rke2# kubectl get node -o wide
    NAME             STATUS   ROLES                       AGE   VERSION          INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
    lx-k8s-thor-01   Ready    control-plane,etcd,master   85m   v1.24.9+rke2r1   192.168.0.81   <none>        Ubuntu 22.04.1 LTS   5.15.0-56-generic   containerd://1.6.12-k3s1


    • Offizieller Beitrag

    den zweiten und dritten server.

    Note: man kann auch eine bestimmte RKE Version installieren indem man die Version mit angibt

    curl -sfL https://get.rke2.io | sudo INSTALL_RKE2_VERSION=v1.24.6+rke2r1 sh -

    Code
    curl -sfL https://get.rke2.io | sh -
    # create config file
    mkdir -p /etc/rancher/rke2/ 

    dann unter /etc/rancher/rke2/config.yaml folgendes eintragen

    Code
    server: https://lx-k8s-cluster-01.research.ok-edv.de:9345
    token: <servertoken>
    tls-san:
    - lx-k8s-thor-02
    - lx-k8s-thor-02.research.ok-edv.de
    - lx-k8s-cluster-01.research.ok-edv.de
    - lx-k8s-cluster-01
    - 192.168.0.80
    - 192.168.0.82

    der server token steht auf dem ersten server in /var/lib/rancher/rke2/server/node-token.

    Dann den service enablen und starten wie beim ersten server.

    Code
    systemctl enable rke2-server.service
    systemctl start rke2-server.service

    Anmerkung: Auf dem dritten server sieht das config file dann wie folgt aus. Also nur 02 durch 03 beim hostnamen ersetzen.

    Code
    root@lx-k8s-thor-03:~# cat /etc/rancher/rke2/config.yaml
    server: https://lx-k8s-cluster-01.research.ok-edv.de:9345
    token: <token>
    tls-san:
    - lx-k8s-thor-03
    - lx-k8s-thor-03.research.ok-edv.de
    - lx-k8s-cluster-01.research.ok-edv.de
    - lx-k8s-cluster-01
    - 192.168.0.80
    - 192.168.0.83

    Ergebnis drei Master laufen

    Code
    root@lx-k8s-thor-01:~# kubectl get node
    NAME             STATUS   ROLES                       AGE     VERSION
    lx-k8s-thor-01   Ready    control-plane,etcd,master   29m     v1.24.9+rke2r1
    lx-k8s-thor-02   Ready    control-plane,etcd,master   18m     v1.24.9+rke2r1
    lx-k8s-thor-03   Ready    control-plane,etcd,master   3m38s   v1.24.9+rke2r1

    Demnächste dann weiter mit den Agents/workers.

    • Offizieller Beitrag

    Jetzt die Worker oder auch agents genannt. Darauf achten, dass der service type agent ist.

    Code
    mkdir -p /etc/rancher/rke2
    curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -
    systemctl enable rke2-agent.service
    nano /etc/rancher/rke2/config.yaml

    Inhalt der yaml datei (jetzt ohne die hostnames):

    Code
    server: https://lx-k8s-cluster-01.research.ok-edv.de:9345
    token: <sertoken>

    dann den service starten (auch wieder agent)

    Code
    systemctl start rke2-agent.service

    und siehe da erster agent läuft:

    Code
    root@lx-k8s-thor-03:/etc/rancher/rke2# kubectl get  node
    NAME             STATUS   ROLES                       AGE    VERSION
    lx-k8s-loki-01   Ready    <none>                      14s    v1.24.9+rke2r1
    lx-k8s-thor-01   Ready    control-plane,etcd,master   146m   v1.24.9+rke2r1
    lx-k8s-thor-02   Ready    control-plane,etcd,master   135m   v1.24.9+rke2r1
    lx-k8s-thor-03   Ready    control-plane,etcd,master   121m   v1.24.9+rke2r1

    und ein wenig später alle drei

    Ach ja logfiles für den agent mit

    Code
    journalctl -u rke2-agent -f

    anschauen

    • Offizieller Beitrag

    gerade festgestellt. Es muss iptable installiert sein (apt install iptables). Ansonsten bleiben die rke nginx controller im create hängen, Das sieht man im containerd log

    Code
    root@lx-k8s-loki-03:~# tail -f /var/lib/rancher/rke2/agent/containerd/containerd.log
    time="2023-01-06T18:39:23.408088614+01:00" level=info msg="StopPodSandbox for \"e8372b7728525b74b96527f6a8a25fc5db464d11f2a5ae370c64f5a79041a5eb\""
    time="2023-01-06T18:39:23.421577917+01:00" level=error msg="StopPodSandbox for \"e8372b7728525b74b96527f6a8a25fc5db464d11f2a5ae370c64f5a79041a5eb\" failed" error="failed to destroy network for sandbox \"e8372b7728525b74b96527f6a8a25fc5db464d11f2a5ae370c64f5a79041a5eb\": plugin type=\"portmap\" failed (delete): neither iptables nor ip6tables usable"

    bzw am pod status

    nach iptable installation behebt sich das automatisch:

    da kann man auch mal prüfen ob die Metrikenb kommen

    Code
    root@lx-k8s-thor-01:~# kubectl top node
    NAME             CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
    lx-k8s-loki-01   79m          1%     1087Mi          22%
    lx-k8s-loki-02   38m          0%     1099Mi          22%
    lx-k8s-loki-03   31m          0%     1142Mi          23%
    lx-k8s-thor-01   323m         8%     2232Mi          46%
    lx-k8s-thor-02   211m         5%     2221Mi          45%
    lx-k8s-thor-03   163m         4%     2206Mi          45%

    sieht korrekt aus.

    • Offizieller Beitrag

    Nachdem nun Rancher läuft, Basic Monitoring und Istio installiert ist mal ein kurzes statement zum Resourcenverbrauch eines nakten Kubernetes Systems.

    Also die Knoten brauchen ca. 7% des Hauptspeichers Ihrer Hosts (bei mir leider nur 64GB pro Host), d.h. ca. 27GB Verbraucht mein Basissystem mit 3 Controllern und 3 Workernodes.

    Rancher läuft auf einem dockersystem noch zusätzlich was nochmals 4.x GB Speicher braucht. Also in Summer ca. 30GB minimal mit einem upstream (Management) und einem downstream cluster. Was mir jetzt noch fehlt in der Ingress HA Proxy für die Controllernodes (ich habe das bisher ja nur mit einem DNS Eintrag gefakt). Der Dockerhost wird via ProxMox ein HA setup bekommen. Die K8S (K3S) Knoten brauchen kein HA setup seitens ProxMox, da sie ja schon von sich aus HA supporten. D.h. ich muss die Worker und Controller nur entsprechend auf den Proxmox Hosts verteilen damit nicht alle zu selben seit down sind.

    Das war es erstmal wieder von der Kubernetes Front - ich lass das jetzt mal ohne workloads ein Weile laufen um zu sehen ob das Basissystem wirklich stabil läuft.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!