Auf dieser Seite

Vor-Ort-Betrieb

Um Ideanote in Ihrer eigenen Umgebung zu installieren, verwenden Sie das Ideanote Helm Chart.
Dieses Chart enthält alle erforderlichen Komponenten für den Einstieg und lässt sich für umfangreiche Bereitstellungen skalieren.

Das Ideanote Helm Chart enthält alles Notwendige und ist so konzipiert, dass es sich einfach installieren und konfigurieren lässt.
Das Chart umfasst mehrere Subcharts und eine Standardkonfiguration, die an Ihre Anforderungen angepasst werden kann.
Weitere Informationen zu den im Helm-Chart enthaltenen Komponenten finden Sie im Abschnitt zur Architektur.

Architektur

Ideanote besteht aus mehreren Komponenten, die mithilfe von Ideanote Helm Chart in einem Kubernetes-Cluster bereitgestellt werden.
Das folgende Diagramm zeigt die Architektur dieser Komponenten und wie sie miteinander interagieren.

On-Premise-Architektur

Voraussetzungen

Bevor Sie Ideanote in einem Kubernetes-Cluster bereitstellen, müssen Sie die folgenden Voraussetzungen festlegen und erfüllen:

1. Erstellen Sie einen Kubernetes Cluster.

2. Installieren Sie kubectl.

3. Installieren Sie Helm.

4. Beziehen Sie ein ZIP-folder vom Ideanote-Team, um mit den erforderlichen Tokens auf das Helm-Chart und die Docker-Images zuzugreifen.

5. Authentifizieren Sie sich mit dem Ideanote Helm registry

6. Wählen Sie aus, wie core services bereitgestellt werden soll

7. Wählen Sie aus, wie Sie load balancing

8. Wählen Sie aus, wie Sie backups

9. Wählen Sie aus, wie Sie monitoring

10. Tokens für Integrationen erstellen

11. Aktualisieren Sie die Konfiguration in der values.yaml-Datei

1. Erstellen Sie einen Kubernetes cluster

Ein Cluster mit insgesamt mindestens 4 virtuellen CPUs und 10 GB RAM wird empfohlen.
Bitte beachten Sie die Anweisungen Ihres Cloud-Anbieters zum Erstellen eines Kubernetes-Clusters.

2. Installieren Sie kubectl

Informationen zur Installation von kubectl finden Sie in der Kubernetes-Installationsdokumentation. Die Dokumentation deckt die meisten Betriebssysteme ab.

Nachdem Sie den Cluster erstellt haben, müssen Sie kubectl konfigurieren, bevor Sie über die Befehlszeile mit dem Cluster interagieren können.

3. Installieren Sie Helm

In dieser Anleitung verwenden wir die neueste Version von Helm v3 (v3.15.4 oder höher). Informationen zur Installation von Helm finden Sie in der Helm-Installationsdokumentation.

4. Ein ZIP-folder vom Ideanote-Team

Um Zugriff auf das Ideanote-Helm-Chart anzufordern, müssen Sie sich unter hello@ideanote.io an das Ideanote-Team wenden.
Für den Erhalt dieses Zugriffstokens ist eine Ideanote-Lizenz erforderlich.

Ideanote stellt Ihnen eine ZIP-folder mit dem Namen ideanote-on-premise.zip zur Verfügung, die Folgendes enthält:

  • Eine values.yaml-Datei mit der Standardkonfiguration. Diese Datei enthält auch Registry-Geheimnisse, die der Kubernetes-Cluster zum Abrufen der Docker-Images benötigt. Weitere Informationen zur Konfiguration des Helm-Charts für den Produktivbetrieb finden Sie in dieser Anleitung.
  • Eine helm-access-token.json-Datei mit dem Zugriffstoken für die Helm-Registry.

5. Authentifizieren Sie sich mit dem Ideanote Helm registry

Führen Sie den folgenden Befehl aus, um sich mit helm-access-token.json aus der von Ideanote bereitgestellten ZIP-folder bei der Helm-Registry zu authentifizieren:

# Linux/MacOS
cat helm-access-token.json | helm registry login -u _json_key --password-stdin europe-west3-docker.pkg.dev

# Windows (Command Prompt)
type helm-access-token.json | helm registry login -u _json_key --password-stdin europe-west3-docker.pkg.dev

# Windows (PowerShell)
Get-Content helm-access-token.json | helm registry login -u _json_key --password-stdin europe-west3-docker.pkg.dev

Optional: Sie können den folgenden Befehl ausführen, um zu überprüfen, ob Sie bei der Helm-Registry authentifiziert sind.
Dadurch wird das Ideanote Helm Chart auf Ihren lokalen Rechner heruntergeladen.

helm pull oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0

6. Wählen Sie aus, wie die Core-Dienste bereitgestellt werden sollen

Das Ideanote Helm Chart umfasst zwei Unterdiagramme für Datenbank- und Caching-Dienste, die im Rahmen des Installationsprozesses installiert werden:

  • PostgreSQL, der als primäre Datenbank verwendet wird
  • Redis, der als Caching-Dienst verwendet wird

Für Produktionsumgebungen empfehlen wir jedoch, stattdessen extern verwaltete Dienste für Redis und PostgreSQL zu verwenden und bei der Installation des Helm-Charts die Verbindungsdetails anzugeben.

Daher müssen Sie vor der Installation des Ideanote Helm Chart zwischen den folgenden beiden Optionen wählen:

  1. Enthaltene Subcharts: Lassen Sie das Helm-Chart Redis und PostgreSQL automatisch in Ihrem Cluster installieren. Dies ist die Standardoption.. Weitere Informationen zur Konfiguration dieser enthaltenen Kerndienste finden Sie hier.
  2. Verwaltete Kerndienste: Verwenden Sie verwaltete Dienste für Redis und/oder PostgreSQL. Bei dieser Option müssen Sie bei der Installation des Helm-Charts die Verbindungsdetails der verwalteten Dienste angeben. Weitere Informationen zur Konfiguration eigener verwalteter Dienste finden Sie in dieser Anleitung.

7. Wählen Sie aus, wie Sie load balancing

Das Ideanote Helm Chart umfasst zwei Unterdiagramme zur Verwaltung des Load-Balancings und der SSL-Zertifikate:

  • ingress-nginx Ingress-Controller/Load-Balancer, der verwendet wird, um den Datenverkehr zu den Ideanote-Diensten weiterzuleiten.
  • cert-manager, der verwendet wird, um mithilfe von Let’s Encrypt automatisch SSL-Zertifikate für die Ideanote-Dienste auszustellen.

Bei der Installation von Ideanote Helm Chart müssen Sie daher zwischen den folgenden zwei Optionen wählen:

  1. Enthaltene Subcharts: Lassen Sie das Helm-Chart automatisch den ingress-nginx Load-Balancer und cert-manager in Ihrem Cluster installieren. Dies ist die Standardoption. Für diese Option benötigen Sie eine Domain, die Ihnen gehört und für die Sie einen DNS-Eintrag hinzufügen können. Dies kann eine Subdomain wie poc.domain.com sein. Die Let’s Encrypt Server müssen die IP-Adresse Ihres Kubernetes-Clusters auflösen können, um Zertifikate auszustellen. Weitere Informationen zur Konfiguration des integrierten Load-Balancers finden Sie hier.
  2. Verwalteter Load-Balancer: Wählen Sie Ihre eigene Load-Balancing-Lösung – entweder mit einem eigenen verwalteten Ingress-Controller/Load-Balancer oder mit dem Load-Balancer eines Cloud-Anbieters. Weitere Informationen zur Konfiguration eines eigenen benutzerdefinierten Load-Balancers finden Sie hier.

Unabhängig davon, wofür Sie sich oben entscheiden: Wenn Sie das Helm-Chart installieren, müssen Sie Ideanote eine URL angeben, über die Sie auf die Ideanote-Dienste zugreifen werden.
Diese URL muss der Datei values.yaml unter global.ideanote.ingress.url.

global:
  ideanote:
    ingress:
      url: https://<your-domain>

Wenn Sie den enthaltenen nginx-Ingress-Controller/Load-Balancer und die cert-manager-Untercharts verwenden möchten, müssen Sie außerdem Ihre E-Mail-Adresse in der Datei values.yaml angeben.
Diese E-Mail-Adresse wird von Let’s Encrypt verwendet, um SSL-Zertifikate für die Ideanote-Dienste auszustellen.

cert-manager:
  email: <your-email-address>

8. Wählen Sie aus, wie Sie backups

Der Ideanote Helm Chart verfügt derzeit nicht über eine integrierte Backup-Lösung.
Wir empfehlen dringend, einen Backup-Zeitplan für Produktionsbereitstellungen einzurichten.

Je nachdem, welche Subcharts Sie installieren, erstellt Ideanote in Ihrem Cluster 3 PVCs (Persistent Volume Claims) mit Volumes, die Sie alle sichern müssen:

  • PostgreSQL-Datenbank-Volume: data-<release>-postgresql-0 (wird nicht erstellt, wenn Sie verwaltetes PostgreSQL verwenden)
  • Redis-Datenbank-Volume: redis-data-<release>-redis-master-0 (wird nicht erstellt, wenn Sie verwaltetes Redis verwenden)
  • Volume für Ideanote-Uploads: <release>-storage-data

9. Wählen Sie aus, wie Sie monitoring

Der Ideanote Helm Chart verfügt derzeit nicht über eine integrierte Monitoring-Lösung.
Wir arbeiten daran, künftig Unterstützung für Prometheus und Grafana hinzuzufügen.

Die Ideanote-Dienste schreiben Protokolle in stdout und stderr.
Diese Protokolle werden anschließend von der Container-Runtime erfasst und können über Kubernetes-Tools wie kubectl logs abgerufen werden.
Standardmäßig sind diese Protokolle jedoch an den Lebenszyklus des Pods gebunden. Wird ein Pod beendet, gehen seine Protokolle daher verloren, sofern sie nicht an anderer Stelle aufbewahrt werden.

Um eine ordnungsgemäße Überwachung der Ideanote-Dienste einzurichten, müssen Sie daher eine Überwachungslösung installieren, die diese Protokolle aus den laufenden Containern im Kubernetes-Cluster erfassen kann.

10. Erstellen Sie Tokens für Integrationen

Für die folgenden optionalen Funktionen müssen Sie Tokens für (externe) Integrationen erstellen und konfigurieren. Sie sind alle optional.

  • OpenAI-Integration für KI-Funktionen. Legen Sie den Wert von ideanote.api.openai.key auf einen gültigen OpenAI-API-Schlüssel fest. Weitere Informationen zur Konfiguration der OpenAI-Integration finden Sie hier.
  • Sendgrid-Integration für E-Mail-Benachrichtigungen. Legen Sie den Wert von ideanote.api.sendgrid.key auf einen gültigen Sendgrid-API-Schlüssel fest. Weitere Informationen zur Konfiguration der Sendgrid-Integration finden Sie hier.
  • SAML-Integration für Single-Sign-on-Funktionen. Weitere Informationen zur Konfiguration der SAML-Integration finden Sie hier.
  • LDAP-Integration für Single-Sign-on-Funktionen. Weitere Informationen zur Konfiguration der LDAP-Integration finden Sie hier.

11. Aktualisieren Sie die Konfiguration in der Datei values.yaml

Die values.yaml, die im ZIP-folder enthalten ist, den das Ideanote-Team bereitstellt, enthält die Standardkonfiguration für Ideanote Helm Chart.

Die Standardkonfiguration ist nicht für den Produktiveinsatz vorgesehen und kann als Ausgangspunkt für die Anpassung des Helm-Charts an Ihre Anforderungen dienen.

Erforderliche Werte:

  • global.ingress.url (erforderlich): Die URL, unter der Ideanote betrieben werden soll. Beispiele: https://domain.com, https://poc.domain.com, http://192.0.2.0. Weitere Informationen zum load-balancing finden Sie hier.
  • cert-manager.email (erforderlich, wenn der Standard-Load-Balancer und cert-manager ausgewählt werden): Ihre E-Mail-Adresse, damit Let’s Encrypt ein Zertifikat ausstellen kann. Weitere Informationen zu cert-manager finden Sie hier.

Ideanote installieren

Bevor Sie das Helm-Chart installieren, müssen Sie alle oben genannten 11 Voraussetzungen erfüllen.

Um das Ideanote Helm Chart zu installieren, führen Sie den folgenden Befehl aus.
Dabei wird davon ausgegangen, dass Sie values.yaml gemäß den Voraussetzungen und Ihren Anforderungen konfiguriert haben.

helm install ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --create-namespace --namespace ideanote --wait --timeout 10m -f values.yaml

Dadurch werden die Ideanote-Dienste in Ihrem Kubernetes-Cluster in einem neuen Namespace namens ideanote und mit dem Release-Namen ideanote installiert.
Warten Sie einige Minuten, bis alle Ressourcen zugewiesen wurden und die Dienste gestartet sind.

Sie können den Status jedes Pods mit dem folgenden Befehl überprüfen:

kubectl get pods -n ideanote --watch

Führen Sie die folgenden Schritte aus, um die Installation abzuschließen

Bei diesen Schritten wird davon ausgegangen, dass Sie das Ideanote Helm Chart mit den enthaltenen ingress-nginx Load-Balancer- und cert-manager Sub-Diagrammen installieren.

1․ Rufen Sie die IP-Adresse ab, die dem installierten NGINX Ingress dynamisch zugewiesen wurde:

kubectl get ingress -l "app.kubernetes.io/part-of"=ideanote --namespace ideanote

2․ Fügen Sie diese IP-Adresse den DNS-Einträgen für die Domain hinzu, die Sie in der Datei values.yaml angegeben haben.

3․ Warten Sie einige Minuten, bis die DNS-Einträge propagiert wurden und cert-manager die SSL-Zertifikate ausgestellt hat. Überprüfen Sie den Status der Zertifikate mit den folgenden Befehlen:

kubectl describe certificate -l "app.kubernetes.io/part-of"=ideanote --namespace ideanote

kubectl get certificaterequest -n ideanote
kubectl describe CertificateRequest ideanote-tls-1 -n ideanote

4․ Rufen Sie abschließend die URL auf, die Sie in der Datei values.yaml angegeben haben, um Ideanote einzurichten.

Einrichtung Ihres Ideanote-Workspaces

Nachdem Sie Ideanote in Ihrem Kubernetes-Cluster installiert haben, müssen Sie als letzten Schritt Ihren Ideanote-Workspace einrichten.
Sie können auf Ihren Ideanote-Workspace zugreifen, indem Sie die URL aufrufen, die Sie in der Datei values.yaml angegeben haben, und den Anweisungen auf dem Bildschirm folgen.

Workspace-Einrichtung mit den Optionen „Von Grund auf neu“ und „Daten importieren“

Sie können Ihren Workspace auf zwei Arten einrichten:

  • Von Grund auf neu: Sie können einen Workspace von Grund auf neu einrichten. Dabei werden Sie durch die Erstellung eines Ideanote-Besitzerkontos und eines Workspaces geführt.
  • Daten importieren: Wenn Sie Ideanote in der Vergangenheit auf ideanote.io verwendet haben, können Sie Ihren gesamten Workspace in Ihre On-Premises-Umgebung importieren. Wenden Sie sich dazu bitte an das Ideanote-Team, das Ihnen eine TAR-folder mit allen Daten Ihres Workspace zur Verfügung stellt. Dieser TAR-file sollte während des Workspace-Einrichtungsprozesses importiert werden, wenn Sie dazu aufgefordert werden.

Beispielbereitstellungen

Dieser Abschnitt enthält Beispiele dafür, wie Sie Ideanote bei verschiedenen Cloud-Anbietern und in unterschiedlichen Umgebungen bereitstellen können.
Dies kann als Inspiration dafür dienen, wie Sie Ideanote in Ihrer eigenen Umgebung bereitstellen können.
Sie können Ideanote bei einem Cloud-Anbieter Ihrer Wahl installieren, wir empfehlen jedoch die Verwendung von AWS, Azure oder Google Cloud Platform.
Sie können Ideanote auch mithilfe von Minikube auf einem lokalen Kubernetes-Cluster installieren.

Bei allen Beispielen für Bereitstellungen wird davon ausgegangen, dass Sie die Voraussetzungen erfüllt und die Datei values.yaml nach Ihren Anforderungen konfiguriert haben.

Minikube

Die Konfiguration von Minikube deaktiviert das enthaltene nginx Load-Balancing-Unterdiagramm und verwendet stattdessen das native Routing-Add-on von minikube.

Führen Sie die folgenden Schritte aus, um Ideanote auf Minikube zu installieren:

1․ Docker installieren

2․ Minikube installieren

3․ Starten Sie Minikube mit dem folgenden Befehl. Dadurch werden dem Cluster 4 CPUs und 8 GB RAM zugewiesen:

minikube start --cpus 4 --memory 8192

4․ Aktivieren Sie die erforderlichen Add-ons:

minikube addons enable metrics-server
minikube addons enable ingress

5․ Stellen Sie sicher, dass die folgende Konfiguration in der Datei values.yaml festgelegt ist:

global:
  ideanote:
    ingress:
      # `minikube tunnel` will expose the load balancer on this IP
      url: "http://127.0.0.1"
      tls:
        enabled: false

# Disable both cert-manager and nginx because Minikube is using its own routing addon
cert-manager:
  install: false

ingress-nginx:
  install: false

6․ Installieren Sie das Ideanote-Helm-Chart:

helm install ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --create-namespace --namespace ideanote --wait --timeout 10m -f values.yaml

7․ Starten Sie den Minikube-Tunnel (und das Dashboard):

minikube tunnel
minikube dashboard

8․ Rufen Sie http://127.0.0.1 auf und richten Sie Ihre Ideanote-Instanz ein.

Azure Kubernetes Service (AKS)

Die Azure-Konfiguration verwendet den enthaltenen nginx Ingress-Controller und cert-manager, die von Ideanote Helm Chart bereitgestellt werden.
Wenn Sie stattdessen Azure-native routing add-on für Kubernetes verwenden möchten, können Sie dies tun, indem Sie diese Anweisungen befolgen und die enthaltenen Dienste nginx sowie cert-manager deaktivieren (hier erfahren Sie, wie Sie diese Dienste deaktivieren: hier).

1․ Erstellen Sie einen Azure Kubernetes Service (AKS)-Cluster mit mindestens 2 vCPU und 8 GB Arbeitsspeicher (zum Beispiel mit Standard_DS2_v2). Weitere Informationen zum Erstellen eines Azure Kubernetes-Clusters finden Sie in dieser Anleitung.

2․ Installieren Sie Azure CLI auf Ihrem lokalen Rechner. Weitere Informationen finden Sie in dieser Anleitung.

3․ Führen Sie den folgenden Befehl aus, um kubectl für die Verbindung mit Ihrem AKS-Cluster zu konfigurieren:

az aks get-credentials --resource-group Ideanote --name Ideanote

4․ Konfigurieren Sie values.yaml entsprechend den Voraussetzungen und Ihren Anforderungen. Legen Sie global.ingress.url auf den Domainnamen fest, den Sie für Ideanote verwenden möchten. Später in dieser Anleitung müssen Sie für diese Domain einen DNS-Eintrag einrichten.

5․ Installieren Sie das Ideanote-Helm-Chart:

helm install ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --create-namespace --namespace ideanote --wait --timeout 10m -f values.yaml

6․ Warten Sie einige Minuten, bis alle Dienste gestartet wurden, und rufen Sie die IP-Adresse ab, die Azure dem installierten NGINX Ingress dynamisch zugewiesen hat:

kubectl get ingress -l "app.kubernetes.io/part-of"=ideanote --namespace ideanote

7․ Fügen Sie diese IP-Adresse den DNS-Einträgen für die Domain hinzu, die Sie in der Datei values.yaml angegeben haben.

8․ Warten Sie einige Minuten, bis die DNS-Einträge propagiert sind, und rufen Sie dann die URL auf, die Sie in der Datei values.yaml angegeben haben, um Ideanote einzurichten. Lesen Sie bitte die Anleitung zur Fehlerbehebung, falls Probleme mit der URL/IP-Adresse auftreten.

Konfigurieren des LoadBalancer-nginx-Ingress-Controllers für Azure

Wenn Sie den mitgelieferten LoadBalancer nginx Ingress-Controller für Azure konfigurieren müssen, können Sie dies tun, indem Sie diese Anmerkungen zur values.yaml Datei hinzufügen.
Sie können diese Anmerkungen auch verwenden, um dem LoadBalancer eine statische IP-Adresse zuzuweisen, indem Sie dieser Anleitung folgen.
Zum Beispiel:

ingress-nginx:
  controller:
    service:
      annotations:
        "service.beta.kubernetes.io/azure-load-balancer-resource-group": "MC_Ideanote_Ideanote_francecentral"
        "service.beta.kubernetes.io/azure-pip-name": "public-cluster-load-balancer-ip"

Azure-Spot-Knoten verwenden

Fügen Sie Folgendes zur Datei values.yaml hinzu, um alle Deployments auf Azure-Spot-Knoten auszuführen:

tolerationsAndAffinity: &tolerationsAndAffinity
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: "kubernetes.azure.com/scalesetpriority"
                operator: In
                values:
                  - "spot"
  tolerations:
    - key: "kubernetes.azure.com/scalesetpriority"
      operator: "Equal"
      value: "spot"
      effect: "NoSchedule"

postgresql:
  primary:
    <<: *tolerationsAndAffinity

redis:
  master:
    <<: *tolerationsAndAffinity

ingress-nginx:
  controller:
    <<: *tolerationsAndAffinity

cert-manager:
  <<: *tolerationsAndAffinity
  cainjector:
    <<: *tolerationsAndAffinity
  webhook:
    <<: *tolerationsAndAffinity
  startupapicheck:
    <<: *tolerationsAndAffinity

global:
  ideanote:
    <<: *tolerationsAndAffinity

Google Cloud-Plattform (GKE)

Dieses Beispiel zeigt Ihnen, wie Sie Ideanote auf einem GCP-Kubernetes-Autopilot-Cluster (GKE) einrichten.
Der Cluster ist produktionsbereit und verfügt über ein verwaltetes PostgreSQL sowie ein verwaltetes LoadBalancer, einschließlich CDN Caching für Assets.

Voraussetzungen:

  • Erfüllen Sie alle primären Voraussetzungen
  • Sie müssen Inhaber einer Domain sein, für die Sie einen DNS-Eintrag hinzufügen können
  • Sie benötigen ein Google Cloud Platform-Konto

1․ Neues VPC-Netzwerk erstellen
2․ Neuen Kubernetes-Autopilot-Cluster erstellen

  • Das in Schritt 1 erstellte VPC-Netzwerk anhängen

3․ Neue PostgreSQL-Instanz erstellen

  • Das in Schritt 1 erstellte VPC-Netzwerk anhängen
  • Erstellen Sie eine neue Datenbank mit dem Namen ideanote
  • Erstellen Sie einen neuen Nutzer mit dem Namen ideanote und notieren Sie das Passwort

4. gcloud cli installieren und bei Ihrem GCP-Konto anmelden
5. kubectl konfigurieren, um eine Verbindung zu Ihrem GCP-Cluster herzustellen

gcloud container clusters get-credentials <cluster> --region <region> --project <project>

6. Erstellen Sie eine neue statische IP-Adresse für LoadBalancer und notieren Sie sich die IP-Adresse:

gcloud compute addresses create ideanote-global --global
gcloud compute addresses list --project ideanote-sa

7. Rufen Sie Ihren DNS-Anbieter auf und fügen Sie einen A-Eintrag für die Domain hinzu, die Sie für Ideanote verwenden möchten. Verweisen Sie mit dem A-Eintrag auf die statische IP-Adresse, die Sie in Schritt 6 erstellt haben.

8. Konfigurieren Sie die Datei values.yaml mit den folgenden Werten. Tragen Sie Werte für global.ideanote.psql.host, global.ideanote.psql.passwordSecret.password, global.ideanote.ingress.url und global.ideanote.gke.ingress.staticIPName ein.

global:
  # This will create GKE-specific resources such as selecting the native GCP ingress controller, creating backend/frontend configs and activating CDN caching for assets
  cloudProvider: GKE

  gke:
    ingress:
      staticIPName: "<static-google-cloud-ip-name>"

  ideanote:
    ingress:
      url: "https://<your-domain>"

    autoscaling:
      enabled: true

    resources:
      enabled: true

    psql:
      database: "ideanote"
      username: "ideanote"
      host: "<google-cloud-sql-ip>"
      passwordSecret:
        password: "<google-cloud-sql-password>"

    storage:
      persistence:
        size: "50Gi"

cert-manager:
  install: false

ingress-nginx:
  install: false

postgresql:
  install: false

redis:
  install: true
  master:
    persistence:
      size: 5Gi

9. (Optional) Passen Sie die standardmäßige Storage Class mit allowVolumeExpansion: true an, damit sich die PVCs einfach skalieren lassen:

kubectl patch storageclass standard-rwo -p '{"allowVolumeExpansion": true}'

10. Installieren Sie das Ideanote-Helm-Diagramm:

helm install ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --create-namespace --namespace ideanote --wait --timeout 10m -f values.yaml

11. Warten Sie, bis der Cluster bereit ist, und rufen Sie die in values.yaml angegebene URL auf. Bei Autopilot-Clustern kann die anfängliche Zuweisung von Ressourcen lange dauern. Warten Sie außerdem bis zu 1 Stunde, bis Google Cloud das SSL-Zertifikat ausstellt.

Machen Sie Ihren GKE-Cluster produktionsbereit

12. Patchen Sie Volume Claims mit persistentVolumeReclaimPolicy: Retain, um Datenverlust beim Löschen des Helm-Releases zu verhindern:

kubectl patch pvc -n ideanote ideanote-storage-data -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
kubectl patch pvc -n ideanote redis-data-ideanote-redis-master-0 -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'

13. Richten Sie Sicherungen für die PostgreSQL-Datenbank ein. Sie können Cloud SQL-Sicherungen oder eine Sicherungslösung eines Drittanbieters verwenden.

14. Richten Sie Sicherungen für den gesamten Kubernetes-Cluster ein, einschließlich VPCs (Persistent Volume Claims), indem Sie diese Anleitung befolgen.

Verwendung von GCP-Spot-Nodes

Bitte fügen Sie der values.yaml Datei Folgendes hinzu, um Deployments auf GCP-Spot-VMs auszuführen:

nodeSelector: &nodeSelector
  nodeSelector:
    cloud.google.com/gke-spot: "true"

redis:
  master:
    <<: *nodeSelector

global:
  ideanote:
    <<: *nodeSelector

Ubuntu 24 mit MicroK8s (AWS-EC2-Instanz, Einzelknoten-Cluster)

Diese Anleitung zeigt Ihnen, wie Sie Ideanote auf einem Single-Node-Kubernetes-Cluster mithilfe von MicroK8s auf einer AWS-EC2-Instanz installieren.
Dabei werden die enthaltenen MicroK8s Add-ons nginx für den Lastenausgleich und das hostpath-storage-Add-on für die Speicherung verwendet.
Erwägen Sie, diese Add-ons in einer Produktionsumgebung durch eine produktionsreife Lösung zu ersetzen, beispielsweise openebs für die Speicherung und AWS ELB für den Lastenausgleich.

1. Eine neue Ubuntu-24-EC2-Instanz erstellen

  • Mindestens 4 CPUs und 8 GB RAM (zum Beispiel mit dem Instanztyp t1.large).
  • Mindestens 30 GB Speicherplatz.
  • Prüfen Sie Allow HTTPS traffic from the internet
  • Prüfen Sie Allow HTTP traffic from the internet
  • Erstellen Sie ein Schlüssel-Wert-Paar, verknüpfen Sie es und laden Sie es für den SSH-Zugriff herunter.
Einrichtung einer Amazon-EC2-Instanz mit ausgewähltem Ubuntu und einer Schaltfläche „Instanz starten“

2. Die IP-Adresse der Instanz einem Domainnamen zuordnen

Notieren Sie die öffentliche IP-Adresse der Instanz und ordnen Sie sie einer Domain zu, die Ihnen gehört, indem Sie einen A-Eintrag zu den DNS-Einstellungen der Domain hinzufügen.
Zum Beispiel: ideanote.your-domain.com oder your-domain.com.

3. Per SSH eine Verbindung zur Instanz herstellen

4. MicroK8s installieren

# Update the system
sudo apt update && sudo apt upgrade -y

# Install MicroK8s
sudo snap install microk8s --classic --channel=1.31

# Join the `microk8s` group
sudo usermod -a -G microk8s ubuntu
sudo chown -R ubuntu ~/.kube
newgrp microk8s

# Wait for all services to be running
microk8s status --wait-ready
microk8s kubectl get nodes
microk8s kubectl get services

# Alias `kubectl` to `microk8s kubectl`
alias kubectl='microk8s kubectl'

# Alias 'helm' to 'microk8s helm'
alias helm='microk8s helm'

# Add the above aliases to the `.bashrc` file
echo -e "\n# Alias kubectl to microk8s kubectl\nalias kubectl='microk8s kubectl'\n# Alias helm to microk8s helm\nalias helm='microk8s helm'" >> ~/.bashrc && source ~/.bashrc

5. Add-ons aktivieren

# Required addons
microk8s enable ingress
microk8s enable hostpath-storage # Consider using "openebs" in production environment

# Optional addons
microk8s enable dashboard
microk8s enable metrics-server

6. Die vom Ideanote-Team bereitgestellte ZIP-folder auf die Instanz hochladen

# Run this on your local machine
chmod 400 <key>.pem
scp -i <key>.pem ideanote-on-premise.zip ubuntu@<instance ip address>:/home/ubuntu

7. Die ZIP-folder auf der EC2-Instanz entpacken und sich bei der Helm-Registry authentifizieren

sudo apt install unzip
cd /home/ubuntu
unzip ideanote-on-premise.zip
cat helm-access-token.json | helm registry login -u _json_key --password-stdin europe-west3-docker.pkg.dev

8. Die Datei values.yaml mit den folgenden Werten aktualisieren

cert-manager:
  install: true
  email: <your-email-address>

# Don't install the included `nginx` Ingress controller as we are using the MicroK8s `ingress` addon
ingress-nginx:
  install: false

global:
  ideanote:
    ingress:
      url: "https://your-domain.com"

9. Das Ideanote-Helm-Diagramm installieren

helm install ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --create-namespace --namespace ideanote --wait --timeout 10m -f values.yaml

10. Warten Sie einige Minuten, bis alle Dienste gestartet sind und die SSL-Zertifikate von cert-manager

kubectl get deployments -n ideanote --watch
kubectl get certificaterequest -n ideanote --watch

11. Rufen Sie abschließend https://your-domain.com auf, um Ihren Ideanote-Workspace einzurichten

Konfigurieren Sie values.yaml

Die folgende Tabelle enthält die konfigurierbaren Parameter des Ideanote-Diagramms und ihre Standardwerte.

Schlüssel

Typ

Standard

Beschreibung

cert-manager.email

string

Legen Sie die E-Mail-Adresse fest, die für das ACME-Konto verwendet werden soll. Dieser Wert ist erforderlich, wenn Sie das enthaltene cert-managerDiagramm installieren und verwenden möchten.

cert-manager.install

boolean

true

Installieren Sie das enthaltene cert-manager-Subchart

cert-manager.resources.requests.cpu

string

"50m"

CPU-Ressourcenanforderungen für den cert-manager-Dienst

cert-manager.resources.requests.memory

string

"128Mi"

Speicherressourcenanforderungen für den cert-manager-Dienst

cert-manager.server

string

"https://acme-v02.api.letsencrypt.org/directory"

Legen Sie die ACME-Server-URL fest. Verwenden Sie zum Testen den Staging-Server "https://acme-staging-v02.api.letsencrypt.org/directory".

cert-manager.solvers

array

[{http01:{ingress:{ingressClassName:nginx}}}]

Konfigurieren Sie den ACME-Issuer für das cert-manager-Diagramm. Weitere Informationen finden Sie hier

global.cloudProvider

GKE / EKS / AKS

Der für die Bereitstellung zu verwendende Cloud-Anbieter. Wenn Sie diesen Wert festlegen, werden bei der Bereitstellung native Komponenten des angegebenen Cloud-Anbieters bevorzugt, beispielsweise ein nativer Load Balancer. Derzeit wird nur GKE unterstützt.

global.clusterDomain

string

"cluster.local"

Legen Sie optional die Cluster-Domain für die Bereitstellung fest. Dieser Wert wird zum Erzeugen interner Dienst-URLs verwendet.

global.ideanote.affinity

object

{}

Fügen Sie allen Ideanote-Bereitstellungen Affinität hinzu

global.ideanote.annotations

object

{}

Fügen Sie allen Ideanote-Bereitstellungen Anmerkungen hinzu

global.ideanote.autoRefreshBrowser

boolean

true

Standardmäßig wird die Webanwendung automatisch aktualisiert, sobald eine neue Version bereitgestellt wird. Dadurch können Nutzer die neueste Version der Webanwendung verwenden, ohne die Seite selbst aktualisieren zu müssen.

global.ideanote.autoscaling.enabled

boolean

false

Aktivieren oder deaktivieren Sie die automatische Skalierung für alle Ideanote-Bereitstellungen

global.ideanote.autoscaling.maxReplicas

number

Überschreiben Sie die maximale Anzahl von Replikaten für alle Ideanote-Bereitstellungen

global.ideanote.autoscaling.minReplicas

number

Überschreiben Sie die minimale Anzahl von Replikaten für alle Ideanote-Bereitstellungen

global.ideanote.autoscaling.targetCPUUtilizationPercentage

number

Überschreiben Sie den Zielprozentsatz für die CPU-Auslastung aller Ideanote-Bereitstellungen

global.ideanote.autoscaling.targetMemoryUtilizationPercentage

number

Überschreiben Sie den Zielprozentsatz für die Speicherauslastung aller Ideanote-Bereitstellungen

global.ideanote.features.featureSuggestions

boolean

true

Damit wird in der Benutzeroberfläche die Schaltfläche „Funktionsvorschlag“ aktiviert, über die Nutzer neue Funktionsanfragen direkt an das Ideanote-Team senden können.

global.ideanote.features.issueReporting

boolean

true

Damit wird in der Benutzeroberfläche die Schaltfläche „Problem melden“ aktiviert, über die Nutzer Probleme direkt an das Ideanote-Team melden können.

global.ideanote.image.credentials.email

string

Legen Sie die E-Mail-Adresse fest, mit der die Authentifizierung bei der Docker-Registry erfolgt. Dieser Wert wird von Ideanote bereitgestellt.

global.ideanote.image.credentials.password

string

Legen Sie das Passwort fest, das für die Authentifizierung bei der Docker-Registry verwendet wird. Dieser Wert wird von Ideanote bereitgestellt.

global.ideanote.image.pullPolicy

string

"IfNotPresent"

Überschreiben Sie die Image-Pull-Richtlinie für alle Ideanote-Bereitstellungen

global.ideanote.image.repository

string

"europe-west3-docker.pkg.dev/ideanote/ideanote"

Überschreiben Sie das Image-Repository für alle Ideanote-Bereitstellungen

global.ideanote.image.tag

string

Überschreiben Sie das Image-Tag für alle Ideanote-Bereitstellungen

global.ideanote.ingress.annotations

object

{}

Fügen Sie dem für Ideanote erstellten Ingress-Objekt zusätzliche Annotationen hinzu. Eine Liste der zulässigen Annotationen finden Sie in der enthaltenen nginx-ingress Diagramm hier

global.ideanote.ingress.className

string

Legen Sie den Namen der Ingress-Klasse für das Ideanote-Ingress-Objekt fest

global.ideanote.ingress.enabled

boolean

true

Aktivieren Sie die Erstellung des Ingress-Objekts für Ideanote

global.ideanote.ingress.tls.certManagerIssuerName

string

"letsencrypt"

Der cert-manager-Issuer, der für das TLS-Zertifikat verwendet werden soll.

global.ideanote.ingress.tls.enabled

boolean

true

Aktivieren oder deaktivieren Sie TLS für das für Ideanote erstellte Ingress-Objekt. Muss aktiviert sein, wenn Sie das cert-manager Unterdiagramm verwenden möchten.

global.ideanote.ingress.tls.secretName

string

"ideanote-tls"

Legen Sie den Secret-Namen für das TLS-Zertifikat fest. Erforderlich, wenn Sie das cert-manager Subchart deaktivieren und TLS aktivieren.

global.ideanote.ingress.url

string

Legen Sie die Ingress-URL für Ideanote fest. Dies muss eine Domain sein, die Ihnen gehört und über die Ideanote bereitgestellt werden soll. Dieser Wert kann auch eine Subdomain enthalten. Dieser Wert ist erforderlich.

global.ideanote.logLevel

error, warn, info, verbose, debug

"info"

Legen Sie logLevel für alle Ideanote-Dienste fest.

global.ideanote.networkPolicies.enabled

boolean

true

Dadurch werden Netzwerkrichtlinien für alle Ideanote-Dienste erstellt. Netzwerkrichtlinien beschränken den Datenverkehr zu und von Diensten und folgen standardmäßig dem Prinzip der geringsten Berechtigung.

global.ideanote.nodeSelector

object

{}

Fügen Sie nodeSelector zu allen Ideanote-Bereitstellungen hinzu

global.ideanote.podDisruptionBudget.enabled

boolean

true

Aktivieren oder deaktivieren Sie die Erstellung eines PodDisruptionBudget für alle Ideanote-Bereitstellungen

global.ideanote.podDisruptionBudget.minAvailable

number

1

Legen Sie die Mindestanzahl verfügbarer Pods für alle Ideanote-Bereitstellungen während Unterbrechungen fest

global.ideanote.psql.database

string

"ideanote"

Der für den Ideanote-Dienst zu verwendende Name der postgresql-Datenbank

global.ideanote.psql.host

string

"The host of the postgresql sub-chart service"

Der Host, der für die Verbindung mit der postgresql-Datenbank verwendet werden soll

global.ideanote.psql.passwordSecret.key

string

"postgres-password-user"

Überschreiben Sie den Schlüssel, unter dem das Passwort für den Datenbanknutzer im Secret gespeichert wird.

global.ideanote.psql.passwordSecret.name

string

Wenn Sie mit „kubectl“ ein eigenes Passwort-Secret für redis erstellen möchten, müssen Sie hier den Namen des Secrets festlegen. Das Secret muss den Schlüssel „global.ideanote.psql.passwordSecret.key“ enthalten.

global.ideanote.psql.passwordSecret.password

string

"A randomly generated password"

Legen Sie das Passwort für den Datenbanknutzer fest

global.ideanote.psql.port

number

5432

Der Port, der für die Verbindung mit der postgresql-Datenbank verwendet werden soll

global.ideanote.psql.username

string

"ideanote"

Der für den Ideanote-Dienst zu verwendende postgresql-Benutzername

global.ideanote.redis.database

integer

Die Redis-Datenbanknummer, die für den Ideanote-Dienst verwendet werden soll

global.ideanote.redis.host

string

"The host of the redis sub-chart service"

Der Host, der für die Verbindung zur redis-Datenbank verwendet werden soll

global.ideanote.redis.passwordSecret.key

string

"redis-password"

Überschreiben Sie den Schlüssel, der zum Speichern des Passworts für den redis-Nutzer im Secret verwendet wird.

global.ideanote.redis.passwordSecret.name

string

Wenn Sie mit „kubectl“ ein eigenes Passwort-Secret für redis erstellen möchten, müssen Sie hier den Namen des Secrets festlegen. Das Secret muss den Schlüssel „global.ideanote.redis.passwordSecret.key“ enthalten.

global.ideanote.redis.passwordSecret.password

string

Legen Sie das Passwort für den redis-Nutzer fest

global.ideanote.redis.port

number

6379

Der Port, der für die Verbindung zur redis-Datenbank verwendet werden soll

global.ideanote.redis.username

string

Der redis-Benutzername, der für den Ideanote-Dienst verwendet werden soll

global.ideanote.resources.enabled

boolean

false

Ressourcenanforderungen für alle Ideanote-Bereitstellungen aktivieren oder deaktivieren

global.ideanote.resources.limits.cpu

string

Das CPU-Limit für alle Ideanote-Bereitstellungen überschreiben

global.ideanote.resources.limits.memory

string

Das Speicherlimit für alle Ideanote-Bereitstellungen überschreiben

global.ideanote.resources.requests.cpu

string

Die CPU-Anforderung für alle Ideanote-Bereitstellungen überschreiben

global.ideanote.resources.requests.memory

string

Die Speicheranforderung für alle Ideanote-Bereitstellungen überschreiben

global.ideanote.restartDeploymentsWhenConfigChanges

boolean

true

Alle Dienste werden bei jeder Änderung der Konfiguration neu gestartet, damit die neue Konfiguration sofort angewendet wird.

global.ideanote.service.annotations

object

{}

Anmerkungen zu allen Ideanote-Diensten hinzufügen

global.ideanote.service.externalPort

number

Den externen Dienstport für alle Ideanote-Dienste überschreiben

global.ideanote.service.internalPort

number

Den internen Dienstport für alle Ideanote-Dienste überschreiben

global.ideanote.service.type

string

Den Diensttyp für alle Ideanote-Dienste überschreiben

global.ideanote.serviceAccount.annotations

object

{}

Anmerkungen zum von Ideanote erstellten serviceAccount hinzufügen

global.ideanote.serviceAccount.enabled

boolean

true

Ideanote-Bereitstellungen für die Verwendung eines serviceAccount aktivieren, der automatisch vom Ideanote Helm-Chart erstellt wird

global.ideanote.serviceAccount.name

string

""

Den Namen des Ideanote-serviceAccount überschreiben

global.ideanote.sso.saml.cert

string

SAML-Zertifikat zur Einrichtung von Ideanote als Serviceanbieter

global.ideanote.sso.saml.key

string

SAML-Privatschlüssel zur Einrichtung von Ideanote als Serviceanbieter

global.ideanote.tolerations

array

[]

Toleranzen zu allen Ideanote-Bereitstellungen hinzufügen

global.leaderElection.namespace

string

"kube-system"

cert-manager installiert Ressourcen standardmäßig im Namespace „kube-system“. Ändern Sie diesen Wert, wenn der Namespace „kube-system“ nicht geändert werden soll.

ideanote.api.affinity

object

Affinity für den api-Dienst festlegen

ideanote.api.annotations

object

{}

Zusätzliche Anmerkungen zur api-Bereitstellung hinzufügen

ideanote.api.autoscaling.enabled

boolean

true

Autoskalierung für den api-Dienst aktivieren. Dies kann mithilfe von global.ideanote.autoscaling.enabled.

ideanote.api.autoscaling.maxReplicas

number

4

Maximale Anzahl der Replikate für den api-Dienst

ideanote.api.autoscaling.minReplicas

number

2

Minimale Anzahl der Replikate für den api-Dienst

ideanote.api.autoscaling.targetCPUUtilizationPercentage

number

60

Ziel-CPU-Auslastungsprozentsatz für den api-Dienst

ideanote.api.autoscaling.targetMemoryUtilizationPercentage

number

70

Ziel-Speicherauslastungsprozentsatz für den api-Dienst

ideanote.api.enableMigrationSchemaValidation

boolean

false

Aktivieren Sie diesen Wert, damit der Pod sofort fehlschlägt, wenn er eine Abweichung im Datenbankschema feststellt. Dies tritt in der Regel beim Rollback des Dienstes api auf, nachdem das Datenbankschema mit einem neueren Schema aktualisiert wurde, aber bevor die Datenbank auf das vorherige Schema zurückgesetzt wurde.

ideanote.api.nodeSelector

object

nodeSelector für den api-Dienst festlegen

ideanote.api.openai.key

string

Einen OpenAI-API-Schlüssel festlegen, um die OpenAI API zu aktivieren

ideanote.api.path

string

"api"

Der Pfad oder die Subdomain des api-Dienstes. Dieser Wert wird zum Erstellen der URL für das Ingress-Objekt verwendet.

ideanote.api.replicaCount

number

1

Anzahl der Replikate für den api-Dienst. Durch Aktivieren der automatischen Skalierung wird dieser Wert überschrieben.

ideanote.api.resources.enabled

boolean

true

Auf „true“ setzen, um Ressourcenanforderungen für den api-Dienst zu aktivieren. Dies kann durch Verwendung von global.ideanote.resources.enabled überschrieben werden.

ideanote.api.resources.limits.cpu

string

"1500m"

CPU- und Arbeitsspeicher-Ressourcenlimits für den api-Dienst

ideanote.api.resources.limits.memory

string

"2Gi"

Arbeitsspeicher-Ressourcenlimits für den api-Dienst

ideanote.api.resources.requests.cpu

string

"250m"

CPU- und Arbeitsspeicher-Ressourcenanforderungen für den api-Dienst

ideanote.api.resources.requests.memory

string

"1Gi"

Arbeitsspeicher-Ressourcenanforderungen für den api-Dienst

ideanote.api.sendgrid.key

string

Einen Sendgrid-API-Schlüssel festlegen, damit Ideanoate E-Mails versenden kann

ideanote.api.service.annotations

object

{}

Zusätzliche Anmerkungen zum api-Dienst hinzufügen

ideanote.api.service.externalPort

number

80

Externer Port für api

ideanote.api.service.internalPort

number

3000

Interner Port für api

ideanote.api.service.type

string

"ClusterIP"

Diensttyp für api

ideanote.api.tolerations

array

Toleranzen für den api-Dienst festlegen

ideanote.convert.affinity

object

Legen Sie die Affinität für den Convert-Dienst fest

ideanote.convert.annotations

object

{}

Fügen Sie der Convert-Bereitstellung zusätzliche Annotationen hinzu

ideanote.convert.autoscaling.enabled

boolean

true

Aktivieren Sie die automatische Skalierung für den Convert-Dienst. Dies kann durch Verwendung von global.ideanote.autoscaling.enabled überschrieben werden.

ideanote.convert.autoscaling.maxReplicas

number

4

Maximale Anzahl der Replikate für den Convert-Dienst

ideanote.convert.autoscaling.minReplicas

number

1

Mindestanzahl der Replikate für den Convert-Dienst

ideanote.convert.autoscaling.targetCPUUtilizationPercentage

number

60

Zielauslastung der CPU in Prozent für den Convert-Dienst

ideanote.convert.autoscaling.targetMemoryUtilizationPercentage

number

70

Zielauslastung des Arbeitsspeichers in Prozent für den Convert-Dienst

ideanote.convert.nodeSelector

object

nodeSelector für den convert-Dienst festlegen

ideanote.convert.replicaCount

number

1

Anzahl der Replikate für den Convert-Dienst. Wenn die automatische Skalierung aktiviert ist, wird dieser Wert überschrieben.

ideanote.convert.resources.enabled

boolean

true

Auf „true“ setzen, um Ressourcenanforderungen für den Convert-Dienst zu aktivieren. Dies kann durch Verwendung von global.ideanote.resources.enabled überschrieben werden.

ideanote.convert.resources.limits.cpu

string

"2000m"

CPU- und Arbeitsspeicher-Ressourcenlimits für den Convert-Dienst

ideanote.convert.resources.limits.memory

string

"5Gi"

Arbeitsspeicher-Ressourcenlimits für den Convert-Dienst

ideanote.convert.resources.requests.cpu

string

"500m"

CPU- und Arbeitsspeicher-Ressourcenanforderungen für den Convert-Dienst

ideanote.convert.resources.requests.memory

string

"1Gi"

Arbeitsspeicher-Ressourcenanforderungen für den Convert-Dienst

ideanote.convert.service.annotations

object

{}

Zusätzliche Anmerkungen zum Convert-Dienst hinzufügen

ideanote.convert.service.externalPort

number

80

Externer Port für Convert

ideanote.convert.service.internalPort

number

3000

Interner Port für Convert

ideanote.convert.service.type

string

"ClusterIP"

Diensttyp für Convert

ideanote.convert.tolerations

array

Toleranzen für den Convert-Dienst festlegen

ideanote.html-renderer.affinity

object

Affinität für den html-renderer-Dienst festlegen

ideanote.html-renderer.annotations

object

{}

Zusätzliche Anmerkungen zur html-renderer-Bereitstellung hinzufügen

ideanote.html-renderer.autoscaling.enabled

boolean

true

Automatische Skalierung für den html-renderer-Dienst aktivieren. Dies kann durch Verwendung von global.ideanote.autoscaling.enabled überschrieben werden.

ideanote.html-renderer.autoscaling.maxReplicas

number

4

Maximale Anzahl der Replikate für den html-renderer-Dienst

ideanote.html-renderer.autoscaling.minReplicas

number

1

Minimale Anzahl der Replikate für den html-renderer-Dienst

ideanote.html-renderer.autoscaling.targetCPUUtilizationPercentage

number

60

Zielwert für die CPU-Auslastung in Prozent für den html-renderer-Dienst

ideanote.html-renderer.autoscaling.targetMemoryUtilizationPercentage

number

70

Zielwert für die Arbeitsspeicherauslastung in Prozent für den html-renderer-Dienst

ideanote.html-renderer.nodeSelector

object

nodeSelector für den html-renderer-Dienst festlegen

ideanote.html-renderer.replicaCount

number

1

Anzahl der Replikate für den html-renderer-Dienst. Durch Aktivieren der automatischen Skalierung wird dieser Wert überschrieben.

ideanote.html-renderer.resources.enabled

boolean

true

Auf true setzen, um Ressourcenanforderungen für den Dienst html-renderer zu aktivieren. Dies kann überschrieben werden durch Verwendung von global.ideanote.resources.enabled.

ideanote.html-renderer.resources.limits.cpu

string

"1500m"

CPU- und Arbeitsspeicher-Ressourcenlimits für den Dienst html-renderer

ideanote.html-renderer.resources.limits.memory

string

"2Gi"

Arbeitsspeicher-Ressourcenlimits für den Dienst html-renderer

ideanote.html-renderer.resources.requests.cpu

string

"250m"

CPU- und Arbeitsspeicher-Ressourcenanforderungen für den Dienst html-renderer

ideanote.html-renderer.resources.requests.memory

string

"500Mi"

Arbeitsspeicher-Ressourcenanforderungen für den Dienst html-renderer

ideanote.html-renderer.service.annotations

object

{}

Zusätzliche Annotationen zum Dienst html-renderer hinzufügen

ideanote.html-renderer.service.externalPort

number

80

Externer Port für html-renderer

ideanote.html-renderer.service.internalPort

number

3000

Interner Port für html-renderer

ideanote.html-renderer.service.type

string

"ClusterIP"

Diensttyp für html-renderer

ideanote.html-renderer.tolerations

array

Toleranzen für den Dienst html-renderer festlegen

ideanote.idea-widget.affinity

object

Affinität für den Dienst idea-widget festlegen

ideanote.idea-widget.annotations

object

{}

Zusätzliche Annotationen zum Deployment von idea-widget hinzufügen

ideanote.idea-widget.autoscaling.enabled

boolean

true

Autoskalierung für den Dienst idea-widget aktivieren. Dies kann überschrieben werden durch Verwendung von global.ideanote.autoscaling.enabled.

ideanote.idea-widget.autoscaling.maxReplicas

number

4

Maximale Anzahl von Replikaten für den Dienst idea-widget

ideanote.idea-widget.autoscaling.minReplicas

number

1

Mindestanzahl von Replikaten für den Dienst idea-widget

ideanote.idea-widget.autoscaling.targetCPUUtilizationPercentage

number

60

Zielauslastung der CPU in Prozent für den Dienst idea-widget

ideanote.idea-widget.autoscaling.targetMemoryUtilizationPercentage

number

70

Zielauslastung des Arbeitsspeichers in Prozent für den Dienst idea-widget

ideanote.idea-widget.nodeSelector

object

nodeSelector für den Dienst idea-widget festlegen

ideanote.idea-widget.path

string

"widget"

Der Pfad oder die Subdomain des Dienstes idea-widget. Dieser Wert wird zur Erstellung der URL für das Ingress-Objekt verwendet.

ideanote.idea-widget.replicaCount

number

1

Anzahl der Replikate für den Dienst idea-widget. Bei aktivierter Autoskalierung wird dieser Wert überschrieben.

ideanote.idea-widget.resources.enabled

boolean

true

Auf true setzen, um Ressourcenanforderungen für den Dienst idea-widget zu aktivieren. Dies kann überschrieben werden durch Verwendung von global.ideanote.resources.enabled.

ideanote.idea-widget.resources.limits.cpu

string

"1500m"

CPU- und Arbeitsspeicher-Ressourcenlimits für den Dienst idea-widget

ideanote.idea-widget.resources.limits.memory

string

"2Gi"

Arbeitsspeicher-Ressourcenlimits für den Dienst idea-widget

ideanote.idea-widget.resources.requests.cpu

string

"250m"

CPU- und Arbeitsspeicher-Ressourcenanforderungen für den Dienst idea-widget

ideanote.idea-widget.resources.requests.memory

string

"1Gi"

Arbeitsspeicher-Ressourcenanforderungen für den Dienst idea-widget

ideanote.idea-widget.service.annotations

object

{}

Zusätzliche Annotationen zum idea-widget-Dienst hinzufügen

ideanote.idea-widget.service.externalPort

number

80

Externer Port für idea-widget

ideanote.idea-widget.service.internalPort

number

3000

Interner Port für idea-widget

ideanote.idea-widget.service.type

string

"ClusterIP"

Diensttyp für idea-widget

ideanote.idea-widget.tolerations

array

Toleranzen für den idea-widget-Dienst festlegen

ideanote.storage.affinity

object

Affinität für den Speicherdienst festlegen

ideanote.storage.annotations

object

{}

Zusätzliche Anmerkungen zum Deployment „storage“ hinzufügen

ideanote.storage.autoscaling.enabled

boolean

false

Autoscaling ist für den Dienst „storage“ standardmäßig nicht aktiviert. Ändern Sie „ideanote.storage.persistence.accessMode“ in „ReadWriteMany“, wenn Sie es aktivieren.

ideanote.storage.autoscaling.maxReplicas

number

4

Maximale Anzahl von Replikaten für den Speicherdienst

ideanote.storage.autoscaling.minReplicas

number

1

Minimale Anzahl von Replikaten für den Speicherdienst

ideanote.storage.autoscaling.targetCPUUtilizationPercentage

number

60

Zielauslastung der CPU in Prozent für den Speicherdienst

ideanote.storage.autoscaling.targetMemoryUtilizationPercentage

number

70

Zielauslastung des Arbeitsspeichers in Prozent für den Speicherdienst

ideanote.storage.maxUploadSize

string

"500m"

Maximale Uploadgröße für den Speicherdienst. Dieser Wert wird verwendet, um „client_max_body_size“ in der nginx-Konfiguration des enthaltenen nginx-ingress-Charts festzulegen.

ideanote.storage.nodeSelector

object

nodeSelector für den Speicherdienst festlegen

ideanote.storage.path

string

"files"

Der Pfad oder die Subdomain des Speicherdienstes. Dieser Wert wird zum Erstellen der URL für das Ingress-Objekt verwendet.

ideanote.storage.persistence.accessMode

string

"ReadWriteOnce"

Zugriffsmodus für den PVC

ideanote.storage.persistence.enabled

boolean

true

Auf true setzen, um Persistenz für den Speicherdienst zu aktivieren

ideanote.storage.persistence.existingClaim

string

Wenn ein vorhandener PVC für den Speicherdienst verwendet werden soll, geben Sie hier den Namen an. Dieses Helm-Chart erstellt dann nicht automatisch einen neuen PVC.

ideanote.storage.persistence.size

string

"4Gi"

Speichergröße für den PVC

ideanote.storage.persistence.storageClassName

string

Speicherklasse für den PVC

ideanote.storage.persistence.volumeMode

string

"Filesystem"

Volume-Modus für den PVC

ideanote.storage.replicaCount

number

1

Anzahl der Replikate für den Speicherdienst. Bei aktiviertem Autoscaling wird dieser Wert überschrieben.

ideanote.storage.resources.enabled

boolean

true

Auf true setzen, um Ressourcenanforderungen für den Speicherdienst zu aktivieren. Dies kann durch die Verwendung von global.ideanote.resources.enabled überschrieben werden.

ideanote.storage.resources.limits.cpu

string

"1500m"

CPU- und Arbeitsspeicher-Ressourcenlimits für den Speicherdienst

ideanote.storage.resources.limits.memory

string

"2Gi"

Arbeitsspeicher-Ressourcenlimit für den Speicherdienst

ideanote.storage.resources.requests.cpu

string

"100m"

CPU- und Arbeitsspeicher-Ressourcenanforderungen für den Speicherdienst

ideanote.storage.resources.requests.memory

string

"500Mi"

Arbeitsspeicher-Ressourcenanforderung für den Speicherdienst

ideanote.storage.service.annotations

object

{}

Zusätzliche Anmerkungen zum Speicherdienst hinzufügen

ideanote.storage.service.externalPort

number

80

Externer Port für den Speicherdienst

ideanote.storage.service.internalPort

number

3000

Interner Port für den Speicherdienst

ideanote.storage.service.type

string

"ClusterIP"

Diensttyp für den Speicherdienst

ideanote.storage.tolerations

array

Toleranzen für den Speicherdienst festlegen

ideanote.webapp.affinity

object

Affinität für den Webapp-Dienst festlegen

ideanote.webapp.annotations

object

{}

Zusätzliche Anmerkungen zur Webapp-Bereitstellung hinzufügen

ideanote.webapp.autoscaling.enabled

boolean

true

Automatische Skalierung für den Webapp-Dienst aktivieren. Dies kann überschrieben werden, indem Sie global.ideanote.autoscaling.enabled.

ideanote.webapp.autoscaling.maxReplicas

number

4

Maximale Anzahl der Replikate für den Webapp-Dienst

ideanote.webapp.autoscaling.minReplicas

number

2

Mindestanzahl der Replikate für den Webapp-Dienst

ideanote.webapp.autoscaling.targetCPUUtilizationPercentage

number

60

Zielauslastung der CPU in Prozent für den Webapp-Dienst

ideanote.webapp.autoscaling.targetMemoryUtilizationPercentage

number

70

Zielauslastung des Arbeitsspeichers in Prozent für den Webapp-Dienst

ideanote.webapp.nodeSelector

object

nodeSelector für den Web-App-Dienst festlegen

ideanote.webapp.path

string

""

Der Pfad oder die Subdomain des Webapp-Dienstes. Dieser Wert wird zum Erstellen der URL für das Ingress-Objekt verwendet.

ideanote.webapp.replicaCount

number

1

Anzahl der Replikate für den Webapp-Dienst. Wenn Sie die automatische Skalierung aktivieren, wird dieser Wert überschrieben.

ideanote.webapp.resources.enabled

boolean

true

Auf „true“ setzen, um Ressourcenanforderungen für den Webapp-Dienst zu aktivieren. Dies kann überschrieben werden, indem Sie global.ideanote.resources.enabled.

ideanote.webapp.resources.limits.cpu

string

"1500m"

CPU- und Arbeitsspeicher-Ressourcenlimits für den Webapp-Dienst

ideanote.webapp.resources.limits.memory

string

"2Gi"

Arbeitsspeicher-Ressourcenlimits für den Webapp-Dienst

ideanote.webapp.resources.requests.cpu

string

"250m"

CPU- und Arbeitsspeicher-Ressourcenanforderungen für den Webapp-Dienst

ideanote.webapp.resources.requests.memory

string

"1Gi"

Arbeitsspeicher-Ressourcenanforderungen für den Webapp-Dienst

ideanote.webapp.service.annotations

object

{}

Zusätzliche Anmerkungen zum Webapp-Dienst hinzufügen

ideanote.webapp.service.externalPort

number

80

Externer Port für den Webapp-Dienst

ideanote.webapp.service.internalPort

number

3000

Interner Port für den Webapp-Dienst

ideanote.webapp.service.type

string

"ClusterIP"

Diensttyp für den Webapp-Dienst

ideanote.webapp.tolerations

array

Toleranzen für den Webapp-Dienst festlegen

ingress-nginx.controller.service.type

string

"LoadBalancer"

Der Typ des Dienstes, der für den Ingress-Controller erstellt werden soll

ingress-nginx.install

boolean

true

Das enthaltene ingress-nginx-Unterdiagramm installieren

postgresql.install

boolean

true

Das enthaltene PostgreSQL-Unterchart installieren

postgresql.primary.persistence.size

string

"5Gi"

Speichergröße für das PVC des enthaltenen PostgreSQL-Dienstes

postgresql.primary.resourcesPreset

string

"small"

PostgreSQL-Ressourcenvoreinstellung

redis.install

boolean

true

Das enthaltene Redis-Unter-Chart

redis.master.persistence.size

string

"3Gi"

Speichergröße für das PVC des enthaltenen Redis-Dienstes

redis.master.resourcesPreset

string

"micro"

Redis-Ressourcenvoreinstellung

Enthaltene Unter-Charts konfigurieren

Konfiguration des enthaltenen postgresql-Unter-Charts

Das Ideanote Helm Chart installiert standardmäßig das Bitnami-PostgreSQL-Diagramm als Unterdiagramm.
Damit wird eine PostgreSQL-Datenbank für den Ideanote-Dienst eingerichtet.

Sie können das PostgreSQL-Unter-Chart konfigurieren, indem Sie die Werte in der Datei values.yaml unter dem Schlüssel postgresql ändern.
Eine Liste der zulässigen Werte für das enthaltene PostgreSQL-Unter-Chart finden Sie hier
Beispielkonfiguration:

postgresql:
  install: true
  primary:
    persistence:
      size: 5Gi
    resources:
      requests:
        memory: 1Gi
        cpu: 250m
      limits:
        memory: 2Gi
        cpu: 500m

Passwort

Das enthaltene PostgreSQL-Unter-Chart erstellt automatisch ein Secret mit dem Passwort für den Datenbankbenutzer und den Administrator.
Sie können das automatisch generierte Datenbankpasswort überschreiben, indem Sie den Wert global.ideanote.psql.passwordSecret.password in der Datei values.yaml festlegen.

Verbindung zur postgresql-Datenbank von außerhalb des Clusters

Führen Sie die folgenden Befehle aus, um von außerhalb des Clusters eine Verbindung zu Ihrer Datenbank herzustellen:

kubectl get secret -n ideanote ideanote-postgres-password -o jsonpath="{.data.postgres-password-user}" | base64 -d

kubectl exec -it -n ideanote svc/ideanote-postgresql -- psql -U ideanote -d ideanote
# or
kubectl port-forward -n ideanote svc/ideanote-postgresql 5432:5432 &
psql --host 127.0.0.1 -d postgres -p 5432 -U postgres

Konfiguration des enthaltenen redis-Unter-Charts

Das Ideanote Helm Chart installiert standardmäßig das Bitnami-Redis-Diagramm als Unterdiagramm.
Damit wird eine Redis-Datenbank für den Ideanote-Dienst eingerichtet.

Sie können das Redis-Unter-Chart konfigurieren, indem Sie die Werte in der Datei values.yaml unter dem Schlüssel redis ändern.
Eine Liste der zulässigen Werte für das enthaltene Redis-Unter-Chart finden Sie hier.
Beispielkonfiguration:

redis:
  install: true
  master:
    persistence:
      size: 5Gi
    resources:
      requests:
        memory: 1Gi
        cpu: 250m
      limits:
        memory: 2Gi
        cpu: 500m

Von außerhalb des Clusters eine Verbindung zur redis-Datenbank herstellen

Führen Sie zum Verbinden mit Ihrer redis-Datenbank von außerhalb des Clusters die folgenden Befehle aus:

kubectl exec -it -n ideanote svc/ideanote-redis-master -- redis-cli
# or
kubectl port-forward -n ideanote svc/ideanote-redis-master 6379:6379
redis-cli -h localhost -p 6379

Konfiguration des enthaltenen ingress-nginx-Unter-Charts

Das Ideanote Helm Chart installiert standardmäßig das ingress-nginx-Diagramm als Unterdiagramm.
Damit wird ein Load-Balancer für den Ideanote-Dienst eingerichtet, der als Ingress-Controller für das Ingress-Objekt von Ideanote verwendet wird.

Sie können das ingress-nginx-Unter-Chart konfigurieren, indem Sie die Werte in der Datei values.yaml unter dem Schlüssel ingress-nginx ändern.
Eine Liste der zulässigen Werte für das enthaltene ingress-nginx-Unter-Chart finden Sie hier.

Beispielkonfiguration:

ingress-nginx:
  enabled: true
  controller:
    service:
      annotations:
        cloud.google.com/load-balancer-type: "Internal"
    resources:
      requests:
        memory: 1Gi
        cpu: 250m
      limits:
        memory: 2Gi
        cpu: 500m

Konfigurieren des enthaltenen cert-manager Sub-Charts

Das Ideanote Helm Chart installiert standardmäßig das cert-manager-Diagramm als Unterdiagramm.
Damit wird der cert-manager so konfiguriert, dass TLS-Zertifikate für den Ideanote-Dienst automatisch erstellt und verwaltet werden.

Sie können das cert-manager Sub-Chart konfigurieren, indem Sie die Werte in der Datei values.yaml unter dem Schlüssel cert-manager ändern.
Eine Liste der zulässigen Werte für das enthaltene cert-manager Sub-Chart finden Sie hier.

Beispielkonfiguration:

cert-manager:
  install: true
  installCRDs: false
  replicaCount: 2

Interaktion mit dem cert-manager-Dienst

Wir empfehlen, cmctl zu installieren, um mit dem cert-manager-Dienst zu interagieren.
Dieses CLI-Tool unterstützt Sie bei der Verwaltung von cert-manager-Ressourcen innerhalb Ihres Clusters.

Mit diesem Tool können Sie beispielsweise das Zertifikat erneuern, indem Sie den folgenden Befehl ausführen:

cmctl renew ideanote-tls -n ideanote

kubectl get certificaterequest -n ideanote

Externe/verwaltete Dienste konfigurieren

Ideanote enthält integrierte Unter-Charts für PostgreSQL, Redis und Load-balancer-Dienste.
Diese Dienste werden vom Ideanote Helm Chart verwaltet und bei der Bereitstellung von Ideanote standardmäßig installiert.
Wir empfehlen jedoch, beim Betrieb von Ideanote in einer Produktionsumgebung für möglichst viele dieser Dienste externe bzw. verwaltete Dienste zu verwenden.
Dadurch stellen Sie eine zuverlässige und skalierbare Infrastruktur sicher.

Dieser Abschnitt enthält eine Anleitung zur Konfiguration externer/verwalteter Dienste für PostgreSQL, Redis und Load-balancer (die Kombination aus ingress-nginx und cert-manager).

Eine externe PostgreSQL-Instanz konfigurieren

Um eine externe PostgreSQL-Instanz mit Ideanote zu verwenden, müssen Sie beim Installieren von Ideanote Helm Chart die Verbindungsdetails angeben.
Hier finden Sie eine Beispielkonfiguration für die Verbindung mit einer externen PostgreSQL-Instanz:

global:
  ideanote:
    psql:
      database: <database>
      username: <username>
      host: <host>
      passwordSecret:
        password: <password>

      # You can also instead create a secret object yourself with "kubectl" and provide it here
      # passwordSecret:
      #   name: <secret-name>
      #   key: postgres-password      # The key in the secret object where the password is stored

postgresql:
  install: false

Eine externe Redis-Instanz konfigurieren

Um eine externe Redis-Instanz mit Ideanote zu verwenden, müssen Sie beim Installieren von Ideanote Helm Chart die Verbindungsdetails angeben.
Hier finden Sie eine Beispielkonfiguration für die Verbindung mit einer externen Redis-Instanz:

global:
  ideanote:
    redis:
      username: <username>
      host: <host>
      passwordSecret:
        password: <password>

      # You can also instead create a secret object yourself with "kubectl" and provide it here
      # passwordSecret:
      #   name: <secret-name>
      #   key: redis-password      # The key in the secret object where the password is stored

redis:
  install: false

Eine benutzerdefinierte load-balancer

Wir empfehlen, für den Ingress-Controller einen nativen Load-Balancer des Cloud-Anbieters zu verwenden.
Cloud-Anbieter bieten häufig verwaltete Load-Balancer an, die mit Kubernetes verwendet werden können, indem Sie ingress class festlegen oder dem Ingress-Objekt Anmerkungen hinzufügen.
Sie können diese Werte mithilfe der folgenden Konfiguration hinzufügen:

global:
  ideanote:
    ingress:
      annotations: <annotations>
      className: <ingress-class>

cert-manager:
  install: false

ingress-nginx:
  install: false

Integrationen konfigurieren

Hier finden Sie Anleitungen zur Konfiguration der verschiedenen von Ideanote unterstützten Integrationen.
Keine dieser Integrationen ist erforderlich, um Ideanote On-Premise auszuführen, sie können jedoch die Funktionalität Ihres Workspace erweitern.

Sendgrid-Integration konfigurieren

In order for Ideanote to send emails, you need to provide a Sendgrid API key when installing the Ideanote Helm Chart.
Please follow this guide for setting up the Sendgrid integration:

1․ Erstellen Sie ein Sendgrid-Konto, falls Sie noch keines haben.

2․ Erstellen Sie einen API-Schlüssel im Sendgrid-Dashboard. Er muss mindestens über die Funktionen Mail Send verfügen.

Sendgrid-API-Schlüssel

3․ Stellen Sie dem values.yaml die API-Schlüsseldatei bereit:

ideanote:
  api:
    sendgrid:
      key: "SG........."

OpenAI-Integration konfigurieren

In order for Ideanote platform to provide AI-functionality, you need to provide an OpenAI API key when installing the Ideanote Helm Chart.
Please follow this guide for setting up the OpenAI integration:

1․ Erstellen Sie ein OpenAI-Konto, falls Sie noch keines haben.

2․ Erstellen Sie einen API-Schlüssel im OpenAI-Dashboard. Er benötigt die Berechtigungen All.

OpenAI-API-Schlüssel

3․ Stellen Sie dem values.yaml die API-Schlüsseldatei bereit:

ideanote:
  api:
    openai:
      key: "sk-........."

SAML-Integration konfigurieren

Ideanote Helm Chart unterstützt die Einrichtung Ihrer Bereitstellung als SAML-Dienstanbieter, sodass Sie Ihren eigenen Identitätsanbieter zur Authentifizierung verwenden können.
Dazu müssen Sie beim Einrichten der Integration SAML ein Zertifikat angeben.

Bitte folgen Sie dieser Anleitung zur Einrichtung der SAML-Integration:

1․ Erstellen Sie mit dem folgenden Befehl ein selbstsigniertes Zertifikat:

openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=my-service.example.com"

2․ Stellen Sie dem values.yaml das Zertifikat und den Schlüssel bereit und installieren Sie die Ideanote Helm Chart:

global:
  ideanote:
    saml:
      cert: |
        -----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
      key: ....

3․ Rufen Sie https://<your-domain>/api/sso/saml/metadata.xml auf. Dies ist nun der Metadaten-Endpunkt Ihres Ideanote-SAML-Dienstanbieters.

4․ Konfigurieren Sie Ihren Identitätsanbieter. Weitere Informationen finden Sie in dieser Anleitung. Denken Sie daran, die metadata.xml URL durch Ihre eigene zu ersetzen.

Konfigurieren Sie die LDAP-Integration

Ideanote unterstützt das LDAP-Protokoll zur Integration in Ihr bestehendes Verzeichnis von Nutzern und Gruppen, beispielsweise Microsoft Active Directory und Entra ID. Sie können LDAP zur Authentifizierung und Synchronisierung von Nutzern verwenden – entweder für die zeitpunktbezogene Bereitstellung, wenn sich diese bei Ihrem Workspace anmelden, oder im Voraus über einen Bereitstellungs-Schritt, der direkt in den LDAP-Konfigurationsassistenten integriert ist. LDAP kann nicht mithilfe der values.yaml-Konfiguration eingerichtet werden, sondern muss stattdessen nach oder während des Einrichtungsprozesses Ihres Ideanote-Workspace konfiguriert werden.

Wenn Sie LDAP verwenden möchten, LDAP jedoch noch nicht in Ihrer IT-Infrastruktur implementiert haben, konsultieren Sie bitte die entsprechende Dokumentation zur Implementierung von LDAP für Ihre IT-Infrastruktur. Wir empfehlen die folgenden Ressourcen:

In dieser Anleitung führen wir Sie durch den Einrichtungsprozess auf der Ideanote-Plattform.

LDAP in Ihrem Workspace einrichten

LDAP-Abbildung 1
  1. Gehen Sie zu Einstellungen.
  2. Gehen Sie zu Authentifizierung.
  3. Klicken Sie auf Hinzufügen, um eine neue Anmeldeoption zu erstellen.
  4. Wählen Sie LDAP aus der Liste der Optionen aus.

LDAP konfigurieren

LDAP-Abbildung 2
  1. Klicken Sie auf Konfiguration hinzufügen.
  2. Geben Sie die LDAP-Server-URL ohne das ldap://Protokoll und ohne den Port ein.
  3. Geben Sie den Bind DN/UPN ein. Dabei handelt es sich um den Distinguished Name (DN) oder in manchen Umgebungen wie Microsoft Active Directory oder Microsoft Entra ID um den User Principal Name (UPN), der für die Bindung (Authentifizierung) an Ihr LDAP-Verzeichnis verwendet wird. Er gibt den Eintrag im Verzeichnis an, den Ideanote zur Authentifizierung und für Suchvorgänge verwendet. Dieses Konto sollte über Lesezugriff auf das Verzeichnis verfügen. Ein UPN kann beispielsweise wie folgt aussehen: you@your-domain.com. Dadurch ist er leichter zu merken und zu verwenden. Ein herkömmlicher Bind DN könnte alternativ wie folgt aussehen: CN=Admin,OU=Users,DC=your-domain,DC=com. Damit wird ein administrativer Nutzer innerhalb der Organisationseinheit Users der Domäne your-domain.com angegeben.
  4. Geben Sie das Bind Password ein. Dies ist das Passwort, das dem Bind Distinguished Name (Bind DN/UPN) zugeordnet ist. Ideanote verwendet dieses Passwort, um den angegebenen Bind DN bei der Verbindung mit dem LDAP-Verzeichnis zu authentifizieren. Das Passwort muss zu dem Konto passen, das im Feld „Bind DN/UPN“ angegeben ist, unabhängig davon, ob es sich um einen User Principal Name (UPN) wie you@your-domain.com oder einen herkömmlichen LDAP Distinguished Name wie CN=Admin,OU=Users,DC=your-domain,DC=com handelt. Dieses Passwort ist erforderlich, um eine sichere Verbindung herzustellen und Suchvorgänge durchzuführen sowie Nutzerinformationen für Authentifizierungsprozesse abzurufen. Der gespeicherte Wert wird AES-256 verschlüsselt.
  5. Klicken Sie auf Test Connection, um zu überprüfen, ob eine Verbindung zur LDAP-Server-URL hergestellt werden kann und ob Sie sich mit den angegebenen Zugangsdaten Bind DN/UPN und Bind Password daran anmelden („authentifizieren“) können. Wenn die Verbindung erfolgreich hergestellt wurde, wird neben der Schaltfläche Test Connection der Text LDAP-Verbindung erfolgreich hergestellt angezeigt.

Falls Sie auf ein Problem stoßen, lesen Sie bitte den Abschnitt Fehlerbehebung bei Verbindungen.

LDAP-Abbildung 3

Zusätzliche Konfigurationsfelder

LDAP-Abbildung 4
  1. Base DN steht für die oberste Ebene Ihres Verzeichnisbaums, die beim Bereitstellen von Nutzern und Gruppen durchsucht werden soll. Damit können Sie den Suchbereich auf einen bestimmten Zweig Ihres Verzeichnisses eingrenzen. Der Bind DN muss Lesezugriff auf den Base DN und seine Objekte haben.
  2. Der LDAP-Filter wird, sofern angegeben, bei der Suche im Verzeichnis angewendet, das Sie in Ihrem Base DN konfiguriert haben. Dies ist nützlich, wenn Sie den Umfang der Nutzer einschränken möchten, die bereitgestellt werden und sich bei Ihrem Workspace authentifizieren können. Sie müssen die standardmäßige LDAP-Abfragesyntax verwenden, wie in RFC 4515 beschrieben. Zum Beispiel: (&(givenName=you)(sn=yourlastname)).
  3. Durch Aktivieren von Use SSL/TLS wird LDAP over SSL (ldaps) aktiviert. Einige zusätzliche
    Felder werden angezeigt, über die Sie hier mehr erfahren können.
  4. Wenn Sie Use StartTLS aktivieren, wird StartTLS verwendet, um zunächst über den standardmäßigen LDAP-Port (389) eine unverschlüsselte Verbindung herzustellen und diese später mithilfe einer StartTLS-Operation auf TLS umzustellen. Daraufhin werden mehrere zusätzliche Felder angezeigt, über die Sie hier mehr erfahren.

LDAPS oder StartTLS konfigurieren

LDAP-Abbildung 6

Wenn Use SSL/TLS oder Use StartTLS aktiviert wird, werden darunter weitere optionale Konfigurationsfelder angezeigt:

  1. CA-Zertifikat(e) des LDAP-Servers: Geben Sie das/die Zertifikat(e) der Zertifizierungsstelle (CA) an, die das SSL-Zertifikat Ihres LDAP-Servers signiert hat/haben. Dies ist erforderlich, wenn Ihr LDAP-Server selbstsignierte Zertifikate oder von einer privaten CA ausgestellte Zertifikate verwendet. Die Zertifikate müssen im PEM-Format vorliegen.
  2. Clientzertifikat: Geben Sie das Clientzertifikat an, das dem LDAP-Server zur Authentifizierung vorgelegt werden soll. Dies ist erforderlich, wenn Ihr LDAP-Server eine Clientzertifikatsauthentifizierung verlangt. Das Zertifikat muss im PEM-Format vorliegen.
  3. Privater Clientschlüssel: Geben Sie den privaten Schlüssel an, der zu Ihrem Clientzertifikat gehört. Dies ist erforderlich, wenn Sie ein Clientzertifikat angegeben haben. Der private Schlüssel muss im PEM-Format vorliegen und darf nicht passwortgeschützt sein.
  4. Selbstsignierte Zertifikate zulassen: Aktivieren Sie diese Option, um Verbindungen zu LDAP-Servern mit selbstsignierten Zertifikaten zuzulassen, ohne die CA zu überprüfen. Warnung: Wenn Sie diese Option aktivieren, kann Ihre Verbindung anfällig für Man-in-the-Middle-Angriffe sein.

Attributzuordnung

LDAP-Abbildung 9

Viele moderne LDAPv3-kompatible Server unterstützen Abfragen des unterstützten Schemas verfügbarer Attribute. Sofern verfügbar, erkennt Ideanote das Schema und schlägt geeignete Standardzuordnungen vor, um die Daten in Ihrem Verzeichnis den entsprechenden Ideanote-Eigenschaften für Nutzer und Teams zuzuordnen. Sie können diese Zuordnungen auf der Seite Attributzuordnung anzeigen und anpassen.


  1. LDAP-Attribut steht für Attribute, die im Schema Ihres LDAP-Servers gefunden wurden. Diese stammen von Ihrem Verzeichnisanbieter, z. B. Microsoft Active Directory oder Microsoft Entra ID. Falls Ihr LDAP-Server aus irgendeinem Grund nicht LDAPv3-konform ist, versuchen wir anhand historischer Konventionen und der in RFC4519 beschriebenen Attributtypen zu ermitteln, wie die Attributnamen lauten könnten. Beispielsweise steht givenName in der Regel für den Vornamen einer Person, während sn in der Regel für den Familiennamen einer Person steht.


  2. Typ steht für eine vereinfachte Version der Syntaxdefinition eines LDAP-Attributs. Es gibt viele solcher Syntaxdefinitionen, die alle hier in RFC4517 beschrieben sind. Der Einfachheit halber fasst Ideanote sie jedoch in den folgenden Definitionen zusammen:







    • string: Stellt eine Zeichenfolge dar. LDAP-Syntaxdefinitionen wie DirectoryString, PrintableString, TelephoneNumber, NumericString und andere verwenden alle diesen Typ.

    • date: Stellt ein Datum mit Zeitstempel dar, entweder im Generalized-Time-Format (YYYYMMDDHHMMSSZ) oder im UTCTime-Format (YYMMDDHHMMSSZ). Ideanote kann diesen Wert verstehen und analysieren, sodass Sie ihn Datumsfeldern in Ideanote-Nutzer-/Team-Eigenschaften zuordnen können.

    • integer: LDAP verfügt zwar nicht über Syntaxdefinitionen für Gleitkommawerte (diese verwenden stattdessen Syntaxdefinitionen wie NumericString, die in Ideanote string zugeordnet werden), der Typ `integer` stellt jedoch ganze Zahlen dar, die numerischen Ideanote-Nutzer-/Team-Eigenschaften zugeordnet werden können.

    • boolean: die booleschen Werte true und false.

    • binary: Einige LDAP-Attribute enthalten Binärdaten, beispielsweise das verbreitete Attribut thumbnailPhoto für Benutzerprofil-Avatare. Diese lassen sich in der Regel nur avatar bei Ideanote-Nutzern und logo bei Ideanote-Teams zuordnen.

    • reference: Die LDAP-Syntaxdefinition DN (Distinguished Name) verweist auf eine andere Entität mit diesem DN und wird auf der Ideanote-Plattform typischerweise bei der Attributzuordnung verwendet, um das Attribut memberOf für Gruppenzugehörigkeiten eines Nutzers entsprechenden Ideanote-Teams zuzuordnen.

  3. Das passende Ideanote-Attributsteht für die Dateneigenschaft bei Nutzern/Teams, auf die das LDAP-Attribut abgebildet werden soll. Sie können es anpassen, indem Sie für jede Zeile in der Liste auf das Dropdown-Menü klicken. Die verfügbaren Optionen hängen vom Typ des LDAP-Attributs ab. Beispielsweise kann ein LDAP-Attribut vom Typ datenicht auf First nameabgebildet werden.

Änderung der Synchronisierung von Nutzergruppen/Teams

LDAP-Abbildung 10

Wenn Sie die Teammitgliedschaften eines Nutzers synchronisieren (oder die Synchronisierung beenden) möchten, wenn dieser sich bei Ideanote anmeldet (oder wenn er über den Bereitstellungsschritt vorab bereitgestellt wird), ermitteln Sie das LDAP-Attribut, das die Gruppe(n) angibt, denen der Nutzer angehört.

Bei Microsoft Active Directory und Microsoft Entra ID wird dieses Attribut üblicherweise memberOf genannt und hat in Ideanote den Typ reference.

Standardmäßig ist dieses Attribut bereits der speziellen Ideanote-Nutzereigenschaft Teams zugeordnet, wie in der obigen Abbildung zu sehen ist.

Wenn Sie die Synchronisierung von Teams beenden möchten:

  1. Ermitteln Sie das memberOf LDAP-Attribut (oder die entsprechende Eigenschaft in Ihrem LDAP-Serverschema).
  2. Klicken Sie in der Spalte Zugeordnetes Ideanote-Attribut auf das Dropdown-Menü in dieser Zeile.
  3. Wählen Sie Nicht importieren.

Benutzerdefinierte Attributzuordnung erstellen

LDAP-Abbildung 8

Die Zuordnungen, die Ideanote standardmäßig anzeigt, basieren auf unseren Versuchen, sinnvolle Standardwerte festzulegen. Wenn Sie andere Attribute Ideanote zuordnen möchten, können Sie auch auf die Schaltfläche Attribut hinzufügen klicken, die sich unterhalb der Tabelle für Nutzer und der Tabelle für Gruppen/Teams befindet.

LDAP-Abbildung 11

Im angezeigten Dialogfeld können Sie einen benutzerdefinierten Attributnamen eingeben und ihm den passenden Datentyp zuweisen. Das Textfeld zeigt alle weiteren Attribute an, die auf Ihrem LDAP-Server gefunden wurden und nicht in den standardmäßigen Zuordnungsvorschlägen enthalten waren. Sie müssen keines dieser Attribute auswählen, auch wenn Ihr LDAP-Server sehr wahrscheinlich nur einige der vorgeschlagenen Attributnamen unterstützt.

Attributzuordnungen, die Sie über das Dialogfeld Attribut hinzufügen erstellt haben, können gelöscht werden, indem Sie auf das Kreuzsymbol neben der Zeile klicken (siehe unten), oder indem Sie die Zuordnung in Do Not Import ändern.

LDAP-Abbildung 12

Bereitstellung

Wenn sich Ihre Nutzer bei Ihrem Workspace anmelden, werden sie bereitgestellt. Das bedeutet, dass die Datendarstellung im Verzeichnis mit dem entsprechenden Ideanote-Nutzer synchronisiert wird, gemäß den von Ihnen festgelegten Regeln für Attributzuordnungen.

Es gibt jedoch viele Fälle, in denen es sinnvoll ist, Nutzer im Voraus bereitzustellen. Ein beliebter Anwendungsfall ist, alle Nutzer und Teams vorab bereitzustellen, damit Sie Zugriffsrechte für Ihre Ideensammlungen einrichten können, bevor Sie sie offiziell zur Mitwirkung in Ihrem Workspace einladen.

Mit dem Schritt Bereitstellung in den LDAP-Einstellungen können Sie dies einrichten.

LDAP-Abbildung 13
  1. Das Suchfeld ermöglicht Ihnen, eine Suche direkt in Ihrem LDAP-Verzeichnis durchzuführen. Mit Ihrer Eingabe wird in den gängigen LDAP-Attributen distinguishedName, userPrincipalName, sAMAccountName, mail, displayName und cn gesucht.
  2. Die Tabelle zeigt alle Einträge an, die aus Ihrem Verzeichnis abgerufen wurden, sowie relevante Details zu jedem Eintrag, z. B. ob es sich um einen Nutzer oder eine Gruppe handelt, wann der Eintrag zuletzt mit Ihrem Workspace synchronisiert wurde usw.
  3. Mit dem Filter können Sie die Suchergebnisse weiter eingrenzen. Sie können festlegen, dass nur Gruppen oder Nutzer aufgelistet werden, und außerdem nur Entitäten anzeigen lassen, die noch nie für Ihren Workspace bereitgestellt wurden.
  4. Mit dem Start Provisioning Button wird der Bereitstellungsprozess gestartet. Sie können den Fortschritt über eine Fortschrittsanzeige neben der Schaltfläche verfolgen. Während die Bereitstellung läuft, können Sie außerdem auf Abbrechen klicken, um zu verhindern, dass weitere Entitäten bereitgestellt werden.
LDAP-Abbildung 14

Fehlerbehebung bei Verbindungsproblemen

LDAP-Abbildung 5

Wenn LDAP korrekt konfiguriert wurde, wird neben der Schaltfläche der Text LDAP connection successfully established angezeigt.Test Connection Schaltfläche.

Es können jedoch einige häufig auftretende Probleme auftreten. Im Folgenden finden Sie Tipps zur Fehlerbehebung für die jeweiligen Fehlermeldungen:

Fehler: Der LDAP-Server konnte nicht aufgelöst werden. Vergewissern Sie sich, dass Sie die korrekte Server-URL eingegeben haben und dass Ihr aktuelles Netzwerk eine Verbindung zu diesem Server herstellen kann.

Mögliche Ursachen:

  • Die LDAP-Server-URL ist möglicherweise falsch geschrieben oder fehlerhaft.
  • Die Anwendung kann den LDAP-Server aufgrund von Netzwerkbeschränkungen nicht erreichen.

Schritte zur Fehlerbehebung:

  • Überprüfen Sie den Hostnamen oder die IP-Adresse auf Tippfehler.
  • Vergewissern Sie sich, dass sich der LDAP-Server im selben virtuellen Netzwerk wie Ihre Ideanote-Bereitstellung befindet. Richten Sie andernfalls Netzwerk-Peering oder ein VPN ein, damit die beiden Netzwerke miteinander kommunizieren können.
  • Stellen Sie sicher, dass ausgehende Verbindungen vom Kubernetes-Cluster, auf dem die On-Premise-Bereitstellung von Ideanote ausgeführt wird, über die folgenden Ports zulässig sind:

    • 389 für LDAP (standardmäßig)
    • 636 für LDAPS (standardmäßig)
  • Aktualisieren Sie die Firewallregeln, um Datenverkehr zum LDAP-Server über diese Ports zuzulassen.
  • Wenn Sie einen Hostnamen verwenden, überprüfen Sie, ob die DNS-Auflösung im Kubernetes-Cluster korrekt konfiguriert ist.
  • Wenn Sie Microsoft Entra ID verwenden und gerade Microsoft Entra Domain Services zur Aktivierung der LDAP-Integration eingerichtet haben, müssen Sie Ihren Kubernetes-Cluster vollständig neu starten, damit der Hostname aufgelöst werden kann.

Fehler: Die LDAP-Authentifizierung mit dem angegebenen Bind DN und Bind-Kennwort ist fehlgeschlagen.

Mögliche Ursachen:

  • Die Anmeldedaten sind falsch.
  • Die Kennworthashsynchronisierung ist nicht aktiviert (ein häufiges Problem bei Microsoft Entra Domain Services).
  • Das Konto des Bind-Benutzers ist deaktiviert, gesperrt oder abgelaufen.
  • Der LDAP-Server erfordert LDAPS. Möglicherweise haben Sie den Umschalter Use SSL/TLS nicht aktiviert oder falsche Zertifikate/Schlüssel angegeben.

Schritte zur Fehlerbehebung:

  • Überprüfen Sie den Bind DN auf korrekte Syntax und Tippfehler.

    • Der Bind DN sollte der vollständige DN des Nutzers sein (z. B. cn=admin,dc=example,dc=com) oder dessen UPN, etwa you@your-domain.com, wenn Sie Microsoft Entra ID oder Microsoft Active Directory verwenden.
  • Stellen Sie sicher, dass das Bind-Passwort korrekt ist.
  • Authentifizieren Sie sich mit einem LDAP-Client und dem Bind DN sowie dem Bind-Kennwort, um zu überprüfen, ob diese außerhalb von Ideanote funktionieren.
  • Wenn Sie Microsoft Entra Domain Services verwenden, vergewissern Sie sich, dass die Kennworthashsynchronisierung aktiviert ist. Wenn Sie Microsoft Entra DOmain Services kürzlich eingerichtet haben, müssen Sie möglicherweise das Kennwort des Bind-DN-Kontos zurücksetzen, mit dem Sie sich authentifizieren möchten. Hier finden Sie die Anweisungen für reine Cloud-Nutzerkonten und hier die Anweisungen für synchronisierte Nutzerkonten.
  • Prüfen Sie, ob das Konto des Bind-Benutzers aktiv ist und keinen Einschränkungen unterliegt.
  • Ermitteln Sie, ob der LDAP-Server SSL/TLS erfordert.

    • Falls ja, aktivieren Sie Use SSL/TLS, um ldaps:// in der Server-URL zu verwenden. Stellen Sie außerdem sicher, dass LDAP Server PORT auf den richtigen Port verweist, der standardmäßig 636 für LDAPS ist.
    • Vergewissern Sie sich, dass Sie das korrekte LDAP-Server-CA-Zertifikat, das Client-Zertifikat und den privaten Client-Schlüssel (falls erforderlich) angegeben haben.
    • Prüfen Sie, ob die Aktivierung von „Selbstsignierte Zertifikate zulassen“ das Problem behebt.
    • Stellen Sie sicher, dass das SSL-Zertifikat des LDAP-Servers vom Kubernetes-Cluster als vertrauenswürdig eingestuft wird.
    • Importieren Sie das Zertifikat des LDAP-Servers bei Bedarf in den Trust Store des Clusters.

Fehler: Die LDAP-Authentifizierung war erfolgreich, aber der angegebene Basis-DN konnte nicht durchsucht werden.

Mögliche Ursachen:

  • Der Base DN ist falsch oder verweist auf den falschen Speicherort im Verzeichnis.
  • Der Bind-Benutzer hat keine Berechtigung, den angegebenen Base DN zu durchsuchen.

Schritte zur Fehlerbehebung:

  • Stellen Sie sicher, dass der Base DN korrekt formatiert ist (z. B. DC=your-domain,DC=com).
  • Prüfen Sie auf Tippfehler oder falsch gesetzte Kommas und Gleichheitszeichen.
  • Vergewissern Sie sich, dass der durch den Bind DN angegebene Bind-Benutzer Lese-/Suchberechtigungen für den Base DN besitzt.
  • Testen Sie mit einem LDAP-Client (z. B. ldapsearch), ob sich der Basis-DN mit den Anmeldedaten des Bind-Nutzers durchsuchen lässt.
  • Stellen Sie sicher, dass die Verzeichnisstruktur unter dem Base DN die Benutzereinträge enthält, auf die Sie zugreifen möchten.

Wenn keiner dieser Tipps zur Fehlerbehebung hilft, konsultieren Sie bitte die Dokumentation Ihres Infrastruktur-Anbieters oder wenden Sie sich für weitere Unterstützung bei der Fehlerbehebung an Ideanote.

Für den Produktivbetrieb konfigurieren

Dieser Abschnitt enthält Empfehlungen zur Konfiguration von Ideanote Helm Chart für Produktionsumgebungen.

Externe Dienste

Wir empfehlen, beim Betrieb von Ideanote in einer Produktionsumgebung so viele Dienste wie möglich an externe bzw. verwaltete Dienste auszulagern.
So stellen Sie sicher, dass Ihre Infrastruktur zuverlässig und skalierbar ist.

Insbesondere der Dienst PostgreSQL sollte extern verwaltet werden, da das mitgelieferte PostgreSQL-Unterchart standardmäßig keine Hochverfügbarkeit, Backups oder horizontale Skalierung unterstützt.

Weitere Informationen zur Konfiguration externer Dienste finden Sie im Abschnitt Externe/verwaltete Dienste konfigurieren.

Automatische Skalierung

Standardmäßig aktiviert Ideanote Helm Chart die automatische Skalierung der Dienste nicht.
Für alle Dienste gilt eine Standardanzahl von Replikaten von 1. Sie können manuell skaliert werden, indem Sie den Wert replicaCount in der Datei values.yaml ändern.

Sie können die automatische Skalierung der Dienste aktivieren, indem Sie Folgendes zur Datei values.yaml hinzufügen:

global:
  ideanote:
    autoscaling:
      enabled: true

ingress-nginx:
  controller:
    autoscaling:
      enabled: true
      minReplicas: 2
      maxReplicas: 6

Dadurch wird für jeden Ideanote-Dienst ein Horizontal Pod Autoscaler (HPA) erstellt, der die Anzahl der Replikate anhand der CPU- und Speicherauslastung des Dienstes skaliert.
Die Dienste api und webapp werden standardmäßig auf eine Anzahl zwischen 2 und 4 Replikaten skaliert, die übrigen Dienste auf eine Anzahl zwischen 1 und 4 Replikaten. Sie können jedoch die Mindest- und Höchstanzahl der Replikate ändern, indem Sie die Werte minReplicas und maxReplicas in der Datei values.yaml für jeden Dienst anpassen.
Beispielkonfiguration:

ideanote:
  api:
    autoscaling:
      minReplicas: 3
      maxReplicas: 5

  html-renderer:
    autoscaling:
      enabled: false

  convert:
    autoscaling:
      minReplicas: 2
      maxReplicas: 3

Ressourcenanforderungen

Standardmäßig legt die Ideanote Helm Chart keine Ressourcenanforderungen für die Ideanote-Dienste fest.
So können die Dienste auch auf Clustern mit begrenzten Ressourcen ausgeführt werden.

In Produktionsumgebungen empfehlen wir, Ressourcenanforderungen global zu aktivieren, indem Sie Folgendes zur Datei values.yaml hinzufügen:

global:
  ideanote:
    resources:
      enabled: true

Für jeden Dienst sind standardmäßige CPU-/Speicheranforderungen und -limits festgelegt, die für die meisten Anwendungsfälle geeignet sein sollten. Daher sollte es ausreichen, Ressourcen global zu aktivieren.
Wenn Sie jedoch die Ressourcenanforderungen für einen bestimmten Dienst ändern müssen, können Sie die Werte in der Datei values.yaml unter dem entsprechenden Dienstschlüssel ändern.
Zum Beispiel:

global:
  ideanote:
    resources:
      enabled: true

ideanote:
  api:
    resources:
      requests:
        memory: 1Gi
        cpu: 250m
      # Disable limits
      limits:
        memory: null
        cpu: null

postgresql:
  primary:
    resources:
      requests:
        memory: 1024Mi
        cpu: 500m
      limits:
        memory: 1536Mi
        cpu: 750m

redis:
  master:
    resources:
    requests:
        memory 512Mi
        cpu: 500m
    limits:
        memory: 768Mi
        cpu: 750m

ingress-nginx:
  controller:
    resources:
      requests:
        memory: 256Mi
        cpu: 250m
      limits:
        memory: 512Mi
        cpu: 500m

cert-manager:
  cainjector:
    resources:
      requests:
        cpu: 50m
        memory: 128Mi
  webhook:
    resources:
      requests:
        cpu: 50m
        memory: 128Mi
  startupapicheck:
    resources:
      requests:
        cpu: 50m
        memory: 128Mi
  resources:
    requests:
      cpu: 50m
      memory: 128M

Persistente Volumes und Backups

Wenn Sie das Ideanote Helm Chart mit allen enthaltenen Unterdiagrammen installieren, werden in Ihrem Cluster 3 PVCs (Persistent Volume Claims) erstellt:

  • data-<release>-postgresql-0 für die PostgreSQL-Datenbank
  • redis-data-<release>-redis-master-0 für die Redis-Datenbank
  • <release>-storage-data für die Ideanote-Medien-Uploads

Kubernetes wird entsprechende PVs (persistente Volumes) diesen PVCs zuweisen, und die Daten werden auf diesen Volumes gespeichert.

Für Produktionsbereitstellungen empfehlen wir, die folgenden 3 Aufgaben auszuführen:

1․ Der standardmäßig für Dienste zugewiesene Speicherplatz ist minimal. Wir empfehlen, die Speichergröße entsprechend Ihren Anforderungen zu erhöhen, indem Sie die Datei values.yaml ändern:

postgresql:
  primary:
    persistence:
      # Used as primary database. Critical to increase if you expect a large amount usage.
      size: 10Gi

redis:
  master:
    persistence:
      # Used as a memory cache. Not necessarily critical to increase.
      size: 5Gi

ideanote:
  storage:
    persistence:
      # User uploaded files will be stored here. Increase if you expect large file uploads.
      size: 20Gi

2․ PVs are by default created with the reclaim policy Delete, which means that when the PVC is deleted, the PV and the data on it will be deleted as well. Therefore we recommend changing the reclaim policy to Retain for the PVs created by the Ideanote Helm Chart. You can do that by patching the allocated PVs with the following command:

# Set all PVs in the ideanote namespace to "Retain"
kubectl get pv -n ideanote -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' | xargs -I {} kubectl patch pv {} -n ideanote -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'

# Check that the PVs have been patched
kubectl get pv -n ideanote

# Patch individual PVs with the reclaim policy Retain
kubectl patch pv <pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}' -n ideanote

3․ Außerdem empfehlen wir, eine automatische Backup-Strategie für alle Volumes einzurichten.

Protokollierung und Monitoring

Ideanote bietet derzeit keine integrierte Protokollierungslösung mit dem Helm-Chart. Für Produktionsumgebungen empfehlen wir jedoch, eine Monitoring-Lösung einzurichten.

In Produktionsumgebungen empfehlen wir außerdem, global.ideanote.logLevel auf info oder warn in der values.yaml-Datei anzupassen, um die Menge der von den Diensten erzeugten Protokolleinträge zu reduzieren.

Wir empfehlen außerdem, Zustandsprüfungen einzurichten, um die Verfügbarkeit Ihrer Ideanote-Bereitstellung zu überwachen.
Wenn Sie Zustandsprüfungen einrichten, sollten Sie folgende Pfade überwachen:

Externe Zustandsprüfungen

Service

Pfad

Webanwendung

<domain>/healthz

api

<domain>/api/healthz

idea-widget

<domain>/widget/healthz

Speicher

<domain>/files/healthz

Interne Zustandsprüfungen

Service

Pfad

konvertieren

ideanote-convert.ideanote.svc.cluster.local/healthz

html-renderer

ideanote-html-renderer.ideanote.svc.cluster.local/healthz

Lastverteilung und CDN

Wenn es in Ihrer Umgebung möglich ist, empfehlen wir, vor dem Ideanote-Load-Balancer ein CDN einzurichten, um statische Assets zwischenzuspeichern und die Auslastung des Dienstes zu verringern.
Das CDN sollte vorzugsweise so konfiguriert werden, dass alle Pfade zwischengespeichert werden, die mit /files und /chunk- beginnen.

Upgrade

Wenn Sie Ideanote On-Premise betreiben, müssen Sie auf eine neue Version aktualisieren, sobald eine neue Version verfügbar ist.
Ideanote informiert Sie, sobald eine neue Version verfügbar ist, und stellt für jede neue Version Versionshinweise bereit. Diese enthalten Informationen zu inkompatiblen Änderungen und neuen Funktionen.

In Produktionsumgebungen müssen Sie besonders auf die von Ideanote bereitgestellte Anleitung zum Upgrade achten, um Ausfallzeiten oder Datenverlust zu vermeiden.

Fehlerbehebung

Bitte wenden Sie sich an developer@ideanote.io, wenn bei der Ausführung von Ideanote On-Premise Probleme auftreten.
Ideanote unterstützt Sie bei der Fehlerbehebung und gibt Ihnen gemäß der geltenden Vereinbarung Hinweise zur Behebung des Problems.
Bevor Sie sich an uns wenden, lesen Sie bitte die folgende Anleitung zur Fehlerbehebung, um das Problem zu verstehen und es möglicherweise selbst zu beheben.

Die Installation des Helm-Charts schlägt fehl

Wenn sich Ideanote Helm Chart nicht installieren lässt, führen Sie den Installationsbefehl bitte mit dem Flag --debug aus, um weitere Informationen zum Fehler zu erhalten.
Dadurch erhalten Sie detailliertere Informationen zum Fehler und können besser nachvollziehen, was das Problem verursacht.

Wenn Sie das Problem nicht beheben können, wenden Sie sich bitte an developer@ideanote.io, um weitere Unterstützung zu erhalten.
Bitte geben Sie so viele Informationen wie möglich zu dem Problem an, einschließlich der Ausgabe der Installation mit --debug und der Datei values.yaml.

Sie können sich außerdem einen Überblick über fehlerhafte Komponenten verschaffen, indem Sie folgenden Befehl ausführen:

kubectl get all,certificaterequests,issuer -n ideanote

Das Helm-Diagramm befindet sich dauerhaft im Status „ausstehend“ oder „fehlgeschlagen“

Rufen Sie den Status des Helm-Diagramms mit folgendem Befehl ab:

helm status ideanote -n ideanote
# or
helm history ideanote -n ideanote

Wenn das Helm-Diagramm dauerhaft den Status „ausstehend“ oder „fehlgeschlagen“ hat, müssen Sie es möglicherweise mit folgendem Befehl zurücksetzen:

helm rollback ideanote -n ideanote

Meine URL/IP-Adresse oder mein SSL-Zertifikat funktioniert nicht

Sie können mit den folgenden Befehlen testen, ob die IP-Adresse Ihres Load-Balancers korrekt antwortet:

1․ Ermitteln Sie die IP-Adresse, die Ihrem Load Balancer dynamisch zugewiesen wurde. Stellen Sie sicher, dass dem Ingress eine IP-Adresse und Hostnamen zugeordnet sind.

kubectl get ingress -n ideanote

2․ Prüfen Sie mit diesem curl-Befehl und den Werten (der zugehörigen IP-Adresse und einem Hostnamen) aus dem obigen Befehl, ob Ihr Kubernetes-Cluster korrekt auf Anfragen reagiert. Stellen Sie sicher, dass als Antwort der Statuscode 200 OK und der index-html des Ideanote-Dienstes zurückgegeben werden.

# With only host
curl -kivL <host>

# With host and IP-address
curl -kivL -H 'Host: <host>' <ip-address>

3․ Mit dem enthaltenen nginx ingress-controller-Subchart sollte der Dienst nach einigen Minuten mit einem TLS-Zertifikat verfügbar sein. Bis das Zertifikat erstellt wurde, wird standardmäßig ein selbstsigniertes Zertifikat des ingress-nginx-controllers verwendet. Browser zeigen dann eine Warnung an, dass es sich um ein ungültiges Zertifikat handelt. Nach einigen Minuten sollte das Zertifikat erstellt sein und der Dienst mit einem gültigen Zertifikat verfügbar sein.

4․ Sie können den Status von CertificateRequest überprüfen, indem Sie den folgenden Befehl ausführen:

kubectl get certificaterequest -n ideanote
kubectl describe CertificateRequest ideanote-tls-1 -n ideanote
kubectl get Issuer -n ideanote

Der API-Dienst stürzt ständig ab, weil er keine Verbindung zur Datenbank/redis herstellen kann

Wenn der api Dienst abstürzt, weil keine Verbindung zur Datenbank oder zu Redis hergestellt werden kann, überprüfen Sie bitte Folgendes.

2․ Überprüfen Sie die Protokolle des Dienstes api:

kubectl logs -n ideanote svc/ideanote-api

2․ Überprüfen Sie, ob postgres und redis ausgeführt werden (folgen Sie den Schritten )

kubectl get pods -n ideanote

Manchmal müssen Sie den api Dienst einfach zwangsweise neu starten, damit er wieder eine Verbindung zur Datenbank und zu Redis herstellt.

kubectl get pods -n ideanote
kubectl delete pod <pod-name> -n ideanote --force
kubectl run --rm -it --image=busybox test-pod -- /bin/sh
ping <redis-service-ip>
nc -zv <redis-service-ip> 6379

ping <postgres-service-ip>
nc -zv <postgres-service-ip> 5432
kubectl exec -it -n ideanote svc/ideanote-api -- /bin/sh

Ich sehe viele TypeError: fetch failed Fehler in den Protokollen

Überprüfen Sie zunächst, ob alle Pods laufen:

kubectl get pods -n ideanote

Sie können außerdem direkt vom Pod aus überprüfen, ob der DNS-Name des Dienstes aufgelöst werden kann. Zum Beispiel:

kubectl exec svc/ideanote-api -n ideanote -- nslookup ideanote-convert.ideanote.svc.cluster.local

Sie können überprüfen, ob Sie direkt vom Pod aus andere Dienste anpingen können. Zum Beispiel:

kubectl exec svc/ideanote-webapp -n ideanote -- wget -qO- http://ideanote-api.ideanote.svc.cluster.local

Es könnte sich auch um ein Problem mit Netzwerkrichtlinien handeln, die manchmal die Kommunikation zwischen Diensten blockieren.
Möglicherweise müssen Sie die Netzwerkrichtlinien vorübergehend deaktivieren, um für Ideanote zu prüfen, ob dies die Ursache ist.
Sie können die Netzwerkrichtlinien deaktivieren, indem Sie global.ideanote.networkPolicies.enabled auf false in der Datei values.yaml setzen.

Netzwerkverkehr in Ihrem Cluster überwachen

Sie können https://www.kubeshark.co/ verwenden, um den Netzwerkverkehr in Ihrem Cluster zu überwachen.

1․ Installieren Sie kubeshark

sh <(curl -Ls https://kubeshark.co/install)

# OR

brew install kubeshark

2․ Starten Sie kubeshark

kubeshark tap -n ideanote

3․ Öffnen Sie das Dashboard von kubeshark in Ihrem Browser und überwachen Sie den Datenverkehr

Kubeshark

Verfügbarkeit der einzelnen Dienste testen

Hier finden Sie eine Übersicht, wie Sie die Verfügbarkeit der einzelnen Dienste testen können.
Bitte verwenden Sie diese Anleitung als Referenz, um bei Problemen jeden Dienst zu testen.

Protokolle fortlaufend anzeigen

Um die Protokolle eines bestimmten Dienstes anzuzeigen, können Sie den folgenden Befehl verwenden.

kubectl logs -n ideanote svc/ideanote-api

Dies ist nützlich, um Probleme mit dem Dienst zu beheben. Sie können auch die Protokolle aller Pods im Namespace ideanote ausgeben, indem Sie den folgenden Befehl ausführen:

kubectl get pods -n ideanote -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' | xargs -I {} kubectl logs -n ideanote {} --all-containers=true

Wenn Sie die Protokolle aller Dienste gleichzeitig fortlaufend anzeigen möchten, empfehlen wir, kubetail zu installieren und den folgenden Befehl auszuführen:

kubetail -n ideanote

Während der Fehlerbehebung empfehlen wir außerdem, global.ideanote.logLevel auf debug in der Datei values.yaml einzustellen, um die von den Diensten erzeugte Menge an Protokollen zu erhöhen.

Status der Dienste überprüfen

Um zu überprüfen, ob die Deployments bereit sind, können Sie den folgenden Befehl ausführen. Für jeden Dienst sollte 1/1 READY angezeigt werden.

kubectl get deployments -n ideanote

Wenn einer der Dienste nicht bereit ist, können Sie den Dienst mit folgendem Befehl überprüfen:

kubectl describe deployment <service-name> -n ideanote

Für eine detailliertere Ansicht der Dienste empfehlen wir, k9s zu installieren und den folgenden Befehl auszuführen:

k9s -n ideanote

Webanwendung

Der Dienst webapp sollte unter dem Pfad / verfügbar sein. Der folgende Befehl sollte einen 200-OK-Statuscode mit dem Index-HTML zurückgeben:

curl -kL your-domain.com

Alternativ können Sie den Dienst per Port-Forwarding auf Ihren lokalen Rechner weiterleiten und mit curl testen:

kubectl port-forward --namespace ideanote svc/ideanote-webapp 3000:80
curl -kL localhost:3000

api

Der Dienst api sollte unter dem Pfad /api verfügbar sein. Der folgende Befehl sollte einen 200-OK-Statuscode mit dem Text „Ideanote API“ zurückgeben:

curl -kL your-domain.com/api

Alternativ können Sie den Dienst per Port-Forwarding auf Ihren lokalen Rechner weiterleiten und mit curl testen:

kubectl port-forward --namespace ideanote svc/ideanote-webapp 3000:80
curl -kL localhost:3000

Wenn Sie die interne Nachrichtenwarteschlange der Ideanote API untersuchen möchten, können Sie den Pfad /api/bullmq aufrufen.
Um die Zugangsdaten für die API-Nachrichtenwarteschlange abzurufen, führen Sie bitte den folgenden Befehl aus:

kubectl get secret --namespace ideanote ideanote-api -o jsonpath="{.data.API_BULLMQ_CREDENTIALS}" | base64 -d

idea-widget

Der Dienst idea-widget sollte unter dem Pfad /widget verfügbar sein. Der folgende Befehl sollte einen 200-OK-Statuscode mit dem Index-HTML zurückgeben:

curl -kL your-domain.com/widget

Alternativ können Sie den Dienst per Port-Forwarding auf Ihren lokalen Rechner weiterleiten und mit curl testen:

kubectl port-forward --namespace ideanote svc/ideanote-idea-widget 3000:80
curl -kL localhost:3000

Speicher

Der Dienst storage sollte unter dem Pfad /files verfügbar sein. Der folgende Befehl sollte einen 200-OK-Statuscode mit dem Text „Ideanote Storage“ zurückgeben:

curl -kL your-domain.com/files

Alternativ können Sie den Dienst per Port-Forwarding an Ihren lokalen Rechner weiterleiten und mit curl testen. Er sollte einen 200-OK-Statuscode mit dem Text „Ideanote Convert“ zurückgeben:

kubectl port-forward --namespace ideanote svc/ideanote-storage 3000:80
curl -kL localhost:3000

konvertieren

Der Dienst convert ist nicht dem Internet ausgesetzt. Sie können ihn jedoch testen, indem Sie den Dienst per Port-Forwarding an Ihren lokalen Rechner weiterleiten und mit curl testen.
Er sollte einen 200-OK-Statuscode mit dem Text „Ideanote Convert“ zurückgeben:

kubectl port-forward --namespace ideanote svc/ideanote-convert 3000:80
curl -kL localhost:3000

Sie können auch den Status der Medien-Upload-Konvertierungsaufträge überprüfen, indem Sie den Pfad /bullmq aufrufen.

# 1: Port-forward the service to your local machine
kubectl port-forward --namespace ideanote svc/ideanote-convert 3000:80
# 2: Visit the /bullmq path in a browser:
http://localhost:3000/bullmq

html-renderer

Der Dienst html-renderer ist nicht dem Internet ausgesetzt. Sie können ihn jedoch testen, indem Sie den Dienst per Port-Forwarding an Ihren lokalen Rechner weiterleiten und mit curl testen.
Er sollte einen 200-OK-Statuscode mit dem Text „Ideanote HTML Renderer“ zurückgeben:

kubectl port-forward --namespace ideanote svc/ideanote-html-renderer 3000:80
curl -kL localhost:3000

postgresql

Um die Verfügbarkeit des Dienstes PostgreSQL zu überprüfen, können Sie den Dienst per Port-Forwarding auf Ihren lokalen Rechner weiterleiten und mit psql testen.

# 1. Get the password for the database
kubectl get secret --namespace ideanote ideanote-postgres-password -o jsonpath="{.data.postgres-password-user}" | base64 -d

# 2. Open a connection to the database
kubectl exec -it -n ideanote svc/ideanote-postgresql -- psql -U ideanote -d ideanote

# 3. Check that the API has correctly run migrations in the database.
#    It should show a list of tables.
#    If this command shows "Did not find any relations." it means that the API hasn't been able to connect to the database.
ideanote=> \d

# 4. Exit psql
ideanote=> \q

redis

Um die Verfügbarkeit des Dienstes Redis zu überprüfen, können Sie den Dienst per Port-Forwarding auf Ihren lokalen Rechner weiterleiten und mit redis-cli testen.

# 1. Port-forward the service to your local machine
kubectl port-forward --namespace ideanote svc/ideanote-redis-master 6379:6379

# 2. Initiate a connection to the database
redis-cli -h localhost -p 6379

# 3. Check that the api and convert services have been able to connect to the database.
127.0.0.1:6379> CLIENT LIST

# 4. Check that the api and convert services have been able to create keys in the database.
127.0.0.1:6379> KEYS *

Zertifikatsmanager

Bitte lesen Sie die offizielle Anleitung, um zu überprüfen, ob cert-manager korrekt installiert ist.

Wenn Ihr Zertifikat nicht erstellt wird, können Sie den Status von CertificateRequest überprüfen, indem Sie den folgenden Befehl ausführen:

kubectl get certificaterequest -n ideanote
kubectl describe CertificateRequest ideanote-tls-1 -n ideanote

Sie können den Status von Issuer auch überprüfen, indem Sie den folgenden Befehl ausführen:

kubectl get Issuer -n ideanote

Es ist außerdem hilfreich, die Protokolle des Dienstes cert-manager zu überprüfen, um festzustellen, ob Probleme vorliegen.

ingress-nginx

Um den Status des Dienstes ingress-nginx zu überprüfen, vergewissern Sie sich zunächst, dass er ausgeführt wird:

kubectl get deployments -l app.kubernetes.io/name=ingress-nginx -n ideanote

Leiten Sie den Dienst per Port-Forwarding an Ihren lokalen Rechner weiter und testen Sie ihn mit curl (dies sollte einen „404 Not Found“-Statuscode zurückgeben):

kubectl port-forward --namespace ideanote svc/ideanote-ingress-nginx-controller 8080:80
curl -kL localhost:8080

Prüfen Sie außerdem, ob ihm eine IP-Adresse zugewiesen wurde:

kubectl get svc -l app.kubernetes.io/name=ingress-nginx -n ideanote

Überprüfen Sie außerdem, dass das Ideanote ingress Objekt korrekt dem ingress-nginx Load-Balancer zugewiesen wurde.
Es sollte dieselbe IP-Adresse wie der ingress-nginx Dienst und den erwarteten Hostnamen anzeigen, den Sie in der values.yaml Datei bei der Installation von Ideanote Helm Chart festgelegt haben.

kubectl get ingresses -n ideanote

Versuchen Sie, die IP-Adresse mit curl aufzurufen. Es sollte ein „404 Not Found“-Statuscode zurückgegeben werden:

curl -kL <ip-address>

Fügen Sie der Anfrage nun einen „Host“-Header hinzu.
Sie sollte mit dem HTML-Index der Ideanote-Webanwendung antworten:

curl -kL -H 'Host: <host>' <ip-address>

Rufen Sie schließlich die Domain in einem Browser auf. Die Ideanote-Webanwendung sollte angezeigt werden.

Ideanote auf eine neue Version aktualisieren

Ideanote veröffentlicht regelmäßig neue Versionen von Ideanote Helm Chart mit neuen Funktionen und Fehlerbehebungen.
Beim Aktualisieren auf eine neue Version müssen Sie der von Ideanote bereitgestellten Upgrade-Anleitung folgen, um Ausfallzeiten oder Datenverlust zu vermeiden.

Alle Dienste sind zustandslos konzipiert (mit Ausnahme von redis, postgres und storage) und können mithilfe einer Rolling-Update-Strategie ohne Ausfallzeiten aktualisiert werden.

Releases und Datenbankmigrationen erfolgen automatisch und werden so entwickelt, dass die Ausfallzeit möglichst gering ist.
Während Datenbankmigrationen, die in der Regel einige Minuten dauern, sind die Dienste weiterhin verfügbar. Einige Funktionen sind jedoch möglicherweise deaktiviert oder langsamer, bis die Migration abgeschlossen ist.
Informationen zu möglicherweise relevanten Migrationen finden Sie in den Versionshinweisen zu jeder neuen Version.

Wir testen Releases in unseren eigenen Produktionsumgebungen, bevor wir sie öffentlich bereitstellen. Wir empfehlen jedoch, die neue Version in einer Staging-Umgebung zu testen, bevor Sie die Produktionsumgebung aktualisieren.

Bevor Sie auf eine neue Version aktualisieren, führen Sie bitte die folgenden Schritte aus

1․ Sehen Sie in den Versionshinweisen nach, ob es inkompatible Änderungen oder neue Funktionen gibt.

2․ Sichern Sie Ihre Daten. Wir empfehlen, vor dem Upgrade auf eine neue Version eine Sicherung der Datenbanken PostgreSQL und Redis zu erstellen. Legen Sie außerdem einen klaren, getesteten Plan für das Zurücksetzen der Datenbank fest, falls das Upgrade fehlschlägt.

3․ Wir empfehlen, das helm-diff-Plugin zu installieren und den folgenden Befehl auszuführen, um die genauen Änderungen an Ihrem Kubernetes-Cluster anzuzeigen:

HELM_DIFF_USE_INSECURE_SERVER_SIDE_DRY_RUN=true helm diff upgrade oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --namespace ideanote --values values.yaml --dry-run=server

Führen Sie beim Aktualisieren auf eine neue Version bitte die folgenden Schritte aus:

1․ Aktualisieren Sie Ideanote Helm Chart auf die neue Version:

helm upgrade ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --namespace ideanote --wait --timeout 10m -f values.yaml

2․ Überprüfen Sie den Status des Upgrades:

helm status ideanote --namespace ideanote

helm history ideanote --namespace ideanote

kubectl get pods -n ideanote --watch

3․ api ist der wichtigste Dienst, der nach einem Upgrade überprüft werden muss, da Migrationen einige Minuten dauern und möglicherweise fehlschlagen können, was zu Ausfallzeiten führt. Leiten Sie die API-Protokolle fortlaufend weiter, um die Migrationen zu überwachen:

kubectl logs svc/ideanote-api -n ideanote -f

Führen Sie beim Zurücksetzen auf eine vorherige Version bitte die folgenden Schritte aus:

1․ Überprüfen Sie, ob im Dienst api Migrationen ausgeführt wurden:

kubectl logs svc/ideanote-api -n ideanote

Sie können den Status der Migrationen von api auch mit psql überprüfen:

# 1. Get the password for the database
kubectl get secret --namespace ideanote ideanote-postgres-password -o jsonpath="{.data.postgres-password-user}" | base64 -d

# 2. Open a connection to the database
kubectl exec -it -n ideanote svc/ideanote-postgresql -- psql -U ideanote -d ideanote

# 3. Check if the API has ran migrations in the database. You can compare "migration_time" with the current date.
ideanote=> select * from knex_migrations order by migration_time desc limit 10;

2․ Setzen Sie Helm auf die vorherige Version zurück:

helm rollback ideanote --namespace ideanote

3․ Überprüfen Sie den Status des Rollbacks:

helm status ideanote --namespace ideanote

4․ Falls Migrationen im api Dienst tatsächlich abgeschlossen wurden und Sie ein Rollback durchführen müssen, ist es entscheidend, dass Sie auch die Datenbank auf den vorherigen Zustand zurücksetzen, da das neue Datenbankschema möglicherweise nicht mit der älteren Version des api Dienstes kompatibel ist und der api Pod aufgrund einer Abweichung des Datenbankschemas nicht gestartet werden kann.

Helm-Chart-Versionen

Hier finden Sie eine Liste der Releases von Ideanote Helm Chart sowie der Änderungen in jedem Release.

1.0.0

Das erste Release der öffentlichen Ideanote Helm Chart.

Ändern von values.yaml nach der Installation

Wenn Sie die Datei values.yaml nach der Installation von Ideanote Helm Chart ändern, können Sie das Release mit folgendem Befehl aktualisieren:

helm upgrade ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --namespace ideanote --wait --timeout 10m -f values.yaml

Ideanote deinstallieren

Führen Sie zum Deinstallieren von Ideanote Helm Chart den folgenden Befehl aus:

helm uninstall ideanote --namespace ideanote

Dadurch werden alle Ressourcen und Dienste, die mit Ideanote Helm Chart verknüpft sind, aus Ihrem Kubernetes-Cluster entfernt.

Allerdings werden nicht alle Ressourcen deinstalliert. Die folgenden Ressourcen müssen Sie manuell entfernen:

# Delete all PVCs associated with the Ideanote Helm Chart
kubectl delete pvc -l app.kubernetes.io/name=postgresql -n ideanote
kubectl delete pvc -l app.kubernetes.io/name=redis -n ideanote
kubectl delete pvc -l app.kubernetes.io/name=storage -n ideanote

# Delete all PV's associated with the Ideanote Helm Chart
kubectl get pv -n ideanote
kubectl delete pv <pv-name>

# Delete global CustomResourceDefinitions (don't do this if you have multiple Ideanote installations in the same cluster)
kubectl delete crd \
  issuers.cert-manager.io \
  clusterissuers.cert-manager.io \
  certificates.cert-manager.io \
  certificaterequests.cert-manager.io \
  orders.acme.cert-manager.io \
  challenges.acme.cert-manager.io

# Delete the namespace
kubectl delete namespace ideanote