K3S-Cluster
Knoten
- Laden Sie das [Raspberry Pi-Image-Tool] herunter (https://downloads.raspberrypi.org/imager/imager_latest.exe) (64-Bit-Image RaspianOS)
- Bild, SSH aktiviert
- 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, können Sie dies mit der folgenden Methode tun.
!!! 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, falls eine statische Konfiguration gewünscht ist, kann dies über die untenstehende 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 einem USB3.0-Shield 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 Bootreihenfolge auf USB als erstes Bootgerä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