Déployer AKKO depuis Harbor¶
Pour les déploiements en production, les images AKKO et le chart Helm sont
livrés via le registre Harbor AKKO à harbor.akko-ai.com. Les clients
installent AKKO sans cloner le dépôt Git ni construire les images localement.
Prérequis¶
- Un cluster Kubernetes joignable (v1.28+). Cibles testées : k3s, OpenShift 4.14+, Outscale OKS, OVHcloud Managed Kubernetes, EKS, AKS, GKE.
kubectlconfiguré contre le cluster ciblehelm≥ 3.14- DNS pour le domaine de base choisi pointant vers l'ingress du cluster
- (Optionnel) un compte Harbor en lecture seule si le projet est privé
Installation en une commande¶
curl -fsSL https://raw.githubusercontent.com/AKKO-p/AKKO/main/helm/scripts/deploy-from-harbor.sh \
-o deploy-akko.sh
AKKO_DOMAIN=akko.mon-entreprise.example \
AKKO_VERSION=2026.04 \
bash deploy-akko.sh
C'est tout. Le script :
- Se connecte à Harbor (si des identifiants sont fournis)
- Crée le namespace
akko+ le pull secret Harbor - Génère
values-domain.yamletrealm-domain.jsondérivés de votre domaine - Génère les secrets dev au premier lancement
- Exécute
helm upgrade --install akko oci://harbor.akko-ai.com/akko-charts/akko --version <VERSION> - Attend que les workloads critiques soient prêts
- Affiche l'URL du cockpit
Installation depuis le registre Helm OCI (manuelle, multi-cluster)¶
Le script en une commande ci-dessus est la voie la plus rapide. Pour les opérateurs qui veulent un contrôle direct — par exemple installer AKKO sur une flotte de clusters depuis un seul poste — récupérez l'artefact chart directement :
# Optionnel : authentification si le projet Harbor est privé.
helm registry login harbor.akko-ai.com
# 1. Tirez une version épinglée du chart localement.
helm pull oci://harbor.akko-ai.com/akko-charts/akko \
--version 2026.4.1 \
--untar -d /tmp/akko-chart
# 2. Inspectez le contenu (optionnel mais recommandé).
helm show chart /tmp/akko-chart/akko
helm show values /tmp/akko-chart/akko | head -100
# 3. Installation sur le cluster A.
kubectl --context cluster-a create namespace akko --dry-run=client -o yaml | \
kubectl --context cluster-a apply -f -
helm --kube-context cluster-a install akko /tmp/akko-chart/akko \
--namespace akko \
-f values-cluster-a.yaml \
--wait --timeout 20m
# 4. Installation sur le cluster B avec un autre domaine — mêmes octets de chart.
helm --kube-context cluster-b install akko /tmp/akko-chart/akko \
--namespace akko \
-f values-cluster-b.yaml \
--wait --timeout 20m
Ou, pour une installation directe sans untar :
helm install akko oci://harbor.akko-ai.com/akko-charts/akko \
--version 2026.4.1 \
--namespace akko --create-namespace \
-f values-domain.yaml \
-f values-dev-secrets.yaml
C'est exactement le chemin que le flag --from-oci de
helm/scripts/deploy-netcup-full.sh exerce de bout en bout sur le cluster
de production AKKO (Sprint 46 stream A4 / ADR-034 (docs/adr/adr-034-helm-chart-oci-distribution.md dans le repo source)).
Pourquoi OCI et pas un dépôt HTTP ?¶
- Une seule surface de registre (le même Harbor qui héberge les images de conteneur AKKO).
- Adressage par contenu (digest) — réinstallations déterministes.
- Signature cosign native (Sprint 46 stream A1).
- Pas d'
index.yamlà maintenir ; pas de deuxième cible de sauvegarde ; pas de dépendance à un CDN public.
Voir ADR-034 (docs/adr/adr-034-helm-chart-oci-distribution.md dans le repo source) pour le
raisonnement complet et le plan multi-canaux (tags stable / beta /
nightly).
Ce qui est récupéré depuis Harbor¶
| Artéfact | Source | Signature |
|---|---|---|
Chart Helm akko |
oci://harbor.akko-ai.com/akko-charts/akko |
Cosign keyless |
Image akko-cockpit |
harbor.akko-ai.com/akko/akko-cockpit:2026.04 |
Cosign keyless |
Image akko-postgres |
harbor.akko-ai.com/akko/akko-postgres:2026.04 |
Cosign keyless |
Image akko-spark |
harbor.akko-ai.com/akko/akko-spark:2026.04 |
Cosign keyless |
Image akko-trino (plugin) |
harbor.akko-ai.com/akko/akko-trino:2026.04 |
Cosign keyless |
Image akko-ai-service |
harbor.akko-ai.com/akko/akko-ai-service:2026.04 |
Cosign keyless |
Image akko-aden |
harbor.akko-ai.com/akko/akko-aden:2026.04 |
Cosign keyless |
Image akko-mlflow |
harbor.akko-ai.com/akko/akko-mlflow:2026.04 |
Cosign keyless |
Images akko-mcp-trino / akko-mcp-openmetadata |
harbor.akko-ai.com/akko/akko-mcp-*:2026.04 |
Cosign keyless |
Image akko-docs |
harbor.akko-ai.com/akko/akko-docs:2026.04 |
Cosign keyless |
| Images tierces (Keycloak, Airflow, Superset, Ollama, OpenMetadata, …) | Registres upstream | Signatures upstream |
Toutes les images sont scannées par Trivy au moment du publish. Les builds échouant sur des CVE CRITICAL n'atteignent jamais Harbor.
Vérifier les signatures (optionnel mais recommandé)¶
cosign verify \
--certificate-identity-regexp "ci\.akko-ai\.com/AKKO-p/AKKO/\.woodpecker/.*" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
harbor.akko-ai.com/akko/akko-cockpit:2026.04
Mise à jour¶
Relancer le même script avec une version plus récente. Le chart est idempotent
et préserve les secrets existants via lookup.
Hors-ligne / air-gapped¶
Si le cluster ne peut pas joindre Harbor public :
- Sur une machine en ligne :
helm pull oci://harbor.akko-ai.com/akko-charts/akko --version 2026.04 - Recopiez toutes les images ci-dessus dans votre registre interne
- Surchargez
global.image.registryvia un fichier values personnalisé :
- Installez le chart depuis l'archive locale :
helm install akko ./akko-2026.04.tgz \
-f values-registre-interne.yaml \
-f values-domain.yaml \
-f values-dev-secrets.yaml
Dépannage¶
| Symptôme | À vérifier |
|---|---|
ImagePullBackOff |
kubectl describe pod — connexion Harbor, pull secret, visibilité projet |
| Chart introuvable | Connexion Harbor : helm registry login harbor.akko-ai.com |
| Vérification signature échoue | Cosign keyless requiert Rekor joignable — tester avec --insecure-ignore-tlog=true |
| Ressources qui ne réconcilient pas | kubectl describe deployment/<nom> — limites CPU/mémoire, capacité du nœud |
Note commerciale¶
Les images et charts publiés sur harbor.akko-ai.com sont distribués sous les
conditions AKKO. Les binaires intègrent plusieurs composants open-source sous
licences permissives (Apache 2.0, MIT, BSD). L'inventaire par composant est
disponible dans docs/licenses/inventory.md.