In diesem Artikel erhalten Sie einen Überblick über die Storage-Lösung Xelon CSI.
Intro
Der Xelon Container Storage Interface (CSI) ist eine von uns entwickelte Lösung, die es Cloud-Anbietern ermöglicht, sich nahtlos in den Kubernetes-Storage zu integrieren. Es bietet eine einfach zu bedienende Storage-Lösung für zustandsbehaftete Workloads in Kubernetes. Sie können den Quellcode und die neuesten Versionen auf GitHub finden: GitHub - Xelon
Dieser Dienst befindet sich derzeit im Early Access. Kontaktieren Sie uns, um Zugang zu beantragen.
Voraussetzungen
Alle notwendigen Konfigurationen sind auf Ihrem Xelon Kubernetes-Cluster vorinstalliert. Wenn Sie es jedoch vorziehen, Ihre eigene Kubernetes-Distribution in unserer Cloud auszuführen, können Sie den CSI für eine unkomplizierte Speicherlösung einrichten.
Bestandteile
Der Xelon CSI hat zwei Hauptkomponenten, die nachfolgend beschrieben werden. Darüber hinaus muss sich der Xelon CSI beim Xelon HQ mit Anmeldedaten authentifizieren, die im Secret: «xelon-api-credentials» im kube-System Namespace gespeichert sind.
Statefulset: xelon-csi-controller
Der Xelon CSI-Controller reagiert auf Ereignisse vom kube-apiserver, die sich auf Volumes beziehen. Er verwendet diese Metadaten, um Anweisungen an die HQ-Management-Plattform oder die xelon-csi-node-Komponente zu senden. Diese Anweisungen können Aktionen wie das Verschieben eines Datenträgers von einem Knoten zu einem anderen, das Ändern der Grösse eines Datenträgers, das Erstellen eines neuen Datenträgers und vieles mehr umfassen.
Daemonset: xelon-csi-node
Die Xelon CSI Node Komponente ist ein Container, der auf allen Worker-Knoten läuft und für das Einhängen von Volumes und andere wichtige Aufgaben zuständig ist. Er bindet nicht nur Volumes an die Knoten an, sondern verwaltet auch Vorgänge wie Grössenänderung, Erstellung und Löschung von Volumes. Ausserdem kommuniziert er mit der Xelon HQ-Plattform, um Befehle auszuführen und den Zustand der Volumes zu überwachen, um einen reibungslosen und zuverlässigen Speicherbetrieb innerhalb des Kubernetes-Clusters zu gewährleisten.
Wie wird die Xelon CSI verwendet?
1. Um sicherzustellen, dass «xelon-persistent-storage» in Ihrem Cluster verfügbar ist, führen Sie den folgenden Befehl aus: kubectl get storageclasses
2. Stellen Sie das folgende Manifest bereit:
kubectl apply -f <filename>
Hier ist das komplette Manifest:
apiVersion: apps/v1
kind: Deployment
metadata:
name: code-server
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: code-server
template:
metadata:
labels:
app: code-server
spec:
containers:
- name: code-server
image: lscr.io/linuxserver/code-server:latest
env:
- name: PUID
value: "1000"
- name: PGID
value: "1000"
- name: TZ
value: "Europe/Zurich"
- name: PASSWORD
value: "password" #optional
- name: SUDO_PASSWORD
value: "sudopassword" #optional
- name: DEFAULT_WORKSPACE
value: "/config/workspace" #optional
ports:
- containerPort: 8443
name: https
volumeMounts:
- mountPath: /config
name: code-server-config
restartPolicy: Always
volumes:
- name: code-server-config
persistentVolumeClaim:
claimName: code-server-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: code-server-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: "xelon-persistent-storage"
---
apiVersion: v1
kind: Service
metadata:
name: code-server-service
spec:
type: ClusterIP
ports:
- port: 8443
targetPort: 8443
protocol: TCP
name: https
selector:
app: code-server
Dieses Manifest erstellt drei Ressourcen:
a. Deployment führt den Visual Studio Code-Server aus (über einen Webbrowser zugänglich) und ist ein Volume unter /config
.
b. PersistentVolumeClaim fordert ein 5Gi-Volume an, das von dem Xelon CSI erstellt wird, wenn es noch nicht vorhanden ist.
c. Der Service a ermöglicht den Zugriff auf den VS Code-Server. Leiten Sie den Service-Port an Ihren Rechner weiter mit:
kubectl port-forward svc/code-server-service 8443:8443
Sie können nun mit dem in den Umgebungsvariablen festgelegten Passwort auf die VS Code-Instanz unter http://localhost:8443 zugreifen.
So testen Sie die Datenträger-Migration
Hier finden Sie eine Schritt-für-Schritt-Anleitung, um sicherzustellen, dass Ihre Volumenmigration erfolgreich verläuft:
1. Erstellen Sie eine Datei in VS-Code:- Öffnen Sie die VS-Code-Instanz in Ihrem Browser unter http://localhost:8443.
-
Erstellen Sie eine neue Datei und fügen Sie einen Inhalt hinzu.
-
Speichern Sie die Datei, um sicherzustellen, dass sie auf dem dauerhaften Datenträger gespeichert wird.
2. Knoten entleeren:
- Listen Sie die Pods und Ihre Knoten auf, um zu sehen, wo die VS-Code-Instanz ausgeführt wird:
kubectl get pods -o wide
- Entleeren Sie die Knoten, auf dem die VS Code-Instanz läuft:
kubectl drain <node name> --delete-emptydir-data --ignore-daemonsets
3. Port-Forward erneut öffnen:
- Da der Endpunkt migriert wird, müssen Sie das Port-Forwarding erneut einrichten:
kubectl port-forward svc/code-server-service 8443:8443
4. Überprüfen Sie das Vorhandensein der Datei:
- Greifen Sie erneut auf die VS-Code-Instanz zu unter http://localhost:8443 und überprüfen Sie, ob die zuvor erstellte Datei noch vorhanden ist. Dies zeigt an, dass das Volume erfolgreich migriert wurde.
- Überprüfen Sie, auf welchem Knoten der VS Code-Pod jetzt ausgeführt wird:
kubectl uncordon <node name>
6. Heben Sie die Abgrenzung des zuvor entleerten Knotens auf:
- Sobald die Migration bestätigt ist, können Sie den zuvor entleerten Knoten abkoppeln, um ihn wieder planbar zu machen:
kubectl uncordon <node name>
Beschränkungen: Derzeit unterstützen Xelon CSI-Volumes nur den Zugriffsmodus «ReadWriteOnce». Das bedeutet, dass jedes Volume jeweils nur an einen Pod angeschlossen werden kann.