Sur site
Pour installer Ideanote dans votre propre environnement, utilisez le Ideanote Helm Chart.
Ce chart contient tous les composants requis pour démarrer et peut évoluer pour prendre en charge des déploiements de grande envergure.
Le Ideanote Helm Chart est fourni « tout compris » et est conçu pour être facile à installer et à configurer.
Le chart comprend plusieurs sous-charts ainsi qu’une configuration par défaut qui peut être personnalisée en fonction de vos besoins.
Veuillez consulter la section architecture pour en savoir plus sur les composants inclus dans le chart Helm.
Architecture
Ideanote se compose de plusieurs composants déployés dans un cluster Kubernetes à l’aide du Ideanote Helm Chart.
Le diagramme suivant présente l’architecture de ces composants et la manière dont ils interagissent.
Prérequis
Avant de déployer Ideanote dans un cluster Kubernetes, vous devez définir et respecter les prérequis suivants :
1. Créez un Kubernetes cluster.
2. Installez kubectl.
3. Installez Helm.
4. Obtenez un ZIP-folder auprès de l’équipe Ideanote avec les jetons requis pour accéder au graphique Helm et aux images Docker.
5. Authentifiez-vous avec le Ideanote Helm registry
6. Choisissez comment core services doit être hébergé
7. Choisissez comment vous souhaitez effectuer load balancing
8. Choisissez comment effectuer backups
9. Choisissez comment effectuer monitoring
10. Créez des jetons pour les intégrations
11. Mettez à jour la configuration dans le fichier values.yaml
1. Créez un Kubernetes cluster
Un cluster doté d’au moins 4 processeurs virtuels et de 10 GB de RAM est recommandé.
Veuillez consulter les instructions de votre fournisseur de services cloud pour savoir comment créer un cluster Kubernetes.
2. Installez kubectl
Pour installer kubectl, consultez la documentation d’installation de Kubernetes. La documentation couvre la plupart des systèmes d’exploitation.
Après avoir créé le cluster, vous devez configurer kubectl avant de pouvoir interagir avec le cluster depuis la ligne de commande.
3. Installez Helm
Pour ce guide, nous utilisons la dernière version de Helm v3 (v3.15.4 ou ultérieure). Pour installer Helm, consultez la documentation d’installation de Helm.
4. Un ZIP-folder de l’équipe Ideanote
Pour demander l’accès au graphique Helm Ideanote, vous devez contacter l’équipe Ideanote à l’adresse hello@ideanote.io.
Une licence Ideanote est requise pour obtenir ce jeton d’accès.
Ideanote vous fournira un ZIP-folder nommé ideanote-on-premise.zip contenant les éléments suivants :
- Un fichier
values.yamlcontenant la configuration par défaut. Ce fichier contient également les secrets du registre requis pour que le cluster Kubernetes puisse extraire les images Docker. Veuillez lire ce guide pour en savoir plus sur la configuration du graphique Helm pour la production. - Un fichier
helm-access-token.jsoncontenant le jeton d’accès au registre Helm.
5. Authentifiez-vous avec le Ideanote Helm registry
Veuillez exécuter la commande suivante pour vous authentifier auprès du registre Helm à l’aide du helm-access-token.json fourni par Ideanote dans le fichier ZIP-folder :
# 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.devFacultatif : vous pouvez exécuter la commande suivante pour vérifier que vous êtes authentifié auprès du registre Helm.
Cette commande téléchargera le fichier Ideanote Helm Chart sur votre machine locale.
helm pull oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.06. Choisissez comment les services principaux doivent être hébergés
Le Ideanote Helm Chart comprend deux sous-graphiques pour les services de base de données et de mise en cache, installés au cours du processus d’installation :
PostgreSQLutilisé comme base de données principaleRedisutilisé comme service de mise en cache
Toutefois, pour les environnements de production, nous vous recommandons d’utiliser plutôt des services gérés en externe pour Redis et PostgreSQL et de fournir les détails de connexion lors de l’installation du graphique Helm.
Par conséquent, avant d’installer le Ideanote Helm Chart, vous devez choisir l’une des deux options suivantes :
- Sous-graphiques inclus : laissez le graphique Helm installer automatiquement
RedisetPostgreSQLdans votre cluster. Il s’agit de l’option par défaut.. Pour en savoir plus sur la configuration de ces services principaux inclus, consultez cette page. - Services principaux gérés : utilisez des services gérés pour
Rediset/ouPostgreSQL. Cette option vous oblige à fournir les détails de connexion des services gérés lors de l’installation du graphique Helm. Veuillez suivre ce guide pour en savoir plus sur la configuration de vos propres services gérés.
7. Choisissez comment vous souhaitez effectuer load balancing
Le Ideanote Helm Chart comprend deux sous-graphiques permettant de gérer l’équilibrage de charge et les certificats SSL :
ingress-nginxContrôleur Ingress/équilibreur de charge utilisé pour acheminer le trafic vers les services Ideanote.cert-managerutilisé pour émettre automatiquement des certificats SSL pour les services Ideanote à l’aide de Let’s Encrypt.
Lors de l’installation du Ideanote Helm Chart, vous devez donc choisir entre les deux options suivantes :
- Sous-graphiques inclus : laissez le graphique Helm installer automatiquement le
ingress-nginxrépartiteur de charge etcert-managerdans votre cluster. Il s’agit de l’option par défaut. Cette option nécessite que vous possédiez un domaine auquel vous pouvez ajouter un enregistrement DNS. Il peut s’agir d’un sous-domaine tel quepoc.domain.com. Les serveursLet’s Encryptdoivent pouvoir résoudre l’adresse IP de votre cluster Kubernetes afin d’émettre des certificats. En savoir plus sur la configuration du répartiteur de charge intégré ici. - Équilibreur de charge géré : Choisissez votre propre solution d’équilibrage de charge, avec votre propre contrôleur Ingress/équilibreur de charge géré ou l’équilibreur de charge d’un fournisseur cloud. En savoir plus sur la configuration de votre propre équilibreur de charge personnalisé ici.
Quel que soit votre choix ci-dessus, lors de l’installation du graphique Helm, vous devez fournir à Ideanote une URL que vous utiliserez pour accéder aux services Ideanote.
Cette URL doit être ajoutée au fichier values.yaml situé sous global.ideanote.ingress.url.
global:
ideanote:
ingress:
url: https://<your-domain>Si vous choisissez d’utiliser les sous-graphiques nginx du contrôleur Ingress/équilibreur de charge fourni et cert-manager, vous devez également indiquer votre adresse e-mail dans le fichier values.yaml.
Cette adresse e-mail est utilisée par Let’s Encrypt pour émettre des certificats SSL pour les services Ideanote.
cert-manager:
email: <your-email-address>8. Choisissez comment effectuer backups
Le Ideanote Helm Chart ne comprend actuellement aucune solution de sauvegarde intégrée.
Nous vous recommandons vivement de configurer une planification des sauvegardes pour les déploiements en production.
Selon les sous-graphiques que vous choisissez d’installer, Ideanote créera 3 PVCs (Persistent Volume Claims) dans votre cluster, avec des volumes que vous devrez tous sauvegarder :
- Volume de la base de données PostgreSQL :
data-<release>-postgresql-0(non créé si vous utilisez PostgreSQL géré) - Volume de la base de données Redis :
redis-data-<release>-redis-master-0(non créé si vous utilisez Redis géré) - Volume des téléversements Ideanote :
<release>-storage-data
9. Choisissez comment effectuer monitoring
Le Ideanote Helm Chart ne comprend actuellement aucune solution de surveillance intégrée.
Nous travaillons à ajouter la prise en charge de Prometheus et de Grafana à l’avenir.
Les services Ideanote écrivent leurs journaux dans stdout et stderr.
Ces journaux sont ensuite capturés par l’environnement d’exécution des conteneurs et peuvent être consultés à l’aide d’outils Kubernetes tels que kubectl logs.
Cependant, par défaut, ces journaux sont liés au cycle de vie du pod. Ainsi, lorsqu’un pod est arrêté, ses journaux sont perdus, sauf s’ils sont conservés ailleurs.
Par conséquent, pour configurer une surveillance adéquate des services Ideanote, vous devez installer une solution de surveillance capable de collecter ces journaux à partir des conteneurs en cours d’exécution dans le cluster Kubernetes.
10. Créez des jetons pour les intégrations
Les fonctionnalités facultatives suivantes nécessitent la création et la configuration de jetons pour des intégrations (externes). Elles sont toutes facultatives.
- OpenAI intégration pour les fonctionnalités d’IA. Définissez la valeur
ideanote.api.openai.keysur une clé API OpenAI valide. Pour en savoir plus sur la configuration de l’intégrationOpenAI, cliquez ici. - Sendgrid intégration pour les notifications par e-mail. Définissez la valeur
ideanote.api.sendgrid.keysur une clé API Sendgrid valide. Pour en savoir plus sur la configuration de l’intégrationSendgrid, cliquez ici. - SAML : intégration pour l’authentification unique. Pour en savoir plus sur la configuration de l’intégration
SAML, cliquez ici. - LDAP : intégration pour l’authentification unique. Pour en savoir plus sur la configuration de l’intégration
LDAP, cliquez ici.
11. Mettez à jour la configuration dans le fichier values.yaml
Le values.yaml inclus dans le ZIP-folder fourni par l’équipe Ideanote contient la configuration par défaut du Ideanote Helm Chart.
La configuration par défaut n’est pas destinée à la production et peut servir de point de départ pour personnaliser le graphique Helm selon vos besoins.
Valeurs requises :
global.ingress.url(obligatoire) : L’URL sous laquelle Ideanote doit fonctionner. Exemples :https://domain.com,https://poc.domain.com,http://192.0.2.0. Pour en savoir plus surload-balancingici.cert-manager.email(obligatoire si vous choisissez l’équilibreur de charge et le gestionnaire de certificats par défaut) : Votre adresse e-mail, afin queLet’s Encryptpuisse émettre un certificat. Pour en savoir plus surcert-managerici.
Installation de Ideanote
Avant d’installer le graphique Helm, vous devrez satisfaire aux 11 conditions préalables ci-dessus.
Pour installer Ideanote Helm Chart, exécutez la commande suivante.
Cela suppose que vous avez configuré values.yaml conformément aux prérequis et à vos besoins.
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.yamlCette opération installera les services Ideanote dans votre cluster Kubernetes, dans un nouvel espace de noms appelé ideanote, avec un nom de version ideanote.
Veuillez patienter quelques minutes, le temps que toutes les ressources soient allouées et que les services démarrent.
Vous pouvez vérifier l’état de chaque pod en exécutant la commande suivante :
kubectl get pods -n ideanote --watchSuivez ces étapes pour terminer l’installation
Ces étapes supposent que vous installez Ideanote Helm Chart avec les sous-graphiques ingress-nginx d’équilibreur de charge et cert-manager inclus.
1․ Récupérez l’adresse IP allouée dynamiquement à l’Ingress NGINX installé :
kubectl get ingress -l "app.kubernetes.io/part-of"=ideanote --namespace ideanote2․ Ajoutez cette adresse IP aux enregistrements DNS du domaine que vous avez spécifié dans le fichier values.yaml.
3․ Attendez quelques minutes que les enregistrements DNS se propagent et que cert-manager émette les certificats SSL. Vérifiez le statut des certificats en exécutant les commandes suivantes :
kubectl describe certificate -l "app.kubernetes.io/part-of"=ideanote --namespace ideanote
kubectl get certificaterequest -n ideanote
kubectl describe CertificateRequest ideanote-tls-1 -n ideanote4․ Enfin, accédez à l’URL que vous avez spécifiée dans le fichier values.yaml pour configurer Ideanote.
Configuration de votre espace de travail Ideanote
Maintenant que vous avez installé Ideanote dans votre cluster Kubernetes, la dernière étape consiste à configurer votre espace de travail Ideanote.
Vous pouvez accéder à votre espace de travail Ideanote en visitant l’URL que vous avez indiquée dans le fichier values.yaml et en suivant les instructions à l’écran.
Vous pouvez configurer votre espace de travail de deux façons :
- À partir de zéro : Vous pouvez choisir de créer un espace de travail à partir de zéro. Cette option vous guidera dans la création d’un compte propriétaire Ideanote et d’un espace de travail.
- Importer des données : Si vous avez utilisé Ideanote sur ideanote.io par le passé, vous pouvez choisir d’importer l’intégralité de votre espace de travail dans votre environnement sur site. Pour ce faire, veuillez contacter l’équipe Ideanote, qui vous fournira un
TAR-foldercontenant toutes les données de votre espace de travail. CeTAR-filedoit être importé pendant le processus de configuration de l’espace de travail, lorsque cela vous sera demandé.
Exemples de déploiements
Cette section contient des exemples de déploiement de Ideanote auprès de différents fournisseurs cloud et dans divers environnements.
Ces exemples peuvent vous inspirer pour déployer Ideanote dans votre propre environnement.
Vous pouvez installer Ideanote auprès du fournisseur cloud de votre choix, mais nous recommandons d’utiliser AWS, Azure ou Google Cloud Platform.
Vous pouvez également installer Ideanote sur un cluster Kubernetes local à l’aide de Minikube.
Tous les exemples de déploiement supposent que vous avez respecté les prérequis et configuré le fichier values.yaml selon vos besoins.
Minikube
La configuration de Minikube désactivera le sous-chart d’équilibrage de charge nginx inclus et utilisera à la place l’extension de routage native fournie par minikube.
Pour installer Ideanote sur Minikube, procédez comme suit :
3․ Démarrez Minikube à l’aide de la commande suivante. Celle-ci allouera 4 CPU et 8 GB de RAM au cluster :
minikube start --cpus 4 --memory 81924․ Activez les modules complémentaires requis :
minikube addons enable metrics-server
minikube addons enable ingress5․ Assurez-vous que la configuration suivante figure dans le fichier values.yaml :
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: false6․ Installez le graphique Helm d’Ideanote :
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.yaml7․ Démarrez le tunnel Minikube (et le tableau de bord) :
minikube tunnel
minikube dashboard8․ Accédez à : http://127.0.0.1 et configurez votre instance Ideanote.
Azure Kubernetes Service (AKS)
La configuration d’Azure utilisera le nginx contrôleur Ingress et le cert-manager fournis par Ideanote Helm Chart.
Si vous choisissez plutôt d’utiliser le routing add-on natif d’Azure pour Kubernetes, vous pouvez le faire en suivant ces instructions et en désactivant les services inclus nginx et cert-manager (voir comment désactiver ces services ici).
1․ Créez un cluster Azure Kubernetes Service (AKS) avec au moins 2 vCPU et 8 GB de mémoire (par exemple, en utilisant Standard_DS2_v2). Consultez ce guide pour en savoir plus sur la création d’un cluster Azure Kubernetes.
2․ Installez le Azure CLI sur votre ordinateur local. Consultez ce guide pour en savoir plus.
3․ Exécutez la commande suivante pour configurer kubectl afin de le connecter à votre cluster AKS :
az aks get-credentials --resource-group Ideanote --name Ideanote4․ Configurez le values.yaml en fonction des conditions préalables et de vos besoins. Définissez global.ingress.url sur le nom de domaine que vous souhaitez utiliser pour Ideanote. Vous devrez configurer un enregistrement DNS pour ce domaine plus loin dans ce guide.
5․ Installez le graphique Helm d’Ideanote :
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.yaml6․ Attendez quelques minutes que tous les services démarrent, puis récupérez l’adresse IP allouée dynamiquement par Azure à l’Ingress NGINX installé :
kubectl get ingress -l "app.kubernetes.io/part-of"=ideanote --namespace ideanote7․ Ajoutez cette adresse IP aux enregistrements DNS du domaine que vous avez spécifié dans le fichier values.yaml.
8․ Patientez quelques minutes, le temps que les enregistrements DNS se propagent, puis accédez à l’URL que vous avez spécifiée dans le fichier values.yaml pour configurer Ideanote. Veuillez consulter le guide de dépannage si vous rencontrez des problèmes avec l’URL/l’adresse IP.
Configuration du contrôleur Ingress nginx LoadBalancer pour Azure
Si vous devez configurer le LoadBalancer nginx contrôleur d’ingress inclus pour Azure, vous pouvez le faire en ajoutant ces annotations au fichier values.yaml.
Vous pouvez également utiliser ces annotations pour attribuer une adresse IP statique au LoadBalancer en suivant ce guide.
Par exemple :
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"Utilisation de nœuds Spot Azure
Veuillez ajouter ce qui suit au fichier values.yaml pour exécuter tous les déploiements sur des nœuds Spot Azure :
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:
<<: *tolerationsAndAffinityGoogle Plateforme cloud (GKE)
Cet exemple vous montre comment configurer Ideanote sur un cluster GKE Kubernetes Autopilot (GCP).
Le cluster sera prêt pour la production avec un PostgreSQL géré et un LoadBalancer géré, ainsi qu’une mise en cache CDN pour les ressources.
Prérequis :
- Suivez tous les prérequis principaux
- Vous devez posséder un domaine auquel vous pouvez ajouter un enregistrement DNS
- Vous devez avoir un compte Google Cloud Platform
1․ Créer un réseau VPC
2․ Créer un nouveau cluster Kubernetes Autopilot
- Associez le réseau VPC que vous avez créé à l’étape 1
3․ Créer une nouvelle instance PostgreSQL
- Associez le réseau VPC que vous avez créé à l’étape 1
- Créez une base de données nommée
ideanote - Créez un utilisateur nommé
ideanoteet notez le mot de passe
4. Installez l’interface de ligne de commande gcloud cli et connectez-vous à votre compte GCP
5. Configurez kubectl pour vous connecter à votre cluster GCP
gcloud container clusters get-credentials <cluster> --region <region> --project <project>6. Créez une nouvelle adresse IP statique pour LoadBalancer et notez l’adresse IP :
gcloud compute addresses create ideanote-global --global
gcloud compute addresses list --project ideanote-sa7. Accédez à votre fournisseur DNS et ajoutez un enregistrement A pour le domaine que vous souhaitez utiliser avec Ideanote. Faites pointer l’enregistrement A vers l’adresse IP statique créée à l’étape 6.
8. Configurez le fichier values.yaml avec les valeurs suivantes. Renseignez les valeurs de global.ideanote.psql.host, global.ideanote.psql.passwordSecret.password, global.ideanote.ingress.url et global.ideanote.gke.ingress.staticIPName.
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: 5Gi9. (Facultatif) Modifiez la classe de stockage par défaut avec allowVolumeExpansion: true afin de permettre de redimensionner facilement les PVC:
kubectl patch storageclass standard-rwo -p '{"allowVolumeExpansion": true}'10. Installez le graphique Helm d’Ideanote :
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.yaml11. Attendez que le cluster soit prêt, puis accédez à l’URL indiquée dans values.yaml. L’allocation initiale des ressources des clusters Autopilot peut prendre beaucoup de temps. Veuillez également patienter jusqu’à 1 heure pour que Google Cloud émette le certificat SSL.
Préparez votre cluster GKE pour la production
12. Modifiez les demandes de volume avec persistentVolumeReclaimPolicy: Retain afin d’éviter toute perte de données lors de la suppression de la version Helm :
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. Configurez des sauvegardes de la base de données PostgreSQL. Vous pouvez utiliser les sauvegardes Cloud SQL ou une solution de sauvegarde tierce.
14. Configurez des sauvegardes pour l’ensemble du cluster Kubernetes, y compris les VPCs (Persistent Volume Claims), en suivant ce guide.
Utilisation de nœuds Spot GCP
Veuillez ajouter ce qui suit au fichier values.yaml pour exécuter des déploiements sur des machines virtuelles Spot GCP :
nodeSelector: &nodeSelector
nodeSelector:
cloud.google.com/gke-spot: "true"
redis:
master:
<<: *nodeSelector
global:
ideanote:
<<: *nodeSelectorUbuntu 24 avec MicroK8s (instance AWS EC2, cluster à nœud unique)
Ce guide vous montrera comment installer Ideanote sur un cluster Kubernetes à nœud unique à l’aide de MicroK8s sur une instance AWS EC2.
Il utilise les modules complémentaires MicroK8s inclus nginx pour l’équilibrage de charge et le module complémentaire hostpath-storage pour le stockage.
En production, envisagez de remplacer ces modules complémentaires par une solution adaptée à la production, comme openebs pour le stockage et AWS ELB pour l’équilibrage de charge.
1. Créez une nouvelle instance EC2 Ubuntu 24
- Au moins 4 processeurs et 8 Go de RAM (par exemple, avec le type d’instance
t1.large). - Au moins 30 Go de stockage.
- Vérifier
Allow HTTPS traffic from the internet - Vérifier
Allow HTTP traffic from the internet - Créer, associer et télécharger une paire de clés pour l'accès SSH.
2. Associez l’adresse IP de l’instance à un nom de domaine
Notez l'adresse publique IP de l'instance et associez-la à un nom de domaine dont vous êtes propriétaire en ajoutant un enregistrement A aux paramètres DNS du domaine.
Par exemple : ideanote.your-domain.com ou your-domain.com.
3. Connectez-vous à l’instance via SSH
# 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 ~/.bashrc5. Activez les modules complémentaires
# Required addons
microk8s enable ingress
microk8s enable hostpath-storage # Consider using "openebs" in production environment
# Optional addons
microk8s enable dashboard
microk8s enable metrics-server6. Téléversez le ZIP-folder fourni par l’équipe Ideanote sur l’instance
# Run this on your local machine
chmod 400 <key>.pem
scp -i <key>.pem ideanote-on-premise.zip ubuntu@<instance ip address>:/home/ubuntu7. Décompressez le ZIP-folder sur l’instance EC2 et authentifiez-vous auprès du registre Helm
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.dev8. Mettez à jour le fichier values.yaml avec les valeurs suivantes
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. Installez le graphique Helm d’Ideanote
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.yaml10. Attendez quelques minutes que tous les services démarrent et que les certificats SSL soient délivrés par cert-manager
kubectl get deployments -n ideanote --watch
kubectl get certificaterequest -n ideanote --watch11. Enfin, rendez-vous sur https://your-domain.com pour configurer votre espace de travail Ideanote
Configurer values.yaml
Le tableau suivant répertorie les paramètres configurables du graphique Ideanote et leurs valeurs par défaut.
Clé | Type | Par défaut | Description |
|---|---|---|---|
|
| Définissez l’adresse e-mail à utiliser pour le compte ACME. Cette valeur est requise si vous choisissez d’installer et d’utiliser le | |
|
|
| Installez le sous-chart cert-manager |
|
|
| Demandes de ressources CPU pour le service cert-manager |
|
|
| Demandes de ressources mémoire pour le service cert-manager |
|
|
| Définissez l’URL du serveur ACME. Utilisez le serveur de préproduction « https://acme-staging-v02.api.letsencrypt.org/directory » pour les tests. |
|
|
| Configurez l’émetteur ACME pour le graphique cert-manager. En savoir plus ici |
|
| Le fournisseur de cloud à utiliser pour le déploiement. Si vous définissez cette valeur, le déploiement privilégiera les composants natifs du fournisseur de cloud spécifié, tels qu’un équilibreur de charge natif. Actuellement, seul GKE est pris en charge. | |
|
|
| Définissez éventuellement le domaine du cluster pour le déploiement. Cette valeur est utilisée pour générer les URL des services internes |
|
|
| Ajoutez l’affinité à tous les déploiements Ideanote |
|
|
| Ajoutez des annotations à tous les déploiements Ideanote |
|
|
| Par défaut, l’application Web est actualisée automatiquement chaque fois qu’une nouvelle version est déployée. Cela permet aux utilisateurs d’obtenir la dernière version de l’application Web sans avoir à actualiser eux-mêmes la page. |
|
|
| Activez ou désactivez la mise à l’échelle automatique pour tous les déploiements Ideanote |
|
| Remplacez le nombre maximal de réplicas pour tous les déploiements Ideanote | |
|
| Remplacez le nombre minimal de réplicas pour tous les déploiements Ideanote | |
|
| Remplacez le pourcentage cible d’utilisation du CPU pour tous les déploiements Ideanote | |
|
| Remplacez le pourcentage cible d’utilisation de la mémoire pour tous les déploiements Ideanote | |
|
|
| Cela activera dans l’interface utilisateur le bouton « suggestion de fonctionnalité », qui permet aux utilisateurs de proposer directement de nouvelles demandes de fonctionnalités à l’équipe Ideanote. |
|
|
| Cela activera dans l’interface utilisateur le bouton « signaler un problème », qui permet aux utilisateurs de signaler directement des problèmes à l’équipe Ideanote. |
|
| Définissez l’adresse e-mail utilisée pour l’authentification auprès du registre Docker. Cette valeur est fournie par Ideanote. | |
|
| Définissez le mot de passe utilisé pour l’authentification auprès du registre Docker. Cette valeur est fournie par Ideanote. | |
|
|
| Remplacez la stratégie de récupération des images pour tous les déploiements Ideanote |
|
|
| Remplacez le dépôt des images pour tous les déploiements Ideanote |
|
| Remplacez la balise des images pour tous les déploiements Ideanote | |
|
|
| Ajoutez des annotations supplémentaires à l’objet ingress créé pour Ideanote. Consultez la liste des annotations autorisées pour le graphique |
|
| Définissez le nom de la classe ingress pour l’objet ingress Ideanote | |
|
|
| Activez la création de l’objet ingress pour Ideanote |
|
|
| L’Issuer cert-manager à utiliser pour le certificat TLS. |
|
|
| Activez ou désactivez TLS pour l’objet ingress créé pour Ideanote. Cette option doit être activée si vous souhaitez utiliser le |
|
|
| Définissez le nom du secret pour le certificat TLS. Obligatoire si vous désactivez le |
|
| Définissez l’URL ingress pour Ideanote. Il doit s’agir d’un domaine que vous contrôlez et depuis lequel vous souhaitez que Ideanote soit accessible. Cette valeur peut également inclure un sous-domaine. Cette valeur est obligatoire. | |
|
|
| Définissez logLevel pour tous les services Ideanote. |
|
|
| Cela créera des stratégies réseau pour tous les services Ideanote. Les stratégies réseau servent à restreindre le trafic entrant et sortant des services et appliquent par défaut le principe du moindre privilège. |
|
|
| Ajoutez nodeSelector à tous les déploiements Ideanote |
|
|
| Activez ou désactivez la création d’un PodDisruptionBudget pour tous les déploiements Ideanote |
|
|
| Définissez le nombre minimal de pods disponibles pour tous les déploiements Ideanote pendant les interruptions |
|
|
| Le nom de la base de données PostgreSQL à utiliser pour le service Ideanote |
|
|
| L’hôte à utiliser pour se connecter à la base de données PostgreSQL |
|
|
| Remplacez la clé utilisée pour stocker dans le secret le mot de passe de l’utilisateur de la base de données. |
|
| Si vous choisissez de créer votre propre secret de mot de passe pour Redis à l’aide de "kubectl", vous devez définir ici le nom du secret. Le secret doit contenir la clé "global.ideanote.psql.passwordSecret.key". | |
|
|
| Définissez le mot de passe de l’utilisateur de la base de données |
|
|
| Le port à utiliser pour se connecter à la base de données PostgreSQL |
|
|
| Le nom d’utilisateur PostgreSQL à utiliser pour le service Ideanote |
|
| Le numéro de base de données Redis à utiliser pour le service Ideanote | |
|
|
| L’hôte à utiliser pour se connecter à la base de données Redis |
|
|
| Remplacez la clé utilisée pour stocker dans le secret le mot de passe de l’utilisateur Redis. |
|
| Si vous choisissez de créer votre propre secret de mot de passe pour Redis à l’aide de "kubectl", vous devez définir ici le nom du secret. Le secret doit contenir la clé "global.ideanote.redis.passwordSecret.key". | |
|
| Définissez le mot de passe de l’utilisateur Redis | |
|
|
| Le port à utiliser lors de la connexion à la base de données Redis |
|
| Le nom d’utilisateur Redis à utiliser pour le service Ideanote | |
|
|
| Activer ou désactiver les demandes de ressources pour tous les déploiements Ideanote |
|
| Remplacer la limite de processeur pour tous les déploiements Ideanote | |
|
| Remplacer la limite de mémoire pour tous les déploiements Ideanote | |
|
| Remplacer la demande de processeur pour tous les déploiements Ideanote | |
|
| Remplacer la demande de mémoire pour tous les déploiements Ideanote | |
|
|
| Tous les services seront redémarrés à chaque modification de la configuration afin de garantir l’application immédiate de la nouvelle configuration. |
|
|
| Ajouter des annotations à tous les services Ideanote |
|
| Remplacer le port de service externe pour tous les services Ideanote | |
|
| Remplacer le port de service interne pour tous les services Ideanote | |
|
| Remplacer le type de service pour tous les services Ideanote | |
|
|
| Ajouter des annotations au compte de service créé par Ideanote |
|
|
| Permettre aux déploiements Ideanote d’utiliser un compte de service créé automatiquement par le graphique Helm Ideanote |
|
|
| Remplacer le nom du compte de service Ideanote |
|
| Certificat SAML pour configurer Ideanote en tant que fournisseur de services | |
|
| Clé privée SAML pour configurer Ideanote en tant que fournisseur de services | |
|
|
| Ajouter des tolérances à tous les déploiements Ideanote |
|
|
| Par défaut, cert-manager installe les ressources dans l’espace de noms « kube-system ». Modifiez cette valeur si vous ne souhaitez pas que l’espace de noms « kube-system » soit modifié. |
|
| Définir l’affinité du service API | |
|
|
| Ajouter des annotations supplémentaires au déploiement de l’API |
|
|
| Activer la mise à l’échelle automatique du service API. Cette option peut être remplacée à l’aide de |
|
|
| Nombre maximal de réplicas pour le service API |
|
|
| Nombre minimal de réplicas pour le service API |
|
|
| Pourcentage cible d’utilisation du processeur pour le service API |
|
|
| Pourcentage cible d’utilisation de la mémoire pour le service api |
|
|
| Activez cette valeur pour que le pod échoue immédiatement s’il détecte une incompatibilité de schéma de base de données. Cela se produit généralement lors d’une restauration de la version précédente du service |
|
| Définir nodeSelector pour le service api | |
|
| Définir sur une clé API OpenAI pour activer API OpenAI | |
|
|
| Chemin ou sous-domaine du service api. Cette valeur est utilisée pour créer l’URL de l’objet ingress. |
|
|
| Nombre de réplicas du service api. L’activation de la mise à l’échelle automatique remplacera cette valeur. |
|
|
| Définir sur true pour activer les demandes de ressources pour le service api. Cette valeur peut être remplacée à l’aide de |
|
|
| Limites de ressources CPU et mémoire pour le service api |
|
|
| Limites de ressources mémoire pour le service api |
|
|
| Demandes de ressources CPU et mémoire pour le service api |
|
|
| Demandes de ressources mémoire pour le service api |
|
| Définissez une clé API Sendgrid pour permettre à Ideanoate d’envoyer des e-mails | |
|
|
| Ajouter des annotations supplémentaires au service api |
|
|
| Port externe pour api |
|
|
| Port interne pour api |
|
|
| Type de service pour api |
|
| Définir les tolérances du service api | |
|
| Définir l’affinité du service convert | |
|
|
| Ajouter des annotations supplémentaires au déploiement convert |
|
|
| Activer la mise à l’échelle automatique pour le service convert. Cette valeur peut être remplacée à l’aide de |
|
|
| Nombre maximal de réplicas du service convert |
|
|
| Nombre minimal de réplicas du service convert |
|
|
| Pourcentage cible d’utilisation du CPU pour le service convert |
|
|
| Pourcentage cible d’utilisation de la mémoire pour le service convert |
|
| Définir nodeSelector pour le service convert | |
|
|
| Nombre de réplicas du service convert. L’activation de la mise à l’échelle automatique remplacera cette valeur. |
|
|
| Définir sur true pour activer les demandes de ressources pour le service convert. Cela peut être remplacé en utilisant |
|
|
| Limites de ressources CPU et mémoire pour le service convert |
|
|
| Limites de ressources mémoire pour le service convert |
|
|
| Demandes de ressources CPU et mémoire pour le service convert |
|
|
| Demandes de ressources mémoire pour le service convert |
|
|
| Ajouter des annotations supplémentaires au service convert |
|
|
| Port externe pour convert |
|
|
| Port interne pour convert |
|
|
| Type de service pour convert |
|
| Définir les tolérances pour le service convert | |
|
| Définir l'affinité pour le service html-renderer | |
|
|
| Ajouter des annotations supplémentaires au déploiement html-renderer |
|
|
| Activer la mise à l'échelle automatique pour le service html-renderer. Cela peut être remplacé en utilisant |
|
|
| Nombre maximal de réplicas pour le service html-renderer |
|
|
| Nombre minimal de réplicas pour le service html-renderer |
|
|
| Pourcentage cible d'utilisation du CPU pour le service html-renderer |
|
|
| Pourcentage cible d'utilisation de la mémoire pour le service html-renderer |
|
| Définir nodeSelector pour le service html-renderer | |
|
|
| Nombre de réplicas pour le service html-renderer. L'activation de la mise à l'échelle automatique remplacera cette valeur. |
|
|
| Définir sur true pour activer les demandes de ressources pour le service html-renderer. Cela peut être remplacé en utilisant |
|
|
| Limites de ressources CPU et mémoire pour le service html-renderer |
|
|
| Limites de ressources mémoire pour le service html-renderer |
|
|
| Demandes de ressources CPU et mémoire pour le service html-renderer |
|
|
| Demandes de ressources mémoire pour le service html-renderer |
|
|
| Ajouter des annotations supplémentaires au service html-renderer |
|
|
| Port externe de html-renderer |
|
|
| Port interne de html-renderer |
|
|
| Type de service de html-renderer |
|
| Définir les tolérations du service html-renderer | |
|
| Définir l’affinité du service idea-widget | |
|
|
| Ajouter des annotations supplémentaires au déploiement idea-widget |
|
|
| Activer la mise à l’échelle automatique du service idea-widget. Cette option peut être remplacée en utilisant |
|
|
| Nombre maximal de réplicas du service idea-widget |
|
|
| Nombre minimal de réplicas du service idea-widget |
|
|
| Pourcentage cible d’utilisation du processeur pour le service idea-widget |
|
|
| Pourcentage cible d’utilisation de la mémoire pour le service idea-widget |
|
| Définir nodeSelector pour le service idea-widget | |
|
|
| Le chemin ou le sous-domaine du service idea-widget. Cette valeur est utilisée pour créer l’URL de l’objet ingress. |
|
|
| Nombre de réplicas du service idea-widget. L’activation de la mise à l’échelle automatique remplacera cette valeur. |
|
|
| Définir sur true pour activer les demandes de ressources du service idea-widget. Cette option peut être remplacée en utilisant |
|
|
| Limites des ressources CPU et mémoire pour le service idea-widget |
|
|
| Limites de ressources mémoire du service idea-widget |
|
|
| Demandes de ressources CPU et mémoire pour le service de widget d’idées |
|
|
| Demandes de ressources mémoire du service idea-widget |
|
|
| Ajouter des annotations supplémentaires au service idea-widget |
|
|
| Port externe de idea-widget |
|
|
| Port interne de idea-widget |
|
|
| Type de service de idea-widget |
|
| Définir les tolérations du service idea-widget | |
|
| Définir l’affinité du service storage | |
|
|
| Ajouter des annotations supplémentaires au déploiement "storage" |
|
|
| La mise à l’échelle automatique n’est pas activée par défaut pour le service "storage". Veuillez modifier "ideanote.storage.persistence.accessMode" en "ReadWriteMany" si vous l’activez. |
|
|
| Nombre maximal de réplicas pour le service de stockage |
|
|
| Nombre minimal de réplicas pour le service de stockage |
|
|
| Pourcentage cible d’utilisation du processeur pour le service de stockage |
|
|
| Pourcentage cible d’utilisation de la mémoire pour le service de stockage |
|
|
| Taille maximale de téléversement pour le service de stockage. Cette valeur sera utilisée pour définir « client_max_body_size » dans la configuration nginx du graphique nginx-ingress inclus. |
|
| Définir nodeSelector pour le service de stockage | |
|
|
| Chemin ou sous-domaine du service de stockage. Cette valeur est utilisée pour créer l’URL de l’objet ingress. |
|
|
| Mode d’accès pour le PVC |
|
|
| Définir sur true pour activer la persistance du service de stockage |
|
| Si un PVC existant doit être utilisé pour le service de stockage, indiquez son nom ici. Ce graphique Helm ne créera alors pas automatiquement de nouveau PVC | |
|
|
| Taille de stockage du PVC |
|
| Classe de stockage du PVC | |
|
|
| Mode de volume du PVC |
|
|
| Nombre de réplicas du service de stockage. L’activation de la mise à l’échelle automatique remplacera cette valeur. |
|
|
| Définir sur true pour activer les demandes de ressources pour le service de stockage. Cette valeur peut être remplacée à l’aide de |
|
|
| Limites de ressources en processeur et en mémoire pour le service de stockage |
|
|
| Limite de ressources en mémoire pour le service de stockage |
|
|
| Demandes de ressources en processeur et en mémoire pour le service de stockage |
|
|
| Demande de ressources en mémoire pour le service de stockage |
|
|
| Ajouter des annotations supplémentaires au service de stockage |
|
|
| Port externe du service de stockage |
|
|
| Port interne du service de stockage |
|
|
| Type de service pour le service de stockage |
|
| Définir les tolérances pour le service de stockage | |
|
| Définir l’affinité pour le service de l’application web | |
|
|
| Ajouter des annotations supplémentaires au déploiement de l’application web |
|
|
| Activer la mise à l’échelle automatique du service d’application web. Cette option peut être remplacée en utilisant |
|
|
| Nombre maximal de réplicas pour le service d’application web |
|
|
| Nombre minimal de réplicas pour le service d’application web |
|
|
| Pourcentage cible d’utilisation du processeur pour le service d’application web |
|
|
| Pourcentage cible d’utilisation de la mémoire pour le service d’application web |
|
| Définir nodeSelector pour le service d’application web | |
|
|
| Le chemin ou le sous-domaine du service d’application web. Cette valeur est utilisée pour créer l’URL de l’objet d’ingress. |
|
|
| Nombre de réplicas du service d’application web. L’activation de la mise à l’échelle automatique remplacera cette valeur. |
|
|
| Définir sur true pour activer les demandes de ressources pour le service d’application web. Cette option peut être remplacée en utilisant |
|
|
| Limites de ressources du processeur et de la mémoire pour le service d’application web |
|
|
| Limites de ressources de mémoire pour le service d’application web |
|
|
| Demandes de ressources du processeur et de la mémoire pour le service d’application web |
|
|
| Demandes de ressources de mémoire pour le service d’application web |
|
|
| Ajouter des annotations supplémentaires au service d’application web |
|
|
| Port externe du service d’application web |
|
|
| Port interne du service d’application web |
|
|
| Type de service du service d’application web |
|
| Définir les tolérances du service d’application web | |
|
|
| Type de service à créer pour le contrôleur Ingress |
|
|
| Installez le sous-chart ingress-nginx inclus |
|
|
| Installez le sous-chart PostgreSQL inclus |
|
|
| Taille de stockage du PVC du service PostgreSQL inclus |
|
|
| Préréglage de ressources PostgreSQL |
|
|
| Installez le sous-chart Redis inclus |
|
|
| Taille de stockage pour le PVC du service Redis inclus |
|
|
| Préréglage des ressources Redis |
Configurer les sous-charts inclus
Configuration du sous-chart postgresql inclus
Le Ideanote Helm Chart installe par défaut le chart PostgreSQL de Bitnami en tant que sous-chart.
Cela configure une base de données PostgreSQL pour le service Ideanote.
Vous pouvez configurer le sous-chart PostgreSQL en modifiant les valeurs dans le fichier values.yaml sous la clé postgresql.
Veuillez consulter PostgreSQL cette liste des valeurs autorisées pour le sous-chart inclus ici
Exemple de configuration :
postgresql:
install: true
primary:
persistence:
size: 5Gi
resources:
requests:
memory: 1Gi
cpu: 250m
limits:
memory: 2Gi
cpu: 500mMot de passe
Le sous-chart PostgreSQL inclus créera automatiquement un secret contenant le mot de passe de l’utilisateur de la base de données et de l’administrateur.
Vous pouvez remplacer le mot de passe généré automatiquement pour la base de données en définissant la valeur global.ideanote.psql.passwordSecret.password dans le fichier values.yaml.
Connexion à la base de données PostgreSQL depuis l’extérieur du cluster
Pour vous connecter à votre base de données depuis l’extérieur du cluster, exécutez les commandes suivantes :
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 postgresConfiguration du sous-chart redis inclus
Le Ideanote Helm Chart installe par défaut le chart Redis de Bitnami en tant que sous-chart.
Cela configure une base de données Redis pour le service Ideanote.
Vous pouvez configurer le sous-chart Redis en modifiant les valeurs dans le fichier values.yaml sous la clé redis.
Veuillez consulter Redis cette liste des valeurs autorisées pour le sous-chart inclus ici.
Exemple de configuration :
redis:
install: true
master:
persistence:
size: 5Gi
resources:
requests:
memory: 1Gi
cpu: 250m
limits:
memory: 2Gi
cpu: 500mConnexion à la base de données redis depuis l’extérieur du cluster
Pour vous connecter à votre base de données Redis depuis l’extérieur du cluster, exécutez les commandes suivantes :
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 6379Configuration du sous-chart ingress-nginx inclus
Le Ideanote Helm Chart installe par défaut le chart ingress-nginx en tant que sous-chart.
Cela configure un équilibreur de charge pour le service Ideanote et sert de contrôleur d’ingress pour l’objet ingress Ideanote.
Vous pouvez configurer le sous-chart ingress-nginx en modifiant les valeurs dans le fichier values.yaml sous la clé ingress-nginx.
Veuillez consulter ingress-nginx cette liste des valeurs autorisées pour le sous-chart inclus ici.
Exemple de configuration :
ingress-nginx:
enabled: true
controller:
service:
annotations:
cloud.google.com/load-balancer-type: "Internal"
resources:
requests:
memory: 1Gi
cpu: 250m
limits:
memory: 2Gi
cpu: 500mConfiguration du sous-chart cert-manager inclus
Le Ideanote Helm Chart installe par défaut le chart cert-manager en tant que sous-chart.
Cela configure le cert-manager pour créer et gérer automatiquement les certificats TLS du service Ideanote.
Vous pouvez configurer le cert-manager sous-chart en modifiant les valeurs dans le fichier values.yaml sous la clé cert-manager.
Veuillez consulter ici la liste des valeurs autorisées pour le cert-manager sous-chart inclus ici.
Exemple de configuration :
cert-manager:
install: true
installCRDs: false
replicaCount: 2Interaction avec le service cert-manager
Nous recommandons d’installer cmctl pour interagir avec le service cert-manager.
Cet outil CLI peut vous aider à gérer les ressources cert-manager au sein de votre cluster.
Par exemple, vous pouvez renouveler le certificat à l’aide de cet outil en exécutant la commande suivante :
cmctl renew ideanote-tls -n ideanote
kubectl get certificaterequest -n ideanoteConfigurer des services externes/gérés
Ideanote comprend des sous-graphiques intégrés pour PostgreSQL, Redis et Load-balancer services.
Ces services sont gérés par le Ideanote Helm Chart et sont installés par défaut lors du déploiement de Ideanote.
Cependant, nous recommandons d’utiliser des services externes ou gérés pour autant de ces services que possible lorsque Ideanote est exécuté dans un environnement de production.
Cela vous permettra de disposer d’une infrastructure fiable et évolutive.
Cette section comprenait un guide expliquant comment configurer les services externes/gérés pour PostgreSQL, Redis et Load-balancer (la combinaison de ingress-nginx et cert-manager).
Configurer une instance externe de PostgreSQL
Pour utiliser une instance externe de PostgreSQL avec Ideanote, vous devez fournir les informations de connexion lors de l'installation de Ideanote Helm Chart.
Voici un exemple de configuration pour se connecter à une instance externe de PostgreSQL :
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: falseConfigurer une instance externe de Redis
Pour utiliser une instance externe de Redis avec Ideanote, vous devez fournir les informations de connexion lors de l'installation de Ideanote Helm Chart.
Voici un exemple de configuration pour se connecter à une instance externe de Redis :
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: falseConfigurez un load-balancer
Nous recommandons d'utiliser un équilibreur de charge natif du fournisseur cloud pour le contrôleur d'entrée.
Les fournisseurs cloud proposent souvent des équilibreurs de charge gérés qui peuvent être utilisés avec Kubernetes en définissant ingress class ou en ajoutant des annotations à l'objet d'entrée.
Vous pouvez ajouter ces valeurs à l'aide de la configuration suivante :
global:
ideanote:
ingress:
annotations: <annotations>
className: <ingress-class>
cert-manager:
install: false
ingress-nginx:
install: falseConfigurer les intégrations
Vous trouverez ici des guides expliquant comment configurer les différentes intégrations prises en charge par Ideanote.
Aucune de ces intégrations n'est requise pour exécuter Ideanote sur site, mais elles peuvent améliorer les fonctionnalités de votre espace de travail.
Configurer l'intégration Sendgrid
Pour que Ideanote puisse envoyer des e-mails, vous devez fournir une clé Sendgrid API lors de l'installation de Ideanote Helm Chart.
Veuillez suivre ce guide pour configurer l'intégration Sendgrid :
1․ Créez un compte Sendgrid si vous n’en avez pas déjà un.
2․ Créez une clé API dans le tableau de bord Sendgrid. Elle doit disposer d’au moins Mail Send capacités.
3․ Fournissez la clé API au fichier values.yaml :
ideanote:
api:
sendgrid:
key: "SG........."Configurer l'intégration OpenAI
Pour que la plateforme Ideanote fournisse des fonctionnalités d'IA, vous devez fournir une clé OpenAI API lors de l'installation de Ideanote Helm Chart.
Veuillez suivre ce guide pour configurer l'intégration OpenAI :
1․ Créez un compte OpenAI si vous n’en avez pas déjà un.
2․ Créez une clé API dans le tableau de bord OpenAI. Elle doit disposer des autorisations All.
3․ Fournissez la clé API au fichier values.yaml :
ideanote:
api:
openai:
key: "sk-........."Configurer l'intégration SAML
Le Ideanote Helm Chart permet de configurer votre déploiement en tant que fournisseur de services SAML, afin que vous puissiez utiliser votre propre fournisseur d'identité pour l'authentification.
Pour cela, vous devez fournir un certificat lors de la configuration de l'intégration SAML.
Veuillez suivre ce guide pour configurer l'intégration SAML :
1․ Créez un certificat autosigné à l’aide de la commande suivante :
openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=my-service.example.com"2․ Fournissez le certificat et la clé au fichier values.yaml et installez le Ideanote Helm Chart :
global:
ideanote:
saml:
cert: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
key: ....3․ Rendez-vous sur https://<your-domain>/api/sso/saml/metadata.xml ; il s’agit désormais du point de terminaison des métadonnées de votre fournisseur de services SAML Ideanote.
4․ Configurez votre fournisseur d’identité. Veuillez suivre ce guide pour plus d’informations et pensez à remplacer l’metadata.xml URL par la vôtre.
Configurez l’intégration LDAP
Ideanote prend en charge le LDAP protocole pour l’intégration à votre répertoire d’utilisateurs et de groupes existant, tel que Microsoft Active Directory et Entra ID. Vous pouvez utiliser LDAP pour authentifier et synchroniser les utilisateurs, soit au moment de leur connexion à votre espace de travail grâce au provisionnement juste-à-temps, soit à l’avance via une étape de Provisionnement intégrée directement à l’assistant de configuration LDAP. LDAP ne peut pas être configuré à l’aide de la configuration values.yaml, mais doit plutôt être configuré après ou pendant le processus de configuration de votre espace de travail Ideanote.
Si vous souhaitez utiliser LDAP, mais que vous ne l’avez pas encore mis en œuvre dans votre infrastructure informatique, veuillez consulter la documentation pertinente pour sa mise en œuvre, adaptée à votre infrastructure informatique. Nous vous recommandons les ressources suivantes :
- Authentification LDAP avec Microsoft Entra ID
- Guide étape par étape pour configurer LDAPS sur Windows Server
Dans ce guide, nous vous accompagnerons tout au long du processus de configuration sur la plateforme Ideanote.
Configuration de LDAP sur votre espace de travail
- Accédez à Paramètres.
- Accédez à Authentification.
- Cliquez sur Ajouter pour créer une nouvelle option de connexion.
- Sélectionnez LDAP dans la liste des options.
Configuration de LDAP
- Cliquez sur Ajouter une configuration.
- Saisissez l’URL du serveur LDAP, sans le protocole
ldap://ni son port. - Saisissez le Bind DN/UPN, qui correspond au nom distinctif (DN) ou au nom principal d’utilisateur (UPN) dans certains environnements, tels que Microsoft Active Directory ou Microsoft Entra ID, utilisé pour établir la liaison (s’authentifier) avec votre annuaire LDAP. Il indique l’entrée de l’annuaire que Ideanote utilisera pour l’authentification et les recherches. Ce compte doit disposer d’un accès en lecture à l’annuaire. Par exemple, un UPN peut se présenter sous la forme
you@your-domain.com, ce qui le rend plus facile à mémoriser et à utiliser. Un DN de liaison plus traditionnel peut également se présenter sous la formeCN=Admin,OU=Users,DC=your-domain,DC=com, qui indique un utilisateur administratif au sein de l’unité organisationnelleUsersdu domaineyour-domain.com. - Saisissez le Bind Password. Il s’agit du mot de passe associé au nom distinctif de liaison (Bind DN/UPN). Ideanote utilise ce mot de passe pour authentifier le DN de liaison spécifié lors de la connexion à l’annuaire
LDAP. Ce mot de passe doit correspondre au compte indiqué dans le champ Bind DN/UPN, qu’il s’agisse d’un nom principal d’utilisateur (UPN) tel queyou@your-domain.comou d’un nom distinctif LDAP plus traditionnel tel queCN=Admin,OU=Users,DC=your-domain,DC=com. Ce mot de passe est indispensable pour établir une connexion sécurisée permettant d’effectuer des recherches et de récupérer les informations utilisateur nécessaires aux processus d’authentification. La valeur enregistrée seraAES-256chiffrée. - Cliquez sur
Test Connectionpour vérifier qu’il est possible de se connecter à l’URL du serveur LDAP et d’établir une liaison avec celui-ci (de s’y « authentifier ») à l’aide du Bind DN/UPN et du Bind Password fournis. Si la connexion réussit, le texte Connexion LDAP établie avec succès s’affichera à côté du boutonTest Connection.
Si vous rencontrez un problème, veuillez consulter la section Dépannage de la connexion.
Champs de configuration supplémentaires
- Le DN de base représente le niveau supérieur de votre arborescence d’annuaire dans lequel rechercher lors du provisionnement des utilisateurs et des groupes. Vous pouvez l’utiliser pour limiter la recherche à une branche spécifique de votre annuaire. Le DN de liaison doit disposer d’un accès en lecture au DN de base et à ses objets.
- Le filtre LDAP, le cas échéant, sera appliqué lors de la recherche dans l’annuaire que vous avez configuré dans votre
Base DN. Cela est utile si vous souhaitez imposer des restrictions sur l’étendue des utilisateurs pouvant être provisionnés et s’authentifier dans votre espace de travail. Vous devez utiliser la syntaxe standard des requêtes LDAP, telle que décrite dans RFC 4515. Par exemple :(&(givenName=you)(sn=yourlastname)). - En activant
Use SSL/TLS, LDAP over SSL (ldaps) sera activé. Plusieurs champs supplémentaires
seront affichés, que vous pouvez consulter ici. - En activant
Use StartTLS, StartTLS sera utilisé pour établir d’abord une connexion non chiffrée sur le port LDAP standard (389), puis pour mettre à niveau la connexion afin d’utiliser TLS au moyen d’une opération StartTLS. Plusieurs champs supplémentaires deviendront visibles. Vous pouvez en savoir plus ici.
Configurer LDAPS ou StartTLS
Lorsque Use SSL/TLS ou Use StartTLS est activé, des champs de configuration facultatifs supplémentaires apparaissent en dessous :
- Certificat(s) de l'autorité de certification du serveur LDAP : fournissez le ou les certificats de l'autorité de certification (CA) qui a signé le certificat SSL de votre serveur LDAP. Cela est nécessaire si votre serveur LDAP utilise des certificats autosignés ou des certificats émis par une autorité de certification privée. Le ou les certificats doivent être au format PEM.
- Certificat client : fournissez le certificat client à présenter au serveur LDAP pour l'authentification. Cela est obligatoire si votre serveur LDAP exige une authentification par certificat client. Le certificat doit être au format PEM.
- Clé privée du client : fournissez la clé privée correspondant à votre certificat client. Cela est nécessaire si vous avez fourni un certificat client. La clé privée doit être au format PEM et ne doit pas être protégée par un mot de passe.
- Autoriser les certificats autosignés : activez cette option pour autoriser les connexions aux serveurs LDAP utilisant des certificats autosignés sans vérifier l'autorité de certification. Avertissement : l'activation de cette option peut rendre votre connexion vulnérable aux attaques de l'homme du milieu.
Mappage des attributs
De nombreux serveurs modernes compatibles avec LDAPv3 permettent d’interroger le schéma pris en charge pour connaître les attributs disponibles. Si cette fonctionnalité est disponible, Ideanote détectera le schéma et proposera des suggestions par défaut pertinentes pour associer les données de votre répertoire aux propriétés équivalentes des utilisateurs et des équipes dans Ideanote. Vous pouvez consulter et personnaliser ces associations depuis la page Mappage des attributs.
attribut LDAP représente les attributs découverts dans le schéma de votre serveur LDAP. Ils proviennent de votre fournisseur d’annuaire, tel que Microsoft Active Directory ou Microsoft Entra ID. Si, pour une raison quelconque, votre serveur LDAP n’est pas conforme à LDAPv3, nous estimons les noms d’attributs possibles en nous fondant sur les conventions historiques et les types d’attributs décrits dans RFC4519. Par exemple,givenNamereprésente généralement le prénom d’une personne, tandis quesnreprésente généralement son nom de famille.
Type représente une version simplifiée de la définition de syntaxe d’un attribut LDAP. Il existe de nombreuses définitions de syntaxe de ce type, qui sont toutes décrites ici dans RFC4517, mais, par souci de simplicité, Ideanote les regroupe dans les définitions suivantes :
string: Représente une séquence de caractères. Les définitions de syntaxe LDAP telles queDirectoryString,PrintableString,TelephoneNumber,NumericStringet d’autres utilisent toutes ce type.
date: Représente une date avec un horodatage, au format Generalized Time (YYYYMMDDHHMMSSZ) ou UTCTime (YYMMDDHHMMSSZ). Ideanote saura l’interpréter et l’analyser ; vous pouvez donc l’associer aux propriétés utilisateur/d’équipe Ideanote spécifiques aux dates.
integer: Bien que LDAP ne définisse pas de syntaxe pour les nombres à virgule flottante (ceux-ci utilisent plutôt des définitions de syntaxe telles queNumericString, qui sera associé àstringdans Ideanote), le type `integer` représente des nombres entiers, qui peuvent être associés aux propriétés utilisateur/d’équipe Ideanote numériques.
boolean: les valeurs booléennestrueetfalse.
binary: certains attributs LDAP représentent des données binaires, comme l’attributthumbnailPhotocouramment utilisé pour les avatars des profils utilisateur. En règle générale, ils ne peuvent être associés qu’àavatarpour les utilisateurs Ideanote, et àlogopour les équipes Ideanote.
reference: la définition de syntaxe LDAP DN (Distinguished Name) fait référence à une autre entité portant ce DN. Elle est généralement utilisée dans le mappage des attributs sur la plateforme Ideanote pour associer l’attributmemberOfdes associations de groupes d’un utilisateur aux équipes Ideanote équivalentes.
Attribut correspondant à Ideanote représente la propriété de données des utilisateurs/équipes à laquelle l’attribut LDAP doit être associé. Vous pouvez le personnaliser en cliquant sur le menu déroulant de chaque ligne de la liste. Les options disponibles dépendront du type de l’attribut LDAP. Par exemple, un attribut LDAP de typedatene peut pas être associé àFirst name.
Synchronisation des groupes/équipes d’utilisateurs
Si vous souhaitez synchroniser (ou cesser de synchroniser) les appartenances aux équipes d’un utilisateur lorsqu’il se connecte à Ideanote (ou lorsqu’il est préprovisionné via l’étape de provisionnement), identifiez l’attribut LDAP qui représente le ou les groupes auxquels appartient l’utilisateur.
Avec Microsoft Active Directory et Microsoft Entra ID, cet attribut est généralement appelé memberOf et est de type reference dans Ideanote.
Par défaut, il sera déjà associé à la propriété utilisateur spéciale Teams Ideanote, comme illustré ci-dessus.
Si vous souhaitez cesser de synchroniser les équipes :
- Identifiez l’attribut LDAP
memberOf(ou la propriété équivalente dans le schéma de votre serveur LDAP) - Cliquez sur le menu déroulant de cette ligne, dans la colonne Attribut Ideanote correspondant.
- Sélectionnez Ne pas importer.
Création d’une correspondance d’attributs personnalisée
Les correspondances que Ideanote affiche par défaut reposent sur nos tentatives de définir des valeurs par défaut pertinentes. Si vous souhaitez associer d’autres attributs à Ideanote, vous pouvez également cliquer sur le bouton Ajouter un attribut situé sous le tableau des utilisateurs et celui des groupes/équipes.
Dans la boîte de dialogue qui s’affiche, vous pouvez saisir un nom d’attribut personnalisé et lui attribuer le type de données qui lui correspond le mieux. Le champ de texte affichera tous les autres attributs détectés sur votre serveur LDAP qui ne figuraient pas parmi les suggestions de correspondance par défaut. Vous n’êtes pas obligé d’en choisir un, bien qu’il soit très probable que votre serveur LDAP ne prenne en charge que les noms d’attributs suggérés.
Les correspondances d’attributs que vous avez créées via la boîte de dialogue Ajouter un attribut peuvent être supprimées en cliquant sur l’icône « Croix » à côté de la ligne, comme illustré ci-dessous, ou en remplaçant la correspondance par Do Not Import.
Provisionnement
Lorsque vos utilisateurs se connectent à votre espace de travail, ils sont provisionnés. Cela signifie que la représentation de leurs données dans votre annuaire est synchronisée avec le compte utilisateur équivalent dans Ideanote, conformément aux règles de correspondance des attributs que vous avez définies.
Toutefois, dans de nombreux cas, il est pertinent de provisionner les utilisateurs à l’avance. Un cas d’utilisation courant consiste à préprovisionner tous vos utilisateurs et équipes afin de pouvoir configurer les accès à vos collectes d’idées avant de les inviter officiellement à contribuer dans votre espace de travail.
L’étape de provisionnement des paramètres LDAP vous permet de le faire.
- Le champ de recherche vous permet d’effectuer une recherche directement dans votre annuaire LDAP. Votre saisie sera recherchée parmi les attributs LDAP courants distinguishedName, userPrincipalName, sAMAccountName, mail, displayName et cn.
- La Table affiche toutes les entrées récupérées depuis votre annuaire, ainsi que des informations pertinentes sur chacune d’elles, par exemple si elles représentent un Utilisateur ou un Groupe, la date de leur dernière synchronisation avec votre espace de travail, etc.
- Le Filtre vous permet d’affiner davantage les résultats de recherche. Vous pouvez choisir de n’afficher que les groupes ou les utilisateurs, ainsi que de n’afficher que les entités qui n’ont jamais été provisionnées sur votre espace de travail.
- Le Bouton de démarrage du provisionnement lance le processus de provisionnement. Vous pourrez suivre sa progression dans une barre de progression située à côté du bouton. Lorsque le provisionnement est en cours, vous pourrez également cliquer sur Annuler afin d’empêcher le provisionnement d’entités supplémentaires.
Dépannage de la connexion
Lorsque LDAP a été correctement configuré, le texte Connexion LDAP établie avec succès apparaît à côté du bouton Test Connection.
Cependant, vous pouvez rencontrer certains problèmes courants. Vous trouverez ci-dessous des conseils de dépannage pour chaque message d’erreur potentiel :
Erreur : Le serveur LDAP n’a pas pu être résolu. Vérifiez que l’URL du serveur saisie est correcte et que votre réseau actuel peut s’y connecter.
Causes possibles :
- L’URL du serveur LDAP est peut-être mal saisie ou incorrecte.
- L’application ne peut pas accéder au serveur LDAP en raison de restrictions réseau.
Étapes de dépannage :
- Vérifiez que le nom d’hôte ou l’adresse IP ne comporte pas de faute de frappe.
- Vérifiez que le serveur LDAP se trouve sur le même réseau virtuel que votre déploiement Ideanote. Si ce n’est pas le cas, configurez un appairage réseau ou un VPN afin que les deux réseaux puissent communiquer.
- Assurez-vous que les connexions sortantes du cluster Kubernetes exécutant le déploiement sur site de Ideanote sont autorisées sur les ports suivants :
- 389 pour LDAP (par défaut)
- 636 pour LDAPS (par défaut)
- Mettez à jour les règles du pare-feu afin d’autoriser le trafic vers le serveur LDAP sur ces ports.
- Si vous utilisez un nom d’hôte, vérifiez que la résolution DNS est correctement configurée dans le cluster Kubernetes.
- Si vous utilisez Microsoft Entra ID et que vous venez de configurer Microsoft Entra Domain Services pour activer l’intégration LDAP, vous devez redémarrer complètement votre cluster Kubernetes avant qu’il puisse résoudre le nom d’hôte.
Erreur : L’authentification LDAP avec le DN de liaison et le mot de passe de liaison fournis a échoué.
Causes possibles :
- Les identifiants sont incorrects.
- La synchronisation des hachages de mots de passe n’est pas activée (problème courant avec Microsoft Entra Domain Services)
- Le compte de l’utilisateur de liaison est désactivé, verrouillé ou a expiré.
- Le serveur LDAP nécessite LDAPS, et il est possible que vous n’ayez pas activé le
Use SSL/TLS, ou que vous ayez fourni des certificats/clés incorrects.
Étapes de dépannage :
- Vérifiez une nouvelle fois que le DN de liaison est correctement syntaxé et ne contient pas de faute de frappe.
- Le DN de liaison doit être le DN complet de l’utilisateur (par exemple,
cn=admin,dc=example,dc=com), ou son UPN, tel queyou@your-domain.comsi vous utilisez Microsoft Entra ID ou Microsoft Active Directory.
- Le DN de liaison doit être le DN complet de l’utilisateur (par exemple,
- Vérifiez que le mot de passe de liaison est correct.
- Authentifiez-vous à l’aide d’un client LDAP avec le DN de liaison et le mot de passe de liaison pour confirmer qu’ils fonctionnent en dehors de Ideanote.
- Si vous utilisez Microsoft Entra Domain Services, vérifiez que la synchronisation des hachages de mot de passe est activée. Si vous avez récemment configuré Microsoft Entra Domain Services, vous devrez peut-être réinitialiser le mot de passe du compte associé au DN de liaison avec lequel vous essayez de vous authentifier. Voici les instructions pour les comptes d’utilisateurs exclusivement cloud, et voici les instructions pour les comptes d’utilisateurs synchronisés.
- Vérifiez que le compte de l’utilisateur de liaison est actif et qu’il n’est soumis à aucune restriction.
- Déterminez si le serveur LDAP nécessite SSL/TLS.
- Si tel est le cas, activez
Use SSL/TLSpour utiliserldaps://dans l’URL du serveur. Vérifiez également queLDAP Server PORTindique le port approprié, qui est636par défaut pourLDAPS. - Vérifiez que vous avez fourni le certificat d’autorité de certification du serveur LDAP, le certificat client et la clé privée du client appropriés (si nécessaire).
- Vérifiez si l’activation de « Autoriser les certificats auto-signés » résout le problème.
- Vérifiez que le certificat SSL du serveur LDAP est approuvé par le cluster Kubernetes.
- Si nécessaire, importez le certificat du serveur LDAP dans le magasin de certificats approuvés du cluster.
- Si tel est le cas, activez
Erreur : L’authentification LDAP a réussi, mais il n’a pas été possible d’effectuer une recherche dans le DN de base fourni.
Causes possibles :
- Le
Base DNest incorrect ou pointe vers un emplacement erroné dans l’annuaire. - L’utilisateur de liaison ne dispose pas des autorisations nécessaires pour effectuer une recherche dans le DN de base fourni.
Étapes de dépannage :
- Vérifiez que le DN de base est correctement formaté (par exemple,
DC=your-domain,DC=com). - Vérifiez qu’il n’y a pas de faute de frappe ni de virgule ou de signe égal mal placé.
- Vérifiez que l’utilisateur de liaison indiqué par le DN de liaison dispose des autorisations de lecture et de recherche pour le DN de base.
- Utilisez un client LDAP (tel que
ldapsearch) pour tester la recherche dans le DN de base avec les identifiants de l’utilisateur de liaison. - Vérifiez que la structure de l’annuaire sous le DN de base contient les entrées d’utilisateurs auxquelles vous souhaitez accéder.
Si aucun de ces conseils de dépannage ne vous aide, veuillez consulter la documentation fournie par votre fournisseur d’infrastructure ou contacter Ideanote pour obtenir une aide supplémentaire au dépannage.
Configurer pour la production
Cette section présente des recommandations pour configurer le Ideanote Helm Chart dans des environnements de production.
Services externes
Nous vous recommandons de déléguer autant de services que possible à des services externes/gérés lorsque vous exécutez Ideanote dans un environnement de production.
Cela permet de garantir une infrastructure fiable et évolutive.
En particulier, le service PostgreSQL devrait être géré en externe, car le sous-graphique PostgreSQL inclus ne prend pas en charge, par défaut, la haute disponibilité, les sauvegardes et la montée en charge.
Veuillez consulter la section Configurer des services externes/gérés pour en savoir plus sur la configuration des services externes.
Mise à l’échelle automatique
Par défaut, le Ideanote Helm Chart n’active pas la mise à l’échelle automatique des services.
Tous les services ont un nombre de réplicas par défaut de 1 et peuvent être mis à l’échelle manuellement en modifiant la valeur replicaCount dans le fichier values.yaml.
Vous pouvez activer la mise à l’échelle automatique des services en ajoutant ce qui suit au fichier values.yaml :
global:
ideanote:
autoscaling:
enabled: true
ingress-nginx:
controller:
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 6Cela créera un Horizontal Pod Autoscaler (HPA) pour chaque Ideanote service et mettra à l’échelle le nombre de réplicas en fonction de l’utilisation du processeur et de la mémoire du service.
Les api et webapp services seront mis à l’échelle entre 2 et 4 réplicas par défaut, et les autres entre 1 et 4, mais vous pouvez modifier le nombre minimal et maximal de réplicas en changeant les valeurs minReplicas et maxReplicas dans le fichier values.yaml de chaque service.
Exemple de configuration :
ideanote:
api:
autoscaling:
minReplicas: 3
maxReplicas: 5
html-renderer:
autoscaling:
enabled: false
convert:
autoscaling:
minReplicas: 2
maxReplicas: 3Demandes de ressources
Par défaut, le Ideanote Helm Chart ne définit pas de demandes de ressources pour les services Ideanote.
Cela permet aux services de s’exécuter sur des clusters aux ressources limitées.
Dans les environnements de production, nous recommandons d’activer les demandes de ressources de manière globale en ajoutant ce qui suit au fichier values.yaml :
global:
ideanote:
resources:
enabled: true
Chaque service est associé à des demandes et des limites par défaut en matière de processeur et de mémoire, qui devraient convenir à la plupart des cas d’utilisation. L’activation globale des ressources devrait donc suffire.
Toutefois, si vous devez modifier les demandes de ressources d’un service spécifique, vous pouvez le faire en changeant les valeurs dans le fichier values.yaml sous la clé du service correspondant.
Par exemple :
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: 128MVolumes persistants et sauvegardes
Si vous installez le Ideanote Helm Chart avec tous les sous-graphiques inclus, cela créera 3 PVCs (Persistent Volume Claims) dans votre cluster :
data-<release>-postgresql-0pour la base de données PostgreSQLredis-data-<release>-redis-master-0pour la base de données Redis<release>-storage-datapour les téléversements multimédias Ideanote
Kubernetes allouera les PVs (volumes persistants) correspondants à ces PVCs, et les données seront stockées sur ces volumes.
Pour les déploiements en production, nous recommandons d'effectuer les 3 tâches suivantes :
1․ Le stockage alloué par défaut aux services est défini à une valeur minimale. Nous recommandons d'augmenter la taille du stockage en fonction de vos besoins en modifiant le fichier values.yaml :
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: 20Gi2․ PVs sont créés par défaut avec la politique de récupération Delete, ce qui signifie que lorsque PVC est supprimé, PV et les données qu’il contient sont également supprimés. Nous recommandons donc de remplacer la politique de récupération par Retain pour PVs créé par Ideanote Helm Chart. Vous pouvez le faire en appliquant un patch à PVs alloué à l’aide de la commande suivante :
# 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 ideanote3․ Nous recommandons également de mettre en place une stratégie de sauvegarde automatique pour tous les volumes.
Journalisation et surveillance
Actuellement, Ideanote ne fournit pas de solution de journalisation intégrée avec le chart Helm, mais nous recommandons de mettre en place une solution de surveillance dans les environnements de production.
Dans les environnements de production, nous recommandons également de définir global.ideanote.logLevel sur info ou warn dans le fichier values.yaml afin de réduire la quantité de journaux générés par les services.
Nous recommandons également de mettre en place des contrôles d’état pour surveiller la disponibilité de votre déploiement Ideanote.
Si vous choisissez de mettre en place des contrôles d’état, voici les chemins que vous devez surveiller :
Contrôles d’état externes
Service | Chemin |
|---|---|
application web |
|
API |
|
widget d’idées |
|
stockage |
|
Contrôles d’état internes
Service | Chemin |
|---|---|
convertir |
|
moteur de rendu HTML |
|
Équilibrage de charge et CDN
Si votre environnement le permet, nous recommandons de mettre en place un CDN devant l’équilibreur de charge Ideanote afin de mettre en cache les ressources statiques et de réduire la charge du service.
De préférence, le CDN doit être configuré pour mettre en cache tous les chemins commençant par /files et /chunk-.
Mise à niveau
Lorsque vous exécutez Ideanote sur site, vous devrez effectuer une mise à niveau vers une nouvelle version dès qu’une nouvelle version sera disponible.
Ideanote vous informera de la disponibilité d’une nouvelle version et fournira les notes de version de chaque nouvelle version, qui incluront des informations sur les changements incompatibles et les nouvelles fonctionnalités.
Dans les environnements de production, vous devrez accorder une attention particulière au guide de mise à niveau fourni par Ideanote afin d’éviter toute interruption de service ou perte de données.
Dépannage
Veuillez contacter developer@ideanote.io si vous rencontrez des problèmes lors de l’exécution de Ideanote sur site.
Ideanote vous aidera à résoudre le problème et vous indiquera comment le corriger conformément à l’accord en vigueur.
Avant de nous contacter, veuillez consulter le guide de dépannage suivant afin de comprendre le problème et, éventuellement, de le résoudre vous-même.
Échec de l’installation du chart Helm
Si le Ideanote Helm Chartne s’installe pas, veuillez exécuter la commande d’installation avec l’option --debug afin d’obtenir davantage d’informations sur l’erreur.
Cela fournira des informations plus détaillées sur l’erreur et vous aidera à comprendre la cause du problème.
Si vous ne parvenez pas à résoudre le problème, veuillez contacter developer@ideanote.io pour obtenir de l’aide.
Veuillez inclure autant d’informations que possible sur le problème, notamment la sortie de l’installation avec --debug et le fichier values.yaml.
Vous pouvez également obtenir un aperçu des composants défaillants en exécutant la commande suivante :
kubectl get all,certificaterequests,issuer -n ideanoteLe graphique Helm est bloqué dans un état en attente ou en échec
Consultez l’état du graphique Helm en exécutant la commande suivante :
helm status ideanote -n ideanote
# or
helm history ideanote -n ideanoteSi le graphique Helm est bloqué dans un état en attente ou en échec, vous devrez peut-être effectuer une restauration à l’aide de la commande suivante :
helm rollback ideanote -n ideanoteMon URL/IP-address ou mon certificat SSL ne fonctionne pas
Vous pouvez vérifier si l’adresse IP-address associée à votre équilibreur de charge répond correctement en exécutant les commandes suivantes :
1․ Récupérez l’adresse IP attribuée dynamiquement à votre répartiteur de charge. Assurez-vous que l’ingress est associé à une adresse IP et à des noms d’hôte.
kubectl get ingress -n ideanote2․ Vérifiez que votre cluster Kubernetes répond correctement aux requêtes en exécutant cette commande curl avec les valeurs (l’adresse IP associée et un nom d’hôte) de la commande ci-dessus. Assurez-vous qu’il renvoie un code d’état 200 OK et le fichier index-html du service Ideanote.
# With only host
curl -kivL <host>
# With host and IP-address
curl -kivL -H 'Host: <host>' <ip-address>3․ Avec le sous-graphique ingress-controller nginx inclus, le service devrait être disponible avec un certificat TLS après quelques minutes. Il utilisera un certificat auto-signé fourni par défaut par ingress-nginx-controller jusqu’à ce que le certificat ait été créé. Les navigateurs afficheront un avertissement indiquant qu’il s’agit d’un certificat non valide. Après quelques minutes, le certificat devrait être créé et le service devrait être disponible avec un certificat valide.
4․ Vous pouvez vérifier le statut de CertificateRequest en exécutant la commande suivante :
kubectl get certificaterequest -n ideanote
kubectl describe CertificateRequest ideanote-tls-1 -n ideanote
kubectl get Issuer -n ideanoteLe service API ne cesse de tomber en panne, car il ne parvient pas à se connecter à la base de données/à Redis
Si le service api tombe en panne parce qu’il ne parvient pas à se connecter à la base de données ou à Redis, veuillez vérifier les points suivants.
2․ Vérifiez les journaux du service api :
kubectl logs -n ideanote svc/ideanote-api2․ Vérifiez si postgres et redis sont en cours d’exécution (suivez les étapes )
kubectl get pods -n ideanoteParfois, il vous suffit de forcer le redémarrage du service api pour qu’il se reconnecte à la base de données et à Redis.
kubectl get pods -n ideanote
kubectl delete pod <pod-name> -n ideanote --forcekubectl 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> 5432kubectl exec -it -n ideanote svc/ideanote-api -- /bin/shJe vois de nombreuses erreurs TypeError: fetch failed dans les journaux
Tout d’abord, vérifiez que tous les pods sont en cours d’exécution :
kubectl get pods -n ideanoteVous pouvez également vérifier que le DNS du service peut être résolu directement depuis le pod. Par exemple :
kubectl exec svc/ideanote-api -n ideanote -- nslookup ideanote-convert.ideanote.svc.cluster.localVous pouvez vérifier que vous pouvez envoyer une requête ping à d’autres services directement depuis le pod. Par exemple :
kubectl exec svc/ideanote-webapp -n ideanote -- wget -qO- http://ideanote-api.ideanote.svc.cluster.localLe problème peut également être lié aux règles réseau, qui peuvent parfois bloquer la communication entre les services.
Vous devrez peut-être désactiver temporairement les règles réseau pour Ideanote afin de vérifier si elles sont à l’origine du problème.
Vous pouvez désactiver les règles réseau en définissant global.ideanote.networkPolicies.enabled sur false dans le fichier values.yaml.
Surveiller le trafic réseau dans votre cluster
Vous pouvez utiliser https://www.kubeshark.co/ pour surveiller le trafic réseau dans votre cluster.
1․ Installez kubeshark
sh <(curl -Ls https://kubeshark.co/install)
# OR
brew install kubeshark2․ Démarrez kubeshark
kubeshark tap -n ideanote3․ Ouvrez le tableau de bord kubeshark dans votre navigateur et surveillez le trafic
Tester la disponibilité de chaque service
Voici un aperçu de la manière de tester la disponibilité de chaque service.
Veuillez utiliser ce guide comme référence pour tester chaque service en cas de problème.
Diffusion des journaux en continu
Pour consulter les journaux d’un service spécifique, vous pouvez utiliser la commande suivante.
kubectl logs -n ideanote svc/ideanote-apiCela est utile pour déboguer les problèmes liés au service. Vous pouvez également afficher les journaux de tous les pods de l’espace de noms ideanote en exécutant la commande suivante :
kubectl get pods -n ideanote -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' | xargs -I {} kubectl logs -n ideanote {} --all-containers=trueSi vous souhaitez diffuser en continu les journaux de tous les services à la fois, nous vous recommandons d’installer kubetail et d’exécuter la commande suivante :
kubetail -n ideanotePendant le dépannage, nous vous recommandons également de régler global.ideanote.logLevel sur debug dans le fichier values.yaml afin d’augmenter le volume de journaux générés par les services.
Vérifier l’état des services
Pour vérifier si les déploiements sont prêts, vous pouvez exécuter la commande suivante. Elle doit indiquer 1/1 READY pour chaque service.
kubectl get deployments -n ideanoteSi l’un des services n’est pas prêt, vous pouvez vérifier le service en exécutant la commande suivante :
kubectl describe deployment <service-name> -n ideanotePour obtenir une vue plus détaillée des services, nous recommandons d’installer k9s et d’exécuter la commande suivante :
k9s -n ideanoteapplication web
Le service webapp devrait être accessible à l’adresse /. La commande suivante devrait renvoyer un code d’état 200 OK avec le fichier index html :
curl -kL your-domain.comVous pouvez également rediriger le port du service vers votre machine locale et le tester avec curl :
kubectl port-forward --namespace ideanote svc/ideanote-webapp 3000:80
curl -kL localhost:3000API
Le service api devrait être accessible à l’adresse /api. La commande suivante devrait renvoyer un code d’état 200 OK avec le texte « Ideanote API » :
curl -kL your-domain.com/apiVous pouvez également rediriger le port du service vers votre machine locale et le tester avec curl :
kubectl port-forward --namespace ideanote svc/ideanote-webapp 3000:80
curl -kL localhost:3000Si vous souhaitez examiner la file de messages interne de Ideanote API, vous pouvez accéder au chemin /api/bullmq.
Pour obtenir les identifiants de la file de messages API, veuillez exécuter la commande suivante :
kubectl get secret --namespace ideanote ideanote-api -o jsonpath="{.data.API_BULLMQ_CREDENTIALS}" | base64 -dwidget d’idées
Le service idea-widget devrait être accessible à l’adresse /widget. La commande suivante devrait renvoyer un code d’état 200 OK avec le fichier index html :
curl -kL your-domain.com/widgetVous pouvez également rediriger le port du service vers votre machine locale et le tester avec curl :
kubectl port-forward --namespace ideanote svc/ideanote-idea-widget 3000:80
curl -kL localhost:3000stockage
Le service storage devrait être accessible à l’adresse /files. La commande suivante devrait renvoyer un code d’état 200 OK avec le texte « Ideanote Storage » :
curl -kL your-domain.com/filesVous pouvez également rediriger le port du service vers votre machine locale et le tester avec curl. Il devrait renvoyer un code d’état 200 OK avec le texte « Ideanote Convert » :
kubectl port-forward --namespace ideanote svc/ideanote-storage 3000:80
curl -kL localhost:3000convertir
Le service convert n’est pas exposé sur Internet, mais vous pouvez le tester en redirigeant son port vers votre machine locale et en utilisant curl.
Il devrait renvoyer un code d’état 200 OK avec le texte « Ideanote Convert » :
kubectl port-forward --namespace ideanote svc/ideanote-convert 3000:80
curl -kL localhost:3000Vous pouvez également vérifier l’état des tâches de conversion des téléversements de fichiers multimédias en accédant au chemin /bullmq.
# 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/bullmqmoteur de rendu HTML
Le service html-renderer n’est pas exposé sur Internet, mais vous pouvez le tester en redirigeant son port vers votre machine locale et en utilisant curl.
Il devrait renvoyer un code d’état 200 OK avec le texte « Ideanote HTML Renderer » :
kubectl port-forward --namespace ideanote svc/ideanote-html-renderer 3000:80
curl -kL localhost:3000postgresql
Pour vérifier la disponibilité du PostgreSQL service, vous pouvez rediriger son port vers votre machine locale et le tester avec psql.
# 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=> \qredis
Pour vérifier la disponibilité du Redis service, vous pouvez rediriger son port vers votre machine locale et le tester avec redis-cli.
# 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 *gestionnaire de certificats
Veuillez consulter le guide officiel pour savoir comment vérifier que cert-manager est correctement installé.
Si votre certificat n'est pas créé, vous pouvez vérifier l'état de CertificateRequest en exécutant la commande suivante :
kubectl get certificaterequest -n ideanote
kubectl describe CertificateRequest ideanote-tls-1 -n ideanoteVous pouvez également vérifier l'état de Issuer en exécutant la commande suivante :
kubectl get Issuer -n ideanoteIl est également utile de consulter les journaux du service cert-manager pour voir s'il présente des problèmes.
ingress-nginx
Pour vérifier l'état du service ingress-nginx, vérifiez d'abord qu'il est en cours d'exécution :
kubectl get deployments -l app.kubernetes.io/name=ingress-nginx -n ideanoteEssayez de rediriger le port du service vers votre machine locale et de le tester avec curl (qui devrait renvoyer un code d’état « 404 Not Found ») :
kubectl port-forward --namespace ideanote svc/ideanote-ingress-nginx-controller 8080:80
curl -kL localhost:8080Vous devez également vérifier qu'une adresse IP lui a été attribuée :
kubectl get svc -l app.kubernetes.io/name=ingress-nginx -n ideanoteVérifiez également que l'objet Ideanote ingress a bien été attribué à l'ingress-nginxrépartiteur de charge.
Il doit afficher la même adresse IP que le ingress-nginx service et le nom d'hôte attendu que vous avez défini dans le fichier values.yaml lors de l'installation de Ideanote Helm Chart.
kubectl get ingresses -n ideanoteEssayez d’interroger l’adresse IP avec curl. Elle devrait renvoyer un code d’état « 404 Not Found » :
curl -kL <ip-address>Essayez maintenant d’inclure un en-tête « Host » dans la requête.
Le service web Ideanote devrait répondre avec le fichier HTML d’index :
curl -kL -H 'Host: <host>' <ip-address>Enfin, essayez de visiter le domaine dans un navigateur. Le service web Ideanote devrait s’afficher.
Mise à niveau de Ideanote vers une nouvelle version
Ideanote publiera périodiquement de nouvelles versions de Ideanote Helm Chart, intégrant de nouvelles fonctionnalités et des corrections de bogues.
Lors de la mise à niveau vers une nouvelle version, vous devrez suivre le guide de mise à niveau fourni par Ideanote afin d’éviter toute interruption de service ou perte de données.
Tous les services sont conçus pour être sans état (à l’exception de redis, de postgres et de storage) et peuvent être mis à niveau sans interruption de service au moyen d’une stratégie de mise à jour progressive.
Les versions et les migrations de base de données sont déployées automatiquement et conçues pour réduire les temps d’arrêt au minimum.
Pendant les migrations de base de données, qui durent généralement quelques minutes, les services restent disponibles, mais certaines fonctionnalités peuvent être désactivées ou ralenties jusqu’à la fin de la migration.
Veuillez consulter les notes de version de chaque nouvelle version pour savoir si des migrations sont à prendre en compte.
Nous veillons à tester les versions dans nos propres environnements de production avant leur mise à disposition du public, mais nous vous recommandons de tester la nouvelle version dans un environnement de préproduction avant de mettre à niveau l’environnement de production.
Avant de passer à une nouvelle version, veuillez suivre les étapes suivantes
1․ Consultez les notes de version pour vérifier s’il existe des changements incompatibles ou de nouvelles fonctionnalités.
2․ Sauvegardez vos données. Nous recommandons de sauvegarder les bases de données PostgreSQL et Redis avant de passer à une nouvelle version. Prévoyez également un plan clair et testé de restauration de la base de données en cas d’échec de la mise à niveau.
3․ Nous recommandons d’installer le plugin helm-diff et d’exécuter la commande suivante pour afficher précisément les modifications qui seront apportées à votre cluster Kubernetes :
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=serverLors de la mise à niveau vers une nouvelle version, veuillez suivre les étapes suivantes :
1․ Mettez à niveau Ideanote Helm Chart vers la nouvelle version :
helm upgrade ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --namespace ideanote --wait --timeout 10m -f values.yaml2․ Vérifiez le statut de la mise à niveau :
helm status ideanote --namespace ideanote
helm history ideanote --namespace ideanote
kubectl get pods -n ideanote --watch3․ api est le service le plus important à vérifier après une mise à niveau, car les migrations peuvent prendre quelques minutes et échouer, ce qui pourrait entraîner une interruption de service. Consultez les journaux de l’API en continu pour surveiller les migrations :
kubectl logs svc/ideanote-api -n ideanote -fLors d’un retour à une version précédente, veuillez suivre les étapes suivantes :
1․ Vérifiez si des migrations ont été exécutées dans le service api :
kubectl logs svc/ideanote-api -n ideanoteVous pouvez également vérifier l’état des migrations de api à l’aide de psql :
# 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․ Rétablissez la version précédente de Helm :
helm rollback ideanote --namespace ideanote3․ Vérifiez le statut du retour arrière :
helm status ideanote --namespace ideanote4․ Si certaines migrations ont effectivement été achevées dans le api service et que vous devez revenir en arrière, il est essentiel de restaurer également la base de données à son état précédent, car le nouveau schéma de base de données pourrait ne pas être compatible avec l’ancienne version du api service et le pod api ne démarrera pas en raison d’une incompatibilité de schéma de base de données.
Versions de Helm Chart
Voici la liste des versions de Ideanote Helm Chart et des modifications apportées à chacune d’elles.
1.0.0
Version initiale du Ideanote Helm Chart public.
Modification de values.yaml après l’installation
Si vous modifiez le fichier values.yaml après l’installation de Ideanote Helm Chart, vous pouvez mettre à niveau la version à l’aide de la commande suivante :
helm upgrade ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --namespace ideanote --wait --timeout 10m -f values.yamlDésinstallation de Ideanote
Pour désinstaller Ideanote Helm Chart, exécutez la commande suivante :
helm uninstall ideanote --namespace ideanoteCette opération supprimera de votre cluster Kubernetes toutes les ressources et tous les services associés à Ideanote Helm Chart.
Veuillez toutefois noter que certaines ressources ne seront pas désinstallées et devront être supprimées manuellement :
# 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