Passer au contenu principal

CAST.AI

CAST.AI : Terraform & GitOps

📖
Cette section se concentre sur l'intégration du déploiement de CAST.AI dans vos pipeline de déploiement.

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 :

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)

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-agent

Il 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-controller

Bien 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,