# RKE2 Installation

Die [Rancher Kubernetes Engine 2](https://docs.rke2.io/) ermöglicht die Installation und Konfiguration eines Kubernetes Clusters durch wenige Befehle.

Im folgenden wird die Installation unter einer aktuellen Version von [Rocky Linux 9](https://rockylinux.org/de) vorgestellt.

Da das System selber Firewall - Regeln setzt sollte eine zusätzliche Firewall Konfiguration deaktiviert sein.

In der Regel läuft auf einem neu installierten Rocky Linux der `firewalld`.

```bash
sudo systemctl disable --now firewalld.service
sudo systemctl mask firewalld.service
```

Der Hostname der Node sollte korrekt gesetzt sein, oder durch `hostnamectl` gesetzt werden.

```bash
sudo hostnamectl set-hostname node150.train.mylinuxtime.de
```

Die folgenden Tools werden von RKE2 je nach konfigurierter Umgebung benutzt und sollten installiert sein.

```bash
sudo yum install -y epel-release
sudo yum install -y vim tar git libiscsi-utils iscsi-initiator-utils nfs-utils iptables
sudo systemctl enable --now iscsid
```

Da das RKE2 einige der in einer Standard - Installation vorherrschenden Limit überschreitet müssen für `inotify` die Limits erhöht werden.

```bash
sudo tee /etc/sysctl.d/20-inotify.conf <<HERE
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=524288
HERE
sudo sysctl --system
```

Die Installation der RKE2 Umgebung kann durch ein Script oder die Installation des [Binaries von GitHub](https://github.com/rancher/rke2/releases) durchgeführt werden.

Das Script installiert neben dem Binary auch einige nützliche Scripte über die alle Prozesse des RKE2 gestoppt oder eine Installation entfernt werden kann.

Bei unterstützten Plattformen - wie Rocky Linux - wird zusätzlich ein Repository für den Paketmanager installiert über den ein direktes Update per `yum update` möglich ist.

```bash
curl -sfL https://get.rke2.io | sudo sh -
```

Zusätzlich wird das Kommando `kubectl` für die Verwaltung des Clusters benötigt. Der folgende Aufruf installiert den Befehl direkt nach `/usr/local/bin`. Um direkt per `bash` verfügbar zu sein wird auch die Variable PATH erweitert.

```bash
sudo curl -Lo /usr/local/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
sudo chmod +x /usr/local/bin/kubectl
echo "PATH=\"/usr/local/bin:\$PATH\"" | sudo tee -a /root/.bashrc | tee -a $HOME/.bashrc
source $HOME/.bashrc
```

Falls dem RKE2 keine weiteren Parameter angegeben werden sollen, kann der Dienst aktiviert und gestartet werden.

```bash
sudo systemctl enable --now rke2-server.service
```

Die für den `kubectl` benötigte Konfiguration kann direkt unter `.kube/config` im Homeverzeichnis des aktuellen Benutzers und dem von `root` zur Verfügung gestellt werden.

```bash
sudo mkdir /root/.kube
sudo ln -s /etc/rancher/rke2/rke2.yaml /root/.kube/config
mkdir $HOME/.kube
sudo cp /etc/rancher/rke2/rke2.yaml $HOME/.kube/config
sudo chown $USER: $HOME/.kube/config
chmod 0600 $HOME/.kube/config
```

Nach wenigen Minuten sollte die neue RKE2 Node zur Verfügung stehen.

```bash
user@linux $ kubectl get nodes
NAME                           STATUS   ROLES                       AGE     VERSION
node150.train.mylinuxtime.de   Ready    control-plane,etcd,master   2m29s   v1.28.11+rke2r1
```
