Zum Inhalt

K3S-Cluster

Knoten

  1. Laden Sie das [Raspberry Pi-Image-Tool] herunter (https://downloads.raspberrypi.org/imager/imager_latest.exe) (64-Bit-Image RaspianOS)
  2. Bild, SSH aktiviert
  3. Im Raspberry Pi Builder:

Strg-Umschalttaste x 4. Passwort -> Passwort ändern 5. Öffentlichen Schlüssel hinzufügen (optional) -> .ssh/authorized_keys

``` Linenums="1" ssh-copy-id -i ~/.ssh/id_ras.pub pi@

Legen Sie die SD-Karte in den Knoten ein und starten Sie ihn mit Netzwerkkonnektivität.

### Mit Knoten verbinden

```bash
Sudo apt-Update
Sudo apt Voll-Upgrade
sudo vcgencmd bootloader_version
sudo rpi-eeprom-update -a
sudo raspi-config (Bootloader aktualisieren)

Fügen Sie Variablen zu den folgenden Dateien hinzu

!!! Beispiel „/boot/cmdline.txt (Zeilenende)“

cgroup_enable=cpuset cgroup_enable=Speicher cgroup_memory=1

statische IP

Bevorzugt werden IP-Adressen basierend auf DHCP-Reservierungen zugewiesen. Wenn Sie sich für die Zuweisung einer statischen IP entscheiden, kann dies mit der folgenden Methode erfolgen.

!!! Notiz "" nano /etc/dhcpcd.conf

Schnittstelle eth0
static_ip_address=172.16.1.x/26
statische Router=172.16.1.1
statische domain_name_servers=172.16.1.1

DNS wird auch über DHCP angeboten. Wenn eine statische Konfiguration gewünscht ist, kann dies über die unten stehende Methode erfolgen.

!!! Beispiel „/etc/hosts“ IP-HOSTNAME (~/.zshrc) = SSH-Aliase (optional) alias sshhostname='ssh pi@hostname'

Iptables aktivieren

sudo apt-get install -y iptables arptables ebtables

``` Linenums="1" sudo su - sudo iptables -F sudo update-alternatives --set iptables /usr/sbin/iptables-legacy sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

Starten Sie nach diesen Änderungen den Knoten [Q][H] neu! 
sudo reboot[Q]

## SSD statt SD (M.2-Abschirmung erforderlich)

Ich verwende SSD anstelle von SD auf allen Knoten, da diese Festplatten schneller und zuverlässiger sind als eine SD-Karte. Ich boote direkt von der SSD mit einer USB3.0-Abschirmung für den Raspberry Pi. 
Da die SSD auf dem Shield montiert und über USB angeschlossen ist, können Sie sie auf die gleiche Weise wie eine SD vorbereiten, wie in den vorherigen Schritten beschrieben.

Wenn Sie einen neuen Raspberry Pi verwenden, müssen Sie ihn einmal mit der SD-Karte booten und das EEPROM/BIOS aktualisieren, danach können Sie die Boot-Reihenfolge auf USB als erstes Boot-Gerät ändern:

!!! 
Notiz ""
sudo raspi-config 6. Erweiterte Optionen > A6. 
Startreihenfolge > B2. 
USB-BOOT

```bash Linenums="1"
lsblk

NAME MAJ:MIN RM GRÖSSE RO TYP MONTAGEPUNKT sda 8:0 0 111.8G 0 Festplatte ├─sda1 8:1 0 256M 0 Teil /boot └─sda2 8:2 0 111,5G 0 Teil /

K3S-Installation

Mein Cluster besteht aus 4 Knoten und verwendet etcd-Hochverfügbarkeit. Da ich Rancher zum Verwalten des Clusters verwende, installiere ich eine bestimmte Version, die von Rancher unterstützt wird. Wenn Sie dies nicht nutzen, können Sie die Version weglassen, K3S wird dann mit der neuesten Version installiert.

1e-Knoten

curl -sfL <https://get.k3s.io> | 
INSTALL_K3S_VERSION="v1.23.9 k3s1" K3S_KUBECONFIG_MODE="644" K3S_TOKEN=SECRET sh -s - server --cluster-init

2e n Knoten

ACHTUNG! Hochverfügbarkeit auf einem K3S-Cluster funktioniert nur ab 3 Knoten. Für die Wiederherstellung wird die Installation der etcd-Datenbank auf allen Knoten empfohlen. Bei weniger als 3 Knoten führt der Cluster jedoch im Falle eines Ausfalls kein automatisches Failover auf einen anderen Knoten durch.

curl -sfL https://get.k3s.io | 
INSTALL_K3S_VERSION="v1.23.9 k3s1" K3S_KUBECONFIG_MODE="644" K3S_TOKEN=SECRET sh -s - server --server https://lc-k3s-n3.loevencloud.nl:6443

Clusterkonfiguration und -dienste

Auf dem Cluster müssen einige Dinge konfiguriert werden.

Helmmontage

```bash Linenums="1"

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh

!!! 
Hinweis „Überprüfen Sie, ob der Knoten aktiv ist“
- systemctl enable --now k3s-agent
- k3s kubectl Knoten (Knoten) abrufen
- kubectl get pods -A (pods)

#### Fügen Sie das Jetstack-Repository hinzu

```bash
Helm Repo Jetstack hinzufügen https://charts.jetstack.io

Aktualisiert die Repository-Liste

Helm-Repo-Update

Zertifikatsmanager

Um LetsEncrypt-Zertifikate in meinem Cluster zu verwenden, installiere ich Zertifikatsmanager von Jetstack

!!! Beispiel „kubectl apply -f [Q]https://github.com/jetstack/cert-manager/releases/download/v1.9.1/cert-manager.crds.yaml[Q]“

von via Helm

helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.9.1

Erstellen Sie einen Aussteller für LetsEncrypt. Ich verwende den DNS-Resolver in Azure:

APIVersion: cert-manager.io/v1
Art: ClusterIssuer
Metadaten:
Manager: cert-manager-clusterissuers
Name:letsencrypt-Produktion
Spezifikation:
Gipfel:
E-Mail: <LETSENCRYPT-USERNAME>
bevorzugteKette: „“
privateKeySecretRef:
Name:letsencrypt-Produktionskonto-ci
Server: https://acme-v02.api.letsencrypt.org/directory
Löser:
-dns01:
azureDNS:
clientID: <APPREGID>
clientSecretSecretRef:
Schlüssel: Client-Geheimnis
Name: azuredns-config
Umgebung: AzurePublicCloud
hostedZoneName: <DNS-Zonenname>
Ressourcengruppenname: <Ressourcengruppe>
Abonnement-ID: <SUBID>
MieterID: <TENANTID>

Nachdem der Zertifikatsmanager installiert wurde, können Sie ein Zertifikat mit den richtigen Anmerkungen erstellen:

cert-manager.io/cluster-issuer:letsencrypt-produktion
kubernetes.io/tls-acme: „wahr“

NFS StorageClass installieren

Helm-Repo nfs-subdir-external-provisioner hinzufügen https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --set nfs.server=<nfsTarget> --set nfs.path=/volume1/k3s/data/PVC

Rancher

Helm Repo Rancher-latest hinzufügen https://releases.rancher.com/server-charts/latest
kubectl erstellt einen Namensraum für das Viehsystem
helm install rancher rancher-latest/rancher --namespace Cattle-System --set Hostname=cluster.loevencloud.nl --set Replicas=4 --set ingress.tls.source=letsEncrypt --setletsEncrypt.email=<LETSENCRYPTUSERNAME>

!!! Info „kubectl -n Cattle-System Rollout Status Deploy/Rancher“

Update Rancher

Helm-Repo-Update
helm fetch rancher-latest/rancher
Helm Werte abrufen Rancher -n Cattle-System > Ranchercurrent.yml
Helm-Upgrade Rancher Rancher-latest/rancher --namespace Cattle-System -f .\ranchercurrent.yml

!!! Info „kubectl -n Cattle-System Rollout Status Deploy/Rancher“

!!! Warnung „Warten Sie nach dem Upgrade von Rancher mindestens 30 Minuten, bevor Sie Knoten aktualisieren.“

Nachdem Rancher auf dem neuesten Stand ist, können die Knoten auch mit der neuesten Kubernetes-Version versorgt werden.

Knotenaktualisierung über Rancher

Gehen Sie zu Clusterverwaltung > Konfiguration bearbeiten > Kubernetes-Version und wählen Sie die letzte unterstützte Version aus. (Beachten Sie, dass die etcd-Konfiguration etwas wackelig ist.)

erster Lauf

echo https://rancher.domein.local/dashboard/?setup=$(kubectl get Secret --namespace Cattle-System Bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}')

Cluster-Aktualisierungsebene

kubectl kustomize build https://github.com/rancher/system-upgrade-controller/blob/master/manifests/system-upgrade-controller.yaml | 
kubectl apply -f -

Clusterüberwachung

Prometheus-Operator

Zur Namespace-Überwachung

!!! Hinweis „kubectl erstellt Namespace-Überwachung“

CD
Git-Klon https://github.com/prometheus-operator/prometheus-operator.git
cd prometheus-operator/
# Überprüfen Sie die aktuelle Einstellung für Namespaces in bundle.yaml
grep-Namespace: bundle.yaml
Namespace: Standard
Namespace: Standard
Namespace: Standard
Namespace: Standard

#Wir werden das in Überwachung ändern:
sed -i 's/namespace: default/namespace: Monitoring/g' bundle.yaml

#Überprüfen Sie noch einmal:
grep-Namespace: bundle.yaml

Namensraum: Überwachung
Namensraum: Überwachung
Namensraum: Überwachung
Namensraum: Überwachung

!!! Notiz Holen Sie sich die Überwachung von „deploy -n“. Holen Sie sich Pods -n Monitoring Holen Sie sich die SVC-N-Überwachung

[https://rpi4cluster.com/monitoring/k3s-svcmonitors/]

Cluster deaktivieren

auf jedem Knoten:

!!! Hinweis „/usr/local/bin/k3s-killall.sh“

sudo jetzt herunterfahren