In dieser Dokumentation finden Sie Informationen dazu, wie Sie nscale mit Kubernetes betreiben können.
Weitere Information zu Kubernetes finden Sie unter https://kubernetes.io.
Der Betrieb von nscale Standard Container mit Kubernetes hat folgende Vorteile:
- Clusterbildung möglich
- Fehlertoleranz
- flexible Skalierbarkeit
- einfache Installation in Cloud-Umgebungen (z. B. in Microsoft Azure Kubernetes Service - AKS)
Bitte beachten Sie, dass es sich bei den Konfigurationen in diesem Repository um Beispielkonfigurationen handelt.
Für Produktivsysteme müssen Sie ggf. Anpassungen an den vorliegenden Konfigurationen vornehmen.
Dieses Beispiel berücksichtigt den Betrieb mit Linux.
Wenn Sie mit Windows arbeiten, müssen Sie unter Umständen die Dateipfade ändern.
Die Ceyoniq Technology GmbH übernimmt keine Gewährleistung und Haftung für die Funktionsfähigkeit, Verfügbarkeit, Stabilität und Zuverlässigkeit von Software von Drittanbietern, die nicht Teil der nscale Standard Container ist.
Stellen Sie vor dem Start der nscale Standard Container mit Kubernetes sicher, dass Sie die folgenden Voraussetzungen erfüllt haben:
- Sie haben einen Kubernetes-Cluster (ab Version 1.25), den Sie mit
kubectl
erreichen können - Sie haben einen NGINX Ingress Controller eingerichtet
- Sie besitzen eine gültige Lizenzdatei
- Sie haben Login-Daten für die Container-Registry ceyoniq.azurecr.io
Starten Sie die nscale Standard Container:
- Erzeugen Sie einen Namespace
nscale
kubectl create namespace nscale
- Erzeugen Sie ein
Secret
mit Ihren Login-Daten (weitere Informationen: Container-Registry).
kubectl create secret docker-registry regcred \
--docker-server=ceyoniq.azurecr.io \
--docker-username=[username] \
--docker-password=[token] \
--namespace nscale
- Kopieren Sie Ihre Lizenzdatei
license.xml
in den Ordnerkubernetes/kustomize/nscale/base/
. - Führen Sie nun folgende Kommandos im Ordner
kubernetes/kustomize/nscale/overlays/emptyDir/
aus:
kubectl apply -n nscale -k .
- Sie können nun prüfen, ob die jeweiligen
Pods
erfolgreich gestartet werden konnten.
kubectl get pods -n nscale -w
- Warten Sie bis alle
Pods
den StatusRunning
melden. - Rufen Sie folgendes Kommando auf:
kubectl port-forward --address 0.0.0.0 deployment/application-layer-web 8090:8090 -n nscale
- Fertig!
Sie können nun unter http://localhost:8090 auf Ihr nscale zugreifen.
Bei der ersten Anmeldung können Sie die Standard-Anmeldedaten verwenden, die beim Start eines neuen nscale Systems automatisch erstellt werden. Ändern Sie diese Anmeldedaten für den Produktivbetrieb umgehend. Die Standard-Anmeldedaten lauten:
User: admin
Password: admin
Für den Produktiveinsatz wird ein Ingress-Controller empfohlen. Weitere Informationen dazu finden Sie in diesem Dokument.
Dies ist eine Beispielkonfiguration. Für Produktivsysteme müssen Sie andere angepasste Varianten konfigurieren.
In diesem Beispiel wird Kustomize verwendet. Durch Kustomize können Sie leicht Anpassungen von Kubernetes-Deployments zur Erzeugung mehrerer Varianten (z. B. für unterschiedliche Umgebungen) vornehmen. Dabei werden die originalen YAML-Dateien nicht modifiziert, sondern mit Overlays überlagert. Im Gegensatz zu Helm kommt Kustomize so ganz ohne Templates aus, was die Verwendung besonders einfach macht.
Weitere Informationen zu Kustomize finden Sie hier:
https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization
Die nscale Basiskonfiguration ist im Verzeichnis base
abgelegt.
Das Verzeichnis overlay
enthält Ableitungen für unterschiedliche Umgebungen.
Jede konkrete nscale Installation wird in einem eigenen Namespace installiert.
Die Web Schnittstellen der Komponente sind von außen über Ingress Regeln erreichbar. Dazu wird ein eindeutiger voll qualifizierter Hostname für jede nscale Installation angegeben.
Weitere Information zu den nscale Standard Containern finden Sie hier:
- nscale/application-layer (nscale Server Application Layer)
- nscale/application-layer-web (nscale Server Application Layer Web)
- nscale/pipeliner (nscale Pipeliner)
- nscale/storage-layer (nscale Server Storage Layer)
- nscale/rendition-server (nscale Rendition Server)
- nscale/administrator (nscale Administrator)
- nscale/monitoring-console (nscale Monitoring Console)
- nscale/console (nscale Console)
- nscale/process-automation-modeler (nscale Process Automation Modeler)
- nscale/cmis-connector (nscale CMIS-Connector)
- nscale/webdav-connector (nscale WebDAV-Connector)
- nscale/ilm-connector (nscale ERP Connector ILM)
- nscale/xta-connector (nscale XTA Connector)
Die Ceyoniq Technology GmbH übernimmt keine Gewährleistung und Haftung für die Funktionsfähigkeit, Verfügbarkeit, Stabilität und Zuverlässigkeit von Software von Drittanbietern, die nicht Teil der oben aufgelisteten nscale Standard Container ist. Weiter erfolgt der Einsatz von Software von Drittanbietern wie Loki, Grafana, Prometheus, etc. hier zum Zweck der Darstellung innerhalb einer Beispielkonfiguration.
Um auf die nscale Standard Container zugreifen zu können, benötigen Sie einen Zugang für die Ceyoniq Container Registry ceyoniq.azurecr.io.
Weitere Informationen erhalten Sie vom Ceyoniq Service.
Um sich bei der Ceyoniq Container Registry anmelden zu können, verwenden Sie Ihren username
und Ihr token
.
kubectl create secret docker-registry regcred \
--docker-server=ceyoniq.azurecr.io \
--docker-username=[username] \
--docker-password=[token]] \
--namespace nscale
Bitte beachten Sie, dass das Secret
regcred
für jeden Namespace zur Verfügung stehen muss.
Die Ingress-Konfiguration beinhaltet Informationen zu Ihrem Hostname. Somit werden alle Anfragen an Ihren Cluster durch diesen Ingress verarbeitet. Passen Sie die Ingress-Konfiguration bei Bedarf an.
Um auf die jeweiligen nscale-Komponenten zugreifen zu können, benötigen Sie einen Ingress.
In diesem Beispiel wird ein NGINX Ingress Controller erwartet.
Passen Sie die Ingress-Regeln an, wenn Sie einen anderen Ingress-Controller verwenden wollen oder eine OpenShift-Route
bevorzugen.
Führen Sie zur Verwendung der Beispielkonfiguration folgendes Kommando im Ordner kubernetes/kustomize/nscale/
aus:
kubectl apply -n nscale -f ingress-nginx.yaml
Informationen über die gesetzten Ingress-Regeln können Sie abrufen, indem Sie die folgenden Kommandos ausführen:
# Übersicht über alle Ingress-Regeln in Ihrem Cluster
kubectl get ingress -A
# Informationen über die Ingress-Regeln Ihrer nscale-Installation
kubectl describe ingress ingress-nscale -n nscale
Sie können nun über die IP-Adresse oder den Hostname auf Ihr nscale-System zugreifen.
Weitere Informationen zur Ingress Konfiguration finden Sie in der Dokumentation Ihres Cloud-Betreibers.
In diesen Beispielen sehen Sie, wie Sie unterschiedliche Konfiguration anwenden und u.a. Daten innerhalb von Kubernetes speichern können. Je nach Kubernetes-Umgebung können sich die Persistierungsmöglichkeiten bei Ihnen unterscheiden.
Alle Beispiele werden im Ordner kubernetes/kustomize/nscale
ausgeführt.
Überlagerung der Pod Basiskonfigurationen in resources
.
- Definition der Pod Resource Request und Limits für unsere Standard Container.
Überlagerung der Pod Basiskonfigurationen in security
.
Hinweis: Insbesondere die Verwendung von securityContext.fsGroup: 0
kann je nach Cluster Setup zu Rechte Problemen in den Persistent Volumes führen (z.B. in OpenShift).
Überlagerung der Pod Basiskonfigurationen in ordered
.
- Verwendung von Init Containern, um auf den vollständigen Start von anderen Komponenten abzuwarten.
- Anlegen eines initialen Dokumentenbereichs
Überlagerung der Pod Basiskonfigurationen mit privateregistry
.
- Referenz auf die Credentials für die Container Registry.
Überlagerung der Pod Basiskonfigurationen in runas
.
Hinweis: Insbesondere die Verwendung von securityContext.fsGroup: 0
kann je nach Cluster Setup zu Rechte Problemen in den Persistent Volumes führen (z.B. in OpenShift).
Überlagerung der Pod Basiskonfigurationen mit der NetworkPolicy
.
Hinweis:
- Die ingress Konfiguration für das Gateway / Ingress Controller muss u.U. angepasst werden (im Beispiel der Namespace
ingress-basic
). - Der Application Layer braucht egress Konfigurationen für die Kubernetes API und optional Zugriff auf LDAP oder SMTP Server sowie gegebenenfalls weitere externe Systeme. Im Beispiel wird der der voller Internetzugriff gewährt. Das sollte in Produktivumgebungen geändert werden.
Alle Dokumente und Datenbankeinträge werden gelöscht, nachdem die nscale-Services wieder heruntergefahren wurden.
Achtung! Datenverlust!
Da alle Dokumente und Datenbankeinträge beim Herunterfahren der nscale-Services gelöscht werden, ist diese Einstellung nur für den Test- und Demobetrieb geeignet.
Weitere Informationen: https://kubernetes.io/docs/concepts/storage/volumes/#emptydir
Anlegen aller Ressourcen:
kubectl apply -k overlays/emptydir/ -n nscale
Löschen aller Ressourcen:
kubectl delete -k overlays/emptydir/ -n nscale
Es wird die StorageClass
default in den PersistentVolumeClaims
verwendet.
Sie können mit dem Kommando kubectl get storageclass
die jeweilige StorageClass
Ihres Kubernetes-Cluster abfragen (z.B. hostpath
oder local-path
).
Weitere Informationen zur
StorageClass
finden Sie in der Dokumentation Ihres Kubernetes-Clusters. Bitte beachten Sie, dass z.B. der nscale Rendition Server ein ReadWriteMany PersistentVolumeClaim benötigt, wenn mehr als ein nscale Rendition Server verwendet wird.
Anlegen aller Ressourcen:
kubectl apply -k overlays/default/ -n nscale
Löschen aller Ressourcen (außer PVs und PVCs):
kubectl delete -k base/ -n nscale
Löschen aller Ressourcen (PVs und PVCs werden gelöscht)
Achtung! Datenverlust!
Wenn die PVs und PVCs gelöscht werden, können die darin gespeicherten Daten nicht wiederhergestellt werden.
kubectl delete -k overlays/default/ -n nscale
Alle Dateien werden auf AzureDisk oder AzureFiles gespeichert.
Weitere Informationen:
- https://kubernetes.io/docs/concepts/storage/volumes/#azurefile
- https://kubernetes.io/docs/concepts/storage/volumes/#azuredisk
Anlegen aller Ressourcen:
kubectl apply -k overlays/azure/ -n nscale
Löschen aller Ressourcen (außer PVs und PVCs):
kubectl delete -k base/ -n nscale
Löschen aller Ressourcen (PVs und PVCs werden gelöscht)
Achtung! Datenverlust!
Wenn die PVs und PVCs gelöscht werden, können die darin gespeicherten Daten nicht wiederhergestellt werden.
kubectl delete -k overlays/azure/ -n nscale
In dieser Konfiguration werden folgende nscale Komponenten horizontal skaliert (ohne Autoscaler).
- nscale Server Application Layer
- nscale Server Application Layer Web
- nscale Storage Layer
Hinweis: Die entsprechende Konfiguration insbesondere für den nscale Storage Layer ist sehr kompliziert. Wenden Sie sich im Zweifel an unseren Ceyoniq Support.
Sie benötigen nscale Administrator ab Version 8.0.5000.
Für den Zugriff mit nscale Administrator auf Ihre nscale-Installation innerhalb Kubernetes steht Ihnen der kein RMS-Modus (RMS = nscale Remote Management Service) zur Verfügung. Erzeugen Sie eine neue Komponenten-Gruppe in nscale Administrator, um auf die jeweiligen nscale-Komponenten zugreifen zu können.
Weitere Informationen finden Sie hier: limitation.md
Damit Sie von außerhalb Ihres Kubernetes-Cluster auf die jeweiligen nscale-Komponenten zugreifen können, müssen die Ports der nscale-Komponenten durch ein kubectl port-forward
auf Ihr lokales System weitergeleitet werden.
# stateful set
kubectl port-forward --address 0.0.0.0 pod/application-layer-0 8080:8080 8443:8443 -n nscale
kubectl port-forward --address 0.0.0.0 pod/storage-layer-0 3005:3005 -n nscale
kubectl port-forward --address 0.0.0.0 pod/pipeliner-0 4173:4173 -n nscale
# deployment
kubectl port-forward --address 0.0.0.0 deployment/application-layer-web 8090:8090 -n nscale
kubectl port-forward --address 0.0.0.0 deployment/rendition-server 8192:8192 -n nscale
kubectl port-forward --address 0.0.0.0 deployment/monitoring-console 8387:8387 -n nscale
Alle nscale Standard Container schreiben ihre Logging-Informationen auf StdOut. Mit etablierten Tools, wie zum Beispiel Loki, können Sie deshalb Logs aggregieren. Sie können die jeweiligen Logging-Ausgaben wie folgt abrufen:
# Alle Log-Ausgabe des ersten application-layer
kubectl logs application-layer-0 -n nscale
Weitere Informationen zum Thema Logging in Kubernetes finden Sie hier:
https://kubernetes.io/docs/concepts/cluster-administration/logging
Die nscale-Komponenten werden weiterhin über nscale Monitoring Console überwacht, die als Deployment im Cluster verfügbar ist. Die Integration der nscale-Komponenten als Ressource wird wie bisher über nscale Administrator verwaltet.
Für Prometheus stehen zwei Endpunkte zur Verfügung. Beide sind über Basic-Auth geschützt und brauchen deshalb ein Passwort für nscale Monitoring Console. Die Zugangskontenverwaltung ist über nscale Administrator verfügbar.
Der erste Endpunkt liefert Informationen zu nscale Monitoring Console, während der zweite Endpunkt Metriken der eingebundenen nscale-Komponenten als Prometheus-Sensoren zur Verfügung stellt.
- /nscalemc/rest/metrics
- /nscalemc/rest/metrics/nscale
Den aktuellen Scaning Report können Sie über hier einsehen. Beachten Sie die folgenden Hinweise:
The container running with a low group ID
Wir unterstützen Red Hat OpenShift.
Dafür müssen wir unsere Container entsprechend vorbereiten in dem wir dem nscale
Benutzer die root
Gruppen Rechte geben
(siehe Adapting Docker and Kubernetes containers to run on Red Hat OpenShift Container Platform).
Container is missing a Probe
Wir halten uns an die Empfehlung von kube-score
und haben identische Liveness und Readiness Probles gelöscht
(Readiness and Liveness Probes).
Aber weiterhin fehlen uns leider Health Checks für den ilm connector
und webdav connector
.
The pod has a container with a writable root filesystem
Noch sind wir leider nicht in der Lage in allen unseren nscale Standard Containern das Filesystem auf readonly
zu setzen.
Wir arbeiten noch an der Umsetzung dieser sicherheitsrelevanten Anforderung.
Informationen zu Limitierungen finden Sie hier:
limitation.md
Die FAQ finden Sie hier:
faq.md