Scrydon

Helm

Référence complète du chart Helm Scrydon — une installation condensée ainsi que toutes les valeurs exposées par le chart, avec leur rôle, leur justification et leur configuration.

Voici la référence de configuration du chart Helm Scrydon. Ce document présente une installation condensée, puis les groupes de valeurs importants pour l'exploitation — ce que fait chaque clé, pourquoi la modifier et comment procéder. Si vous souhaitez simplement démarrer un cluster le plus rapidement possible, commencez par la page Localisation (On-Premise, Azure (AKS), Air-Gapped) et revenez ici pour les options.

Pour un cluster air-gapped (sans internet sortant), consultez le Déploiement Air-Gapped — le même chart est livré dans un bundle Zarf.

Fonctionnement de la configuration

Trois couches, de la priorité la plus basse à la plus haute :

  1. Valeurs par défaut du chart — le chart fournit des valeurs de production sensées pour tout. La liste de référence est le values.yaml du chart lui-même (voir Inspecter le chart localement).
  2. Votre values.customer.yaml — le fichier que vous passez avec -f. Ne surchargez que ce dont vous avez besoin ; tout le reste hérite de la valeur par défaut.
  3. Flags --set — priorité maximale, utile pour injecter des secrets au moment de l'installation depuis un gestionnaire de secrets.
helm install scrydon oci://scrydonops.azurecr.io/scrydon/charts/scrydon \
  --version <version> -n scrydon-platform \
  -f values.customer.yaml \
  --set apiTable.secrets.STARROCKS_PASSWORD="$(vault kv get -field=password kv/scrydon/starrocks)"

Les secrets vivent dans votre fichier de valeurs. values.customer.yaml et helm get values <release> reproduisent toutes les valeurs fournies par l'utilisateur. Ne placez pas ce fichier dans un dépôt de code source, ou gérez-le via Sealed Secrets / SOPS / External Secrets Operator, et restreignez le RBAC du cluster sur le Secret de la release.

Inspecter le chart localement

Le chart est un artefact OCI dans scrydonops.azurecr.io — il n'existe pas de miroir Git public. Téléchargez-le pour lire chaque template et le values.yaml par défaut complet :

helm pull oci://scrydonops.azurecr.io/scrydon/charts/scrydon \
  --version <version> --untar
less scrydon/values.yaml   # la valeur par défaut de référence pour chaque clé ci-dessous

Valider votre configuration

Le chart embarque un schéma de valeurs (values.schema.json). Il rejette les clés inconnues ou mal orthographiées au niveau racine et dans les groupes stricts à haut risque tels que routing, gateway, license, les namespaces, Pod Security et NetworkPolicy. Certains blocs applicatifs — notamment les clés imbriquées de runtimePlane dans les charts actuels — restent permissifs : la validation du schéma est nécessaire, mais pas suffisante. Une faute comme routing.mdoe échoue immédiatement :

Error: values don't meet the specifications of the schema(s) in the following chart(s):
scrydon:
- routing: Additional property mdoe is not allowed

Avant une installation ou une mise à niveau, exécutez un contrôle préalable avec vos valeurs et votre version de Kubernetes :

# 1. Schéma + lint — détecte les clés mal orthographiées et les erreurs de structure
helm lint ./scrydon -f your-values.yaml

# 2. Rendre et valider contre votre version de Kubernetes
#    (kubeconform : https://github.com/yannh/kubeconform)
helm template scrydon ./scrydon -f your-values.yaml \
  | kubeconform --strict --ignore-missing-schemas \
      --kubernetes-version "$(kubectl version -o json | jq -r '.serverVersion.gitVersion' | tr -d v)"

# 3. Simulation d'installation contre le cluster réel (validation côté serveur)
helm install scrydon ./scrydon -f your-values.yaml --dry-run=server

Le chart exige Kubernetes 1.28 ou ultérieur (kubeVersion: ">=1.28.0-0") — helm install refuse les clusters plus anciens avec une erreur claire plutôt que d'échouer en cours de déploiement.

Installation rapide

Le minimum pour obtenir un cluster opérationnel. Chaque étape est développée avec des notes spécifiques à l'environnement sur les pages Localisation.

# 1. Se connecter au registre (nom d'utilisateur = nom du token ACR fourni par votre équipe)
helm registry login scrydonops.azurecr.io --username <acr-token-name>

# 2. Créer le namespace de la release + un secret d'extraction d'image dans ce namespace.
#    Le chart cible par défaut scrydon-platform pour chaque service ; la séparation en
#    namespaces est optionnelle via namespaces.* (créer le secret dans chaque namespace ciblé).
kubectl create namespace scrydon-platform 2>/dev/null || true
kubectl create secret docker-registry scrydon-registry --namespace scrydon-platform \
  --docker-server=scrydonops.azurecr.io \
  --docker-username=<acr-token-name> --docker-password=<acr-token-password>
# 3. values.customer.yaml — l'installation minimale complète.
global:
  imageRegistry: scrydonops.azurecr.io   # récupérer les images depuis l'ACR connecté
  imagePullSecrets:
    - scrydon-registry
  storageClass: <your-storage-class>     # nom de classe cloud par défaut, ou votre provisionneur on-prem

routing:
  host: app.example.com                  # le nom d'hôte vers lequel pointe votre DNS

gateway:
  tls:
    enabled: true                        # le navigateur accède à Scrydon via HTTPS — voir Gateway ci-dessous

infra:
  db:
    credentials:
      password: REPLACE-WITH-DB-PASSWORD          # openssl rand -hex 16
auth:
  secrets:
    AUTH_SECRET: REPLACE-WITH-AUTH-SECRET         # openssl rand -hex 32
apiTable:
  secrets:
    STARROCKS_PASSWORD: REPLACE-WITH-STARROCKS-PW # openssl rand -hex 24
# 4. Installer
helm install scrydon oci://scrydonops.azurecr.io/scrydon/charts/scrydon \
  --version <version> --namespace scrydon-platform \
  -f values.customer.yaml --wait

Lancer l'assistant de configuration

Ouvrez https://app.example.com/platform/setup (ou /setup si vous avez monté platform à la racine). Cinq étapes :

#ÉtapeCe qu'elle fait
1LicenceCollez ou déposez le bundle JSON { jwt, publicKey }. L'assistant vérifie la signature JWT par rapport à la clé publique incluse, contrôle l'expiration et affiche le niveau / CPU / RAM / VRAM. Stocké dans platform_config à l'étape suivante. Le format du bundle est affiché dans le Vérificateur de licence. Les fichiers .jwt seuls sont rejetés — la clé publique doit accompagner le JWT.
2Compte administrateurCréez le premier administrateur (e-mail + mot de passe). À la validation, la licence est persistée et l'utilisateur administrateur créé.
3OrganisationNommez votre organisation — le tenant racine.
4E-mailConfigurez la livraison (Resend, SendGrid, SMTP, ou ignorer — configurable ultérieurement sous Paramètres → Plateforme → E-mail). Sans fournisseur réel, les nouvelles inscriptions ignorent la vérification par e-mail ; une fois un fournisseur configuré, elles reçoivent un OTP.
5TerminerMarque setup_completed = true et redirige vers l'accueil de la plateforme.

Pré-injecter la licence

Évitez l'étape licence de l'assistant en injectant le bundle lors de la première installation. Les valeurs sont lues une seule fois pour initialiser la base de données ; ensuite la licence vit dans platform_config et est gérée depuis l'interface :

auth:
  secrets:
    AUTH_SECRET: REPLACE-WITH-AUTH-SECRET
    LICENSE: |                              # le champ `jwt` du bundle (une ligne)
      eyJhbGciOiJSUzI1NiIs...
    LICENSE_PUBLIC_KEY: |                    # le champ `publicKey` du bundle (PEM)
      -----BEGIN PUBLIC KEY-----
      MIIBIjANBgkqhkiG9w0BAQEFA...
      -----END PUBLIC KEY-----

Lorsque les deux valeurs sont définies, l'étape Licence de l'assistant s'ouvre déjà vérifiée.

Référence de configuration

Chaque groupe ci-dessous correspond à une clé de premier niveau dans le values.yaml du chart, dans l'ordre du fichier. Les valeurs par défaut indiquées sont celles du chart ; ne surchargez que ce dont vous avez besoin.

global — registre, images, stockage

Paramètres à l'échelle du cluster, hérités par chaque service.

CléDéfautRôle / justification
global.imageRegistry""Racine du registre d'images de conteneurs (ex. scrydonops.azurecr.io, un Harbor interne, un host:port de homelab). Vide génère des références non préfixées scrydon/<name>:<tag>. À définir par environnement.
global.imagePullSecrets[]Noms des secrets d'extraction ajoutés à chaque pod. Indiquer le secret créé à l'étape 2.
global.imagePullPolicyAlwaysPolitique standard de récupération Kubernetes.
global.storageClass""Le provisionneur pour chaque PVC. Pas de valeur cloud par défaut — définir la classe de votre cloud (managed-csi, gp3, standard-rwo) ou votre provisionneur on-prem (ceph-rbd, vsphere-csi, local-path).
global.nfs.enabledfalseUtiliser des PV statiques NFS à la place du provisionnement dynamique. Pour les clusters homelab / NFS — définir aussi server + basePath.
global.scheduling.spreadAcrossNodestrueAttacher une anti-affinité de pods souple à chaque charge de travail durable (les applications et le socle infra gourmand en mémoire : Postgres, StarRocks, SeaweedFS, Valkey) afin qu'elles préfèrent des nœuds distincts. Sans cela, l'ordonnanceur peut empiler plusieurs pods de plusieurs Gio sur un même nœud, que le kubelet évince ensuite sous pression mémoire. « Souple » signifie que l'ordonnancement n'est jamais bloqué : les clusters mono-nœud et de petite taille démarrent donc normalement — à laisser activé. Passer à false uniquement pour regrouper délibérément sur un seul nœud.
global.azure.enabledfalseMode Azure Marketplace : les images sont résolues depuis MCR via global.azure.images.* et les composants tiers du data-plane (StarRocks/SeaweedFS) sont désactivés automatiquement. Défini par le package Marketplace, pas manuellement.
global:
  imageRegistry: scrydonops.azurecr.io
  imagePullSecrets:
    - name: scrydon-registry
  storageClass: managed-csi

namespaces — placement des charges de travail

Chaque service cible par défaut scrydon-platform. Surchargez par service pour un isolement multi-namespace ; le chart aligne automatiquement les politiques ACL Dapr et le RBAC de lecture des secrets.

namespaces:
  infra: scrydon-infra
  platform: scrydon-platform
  agentic: scrydon-agentic
  analytics: scrydon-platform
  cortex: scrydon-platform

gateway — exposition et schéma TLS

La périphérie repose sur la Gateway API de Kubernetes (Gateway + HTTPRoute), et non sur Ingress. Ingress est gelée : elle reste GA, conserve ses garanties de stabilité et Kubernetes ne prévoit pas de la supprimer — mais elle ne reçoit plus aucun développement, et Kubernetes recommande la Gateway API à sa place. Le chart suit cette recommandation.

Le chart génère une Gateway nommée gateway-frontdoor dans l'espace de noms de la plateforme, et une HTTPRoute par application activée dans l'espace de noms de cette application, rattachée à l'unique Gateway par-delà les espaces de noms.

La Gateway API n'est pas présente dans un cluster standard. Avant l'installation, le cluster a besoin des CRD gateway.networking.k8s.io et d'une GatewayClass dont le nom correspond à gateway.className. Définissez traefik.enabled: true pour que le chart installe une release Traefik qui fournit les deux, ou pointez gateway.className vers une classe déjà exploitée par votre équipe plateforme. Voir Prérequis Kubernetes.

CléDéfautRôle / justification
gateway.enabledtrueGénérer la Gateway et ses HTTPRoutes. Désactivez si vous placez votre propre périphérie devant le cluster.
gateway.classNametraefikLe nom de la GatewayClass (et non d'une IngressClass). N'importe quelle implémentation conforme achemine le trafic du chart ; le seul contrôle non portable est gateway.publicAuthRateLimit ci-dessous.
gateway.listenerPorts.http8000Le port sur lequel votre contrôleur écoute, et non le port public — voir Ports des listeners.
gateway.listenerPorts.https8443Idem, pour le listener HTTPS.
gateway.tls.enabledtrueCritique. Signifie « Scrydon est-il accessible via HTTPS par le navigateur ? » — pilote le schéma des URL publiques, les origines CORS, les cookies sécurisés et l'origine de callback Better-Auth, et décide si un listener HTTPS et la route de redirection sont générés. Par défaut true (sécurisé par défaut), y compris derrière un équilibreur de charge qui termine le TLS (App Gateway / ALB) et transmet du HTTP brut à Traefik — le navigateur reste en HTTPS, donc laisser true. Mettre à false uniquement pour les déploiements HTTP seul (dev local / smoke kind). Mettre false sur une installation frontée HTTPS casse silencieusement la connexion (Mixed Content + origine de callback incompatible).
gateway.tls.existingSecret""Apporter votre propre certificat au lieu des noms tls-frontdoor / tls-<app> du chart. Obligatoire pour les installations air-gap et on-prem avec un certificat d'AC d'entreprise. Un seul Secret, un seul espace de noms : la Gateway possède tous les listeners, le Secret n'est donc lu que depuis l'espace de noms de la plateforme — même en installation répartie.
gateway.tls.certManager.enabledtrueAjouter cert-manager.io/cluster-issuer sur la Gateway (une seule annotation pour toute la porte d'entrée ; cert-manager regroupe les listeners par Secret de certificat). Nécessite la prise en charge Gateway API de cert-manager — config.enableGatewayAPI=true, voir Prérequis TLS. Définir false lorsque vous fournissez vous-même le certificat et que cert-manager est installé.
gateway.tls.clusterIssuerletsencrypt-prodÉmetteur utilisé lorsque certManager.enabled est activé.
gateway.publicAuthRateLimit.enabledfalseLimitation de débit grossière en périphérie publique sur la règle routing.paths.apiAuth, appliquée avant que la requête n'atteigne api-platform et distincte des limites par endpoint de Better Auth. Traefik uniquement — la limitation de débit ne fait pas partie du canal standard de la Gateway API, elle est donc attachée comme Middleware Traefik via un filtre ExtensionRef et le rendu échoue si gateway.className vaut autre chose que traefik.
gateway.publicAuthRateLimit.average / .period / .burst10 / 1m / 10Le seau lui-même.
gateway.annotations{}Annotations fusionnées sur la Gateway. Le point d'accroche des réglages propres à l'implémentation (ajustements d'équilibreur cloud, références de frontend). Les routes n'en ont besoin d'aucune.
traefik.enabledfalseInstaller Traefik comme dépendance intégrée du chart, avec le provider Gateway activé, sa propre Gateway par défaut désactivée et la GatewayClass traefik publiée. Désactivé par défaut : un cluster disposant déjà d'une implémentation conforme doit la conserver et se contenter de définir gateway.className.

Trois contrôles qui étaient auparavant des annotations propres au contrôleur relèvent désormais du cœur de la Gateway API et sont générés sans condition ; ils existent donc sur toute implémentation conforme et non plus seulement sur Traefik :

  • Le retrait des en-têtes Dapr / on-behalf-of. Chaque règle de route porte un filtre RequestHeaderModifier qui supprime dapr-caller-app-id, dapr-api-token, x-scrydon-self-call, les en-têtes d'identité x-on-behalf-of-* et x-scrydon-storage-scope des requêtes externes. Il n'y a plus ni branche par classe ni mode pouvant silencieusement ne rien produire : ingress.stripDaprHeaders.* — et l'avertissement d'installation qui l'accompagnait — disparaît sans remplacement.
  • La redirection HTTP → HTTPS. Un filtre RequestRedirect sur le listener HTTP, généré dès que gateway.tls.enabled est actif. ingress.middleware.forceHttps.* disparaît sans remplacement.
  • La précédence des chemins. La spécification impose le préfixe correspondant le plus long d'abord, sur toutes les routes d'un listener : l'ordre de déclaration n'a donc plus d'importance et la règle racine / est simplement la moins prioritaire.

Ports des listeners : 8000 / 8443, et non 80 / 443

gateway.listenerPorts.* est le port sur lequel votre contrôleur écoute, pas celui auquel vos utilisateurs se connectent. C'est la seule valeur propre à l'implémentation dans toute la périphérie.

Traefik associe un listener de Gateway à l'un de ses entryPoints par le port, et ces entryPoints écoutent sur :8000 (web) et :8443 (websecure) dans le conteneur tandis que son Service publie 80/443. Un listener déclaré sur le port 80 est rejeté d'emblée (vérifié sur Traefik v3.6.10, le 2026-09-12) :

Accepted=False  reason=PortUnavailable
"Cannot find entryPoint for Gateway: no matching entryPoint for port 80 and protocol HTTP"

Une implémentation managée qui écoute sur le port public — Application Gateway for Containers, un ALB cloud — attend au contraire 80 / 443 ici :

gateway:
  className: <votre-gatewayclass>
  listenerPorts:
    http: 80
    https: 443

Autres implémentations Gateway API

Définissez gateway.className sur votre GatewayClass et le routage fonctionne sans changement : le chart n'émet que des ressources Gateway et HTTPRoute du cœur de la spécification, sans aucune annotation de contrôleur sur les routes. Deux points à vérifier avant de changer :

ContrôlePortable ?
Retrait des en-têtes Dapr / on-behalf-of (RequestHeaderModifier)Cœur. Fonctionne sur toute implémentation conforme.
Redirection HTTP → HTTPS (RequestRedirect)Cœur.
Précédence des chemins (préfixe le plus long)Cœur, imposé par la spécification.
Terminaison TLS via les certificateRefs du listenerCœur.
gateway.listenerPorts.*Propre à l'implémentation — voir Ports des listeners.
gateway.publicAuthRateLimitTraefik uniquement. Attaché comme Middleware Traefik via un filtre ExtensionRef ; le rendu échoue sur toute autre classe. Laissez la valeur à false et appliquez la limite sur votre propre périphérie.

Tout ce que le chart n'exprime pas — limites de taille de corps de requête, délais de lecture, comportement d'inactivité WebSocket sur la route routing.paths.agenticRealtime — se configure sur votre implémentation elle-même et non via ce chart ; gateway.annotations est le seul point d'accroche d'annotations et il s'applique à la Gateway, pas aux routes. Dimensionnez la limite de taille de corps au moins à hauteur du plafond d'upload de 100 Mo de la plateforme.

Une remarque portable : les implémentations dont la sonde de santé du backend vise / par défaut reçoivent une chaîne de redirections des applications SSR. Pointez la sonde vers le /api/healthz de chaque application, avec le mécanisme de health check fourni par votre implémentation.

ingress-nginx est retiré — le projet a été archivé le 2026-03-24 et ne publie plus aucune version, correction de bug ou correctif de sécurité. Ne l'installez pas, et ne pointez pas gateway.className vers une classe Ingress nginx : le chart ne génère plus du tout d'objets Ingress.

routing — sous-chemin vs sous-domaine

Choisit comment les applications sont exposées. Discussion complète : Modes de routage.

CléDéfautRôle / justification
routing.modesubpathsubpath place toutes les applications sous un même nom d'hôte avec un préfixe de chemin (un enregistrement DNS, un certificat — recommandé pour l'auto-hébergement). subdomain place chaque application sur son propre nom d'hôte (DNS wildcard + certificat — utilisé par notre SaaS).
routing.hostLe nom d'hôte unique vers lequel pointe votre DNS, ex. app.example.com.
routing.paths.*/cortex, /agentic, …Préfixes de chemin par application en mode sous-chemin. Mettre une valeur à "" pour monter cette application à la racine. Les applications consomment le préfixe résolu via BASE_PATH.

routing.annotations a disparu. Cette clé n'existait que parce qu'une installation en sous-chemin comportait exactement un Ingress et aucun autre moyen de l'annoter ; les deux modes de routage génèrent désormais une seule Gateway, et gateway.annotations est cet endroit — voir Autres implémentations Gateway API.

routing:
  mode: subpath
  host: app.example.com
  paths:
    cortex: /scrydon/cortex      # personnaliser les préfixes si nécessaire
    platform: /scrydon/platform

dapr — maillage de services et identité

Les appels de service à service utilisent Dapr avec mTLS ; les politiques ACL du chart sont basées sur le domaine de confiance SPIFFE.

CléDéfautRôle / justification
dapr.enabledtrueInjection de sidecar + composants crypto + comptes de service.
dapr.installControlPlanetrueInstaller le plan de contrôle Dapr comme sous-chart dans le namespace de la release. Mettre false si Dapr est déjà installé à l'échelle du cluster.
dapr.controlPlaneNamespace""Quand installControlPlane: false et que Dapr est ailleurs (ex. dapr-system), pointer le binding de lecture des secrets du chart sur ce namespace.
dapr.trustDomainscrydonDomaine de confiance SPIFFE. Toutes les ACL générées en dépendent. Ne surchargez que pour correspondre à un CA Dapr existant — mais cela désactive l'isolation d'identité inter-clusters.
dapr.global.tag1.18.1Tag d'image du plan de contrôle Dapr + sidecar, synchronisé avec la dépendance de Chart.yaml. Utilisez cette version testée avec un plan de contrôle externe.
dapr.crypto.masterKey""Clé maître AES-256. Générée automatiquement à la première installation et préservée lors des mises à jour. BYO : openssl rand -base64 32.
dapr.secretStore.enabledtrueCréer le composant Dapr SecretStore adossé aux secrets Kubernetes.

Apporter votre propre Dapr requiert la version testée 1.18.1, le domaine de confiance scrydon sur dapr-sentry (ou faire correspondre via dapr.trustDomain) et un injecteur de sidecar opérationnel. Voir Installations Dapr existantes.

Base de données — Postgres intégré ou BYO

infra.db contrôle le Postgres intégré (pgvector). Pour une instance externe/managée, la recette complète — notes par fournisseur, clés infra.db.external.*, pré-création des bases — est sur BYO Database.

CléDéfautRôle / justification
infra.db.enabledtrueExécuter le Postgres intégré dans le cluster. Mettre false pour utiliser une instance managée via infra.db.external.*.
infra.db.credentials.passwordpostgresÀ modifier. openssl rand -hex 16.
infra.db.storage.size5GiTaille du PVC pour la base intégrée.
infra.db.postgres.maxConnections250max_connections pour Postgres intégré. Gardez cette valeur au-dessus de la somme des pools applicatifs générés, avec une marge pour les migrations et l'administration.
infra.db.resources.limits.memory4GiPlafond mémoire du Postgres intégré, dimensionné pour maxConnections: 250 (requête 2Gi). Le réduire sans abaisser aussi le plafond de connexions expose le postmaster à un arrêt OOM par le noyau sous charge.
infra.db.tls.enabledtrueTLS intra-cluster (certificat auto-signé automatique, ISO 27001 A.8.24). Laisser activé pour la base intégrée ; les utilisateurs Postgres managé désactivent et utilisent le TLS du fournisseur.
infra.db.backup.enabledfalseCronJob pg_dump optionnel (A.8.13). Définir schedule, retentionDays, databases. Les utilisateurs Postgres managé utilisent la sauvegarde du fournisseur.
infra.db.external.existingSecrets.*""Mode BYO A (recommandé) — noms de Secrets par application contenant DATABASE_URL (auth/agentic), DATABASE_URL_ANALYTICS, etc.
infra.db.external.<app>Url""Mode BYO B — DSN applicatifs en ligne (apparaissent dans helm get values). sslMode ajouté comme ?sslmode=.
infra.db.external.lakekeeperUrl""DSN Postgres de Lakekeeper. Requis lorsque infra.db.enabled=false et que Lakekeeper est activé ; utilisé pour les connexions en lecture et en écriture et stocké dans secrets-lakekeeper.
# Intégré (défaut) — définir juste un mot de passe fort :
infra:
  db:
    credentials:
      password: REPLACE-WITH-DB-PASSWORD
# Postgres managé BYO :
infra:
  db:
    enabled: false
    external:
      existingSecrets:
        auth: scrydon-auth-db
        agentic: scrydon-agentic-db
      lakekeeperUrl: "postgres://scrydon:REDACTED@pg.example.com:5432/lakekeeper"
      sslMode: require

StarRocks — Tables managées (OLAP)

Pod unique allin1-ubuntu. Alimente l'interface Tables et le fallback d'inférence de schéma agentique. Associé à apiTable.

CléDéfautRôle / justification
infra.starrocks.enabledtrueExécuter StarRocks intégré. Mettre false (avec apiTable.enabled: false, ou pointer apiTable.starrocks.host vers un cluster externe) pour l'ignorer. Désactivé automatiquement en mode Azure.
infra.starrocks.storage.size20GiTaille du PVC.
infra.starrocks.resources2–8Gi / 0.5–2 CPULe composant data-plane intégré le plus lourd — voir Réduction.

L'image intégrée livre root sans mot de passe. Définissez apiTable.secrets.STARROCKS_PASSWORD dans les valeurs, puis appliquez-le dans StarRocks après l'installation — voir Identifiants StarRocks. Pour une production multi-AZ, passez à l'starrocks-kubernetes-operator (séparation FE/BE) et pointez apiTable.starrocks.host vers son Service FE.

SeaweedFS — stockage objet

Stockage compatible S3 en pod unique pour les téléversements.

CléDéfautRôle / justification
infra.seaweedfs.enabledtrueExécuter le stockage intégré. Désactivez si vous placez un S3 managé devant la plateforme (AWS S3, Azure Blob via API S3, GCS, MinIO) configuré sous https://<host>/settings/platform/storage. Désactivé automatiquement en mode Azure.
infra.seaweedfs.s3.existingSecret""Vide → le chart gère des clés d'accès/secret aléatoires (préservées lors des mises à jour, conservées à la désinstallation). Indiquer un Secret pré-créé avec accessKey/secretKey pour BYO.
infra.seaweedfs.storage.size20GiTaille du PVC.

Services applicatifs

Les applications produit — auth (api-platform), platform, cortex, analytics, apiOntology, apiTable, agentic (app + realtime). Chaque bloc partage une forme commune :

Clé (par application)Rôle / justification
<app>.enabledGénérer l'application. La plupart restent activées ; analytics.enabled: false supprime l'interface analytique + marimo (charge de travail optionnelle la plus lourde).
<app>.replicasÉchelle horizontale.
<app>.image.tagPar défaut Chart.AppVersion — laisser vide pour suivre le chart.
<app>.resourcesRequêtes/limites. Les valeurs par défaut sont ajustées d'après les incidents OOM en production (limite agentic : 4Gi, applications SSR : 2Gi) ; ne réduire que sur des clusters d'évaluation.
<app>.databasePool.maxLimite de pool postgres-js par pod, rendue comme la variable d'environnement générique DATABASE_POOL_MAX. Chaque pool du pod la respecte ; les pods multi-bases (auth, platform, apiTable) ajoutent des clés spécifiques (authMax, agenticMax) rendues comme les surcharges AUTH_DATABASE_POOL_MAX / AGENTIC_DATABASE_POOL_MAXplatform ouvre directement la base auth, donc elle définit authMax en plus de max. Réduisez-les pour les petits tiers Postgres managés ; augmentez-les seulement si max_connections dispose de la marge correspondante.
<app>.gateway.{enabled,hostname}Nom d'hôte par application (mode sous-domaine uniquement — ignoré en sous-chemin). Les annotations et blocs TLS par application ont disparu : une seule Gateway possède tous les listeners, et les noms de Secret par application conservent leurs valeurs par défaut tls-<app>.
<app>.corsOriginsOrigines navigateur autorisées.
<app>.secretsSecrets par application (voir ci-dessous).
<app>.dapr.appApiTokenToken sidecar-vers-application par application, unique par application. Vide → généré automatiquement et préservé lors des mises à jour. BYO : openssl rand -base64 32.

Clés notables spécifiques aux applications :

auth:
  secrets:
    AUTH_SECRET: REPLACE-WITH-AUTH-SECRET   # signature de session — openssl rand -hex 32
  auditLog:
    enabled: true                           # transfert SIEM + crons de rétention (ADR 2026-04-16)
    chain:
      enabled: false                        # chaîne de hachage infalsifiable — optionnel, coût de signature

analytics:
  marimoDocument:
    enabled: true                           # rendu privé de documents sans calcul
  marimoRuntime:
    startupDeadlineMs: 300000               # délai de préparation Connect/Run
  secrets:
    MARIMO_RUNTIME_HMAC_SECRET: ""           # vide → généré et réutilisé entre les mises à niveau

apiTable:
  starrocks:
    host: ""                                # vide → Service FE intégré ; indiquer pour StarRocks externe
    user: root
  secrets:
    STARROCKS_PASSWORD: REPLACE-WITH-STARROCKS-PW

agentic:
  realtime:
    gateway:
      hostname: ws-agentic.example.com      # mode sous-domaine uniquement
  passkey:
    rpId: app.example.com                   # DOIT correspondre à routing.host sinon l'enregistrement passkey échoue
    origin: https://app.example.com

Les annotations de cookie sticky du temps réel ont disparu. Elles ne s'appliquaient qu'en mode sous-domaine, et l'affinité de session pour les backends Gateway API ne fait pas partie du canal standard — agentic-realtime n'a donc aucune affinité si vous l'exécutez avec plus d'un réplica en mode sous-domaine. Il est livré avec replicas: 1.

auth.secrets.SERVICE_ADMIN_TOKEN est déprécié — la production utilise Dapr mTLS (SPIFFE). Ne le définir que pour le développement local sans sidecars. Quand les clés avec underscore sont interdites (paramètres protégés Azure Marketplace), utiliser auth.authSecret à la place de auth.secrets.AUTH_SECRET.

executionFabric et runtimePlane

Le plan d'exécution est opt-in jusqu'à qualification de Kata/KVM et des contrôles réseau. Il possède les pods Agent éphémères, les sessions Marimo de longue durée protégées par génération et les jobs de notebooks neufs à usage unique. L'ouverture d'un notebook utilise toujours le moteur de rendu sans calcul ; Connect, Run hors connexion et les jobs refusent si le plan est indisponible. Aucun workload ne revient à une exécution dans le processus ou dans un service produit. Les backends déployés et leur disponibilité authentifiée par profil déterminent les niveaux disponibles. Le résolveur essaie toujours microvm d'abord, puis managed_process uniquement si l'organisation l'autorise. L'hôte d'acteur géré est généré par défaut (niveau normal) ; l'activation d'un Runtime Plane qualifié ajoute le niveau isolé sans autre liste ni préférence. Un administrateur d'organisation active Exiger l'exécution isolée dans Paramètres → Plateforme → Compute pour imposer la microVM comme plancher strict : les exécutions de cette organisation refusent alors au lieu d'utiliser le niveau processus géré. Une exécution liée ne descend jamais de niveau après son démarrage.

Le chart refuse de générer si aucun backend d'exécution n'est déployé. Cette combinaison s'installait silencieusement et toute exécution échouait ensuite à l'exécution avec « No permitted … execution tier is currently ready » ; elle échoue désormais dès helm install en nommant le chemin de valeurs à corriger. Une posture de production stricte qui veut uniquement la microVM définit explicitement managedProcess.enabled: false — voir values.production.example.yaml.

Le niveau géré utilise un unique Deployment et une unique image d'hôte d'acteur Dapr. Dapr gère le placement et le routage horizontal ; chaque invocation reçoit un nouveau processus enfant et un espace de travail, tout en réutilisant les mêmes runners Agent, implémentation et notebook. Ce niveau partage le noyau du pod et reste explicitement plus faible qu'une microVM.

Les Agents standard utilisent toujours AgentCapabilityContract avec le protocole fixe agent-capability-contract. Aucun mode de broker d'outils d'intégration n'est à activer pendant une installation ou une mise à niveau, et aucune valeur opérateur ne sélectionne une autre architecture Agent. Le chart épingle le protocole nommé dans Runtime Plane ; une image runner incompatible est refusée avant la création d'un workload Agent.

Le chart réplique vos global.imagePullSecrets du namespace de la release vers les deux namespaces runtime au moment de l'installation/mise à niveau, donc les registres privés fonctionnent sans étape supplémentaire. (Les pipelines helm template puis apply n'ont pas de cluster à lire — pré-créez les secrets de pull dans les deux namespaces runtime dans ce mode de travail.)

CléDéfautRôle / justification
executionFabric.managedProcess.enabledtrueDéploie l'unique hôte d'acteur Dapr générique (niveau normal). Effectif seulement si dapr, agentic et agentic.app.dapr.workflows sont activés (son actor state store). Désactivez-le pour un déploiement physiquement microVM-only.
executionFabric.managedProcess.replicas2Réplicas fixes quand HPA est désactivé ; Dapr répartit les acteurs d'exécution.
executionFabric.managedProcess.enabledProfilestrois profilsProfils fixes agent_turn, implementation et notebook, dans la même application et image.
executionFabric.managedProcess.maxConcurrentInvocations4Nombre maximal d'arbres de processus frais supervisés simultanément par réplique. La saturation produit une erreur de capacité typée ; Dapr et le HPA assurent la mise à l'échelle horizontale.
executionFabric.managedProcess.autoscaling.*désactivé, 2–10 réplicasHPA CPU facultatif de l'hôte générique.
runtimePlane.enabledfalseDéploie le backend microvm après qualification. Le contrôleur découvre lui-même la RuntimeClass et les nœuds compatibles. Marimo interactif l'exige ; Agent, implémentation et jobs notebook peuvent utiliser managed_process uniquement si la politique d'organisation l'autorise.
runtimePlane.namespacescrydon-runtimesNamespace du contrôleur. Il doit différer du namespace des charges non fiables.
runtimePlane.workloadNamespacescrydon-runtime-workloadsNamespace des charges non fiables. Le RBAC du contrôleur y gère les pods exec et les pods/Services/NetworkPolicies Marimo possédés. Les deux ServiceAccounts de workload ne reçoivent aucun jeton API.
runtimePlane.replicas1Topologie à contrôleur unique imposée ; les mises à jour Recreate préservent la propriété exclusive du PVC.
runtimePlane.persistence.*1Gi, classe du clusterStockage durable obligatoire des revendications et résultats. Un stockage corrompu ou non inscriptible bloque le démarrage ou la répartition.
runtimePlane.dapr.enabledtrueLe chemin de contrôle authentifié du plan. Désactiver cette valeur ou dapr.enabled global désactive le plan en échec fermé (rien n'est généré ; les tours Agent refusent avec une erreur typée).
runtimePlane.image.*version applicative de la releaseImage du contrôleur. Épinglez le tag publié ; n'utilisez pas latest.
runtimePlane.runnerImagevideVide résout scrydon/bundle-runner à la version applicative du chart (même registre que chaque image d'application). Si défini, la valeur doit être un tag ou un digest épinglé — les profils production épinglent registry/repo@sha256:<digest> ; le schéma rejette latest.
runtimePlane.enforcerImagevideVide résout scrydon/egress-enforcer à la version applicative du chart. Si défini, épinglez le digest examiné ; le schéma rejette latest.
runtimePlane.marimoRuntimeImagevideLe profil Marimo immuable du contrôleur exige une référence par digest sha256 (registry/repo@sha256:<digest>) — une valeur par tag seul (y compris le tag par défaut de la version applicative) fait refuser le démarrage du contrôleur (Marimo runtime image must be pinned by sha256 digest). Toujours définir le digest quand runtimePlane.enabled: true.
runtimePlane.marimo.*TTL d'inactivité de 30 minutes, cull de 30 secondes, délai de provisioning de 180 secondesBorne l'inactivité du runtime interactif, le polling de nettoyage et le provisioning du contrôleur. Analytics possède un délai de préparation de bout en bout distinct.
runtimePlane.blockedCidrsplages RFC1918Plancher réseau du déploiement inclus dans chaque instantané de sortie des workloads isolés. Configurez les CIDR des pods/services, les plages de métadonnées et les réseaux de contrôle privés ; la politique d'organisation ne peut pas les retirer.
runtimePlane.upstreamDns10.0.0.10:53Adresse réelle de kube-dns/CoreDNS. Une valeur erronée casse toute sortie par nom d'hôte.
runtimePlane.execution.maxConcurrentPerTenant8Nombre maximal d'exécutions en attente/en cours pour un locataire avant une réponse HTTP 429 typée.
runtimePlane.execution.maxConcurrentGlobal128Plafond global de surcharge du contrôleur unique ; doit être supérieur ou égal au plafond par locataire.
runtimePlane.isolation.microvm.renderRuntimeClassfalseGénère un RuntimeClass Kata autogéré. Laissez false sur AKS Pod Sandboxing, où AKS en est propriétaire. La disponibilité microVM est inférée d'une découverte RuntimeClass réussie et d'un nœud Ready, non cordonné et compatible.
networkPolicies.enabledfalseGénère les NetworkPolicies du contrôleur et des charges non fiables. Définissez true avec un CNI qui les applique ; sinon la frontière réseau Kubernetes est absente.

Les deux niveaux produit sont microvm et managed_process. Les anciens champs du protocole Runtime Plane (require_true_vm, fallback, mediated, hardened) ne sont plus des contrôles Helm ou d'organisation. Après sélection de microvm, l'adaptateur envoie une valeur interne fixe uniquement pour la compatibilité des mises à niveau.

networkPolicies:
  enabled: true

executionFabric:
  managedProcess:
    enabled: true

runtimePlane:
  enabled: true
  namespace: scrydon-runtimes
  workloadNamespace: scrydon-runtime-workloads
  persistence:
    size: 1Gi
  runnerImage: registry.example.com/scrydon/bundle-runner@sha256:<digest>
  enforcerImage: registry.example.com/scrydon/egress-enforcer@sha256:<digest>
  marimoRuntimeImage: registry.example.com/scrydon/marimo-runtime@sha256:<digest>
  blockedCidrs:
    - "10.0.0.0/8" # remplacer/étendre avec les CIDR réels des pods et services
    - "172.16.0.0/12"
    - "192.168.0.0/16"
  upstreamDns: "10.0.0.10:53"
  isolation:
    microvm:
      renderRuntimeClass: false # AKS possède kata-vm-isolation

Le Deployment du contrôleur et les deux identités de workload consomment global.imagePullSecrets. Les pods Agent/job de notebook à usage unique utilisent sa-runtime-exec ; les pods Marimo interactifs utilisent sa-runtime-workload. Les deux définissent automountServiceAccountToken: false : le code non fiable ne reçoit aucun jeton d'API Kubernetes, tandis que kubelet peut toujours utiliser l'identifiant de registre configuré. Ne modifiez pas le ServiceAccount default du namespace. Si le registre exige un secret d'extraction, créez le Secret portant le même nom dans runtimePlane.namespace, runtimePlane.workloadNamespace et chaque namespace applicatif activé avant l'installation, ou fournissez un accès au registre équivalent au niveau des nœuds.

L'enforcer s'exécute avec l'UID 0 et uniquement NET_ADMIN/NET_BIND_SERVICE ; l'application non fiable reste sans root et abandonne toutes les capacités. Un profil Pod Security restricted global rejette l'enforcer. Configurez une exception examinée pour le namespace runtime et validez les pods rendus avec kubectl apply --dry-run=server. Ne désactivez pas l'admission à l'échelle du cluster.

networkPolicies.enabled: true est requis pour la frontière d'entrée entre contrôleur et charges générée par le chart, et ne fonctionne qu'avec un CNI qui applique Kubernetes NetworkPolicy. Une politique rendue sur un CNI qui ne l'applique pas n'est pas un contrôle de sécurité ; prouvez son enforcement pendant la validation du déploiement.

Après le déploiement, vérifiez le rapport de capacités au démarrage et prouvez séparément le niveau choisi pour les profils Agent exec, Marimo interactif et job de notebook. Prouvez également que l'ouverture d'un notebook ne crée aucun runtime, que Connect n'exécute aucune cellule et que Run hors connexion exécute une seule fois la cellule sélectionnée. Un contrôleur Ready ne prouve pas à lui seul Kata, l'extraction des images, les callbacks, le DNS, l'installation des dépendances, le nettoyage ou l'enforcement de sortie.

Valkey managé partagé — événements, cache de modèles et limites Agentic

Le chart fournit un backbone d'événements durable, un cache de découverte de modèles et des limites durables pour les webhooks et formulaires Agentic. Ces fonctions partagent une seule instance Valkey persistante ; le limiteur ne déploie pas une seconde base de données.

CléDéfautRôle / justification
eventBackbone.enabledtrueBackbone d'événements durable de la plateforme.
eventBackbone.broker.managedValkeytrueStatefulSet Valkey persistant fourni par le chart.
eventBackbone.valkey.password""Généré lors d'une nouvelle installation puis préservé depuis le Secret actif. Les rendus GitOps/hors ligne doivent le fournir explicitement.
eventBackbone.valkey.storage.size2GiTaille du PVC Valkey.
modelDiscoveryCache.enabledtrueSnapshots durables des modèles ; stateStore.managedValkey: true réutilise le même Valkey.
agentic.rateLimit.stateStore.managedValkeytrueCompartiments durables et sûrs entre réplicas pour les webhooks/formulaires. Mettre à false pour un composant state.redis géré par l'opérateur.
agentic.rateLimit.stateStore.metadata[]Métadonnées Dapr state.redis, obligatoires et transmises telles quelles lorsque managedValkey: false.

Lors de la première mise à niveau qui active Valkey managé, définissez explicitement eventBackbone.valkey.password si aucun Secret event-backbone-valkey n'existe encore. Le chart refuse de générer un mot de passe au milieu d'une mise à niveau afin d'éviter une rotation silencieuse. Une seule valeur couvre les événements, le cache de modèles et les limites Agentic.

opa — point de décision d'autorisation

Chaque décision d'autorisation sur les espaces de travail, workflows et ontologies est évaluée par OPA.

CléDéfautRôle / justification
opa.enabledtrueGarder activé. Désactivé (et sans opa.url), ces décisions échouent en mode fermé.
opa.url""Vide → DNS du Service intra-cluster. Surcharger pour un OPA externe ou un Service non standard.
opa.logLevelerrorSeuls debug/info/error sont valides — warn fait crashlooper le pod.

license — posture de validation

CléDéfautRôle / justification
license.enabledtrueFlux de licence en ligne — contacte license.scrydon.com toutes les 24h. Les overlays air-gapped mettent false / mode: offline.
license.modeonlineonline contacte le serveur ; offline vérifie uniquement le JWT local.
license.gracePeriod2592000Secondes de grâce en cas d'échec du contact (30 jours).
license.diagnostics.enabledtrueEnvoie la version Scrydon installée. Désactivez pour refuser les métadonnées facultatives ; la capacité contractuelle reste transmise.
license.capacity.acceleratorResources[]Mappings indépendants du fournisseur entre ressources étendues et VRAM, utilisés par la mesure horaire. Requis lorsque de la VRAM sous licence est déployée.
license.publicKeys{}Clés publiques supplémentaires pour la rotation de clé sans interruption.

auth.secrets.LICENSE_PUBLIC_KEY doit être défini chaque fois que license.enabled: true pour qu'api-platform puisse vérifier les signatures JWT. Scrydon doit s'exécuter sur un cluster dédié, car la capacité inclut tous les nœuds workers planifiables. Voir Licences et Rapport de capacité de licence.

Lorsque networkPolicies.enabled=true, définissez networkPolicies.kubernetesApiEgress.enabled=true et son cidr sur la destination étroite de l'API Kubernetes observée par votre CNI, avec un masque /32. Sur AKS avec Calico, il s'agit de l'adresse prête de l'EndpointSlice kubernetes, et non du ClusterIP du Service, car la politique est évaluée après le DNAT du Service. Deux politiques sélectionnées par pod réutilisent cette destination : le RBAC limite api-platform à get/list sur les nœuds, tandis que le labeler PSS est limité à get/patch sur l'unique espace de noms de la release Helm.

packSources — distribution de packs gérée par le chart

CléDéfautRôle / justification
packSources.enabledfalseInitialiser les sources de packs depuis les valeurs du chart à chaque mise à jour.
packSources.sources[][]Liste d'entrées (organization, name, kind, url, …). Les lignes gérées par Helm sont en lecture seule dans l'interface. Les identifiants sont référencés par authSecretRef et provisionnés séparément. Voir Sources de packs.

Ordonnancement des pods

Les nodeSelector, tolerations et affinity à l'échelle du chart s'appliquent à chaque Deployment, StatefulSet et Job de migration — les pods peuvent ainsi atterrir sur des nœuds dédiés ou marqués avec des teints. Les surcharges par composant ne sont pas exposées.

tolerations:
  - { key: workload, operator: Equal, value: scrydon, effect: NoSchedule }
nodeSelector:
  workload: scrydon
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
        - matchExpressions:
            - { key: node-role.kubernetes.io/scrydon, operator: Exists }

Réduction pour les installations à ressources limitées

Les valeurs par défaut présupposent un cluster de forme production (≥ 8 vCPU / ≥ 32 Gio sur les nœuds). Sur des clusters d'évaluation (4 vCPU / 16 Gio), désactivez les composants optionnels les plus lourds :

infra:
  starrocks:
    enabled: false     # ~2–8 Gio RAM, 20 Gio PVC — seules les Tables managées + l'inférence de schéma agentique sont affectées
apiTable:
  enabled: false
analytics:
  enabled: false       # supprime l'interface analytique + le sidecar marimo (~2 Gio)

Recettes de configuration courantes

Personnaliser les chemins de routage

Montez les applications sous des préfixes différents (ex. tout sous /scrydon/...) via routing.paths.* — voir le tableau routing ci-dessus et Modes de routage.

Installations Dapr existantes

Si le cluster exécute déjà Dapr, mettez dapr.installControlPlane: false pour que le chart ne tente pas de le gérer, et pointez dapr.controlPlaneNamespace vers l'emplacement de Dapr :

dapr:
  installControlPlane: false
  controlPlaneNamespace: dapr-system

Votre Dapr doit satisfaire trois prérequis, faute de quoi la connexion fonctionne mais la création de compte / les appels inter-services échouent avec PermissionDenied :

PrérequisPourquoi
Dapr 1.18.1 (version épinglée et testée par le chart)Les anciennes versions 1.17.31.17.6 émettaient un domaine SPIFFE incorrect ; faire correspondre la version évite la dérive du plan de contrôle.
Domaine de confiance scrydon sur dapr-sentry (ou définir dapr.trustDomain en conséquence)Toutes les ACL en dépendent.
Injecteur de sidecar opérationnelSans lui, les pods démarrent 1/1 (sans daprd) et l'invocation de service court-circuite.
kubectl -n <dapr-ns> get deploy dapr-sentry \
  -o jsonpath='{.spec.template.spec.containers[0].image}'   # attendre sentry:1.18.1

Périphérie avancée : derrière un équilibreur de charge qui termine le TLS

Les configurations App Gateway / ALB / GCP LB / F5 nécessitent un ajustement du contrôleur Traefik (trustedIPs, externalTrafficPolicy: Local, la règle de schéma public gateway.tls.enabled, périphérie privée, dépannage 502). Guide complet : TLS Offloading.

Identifiants StarRocks

Le StarRocks intégré est livré avec root sans mot de passe. Après helm install, appliquez le mot de passe défini dans apiTable.secrets.STARROCKS_PASSWORD :

NEW_PW="<your-starrocks-password>"   # même valeur que apiTable.secrets.STARROCKS_PASSWORD
# StarRocks est dans le namespace de la release par défaut (namespaces.infra → scrydon-platform).
kubectl -n scrydon-platform exec -it deploy/starrocks-fe -- \
  mysql -h127.0.0.1 -P9030 -uroot -e "SET PASSWORD FOR 'root' = PASSWORD('${NEW_PW}');"
kubectl -n scrydon-platform rollout restart deployment/svc-api-table

api-table entre en CrashLoop entre l'installation et cette étape — c'est attendu ; il se stabilise après le redémarrage. Pour apporter votre propre StarRocks :

infra:
  starrocks:
    enabled: false
apiTable:
  starrocks:
    host: starrocks-fe.starrocks.svc.cluster.local
    user: scrydon
  secrets:
    STARROCKS_PASSWORD: REPLACE-WITH-STARROCKS-PASSWORD

Vérifier le déploiement

kubectl get pods -n scrydon-platform      # tous Running, 2/2 avec le sidecar Dapr
kubectl get gatewayclass traefik          # ACCEPTED=True
kubectl get gateway -n scrydon-platform   # PROGRAMMED=True, avec une ADDRESS
kubectl get httproute -A                  # une par application activée, acceptée par la Gateway
kubectl get certificates -A               # Certificats cert-manager READY=True

Le cas à examiner de près est une Gateway Programmed dont les listeners ne sont pas Acceptedkubectl describe gateway gateway-frontdoor -n scrydon-platform affiche un bloc de conditions par listener.

Les données de licence (niveau, droits, jours avant expiration) apparaissent sous Paramètres de la plateforme → Licence après /setup. Connectez-vous sur https://app.example.com/ et passez d'une application à l'autre via le sélecteur de produit sans vous reconnecter.

Dépannage

SymptômeCause / solution
Pods 1/1 (pas 2/2)L'injecteur Dapr ne tourne pas — voir Installations Dapr existantes.
L'inscription échoue avec PermissionDenied depuis agenticMauvais domaine de confiance ou versions Dapr mixtes. kubectl logs deploy/agentic -n scrydon-platform -c daprd | grep spiffe (ou votre surcharge namespaces.agentic) — les ID doivent être spiffe://scrydon/..., pas spiffe://public/.... Alignez le plan de contrôle et les sidecars sur la version testée 1.18.1.
Job de migration CrashLoopBackOffSur Postgres BYO, une base de données n'a pas été pré-créée — voir BYO Database → Pré-créer les bases.
Init:ImagePullBackOff avec insufficient_scope (403)La carte de portée de votre token ACR manque un dépôt miroir tiers (scrydon/busybox, scrydon/pgvector, scrydon/opa). Envoyez à votre équipe l'erreur exacte + le chemin du dépôt — seule la carte de portée est mise à jour, pas le token.
Connexion silencieusement cassée derrière un équilibreur de chargegateway.tls.enabled laissé à false — mettre à true (voir Gateway).
Listener de Gateway Accepted=False, reason=PortUnavailablegateway.listenerPorts.* ne correspond à aucun entryPoint réellement écouté par votre contrôleur. Traefik écoute sur :8000/:8443 dans le conteneur alors que son Service publie 80/443 : le chart utilise donc 8000/8443 par défaut, et un listener sur le port 80 est refusé avec no matching entryPoint for port 80 and protocol HTTP. Une implémentation managée qui écoute sur le port public attend 80/443. Voir Ports des listeners.
helm install échoue avec gateway.publicAuthRateLimit.enabled=true requires gateway.className=traefikLa limitation de débit ne fait pas partie du canal standard de la Gateway API : elle est attachée comme Middleware Traefik. Mettez la valeur à false et appliquez la limite sur votre propre périphérie, ou utilisez la classe traefik.
kubectl get gatewayclass ne renvoie rien, ou la Gateway n'obtient jamais d'ADDRESSLe cluster n'a aucune implémentation Gateway API. Installez-en une (traefik.enabled: true fournit les CRD et la GatewayClass traefik), ou pointez gateway.className vers la classe exploitée par votre équipe plateforme.
L'HTTPRoute d'une application n'est pas Accepted par la GatewayL'espace de noms de la route n'est pas dans le sélecteur allowedRoutes de la Gateway — que le chart dérive des espaces de noms des applications activées. Relancez helm upgrade après tout changement de namespaces.* pour que le sélecteur et les routes bougent ensemble.

Opérations de jour 2

  • Renouveler la licence — collez le bundle renouvelé sous Paramètres → Licence → Mettre à jour la licence ; pas de redémarrage. Licences.
  • Sauvegarde & restauration — CronJob Postgres intégré (infra.db.backup) ou votre fournisseur managé. Sauvegarde & Restauration.
  • Mises à jourMises à jour.
  • ObservabilitéObservabilité.
Sur cette page

Sur cette page