CAST.AI : Terraform & GitOps
L'index :
- Phase 1 : Onboarding
- Phase 1 bis : GitOps Onboarding (Optionelle)
- Phase 2 : Premium Features
Il est possible d'automatiser l'intégration de vos clusters Kubernetes sur CAST.AI.
Pour cela :
- Une registry Terraform est maintenue par CAST.AI
- Le déploiement de la solution se fait au travers de Helm Chart, que vous pourrez intégrer à votre solution de Continuous Delivery.
La documentation traite du sujet ici
Dans notre exemple, nous imaginerons l'environnement suivant :
- Cluster GKE
- IaC via Terrraform
- Déploiement GitOps via ArgoCD
Terraform
Dans une approche GitOps, le déroulé serait le suivant :

CAST.AI fournit un exemple de déploiement sur cette page.
Il existe également de nombreux autres cas d'usages mais celui-ci devrait être le plus courant.
Le plus simple est d'utiliser les modules mis à disposition par CAST.AI :
- https://registry.terraform.io/modules/castai/gke-iam/castai/latest
- https://registry.terraform.io/modules/castai/gke-cluster/castai/latest
Au préalable, il vous faudra générer un token dans votre console CAST.AI.
Le menu est disponible en haut à droite de l'interface.

Terraform aura besoin de permissions d'écritures :

ArgoCD
La documentation décrit l'ensemble des Helm Chart à déployer.
Prenez soin de modifier l'URL de la console CAST.AI si vous avez créer votre tenant sur la plateforme EU (https://console.eu.cast.ai)
- Exemple : L'API est disponible ici : https://api.eu.cast.ai/v1/spec/
Dans mon cas :
- Je dispose d'un ArgoCD qui gère plusieurs clusters.
- Les clusters sont créé automatiquement au travers de secrets généré par Terraform dans un gestionnaire de secret.
- Les secrets contiennent le Cluster ID de CAST dans un label castai_cluster_id.
- L'API token est automatiquement créé dans un secret, via external secret operator.
- J'utilise le pattern app-of-apps pour déployer mes applications au travers d'AppSet.
Exemple pour le helm chart castai-agent.
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: castai-agent
namespace: argocd
spec:
goTemplate: true
goTemplateOptions: ["missingkey=error"]
syncPolicy:
applicationsSync: sync
generators:
- clusters:
selector:
matchExpressions:
- key: castai_cluster_id
operator: Exists
template:
metadata:
name: '{{.name}}-castai-agent'
spec:
syncPolicy:
syncOptions:
- CreateNamespace=true
automated:
prune: true
selfHeal: true
project: default
source:
repoURL: https://castai.github.io/helm-charts
targetRevision: '*'
chart: castai-agent
helm:
releaseName: castai-agent
values: |
apiKeySecretRef: castai-token
provider: gke
createNamespace: false
clusterID: '{{.metadata.labels.castai_cluster_id}}'
destination:
server: '{{.server}}'
namespace: castai-agentIl faut ensuite répéter l'opération pour chacun des composants à déployer, soit :
- castai-cluster-controller
- castai-evictor
- castai-kvisor
- castai-pod-pinner
- castai-spot-handler
- castai-workload-autoscaler
Le cluster ID peut également être placé dans un autre secret, défini avec la clé castai.clusterIdSecretKeyRef.
Le show values est votre ami :
helm show values castai-helm/castai-cluster-controllerBien entendu, ce n'est qu'une méthode parmi d'autres et vous devrez sélectionner la plus adaptée en fonction de vos outils,