Automatisation du Déploiement et des Mises à Jour de SAS Viya 4 avec CI/CD et GitOps
L'évolution rapide des technologies cloud et des pratiques de développement logiciel a rendu l'automatisation indispensable pour la gestion efficace des plateformes analytiques modernes.
SAS Viya 4 est conçue nativement pour le cloud et s'appuie sur des technologies comme les conteneurs et Kubernetes. Cette architecture cloud-native , bien que puissante et flexible, introduit une complexité de gestion qui rend les approches manuelles de déploiement et de mise à jour difficiles, coûteuses et sujettes aux erreurs, surtout compte tenu de la fréquence des mises à jour logicielles proposées par SAS (mensuelles ou semestrielles).
Préparez-vous à plonger en profondeur dans l'automatisation de SAS Viya 4 ! Ce guide expert – oui, il est copieux, mais ça vaut le détour ! – vous emmène à travers tout le cycle de vie : de l'installation initiale aux mises à jour continues. Découvrez comment les méthodologies CI/CD et les principes GitOps deviennent vos alliés pour une gestion de SAS Viya 4 rationalisée, sécurisée et ultra-rapide. On explorera en détail les outils fournis par SAS, sans oublier les stars de l'écosystème DevOps comme Argo CD, Kustomize, et les plateformes CI/CD.

L'Impératif de l'Automatisation pour SAS Viya 4
La nature conteneurisée de SAS Viya 4 et son déploiement sur Kubernetes signifient que la gestion de la plateforme implique l'orchestration de nombreux composants interdépendants (microservices, configurations, ressources Kubernetes).
Les méthodes de déploiement traditionnelles deviennent rapidement ingérables face à cette complexité et à la nécessité de mises à jour fréquentes pour bénéficier des dernières fonctionnalités et correctifs de sécurité.
L'automatisation, via les pratiques CI/CD et GitOps, répond directement à ces défis en offrant des avantages substantiels :
- Déploiements Accélérés et Fréquents: Réduction drastique du temps nécessaire pour déployer de nouvelles instances ou appliquer des mises à jour.
- Fiabilité et Reproductibilité: Élimination des erreurs manuelles et garantie de déploiements cohérents à travers différents environnements.
- Gestion Simplifiée: Abstraction de la complexité sous-jacente de Kubernetes et des configurations Viya.
- Réduction des Coûts: Optimisation de l'utilisation des ressources et réduction de l'effort manuel.
- Agilité Améliorée: Capacité à répondre rapidement aux besoins métier et à intégrer les innovations SAS plus vite.
- Sécurité Renforcée: Intégration des contrôles de sécurité dans le pipeline automatisé.
Cet article est structuré pour vous guider à travers les différentes facettes de l'automatisation de SAS Viya 4 :
- Comprendre SAS Viya 4 pour l'Automatisation: Une analyse de l'architecture pertinente (Kubernetes, microservices, classes de workload) et des prérequis essentiels.
- Automatisation du Déploiement Initial: Une comparaison détaillée des méthodes d'automatisation proposées par SAS.
- Implémentation de CI/CD: L'application des principes CI/CD et la structure d'un pipeline type, illustrée par un exemple GitLab.
- Exploiter GitOps avec Argo CD: Les principes GitOps, le fonctionnement d'Argo CD et son intégration spécifique avec les mécanismes de déploiement de SAS Viya 4.
- Gestion de la Configuration avec Kustomize: L'utilisation de Kustomize comme standard pour gérer les configurations Viya 4 de manière déclarative et adaptée aux environnements.
- Automatisation des Mises à Jour: Le processus de mise à jour et les stratégies pour minimiser l'indisponibilité.
- Gestion des Composants Stateful: Les défis et solutions pour la mise à jour automatisée de CAS et PostgreSQL.
- Considérations de Sécurité et Opérationnelles: La gestion des secrets, des licences, des permissions et le monitoring des pipelines.
- Recommandations et Conclusion: Une synthèse des stratégies et des conseils pratiques.
Comprendre SAS Viya 4 pour l'Automatisation
Une automatisation réussie de SAS Viya 4 repose sur une compréhension approfondie de son architecture sous-jacente et de ses exigences spécifiques en matière d'infrastructure.
Fondation Kubernetes
SAS Viya 4 est exclusivement conçu pour être déployé sur un cluster Kubernetes. C'est une rupture fondamentale avec les versions précédentes et la pierre angulaire de son architecture cloud-native. Cette dépendance signifie que toute stratégie d'automatisation doit intégrer la gestion et l'interaction avec l'API Kubernetes.
Architecture Microservices
Comme VIYA 3.5, Viya 4 adopte une architecture moderne basée sur des microservices. La plateforme est décomposée en un ensemble modulaire de services discrets et autonomes (par exemple, Audit, Credentials, Identities). Chaque microservice s'exécute dans son propre processus, généralement mappé à un ou plusieurs pods Kubernetes , et communique avec les autres services via des API REST sur HTTP.
Comme VIYA 3.5, Viya 4 adopte une architecture moderne basée sur des microservices. La plateforme est décomposée en un ensemble modulaire de services discrets et autonomes
Cette architecture est particulièrement adaptée à l'automatisation pour plusieurs raisons :
- Mises à Jour Granulaires: Chaque microservice peut être mis à jour indépendamment, simplifiant les processus de patching et de mise à niveau.
- Isolation des Fautes: Un problème dans un microservice a moins de chances d'impacter l'ensemble de la plateforme.
- Scalabilité Indépendante: Les ressources peuvent être allouées et mises à l'échelle pour des services spécifiques en fonction de la charge, optimisant l'utilisation des ressources.
- Alignement avec Kubernetes: Les microservices s'alignent naturellement avec les concepts de pods, de déploiements et de services Kubernetes, facilitant l'orchestration.
La configuration de ces microservices (options JVM, niveaux de logs, etc.) est gérée de manière centralisée, souvent via SAS Configuration Server. Les pipelines d'automatisation devront interagir avec ces mécanismes de configuration pour personnaliser le déploiement.
Classes de Workload Kubernetes
Pour optimiser le déploiement et la gestion des ressources sur Kubernetes, SAS a défini quatre classes de workload principales, chacune ayant des caractéristiques et des besoins spécifiques. Vous pouvez lire mon article Topologies de Déploiement SAS Viya 4.
La configuration de l'infrastructure Kubernetes (node pools, labels, taints) doit impérativement tenir compte de ces classes pour assurer la performance et la stabilité de SAS Viya 4.
- Stateless: Regroupe les applications web (SAS Drive, SAS Studio, SAS Visual Analytics, etc.) et la majorité des microservices SAS. Ces composants ne stockent pas d'état de session persistant localement. Ils sont gérés par des objets
Deployment
Kubernetes et peuvent être facilement mis à l'échelle horizontalement pour la haute disponibilité et la gestion de la charge. Par défaut, la plupart sont déployés avec une seule réplique , mais des overlays Kustomize sont fournis pour activer la haute disponibilité. - Stateful: Concerne les services qui nécessitent un état persistant et stable. Cela inclut les composants d'infrastructure open-source intégrés comme PostgreSQL (si interne), Consul, RabbitMQ, et OpenSearch (si interne). Ils sont généralement gérés par des
StatefulSet
Kubernetes qui garantissent des identifiants réseau stables et un stockage persistant ordonné. Ces services sont souvent déployés en mode haute disponibilité par défaut et ont des exigences fortes en matière d'I/O disque et de stockage persistant. - CAS (Cloud Analytic Services): Le moteur d'analyse en mémoire de SAS Viya, qu'on ne présente plus. Bien que stateful (il gère des données en mémoire), ses exigences en ressources sont uniques et critiques. La gestion de CAS lors des mises à jour est un défi majeur.
- Compute: Représente l'environnement d'exécution pour le code SAS traditionnel (équivalent du Workspace Server SAS 9.4 mais sans dépendance au Metadata Server). Il gère les sessions SAS interactives (lancées depuis SAS Studio par exemple) et les jobs batch. Ces processus sont stateful pendant leur durée de vie mais sont généralement éphémères. Ils sont souvent exécutés comme des
Job
Kubernetes. Les nœuds hébergeant ces workloads doivent être gérés avec précaution lors des opérations de maintenance du cluster (drainage/cordon) pour permettre aux jobs longs de se terminer. Ce workload est un bon candidat pour l'autoscaling du cluster Kubernetes, car la charge peut varier considérablement (pics de jobs batch nocturnes, etc.).
La distinction et la gestion appropriée de ces classes de workload via la configuration de l'infrastructure Kubernetes (node pools dédiés, labels, taints, ressources allouées, politiques d'autoscaling) sont fondamentales pour la réussite d'un déploiement SAS Viya 4 automatisé, performant et stable.
La distinction et la gestion appropriée de ces classes de workload via la configuration de l'infrastructure Kubernetes sont fondamentales pour la réussite d'un déploiement SAS Viya 4 automatisé, performant et stable.
Prérequis Clés pour l'Automatisation
Au-delà de la structure de Viya, plusieurs composants d'infrastructure sont essentiels et doivent être provisionnés et configurés, idéalement de manière automatisée, avant de déployer Viya :
- Stockage Persistant: SAS Viya a besoin de stockage persistant pour les composants stateful (PostgreSQL interne, Consul, etc.), les données CAS (cache disque, permstore), les données utilisateur (répertoires home), et potentiellement les données de travail SAS (SASWORK). Le protocole NFS est le minimum requis. Dans les environnements cloud, il est courant d'utiliser les services de stockage natifs (AWS EFS/EBS, Azure Files/Disk, Google Filestore/Persistent Disk) via des Container Storage Interface (CSI) drivers et des
StorageClass
Kubernetes. La configuration correcte du provisionnement dynamique (viaStorageClass
) ou statique des Persistent Volumes (PV) et Persistent Volume Claims (PVC) est une étape clé de l'automatisation. Le mode d'accès (ReadWriteMany
- RWX pour NFS/EFS/Azure Files vsReadWriteOnce
- RWO pour EBS/Azure Disk/GCE PD) est une considération importante. - Ingress Controller: Un contrôleur d'ingress est indispensable pour exposer les services web de SAS Viya à l'extérieur du cluster Kubernetes. Nginx Ingress Controller est fréquemment utilisé et son déploiement peut être automatisé par les outils SAS. Red Hat OpenShift utilise son propre Ingress Operator basé sur HAProxy et le concept de Routes, avec lesquels SAS Viya s'intègre. La configuration TLS au niveau de l'ingress est une étape de sécurité critique.
- Gestion des Certificats (TLS): La sécurisation des communications (data in motion) via TLS est fortement recommandée, voire activée par défaut ("Full-Stack TLS"). Comme les pods Kubernetes sont éphémères et leurs noms changent, un générateur de certificats dynamique est requis. SAS supporte deux options principales :
- cert-manager: Un gestionnaire de certificats open-source populaire pour Kubernetes, souvent recommandé. Il peut générer des certificats auto-signés ou s'intégrer avec des autorités de certification (AC) comme Let's Encrypt.
- OpenSSL (via SAS Security Certificate Framework): Une option fournie par SAS qui utilise OpenSSL pour générer les certificats nécessaires. Le choix du générateur impacte la configuration Kustomize. Les certificats et clés sont stockés dans des secrets Kubernetes, notamment
sas-viya-ca-certificate-secret
pour l'AC interne. L'automatisation doit inclure le déploiement et la configuration du générateur de certificats choisi.
Automatisation du Déploiement Initial de SAS Viya 4
SAS propose plusieurs méthodes pour déployer SAS Viya 4 sur une infrastructure Kubernetes préparée. Le choix de la méthode a des implications importantes sur le niveau d'automatisation possible, les compétences requises, la gestion des privilèges et l'intégration dans un pipeline CI/CD et une approche GitOps.
Ces méthodes ont évolué depuis la sortie de Viya 4, reflétant une tendance vers une abstraction et une automatisation accrues pour masquer la complexité de Kubernetes.
Analyse Comparative et Choix de la Méthode
Le choix de la méthode d'automatisation dépend fortement du contexte spécifique de l'organisation : maturité DevOps, outils existants, politiques de sécurité, et objectif d'automatisation (déploiement initial vs cycle de vie complet).
L'évolution des méthodes proposées par SAS, de kubectl apply
vers des outils d'orchestration dédiés (Operator, sas-orchestration
) et des frameworks complets (Ansible viya4-deployment
), démontre une reconnaissance de la complexité inhérente au déploiement d'une plateforme comme Viya 4 sur Kubernetes et une volonté de fournir des niveaux croissants d'abstraction et d'automatisation.
Un point de décision clé réside dans le choix entre le SAS Deployment Operator et la commande sas-orchestration
. L'Operator offre une approche plus intégrée à Kubernetes et nativement compatible avec GitOps grâce à sa CRD SASDeployment
. Il agit comme un contrôleur permanent qui maintient l'état désiré. Cependant, il exige des privilèges élevés constants dans le cluster. La commande sas-orchestration
, quant à elle, évite cet agent permanent mais requiert Docker et des privilèges élevés lors de son exécution externe, rendant l'intégration GitOps pure un peu moins directe.
Implémentation de CI/CD pour SAS Viya 4
L'adoption d'une approche CI/CD transforme la manière dont les déploiements et les mises à jour de SAS Viya 4 sont gérés, passant d'opérations manuelles potentiellement risquées à des processus automatisés, fiables et rapides.
Principes CI/CD Appliqués à SAS Viya 4
Les principes fondamentaux de CI/CD s'appliquent directement à la gestion du cycle de vie de SAS Viya 4 :
- Intégration Continue (CI): Les modifications de configuration (overlays Kustomize, variables Ansible, scripts de post-déploiement) sont intégrées fréquemment dans un dépôt Git centralisé. Chaque intégration peut déclencher des validations automatisées (linting YAML, vérification de syntaxe Kustomize).
- Build Automatisé: La génération du manifeste Kubernetes final (
site.yaml
) viakustomize build
est automatisée. Cette étape est implicite lors de l'utilisation de l'Operator ou desas-orchestration
, mais doit être explicite si l'on scripte la méthode manuelle. - Tests Automatisés: Des tests sont exécutés à différentes étapes :
- Pré-déploiement: Validation statique des manifestes, vérification des prérequis Kubernetes (disponibilité des ressources, versions), exécution des scripts de pré-installation (
viya4-ark
). - Post-déploiement: Tests de fumée pour vérifier le démarrage des services Viya clés, validation de la disponibilité des interfaces web, exécution de scripts de validation fonctionnelle basiques, génération de rapports de déploiement (
viya4-ark
). La vérification de la "readiness" des services via les API ou les outils K8s est essentielle.
- Pré-déploiement: Validation statique des manifestes, vérification des prérequis Kubernetes (disponibilité des ressources, versions), exécution des scripts de pré-installation (
- Livraison/Déploiement Continu (CD): Le déploiement de la configuration validée vers un environnement cible (développement, test, production) est automatisé, en utilisant l'une des méthodes SAS (Operator,
sas-orchestration
). - Feedback Rapide: Les résultats des builds, tests et déploiements sont communiqués rapidement aux équipes, permettant une correction agile des problèmes.
L'application de ces principes à SAS Viya 4 apporte des bénéfices tangibles : déploiements plus rapides et moins risqués, réduction significative des erreurs manuelles, amélioration de la qualité et de la cohérence des environnements, et accélération des cycles d'introduction des mises à jour et nouvelles fonctionnalités SAS.
Structure d'un Pipeline CI/CD Type pour SAS Viya 4
Un pipeline CI/CD typique pour gérer le déploiement ou la mise à jour de SAS Viya 4 peut être structuré comme suit :
- Déclenchement (Trigger):
- Un commit sur la branche principale (ou une branche spécifique) du dépôt Git contenant la configuration Kustomize (
site-config
,kustomization.yaml
) et/ou la CRSASDeployment
(si méthode Operator). - Un déclenchement manuel par un opérateur.
- Un déclenchement programmé (par exemple, pour appliquer les mises à jour mensuelles de la cadence Stable).
- Un déclenchement basé sur un événement externe (ex: notification de disponibilité de nouveaux assets SAS via API).
- Un commit sur la branche principale (ou une branche spécifique) du dépôt Git contenant la configuration Kustomize (
- Gestion de la Configuration (Kustomize):
- Le pipeline s'assure que les overlays Kustomize corrects (du dossier
site-config
géré dans Git) sont présents pour l'environnement cible. - Si nécessaire (méthode manuelle ou
sas-orchestration
), le pipeline exécutekustomize build -o site.yaml
pour générer le manifeste final. Si la méthode Operator est utilisée, cette étape est gérée par l'Operator lui-même après l'application de la CR.
- Le pipeline s'assure que les overlays Kustomize corrects (du dossier
- Validation Pré-Déploiement (Optionnelle mais Recommandée):
- Exécution d'outils de validation statique sur les manifestes générés (ex:
kubeval
,conftest
). - Vérification des prérequis sur le cluster cible (version K8s, ressources disponibles, présence des
StorageClass
, etc.). - Exécution des scripts de pré-installation du SAS Viya Administration Resource Kit (
viya4-ark
). - (Pour les Mises à Jour): Intégration des étapes manuelles ou automatisées issues des "Deployment Notes" SAS. Cela peut nécessiter une étape d'approbation manuelle dans le pipeline.
- (Pour les Mises à Jour): Déclenchement d'une sauvegarde SAS Viya.
- Exécution d'outils de validation statique sur les manifestes générés (ex:
- Déploiement:
- Le pipeline applique la CR
SASDeployment
mise à jour (contenant la nouvelle version ou les modifications de configuration) au cluster Kubernetes viakubectl apply -f sas-deployment.yaml
.
- Le pipeline applique la CR
- Validation Post-Déploiement (Essentielle):
- Attente et vérification de l'état "Ready" des pods et services clés de SAS Viya (stateless, stateful, CAS, compute). Utilisation de
kubectl wait
,kubectl get pods/svc
, etc. - Exécution de tests de fumée : tentative de connexion aux interfaces web principales (SAS Drive, Environment Manager), exécution d'un job SAS simple via API ou CLI.
- Vérification de la "readiness" via les API SAS si disponibles ou via les métriques.
- Génération et archivage du rapport de déploiement (
viya4-ark
).
- Attente et vérification de l'état "Ready" des pods et services clés de SAS Viya (stateless, stateful, CAS, compute). Utilisation de
- Nettoyage et Notifications:
- Suppression des artefacts temporaires.
- Notification du succès ou de l'échec du pipeline aux équipes concernées (Slack, email, etc.). En cas d'échec, fournir des logs et des informations de diagnostic claires.
La mise en place d'un tel pipeline nécessite une orchestration minutieuse d'outils variés : la plateforme CI/CD elle-même, Git, Kustomize, kubectl
, Docker (si sas-orchestration
est utilisé), et les outils spécifiques à SAS (viya4-orders-cli
, sas-orchestration
, Operator, viya4-ark
). La complexité réside moins dans chaque outil individuel que dans leur intégration fluide, sécurisée et fiable au sein du pipeline.
Exploiter GitOps avec Argo CD pour SAS Viya 4
GitOps est une évolution des pratiques DevOps qui applique les workflows et les outils Git à la gestion de l'infrastructure et des déploiements applicatifs, en particulier dans les environnements Kubernetes. Argo CD est l'un des outils les plus populaires pour implémenter GitOps.
Principes Fondamentaux de GitOps
GitOps repose sur quatre principes fondamentaux qui visent à rendre la gestion des déploiements plus fiable, auditable et automatisée :
- Déclaratif: L'état complet du système désiré (configuration de l'application SAS Viya, ressources Kubernetes associées) est décrit de manière déclarative dans des fichiers (typiquement YAML). Kustomize est l'outil clé pour générer cette description déclarative pour SAS Viya 4.
- Versionné et Immutable (via Git): Le dépôt Git est la source unique de vérité pour l'état désiré. Chaque changement apporté à la configuration est un commit Git, fournissant un historique complet, auditable et permettant des rollbacks faciles. L'état déployé est considéré comme immuable ; les changements se font en modifiant l'état désiré dans Git, pas directement sur le cluster.
- Tiré Automatiquement (Pull-based): Un agent s'exécutant dans le cluster Kubernetes (comme Argo CD) surveille le dépôt Git et "tire" automatiquement les changements pour les appliquer au cluster. Cela contraste avec les approches CI/CD traditionnelles "push-based" où le système CI/CD pousse les changements vers le cluster, ce qui peut poser des défis de sécurité liés aux identifiants du cluster.
- Réconcilié en Continu: L'agent GitOps compare en permanence l'état réel du cluster avec l'état désiré dans Git. S'il détecte une dérive (différence), il prend automatiquement des mesures pour corriger l'état réel et le faire converger vers l'état désiré (réconciliation).
Argo CD : Présentation et Fonctionnement
Argo CD est un outil open-source de livraison continue spécifiquement conçu pour Kubernetes et aligné sur les principes GitOps.
- Architecture: Il s'implémente comme un contrôleur Kubernetes qui s'exécute dans le cluster. Ses composants principaux incluent :
- API Server: Point d'entrée pour l'UI, la CLI et les intégrations externes.
- Repository Server: Responsable de cloner les dépôts Git et de générer les manifestes Kubernetes (en utilisant Kustomize, Helm, etc.).
- Application Controller: Le cœur d'Argo CD, qui surveille les applications, compare les états (live vs désiré) et orchestre la synchronisation.
- Fonctionnement:
- Un utilisateur définit une
Application
Argo CD (via UI, CLI ou YAML). Cette ressource lie un dépôt Git (URL, révision, chemin) à un cluster et un namespace Kubernetes cibles. - Argo CD clone le dépôt Git et utilise Kustomize (ou un autre outil configuré) pour générer les manifestes Kubernetes correspondant à l'état désiré.
- Il compare ces manifestes générés avec les ressources réellement présentes dans le cluster cible.
- Si une différence ("drift" ou
OutOfSync
status) est détectée, Argo CD la signale via son UI et sa CLI. - L'utilisateur peut déclencher une synchronisation manuelle (
argocd app sync
) ou configurer une synchronisation automatique pour qu'Argo CD applique les changements nécessaires au cluster afin de le ramener à l'état désiré défini dans Git.
- Un utilisateur définit une
- Interface: Argo CD fournit une interface web riche pour visualiser l'état des applications, les différences de configuration, l'historique des synchronisations et la santé des ressources Kubernetes sous-jacentes, ainsi qu'une CLI complète pour l'automatisation et la gestion.
Intégration d'Argo CD avec les Méthodes de Déploiement SAS Viya 4
L'efficacité de l'intégration d'Argo CD pour gérer le cycle de vie de SAS Viya 4 dépend fortement de la méthode de déploiement SAS choisie, car Argo CD opère sur un modèle déclaratif tandis que les outils SAS peuvent être impératifs.
L'alliance avec le SAS Deployment Operator est le scénario le plus naturel et aligné avec le GitOps : Argo CD gère directement la ressource Kubernetes déclarative (SASDeployment
Custom Resource) depuis Git, et le Operator prend le relais pour orchestrer le déploiement ou la mise à jour de Viya selon cet état désiré, incarnant un flux "pull-based" pur.
À l'inverse, l'intégration avec les méthodes sas-orchestration
et viya4-deployment
(Ansible) est moins directe car elles sont impératives ; elle nécessite souvent qu'Argo CD déclenche une action intermédiaire (comme un Job ou un Workflow Kubernetes) ou que Git déclenche un pipeline CI/CD externe pour exécuter ces commandes ou playbooks, ce qui s'éloigne du modèle GitOps "pull-based" pur pour le déploiement Viya lui-même. Par conséquent, l'association du SAS Deployment Operator et d'Argo CD offre l'expérience GitOps la plus fluide et intégrée pour la gestion complète du cycle de vie de SAS Viya 4.
Gestion de la Dérive de Configuration
Un avantage clé de GitOps et d'Argo CD est la capacité à détecter et gérer la dérive de configuration – c'est-à-dire les différences entre l'état réel du cluster et l'état désiré défini dans Git.
- Détection: Argo CD compare périodiquement (ou sur rafraîchissement manuel/webhook) l'état live des ressources Kubernetes gérées avec les manifestes générés à partir de Git. Toute différence est signalée dans l'interface utilisateur et via l'API, marquant l'application comme
OutOfSync
. Cela inclut les changements manuels effectués viakubectl edit
ou d'autres moyens en dehors du flux GitOps. - Visualisation: Argo CD fournit des outils de "diff" pour visualiser précisément quelles parties des ressources ont dérivé par rapport à la configuration Git.
- Correction (Synchronisation): Comme mentionné, la synchronisation (manuelle ou automatique) réapplique l'état désiré depuis Git, écrasant ainsi les changements non désirés dans le cluster.
- Auto-Réparation (Self-Heal): Argo CD propose une option d'auto-réparation (
spec.syncPolicy.automated.selfHeal: true
dans la définition de l'Application
). Lorsque cette option est activée, Argo CD non seulement détecte la dérive, mais tente aussi automatiquement de la corriger en resynchronisant l'application vers l'état défini dans Git, sans intervention manuelle. Cela garantit que le cluster reflète toujours la source de vérité Git. Il est intéressant de noter qu'un cas d'usage spécifique mentionné dans désactive cette fonction, suggérant que dans certaines situations complexes ou lors de phases de transition, un contrôle manuel sur la réconciliation peut être préféré.
La gestion de la dérive est essentielle pour maintenir la fiabilité et la prévisibilité promises par GitOps. Elle assure que l'état du système est toujours auditable et reproductible à partir du dépôt Git.
La mise en œuvre de GitOps avec Argo CD pour SAS Viya 4, en particulier avec le SAS Deployment Operator, représente une approche moderne et robuste pour automatiser et sécuriser le cycle de vie de la plateforme. Cependant, elle exige une compréhension claire des principes GitOps, du fonctionnement d'Argo CD, et des spécificités de la méthode de déploiement SAS choisie. La gestion des permissions RBAC entre Argo CD, l'Operator SAS et le cluster Kubernetes est un point d'attention critique pour assurer à la fois la fonctionnalité et la sécurité.
Gestion de la Configuration avec Kustomize
Kustomize est devenu l'outil standard pour gérer la configuration déclarative des déploiements SAS Viya 4 sur Kubernetes. Sa capacité à personnaliser les manifestes YAML sans utiliser de templates complexes le rend particulièrement adapté à l'approche GitOps.
Introduction à Kustomize
Kustomize est un outil autonome, intégré à kubectl
depuis la version 1.14 , qui permet de personnaliser des fichiers de configuration Kubernetes. Son principe fondamental est de travailler avec des manifestes YAML bruts et d'y appliquer des modifications (overlays, patches) de manière déclarative, en laissant les fichiers de base intacts.
Kustomize utilise un fichier central, kustomization.yaml
, pour définir comment les manifestes de base doivent être combinés et modifiés pour produire une configuration spécifique à un environnement ou à un cas d'usage. Il est nativement intégré par des outils GitOps comme Argo CD et FluxCD.
Stratégie Base/Overlays
L'approche la plus courante et recommandée pour structurer un projet Kustomize est la stratégie "base/overlays" :
base
: Ce répertoire contient les manifestes Kubernetes communs et standards pour l'application, ainsi qu'un fichierkustomization.yaml
de base qui liste simplement ces ressources. Ces fichiers ne sont généralement pas modifiés directement.overlays
: Ce répertoire contient des sous-répertoires, un pour chaque environnement cible (par exemple,dev
,staging
,production
). Chaque sous-répertoire d'overlay contient son propre fichierkustomization.yaml
et potentiellement des fichiers de patch spécifiques.kustomization.yaml
d'Overlay: Ce fichier référence le répertoirebase
(ex:resources: -../../base
) et définit ensuite les modifications spécifiques à cet environnement en utilisant des patches, des générateurs ou des transformers.
Cette structure permet de :
- Réutiliser la configuration: La base est partagée par tous les environnements.
- Isoler les différences: Seules les variations spécifiques à chaque environnement sont définies dans les overlays.
- Maintenir la lisibilité: Les manifestes de base restent clairs et non modifiés.
Application à SAS Viya 4
Cette stratégie base/overlays est précisément celle adoptée par SAS pour la configuration de Viya 4 :
base
=$deploy/sas-bases
: Le répertoiresas-bases
, fourni dans les assets de déploiement SAS, contient tous les manifestes Kubernetes de base pour les différents composants de Viya 4, ainsi que des exemples et des overlays prédéfinis par SAS.overlays
=$deploy/site-config
: Le répertoiresite-config
est l'endroit où les utilisateurs placent leurs propres overlays Kustomize pour personnaliser le déploiement. Les outils SAS (Operator,sas-orchestration
,viya4-deployment
) s'attendent à trouver les personnalisations utilisateur dans ce répertoire.$deploy/kustomization.yaml
: Le fichierkustomization.yaml
principal à la racine du répertoire de déploiement ($deploy
) est celui qui orchestre l'ensemble. Il référence généralement la base (sas-bases
) et inclut les différents overlays présents danssite-config
ainsi que des overlays fournis par SAS (ex: pour TLS, PostgreSQL interne, etc.).
Par exemple, pour ajouter un volume persistant (PVC) et le monter dans les pods CAS :
- Créer un fichier YAML définissant la ressource
PersistentVolumeClaim
(ex:site-config/storage/gelcontent_pvc.yaml
). - Ajouter une référence à ce fichier dans la section
resources
dukustomization.yaml
principal. - Créer un fichier YAML définissant un
PatchTransformer
(ex:site-config/cas/cas-add-nfs-mount.yaml
) qui contient les opérations de patch (ajout du volume et duvolumeMount
dans la spécification duCASDeployment
). - Ajouter une référence à ce fichier de patch dans la section
transformers
(oupatches
) dukustomization.yaml
principal.
Le projet Ansible viya4-deployment
simplifie encore cela en gérant dynamiquement le contenu du kustomization.yaml
principal. Il scanne le répertoire site-config
et ajoute automatiquement les références aux overlays et patches trouvés.
Meilleures Pratiques GitOps avec Kustomize pour SAS Viya 4
Pour gérer efficacement la configuration de SAS Viya 4 avec Kustomize dans un contexte GitOps, il est recommandé de suivre ces meilleures pratiques :
- Séparation des Dépôts: Maintenir le code source des applications SAS distinct des dépôts Git contenant la configuration Kustomize de SAS Viya. Cela évite des déclenchements de pipeline inutiles et respecte les cycles de vie indépendants.
- Structure de Répertoires: Adopter une structure claire et cohérente pour les bases et les overlays (ex:
infrastructure/sas-viya/base
,infrastructure/sas-viya/overlays/dev
,infrastructure/sas-viya/overlays/prod
). Utiliser des répertoires pour séparer les environnements, pas des branches Git. - Versionnement: Tout doit être dans Git. Verrouiller les overlays à des versions spécifiques de la base SAS (via des tags Git ou des références de commit) pour assurer la reproductibilité et éviter les ruptures inattendues lors des mises à jour de la base.
- Nommage et Organisation: Utiliser des conventions de nommage claires pour les fichiers et les ressources. Séparer les ressources dans des fichiers distincts sauf si elles sont très liées (ex: RBAC). Utiliser les labels communs Kubernetes recommandés.
- Utilisation des Générateurs: Toujours utiliser
configMapGenerator
etsecretGenerator
pour gérer les ConfigMaps et Secrets afin de bénéficier du hachage de contenu et des mises à jour automatiques. - Gestion du Namespace: Définir le namespace cible via la directive
namespace
dans lekustomization.yaml
de l'overlay, plutôt que de le coder en dur dans les manifestes de ressources. - Éviter la Duplication: Ne pas copier/coller de larges pans de configuration de la base vers l'overlay. Préférer les patches ciblés, ou si une application supporte la surcharge via variables d'environnement, utiliser cette méthode. Si nécessaire, utiliser un
initContainer
pour fusionner des fichiers de configuration au démarrage du pod. - Gestion des Ressources: Adapter les requêtes et limites de ressources (CPU, mémoire) dans les overlays pour chaque environnement. Envisager une base commune pour les
ResourceQuota
etLimitRange
par défaut. - Configuration des Transformers pour les CRD: Si des transformers doivent agir sur des champs spécifiques à des CRD SAS , il faut fournir une configuration supplémentaire au transformer pour lui indiquer le chemin d'accès à ces champs.
Le tableau suivant résume les concepts clés de Kustomize et leur application typique dans le contexte de SAS Viya 4 :
Concepts Clés de Kustomize et Application à SAS Viya 4
Concept Kustomize | Description | Exemple d'utilisation pour SAS Viya 4 |
---|---|---|
Base | Répertoire contenant les manifestes K8s communs et un kustomization.yaml de base. | Le répertoire $deploy/sas-bases fourni par SAS. |
Overlay | Répertoire spécifique à un environnement, référençant une base et appliquant des modifications. | Un sous-répertoire dans $deploy/site-config (ex: site-config/production ). |
Patch (Strategic Merge) | Applique des modifications simples en fusionnant le patch avec la ressource de base. | Modifier le nombre de replicas d'un déploiement CAS ou d'un microservice stateless. |
Patch (JSON) | Applique des opérations précises (add, remove, replace) via des pointeurs JSON Path. | Ajouter un volumeMount à une liste existante dans un pod CAS. |
PatchTransformer | Ressource Kustomize (souvent dans les exemples SAS) qui encapsule une logique de patch. | Le fichier cas-add-nfs-mount.yaml pour monter un volume NFS dans CAS. |
ConfigMapGenerator | Génère des ConfigMap K8s à partir de fichiers ou littéraux, avec ajout de hash au nom. | Créer des ConfigMaps pour la configuration applicative, les variables d'environnement. |
SecretGenerator | Génère des Secret K8s à partir de fichiers ou littéraux, avec ajout de hash au nom. | Gérer la licence SAS Viya (sas-license secret à partir du fichier .jwt ) , gérer les secrets de connexion à des bases de données externes. |
Transformer | Applique des modifications transversales (labels, annotations, images, namespace, etc.). | Ajouter un label environment=production à toutes les ressources, remplacer les images pour pointer vers un registre miroir , définir le namespace sas-prod . |
Component | Encapsule un ensemble réutilisable de ressources et de patches. | Inclure une configuration optionnelle comme Airflow via sas-bases/components/sas-airflow/openshift . |
En maîtrisant Kustomize et en appliquant ces meilleures pratiques, les équipes peuvent gérer la configuration complexe de SAS Viya 4 de manière efficace, reproductible et alignée avec les principes GitOps, facilitant ainsi grandement l'automatisation via CI/CD.
Automatisation des Mises à Jour de SAS Viya 4
L'architecture cloud-native et le modèle de livraison continue de SAS Viya 4 impliquent des mises à jour logicielles fréquentes (mensuelles pour la cadence Stable, semestrielles pour Long-Term Support). L'automatisation de ce processus de mise à jour via un pipeline CI/CD est essentielle pour maintenir la plateforme à jour, sécurisée et performante, tout en minimisant l'effort manuel et les risques d'interruption de service.
Processus Général de Mise à Jour
Une mise à jour logicielle SAS Viya 4 consiste à remplacer tout ou partie des composants déployés par leurs dernières versions. Le processus général, qu'il soit manuel ou automatisé, suit généralement ces étapes :
-
Préparation (Avant la Mise à Jour):
- Sauvegarde (Backup): Créer une sauvegarde complète de l'environnement SAS Viya existant (configuration, contenu utilisateur, bases de données internes). C'est une étape critique pour la récupération en cas de problème.
- Vérification des Prérequis: Examiner les exigences système pour la nouvelle version (version K8s, ressources CPU/mémoire/stockage, dépendances externes). S'assurer que le cluster dispose des ressources nécessaires, en tenant compte des besoins supplémentaires temporaires pendant la mise à jour.
- Téléchargement des Nouveaux Assets: Obtenir les nouveaux "Deployment Assets" (
.tgz
contenant lessas-bases
mis à jour) et potentiellement un nouveau fichier de licence (.jwt
) pour la version cible depuis My SAS (manuellement ou viaviya4-orders-cli
). - Lecture des Notes de Déploiement (Deployment Notes): Étape cruciale et souvent négligée. Consulter les notes de déploiement spécifiques à la version cible. Elles contiennent des informations vitales sur les changements, les problèmes connus, et surtout, les actions manuelles ou les modifications de configuration requises avant ou après l'application de la mise à jour. Ignorer ces notes peut entraîner l'échec de la mise à jour ou un comportement inattendu.
- Application des Commandes Pré-Déploiement: Exécuter les commandes ou scripts spécifiés dans les notes de déploiement.
- Exécution des Tâches par Composant: Effectuer les tâches spécifiques requises par certains composants avant la mise à jour (ex: sauvegarde de projets SAS Event Stream Processing ).
-
Déploiement de la Mise à Jour:
- Reconstruction du Manifeste: Mettre à jour le fichier
kustomization.yaml
pour référencer les nouveaux assets (sas-bases
) et appliquer les éventuels changements de configuration requis par la nouvelle version ou les notes de déploiement. Puis, générer le nouveau manifestesite.yaml
viakustomize build
(cette étape est gérée implicitement par l'Operator ousas-orchestration
). - Application de la Mise à Jour: Déployer la nouvelle version en utilisant la méthode choisie :
- Operator: Mettre à jour la CR
SASDeployment
avec la nouvellecadenceVersion
et/ou le chemin vers les nouveaux assets, puis appliquer la CR. L'Operator orchestre la mise à jour. sas-orchestration
: Exécuter la commandesas-orchestration deploy
avec les nouveaux assets et lekustomization.yaml
mis à jour.- Manuelle (
kubectl
): Appliquer le nouveausite.yaml
généré.
- Operator: Mettre à jour la CR
- Reconstruction du Manifeste: Mettre à jour le fichier
-
Finalisation (Après la Mise à Jour):
- Application des Commandes Post-Déploiement: Exécuter les commandes ou scripts spécifiés dans les notes de déploiement comme nécessaires après l'application de la mise à jour.
- Redémarrage des Services (si nécessaire): Certains composants, notamment CAS (si State Transfer n'est pas utilisé/disponible), peuvent nécessiter un redémarrage manuel pour charger la nouvelle version.
- Validation: Vérifier la réussite de la mise à jour, l'état des services et la fonctionnalité de la plateforme (voir Section 4.2, Étape 6).
- Restauration (si échec): En cas d'échec majeur, utiliser la sauvegarde effectuée en pré-requis pour restaurer l'environnement à son état précédent.
Intégration des Mises à Jour dans le Pipeline CI/CD
Le pipeline CI/CD décrit dans la Section 4 peut être étendu pour gérer ce processus de mise à jour :
- Déclenchement: Peut être manuel (après décision d'appliquer une mise à jour), programmé (pour suivre une cadence), ou potentiellement automatisé par la détection de nouveaux assets via l'API SAS Orders (si une telle fonctionnalité existe et est exposée).
- Étapes Pré-Déploiement: Le pipeline doit intégrer :
- Une étape de sauvegarde automatisée (si possible via les API de sauvegarde Viya ou des outils K8s/stockage).
- L'exécution de
viya4-orders-cli
pour télécharger les nouveaux assets. - Une étape critique (potentiellement manuelle ou semi-automatisée) pour la revue et l'application des "Deployment Notes". Cela pourrait impliquer de mettre le pipeline en pause pour une revue humaine, ou d'essayer d'analyser les notes pour des actions standardisées (ex: modification de Kustomization, exécution de scripts pré-déploiement). C'est un défi majeur pour une automatisation complète.
- Étape de Déploiement: Le pipeline utilise la méthode d'automatisation SAS choisie (Operator ou
sas-orchestration
sont préférables pour les mises à jour) en lui fournissant les nouveaux assets et la configuration Kustomize mise à jour. - Étapes Post-Déploiement: Le pipeline exécute les validations post-déploiement (tests de fumée, vérification des services) et les éventuels scripts post-mise à jour issus des notes de déploiement.
L'automatisation des mises à jour via CI/CD est intrinsèquement plus complexe que celle du déploiement initial. Elle doit gérer un état existant, intégrer des étapes potentiellement manuelles (lecture des notes), et accorder une attention particulière à la minimisation de l'indisponibilité perçue par les utilisateurs finaux.
Stratégies pour Réduire l'Indisponibilité (Downtime)
Minimiser l'interruption de service pendant les mises à jour est un objectif clé de l'automatisation. Plusieurs stratégies et fonctionnalités de SAS Viya 4 et Kubernetes y contribuent :
- Planification des Ressources Adéquates: Les mises à jour nécessitent souvent des ressources K8s temporaires supplémentaires (CPU, mémoire, stockage) car les anciennes et nouvelles versions des pods peuvent coexister brièvement (rolling updates, CAS state transfer). Le pipeline CI/CD ou l'opérateur doit vérifier la disponibilité de ces ressources avant de démarrer la mise à jour. L'utilisation de l'autoscaling sur les node pools concernés (notamment CAS et Compute) est recommandée pour gérer dynamiquement ces pics de demande.
- Rolling Updates Kubernetes: De nombreux services stateless de SAS Viya bénéficient de la stratégie de mise à jour "RollingUpdate" de Kubernetes. Kubernetes remplace progressivement les anciens pods par les nouveaux, en s'assurant qu'un nombre minimum de pods reste disponible, ce qui minimise voire élimine l'indisponibilité pour ces services spécifiques.
- CAS State Transfer: Fonctionnalité spécifique à CAS conçue pour réduire drastiquement son indisponibilité lors des mises à jour. Elle permet de préserver l'état (sessions, tables globales) et de le transférer aux nouvelles instances CAS pendant que les anciennes continuent de servir les requêtes en lecture seule.
- Utilisation de PostgreSQL Externe: L'utilisation d'une instance PostgreSQL gérée externe (ex: AWS RDS, Azure Database for PostgreSQL, Google Cloud SQL) est fortement recommandée. Contrairement à l'instance PostgreSQL interne (Crunchy Data) qui doit souvent être arrêtée et redémarrée lors des mises à jour de Viya, une base externe reste opérationnelle indépendamment. Cela réduit significativement l'indisponibilité des nombreux services Viya qui dépendent de la base de données pour leur fonctionnement. La gestion du cycle de vie (mises à jour, sauvegardes) de la base externe est alors découplée de celle de Viya, mais devient la responsabilité de l'administrateur de la base de données.
L'élément le plus difficile à intégrer dans une automatisation complète reste les "Deployment Notes". Leur contenu peut varier considérablement d'une version à l'autre et inclure des étapes manuelles ou des modifications de configuration imprévues. Un pipeline CI/CD robuste doit soit intégrer une étape de validation/approbation manuelle basée sur ces notes, soit développer des heuristiques pour tenter d'automatiser les actions les plus courantes, tout en prévoyant un mécanisme de fallback ou d'alerte si une action inconnue ou manuelle est détectée dans les notes.
Gestion des Composants Stateful lors des Mises à Jour
Les composants stateful de SAS Viya 4, principalement CAS et la base de données PostgreSQL (si interne), présentent les plus grands défis lors de l'automatisation des mises à jour en raison de la nécessité de préserver leur état (données en mémoire, données persistantes) et de minimiser les interruptions de service pour les utilisateurs et les processus qui en dépendent.
Défis des Composants Stateful
Contrairement aux services stateless qui peuvent être simplement remplacés par de nouvelles instances via des rolling updates, les composants stateful nécessitent des stratégies spécifiques :
- Persistance de l'État: Les données stockées (tables en mémoire pour CAS, données relationnelles pour PostgreSQL) doivent être préservées ou migrées vers la nouvelle version du composant.
- Continuité de Service: L'arrêt d'un composant stateful central comme CAS ou PostgreSQL peut rendre une grande partie de la plateforme Viya inutilisable. Minimiser cette interruption est crucial.
- Complexité de la Mise à Niveau: Les mises à niveau de versions majeures de ces composants (ex: PostgreSQL 12 à 16) peuvent impliquer des processus complexes et potentiellement longs.
Gestion de CAS (Cloud Analytic Services)
CAS est le cœur analytique de Viya, fonctionnant en mémoire. Une mise à jour logicielle de CAS implique le remplacement des pods CAS par de nouvelles versions. Sans mécanisme spécifique, cela entraînerait l'arrêt des serveurs CAS existants, la perte de toutes les données chargées en mémoire (tables globales, tables de session) et une interruption notable pour les utilisateurs effectuant des analyses.
-
Solution : CAS State Transfer:
- Pour pallier ce problème, SAS a introduit la fonctionnalité "CAS State Transfer". Son objectif est de préserver l'état essentiel de CAS (données des tables globales en mémoire, état des sessions, et autres artefacts pertinents) lors d'une mise à jour.
- Fonctionnement: Lorsque State Transfer est activé, pendant la mise à jour, les nouvelles instances de pods CAS démarrent et se préparent. Pendant ce temps, les anciennes instances continuent de fonctionner, permettant un transfert de l'état des anciennes vers les nouvelles instances. Par défaut, un accès en lecture seule aux tables globales est maintenu pendant cette phase de transfert, permettant aux requêtes de lecture de continuer à s'exécuter et minimisant ainsi la perturbation pour les utilisateurs finaux. Une fois le transfert terminé et les nouvelles instances prêtes, les anciennes instances sont arrêtées.
- Disponibilité: Il est crucial de noter que cette fonctionnalité n'est disponible que lors de l'utilisation des méthodes de déploiement SAS Deployment Operator ou
sas-orchestration
. Elle n'est pas supportée si la mise à jour est effectuée via des commandeskubectl apply
manuelles ou via le projet Ansibleviya4-deployment
. Cette limitation renforce l'argument en faveur de l'Operator ou desas-orchestration
pour la gestion du cycle de vie complet via CI/CD si la haute disponibilité de CAS est une priorité. - Prérequis: L'activation de State Transfer a un coût en ressources. Le cluster Kubernetes doit disposer de suffisamment de CPU, de mémoire et potentiellement de stockage pour supporter temporairement le double des ressources normalement consommées par CAS, car les anciennes et nouvelles instances coexistent pendant le transfert. Si un node pool dédié est utilisé pour CAS, il doit être configuré pour l'autoscaling afin de gérer ce pic de demande.
- Configuration: L'activation de CAS State Transfer est une personnalisation optionnelle réalisée via un overlay Kustomize (ex:
enable-cas-state-transfer.yaml
trouvé danssas-bases/examples/cas/configure
) qui doit être ajouté au fichierkustomization.yaml
principal.
-
Alternative : Redémarrage Automatisé (
cas-auto-restart.yaml
):- Si CAS State Transfer n'est pas utilisé (soit parce que la méthode de déploiement ne le supporte pas, soit parce qu'il n'est pas activé), les pods CAS doivent être redémarrés après l'application de la mise à jour logicielle pour charger la nouvelle version.
- SAS fournit un transformer Kustomize (
cas-auto-restart.yaml
) qui peut être ajouté aukustomization.yaml
pour automatiser ce redémarrage. - Cependant, ce redémarrage (automatisé ou manuel) entraîne une interruption de service et la perte des données en mémoire, nécessitant un rechargement des tables.
Gestion de PostgreSQL
SAS Viya 4 s'appuie sur une base de données PostgreSQL pour stocker des métadonnées critiques, les configurations et le contenu utilisateur (via le SAS Infrastructure Data Server). Deux options existent pour cette base de données :
- PostgreSQL Interne: Par défaut, SAS Viya déploie une instance interne de PostgreSQL basée sur la distribution Crunchy Data PostgreSQL for Kubernetes. SAS fournit les outils et la configuration pour cette instance.
- PostgreSQL Externe: L'utilisateur peut choisir de fournir et de gérer sa propre instance PostgreSQL externe au cluster Viya (ex: un service managé comme AWS RDS for PostgreSQL, Azure Database for PostgreSQL, Google Cloud SQL, ou une instance auto-gérée).
-
Problématique des Mises à Jour avec PostgreSQL Interne:
- Lors de certaines mises à jour de SAS Viya ou lors d'une mise à niveau de la version de Crunchy Data PostgreSQL elle-même, les pods PostgreSQL internes doivent être arrêtés (scaled down) et redémarrés.
- Cet arrêt provoque une interruption de service pour tous les composants SAS Viya qui dépendent de la base de données, ce qui peut être une part significative de la plateforme.
- De plus, la mise à niveau de la version majeure de PostgreSQL interne est un processus complexe et potentiellement long qui nécessite des étapes spécifiques : sauvegarde pgBackRest, vérification des checksums (qui peut ajouter des heures au processus si désactivée), exécution de scripts de mise à niveau, et traitement post-mise à niveau. Bien que l'Operator ou
sas-orchestration
automatisent une partie de ce processus , cela représente toujours une opération délicate et une source potentielle d'indisponibilité prolongée.
-
Recommandation Forte : Utiliser PostgreSQL Externe:
- Pour minimiser l'indisponibilité lors des mises à jour de SAS Viya, l'utilisation d'une instance PostgreSQL externe est fortement recommandée par SAS.
- Avec une base externe, le processus de mise à jour de SAS Viya n'impacte pas directement la base de données. Il n'est plus nécessaire d'arrêter et de redémarrer les pods PostgreSQL internes, ce qui réduit considérablement l'interruption de service globale.
- La responsabilité de la gestion (mises à jour, sauvegardes, haute disponibilité, tuning) de la base de données PostgreSQL est transférée à l'équipe gérant la base externe. Toute modification des prérequis système pour PostgreSQL externe doit être appliquée avant la mise à jour de Viya. La base externe peut également connaître ses propres pannes, indépendamment de Viya.
- La configuration de Viya pour utiliser une base externe se fait via des overlays Kustomize lors du déploiement initial.
En conclusion, la gestion automatisée des mises à jour pour les composants stateful de SAS Viya 4 exige une planification et une configuration attentives. L'utilisation combinée de CAS State Transfer (via Operator ou sas-orchestration
) et d'une base de données PostgreSQL externe constitue la stratégie la plus efficace pour minimiser les interruptions de service lors des mises à jour fréquentes de la plateforme dans un environnement CI/CD.
Considérations de Sécurité et Opérationnelles
L'automatisation du déploiement et des mises à jour de SAS Viya 4 via CI/CD et GitOps introduit des considérations spécifiques en matière de sécurité et d'opérations qui doivent être adressées pour garantir un système robuste et fiable.
Gestion des Secrets dans les Pipelines CI/CD
Les pipelines CI/CD manipulent de nombreuses informations sensibles (secrets) : identifiants API (SAS Orders API, Kubernetes API, Git, registres Docker), clés SSH, mots de passe de bases de données, certificats TLS, etc. Une gestion inadéquate de ces secrets peut entraîner des failles de sécurité majeures.
-
Bonnes Pratiques Générales:
- Ne Jamais Stocker en Clair: Les secrets ne doivent jamais être codés en dur dans les scripts du pipeline ou stockés en clair dans les dépôts Git. C'est une vulnérabilité majeure.
- Utiliser des Outils Dédiés: Employer des systèmes de gestion de secrets centralisés (Vaults) ou les fonctionnalités de gestion des secrets intégrées aux plateformes CI/CD (ex: GitHub Secrets, GitLab CI/CD Variables masquées).
- Chiffrement: Les secrets doivent être chiffrés au repos et en transit.
- Rotation Régulière: Mettre en place des politiques de rotation fréquente pour les secrets (clés API, mots de passe) afin de limiter la fenêtre d'exposition en cas de compromission. Les secrets dynamiques et à courte durée de vie sont préférables lorsque c'est possible.
- Moindre Privilège: Accorder aux identifiants utilisés par le pipeline (comptes de service, tokens) uniquement les permissions strictement nécessaires pour accomplir leurs tâches.
- Audit et Surveillance: Suivre et auditer l'accès et l'utilisation des secrets pour détecter toute activité suspecte.
- Masquage dans les Logs: Configurer les outils CI/CD pour masquer automatiquement les secrets dans les journaux d'exécution. Éviter de passer des secrets en arguments de ligne de commande.
- Formation: Sensibiliser les développeurs et opérateurs aux risques liés aux secrets et aux bonnes pratiques.
-
Options pour SAS Viya 4:
- Kubernetes Secrets: SAS Viya 4 utilise nativement les Secrets Kubernetes pour stocker certaines informations sensibles, comme les certificats générés en interne ou la licence. Ces secrets peuvent être créés et gérés via Kustomize (
secretGenerator
) dans le pipeline CI/CD. Cependant, les Secrets Kubernetes natifs sont stockés (souvent encodés en Base64, pas chiffrés fortement par défaut) dans etcd, la base de données du cluster, et leur sécurité dépend fortement du RBAC Kubernetes. Ils sont également statiques par nature. - Vaults Externes (HashiCorp Vault, Azure Key Vault, AWS Secrets Manager, GCP Secret Manager): Ces solutions offrent une gestion plus avancée et centralisée.
- Avantages: Sécurité renforcée (chiffrement fort, politiques d'accès fines), secrets dynamiques, rotation automatique, audit détaillé, découplage du cycle de vie des secrets de celui de Kubernetes.
- Intégration Viya 4: SAS Viya 4 supporte officiellement l'intégration avec Azure Key Vault pour le stockage externe d'identifiants depuis la version 2024.02. Le support pour d'autres vaults comme HashiCorp Vault ou AWS/GCP Secrets Manager n'est pas explicitement mentionné dans les documents fournis pour Viya 4, bien que Viya 3.4 ait utilisé un "SAS Secrets Manager" basé sur HashiCorp Vault. L'intégration avec d'autres vaults nécessiterait probablement l'utilisation d'outils d'injection de secrets Kubernetes comme le Vault Agent Injector, le Secrets Store CSI Driver, ou External Secrets Operator.
- Déploiement du Vault: Un débat existe sur le déploiement du Vault lui-même : externe au cluster Kubernetes (recommandé pour la résilience) ou interne au cluster (plus facile à gérer avec les outils K8s mais crée une dépendance cyclique potentielle).
- Ansible Vault: Spécifique à l'utilisation d'Ansible (ex: avec
viya4-deployment
). Permet de chiffrer les fichiers contenant des variables sensibles (identifiants cloud, clés SSH, etc.) utilisés par les playbooks Ansible. C'est une bonne pratique lors de l'utilisation de cet outil.
- Kubernetes Secrets: SAS Viya 4 utilise nativement les Secrets Kubernetes pour stocker certaines informations sensibles, comme les certificats générés en interne ou la licence. Ces secrets peuvent être créés et gérés via Kustomize (
-
Sécurisation des Assets de Déploiement SAS:
- Les assets téléchargés depuis My SAS (le
.tgz
contenantsas-bases
et le fichier de licence.jwt
) sont critiques. - Leur téléchargement automatisé via
viya4-orders-cli
nécessite des identifiants API SAS (Key/Secret). Ces identifiants doivent être stockés de manière sécurisée (variables d'environnement chiffrées dans le CI/CD, vault externe) et encodés correctement en Base64 sans caractères de fin de ligne. - Une fois téléchargés, ces assets doivent être stockés dans un emplacement sécurisé accessible par le pipeline (ex: stockage d'artefacts du système CI/CD, stockage objet chiffré) avec des contrôles d'accès stricts. Ils ne doivent pas être commités dans le dépôt Git.
- Les assets téléchargés depuis My SAS (le
Gestion des Licences dans les Pipelines CI/CD
La licence SAS Viya 4, fournie sous forme de fichier JWT , contrôle l'utilisation du logiciel et doit être appliquée lors du déploiement initial et renouvelée périodiquement. Son intégration dans un pipeline CI/CD nécessite une attention particulière.
- Obtention de la Licence:
- Le pipeline peut récupérer le fichier
.jwt
requis depuis My SAS en utilisant leviya4-orders-cli
avec la commandelicense
. Les identifiants API SAS nécessaires doivent être gérés de manière sécurisée (voir section 9.1). - Alternativement, le fichier peut être téléchargé manuellement et injecté de manière sécurisée dans le pipeline (ex: via une variable de fichier protégée dans GitLab CI/CD).
- Le pipeline peut récupérer le fichier
- Application de la Licence via CI/CD:
- Si méthode Operator utilisée: Le pipeline doit s'assurer que le nouveau fichier
.jwt
est accessible par l'Operator (ex: en le plaçant dans un volume persistant ou en le montant via un secret) et mettre à jour la CRSASDeployment
pour référencer ce nouveau fichier (le mécanisme exact de référencement peut varier selon la version et la configuration de l'Operator). Ensuite, le pipeline applique la CR mise à jour viakubectl apply
. - Si méthode
sas-orchestration
ou Manuelle utilisée: Le pipeline doit modifier le fichierkustomization.yaml
principal. Il doit localiser (ou ajouter si absent) le blocsecretGenerator
poursas-license
et mettre à jour la directivefiles
pour pointer vers le nouveau fichier.jwt
téléchargé. Après modification dukustomization.yaml
, le pipeline exécutesas-orchestration deploy
oukustomize build && kubectl apply
. - Point Important: Si un
secretGenerator
poursas-license
est défini danskustomization.yaml
, il aura priorité sur toute licence potentiellement incluse dans les assets de déploiement (.tgz
). Le pipeline doit donc gérer cette section dukustomization.yaml
de manière cohérente.
- Si méthode Operator utilisée: Le pipeline doit s'assurer que le nouveau fichier
Gestion des Comptes de Service et Permissions (RBAC)
L'automatisation implique que des systèmes (pipeline CI/CD, Argo CD, Operator SAS) agissent sur le cluster Kubernetes au nom des utilisateurs. La configuration correcte des permissions via RBAC (Role-Based Access Control) est fondamentale pour la sécurité.
- Principe du Moindre Privilège: SAS Viya 4 est conçu pour utiliser plusieurs comptes de service Kubernetes spécifiques (
ServiceAccount
), chacun avec un rôle (Role
ouClusterRole
) limité aux permissions strictement nécessaires pour son fonctionnement (ex:sas-cas-operator
,sas-rabbitmq-server
,sas-config-reconciler
). C'est une bonne pratique de sécurité. - Privilèges Élevés de l'Operator SAS: Le SAS Deployment Operator, bien qu'il puisse fonctionner en mode "namespace", requiert des permissions au niveau du cluster (
ClusterRoleBinding
lié à unClusterRole
souvent de typecluster-admin
ou équivalent) car il doit pouvoir créer ou gérer des ressources cluster-wide (comme les CRD, potentiellement desPodTemplates
ou d'autres) nécessaires au déploiement de Viya. Chaque instance de l'Operator doit avoir unClusterRoleBinding
avec un nom unique. La sécurisation du compte de service utilisé par l'Operator est donc primordiale. - Permissions pour Argo CD / Agent GitOps: Si Argo CD est utilisé pour gérer la CR
SASDeployment
(avec l'Operator), le compte de service d'Argo CD (ex:openshift-gitops-argocd-application-controller
dans OpenShift GitOps ) doit avoir les permissions nécessaires (RoleBinding
ouClusterRoleBinding
selon la portée) pour créer, lire, mettre à jour et supprimer des objetsSASDeployment
dans le namespace cible. La configuration RBAC fine d'Argo CD elle-même est également importante pour contrôler qui peut définir et synchroniser des applications. - Permissions pour le Pipeline CI/CD: Le compte de service ou les identifiants utilisés par le pipeline CI/CD pour interagir avec le cluster Kubernetes (via
kubectl
ousas-orchestration
) doivent également avoir les permissions appropriées. Sisas-orchestration
est utilisé, cela implique souvent des privilèges équivalents à cluster-admin pendant l'exécution. L'utilisation de mécanismes comme Workload Identity Federation (pour les clouds publics) est recommandée pour éviter de manipuler des clés de compte de service K8s ou cloud à longue durée de vie.
Politiques Réseau
Bien que les snippets ne détaillent pas spécifiquement la configuration des NetworkPolicy
Kubernetes pour SAS Viya 4, la sécurité réseau est une considération importante :
- Chiffrement (TLS): Comme vu précédemment, sécuriser les communications internes et externes avec TLS est essentiel.
- Contrôle d'Ingress: La configuration de l'Ingress Controller (Nginx, HAProxy/Routes) définit quels services sont exposés et comment. Des restrictions d'accès (par IP, authentification) peuvent être appliquées à ce niveau.
- Flux du Pipeline CI/CD: Le pipeline lui-même a besoin d'accès réseau :
- Au dépôt Git.
- À l'API Kubernetes du cluster cible.
- Potentiellement à l'API SAS Orders (
api.sas.com
). - Aux registres d'images Docker (publics, SAS, ou miroir interne).
- Aux éventuels Vaults externes. Les politiques réseau du cluster et de l'environnement d'exécution du pipeline doivent autoriser ces flux de manière sécurisée. L'utilisation de VPC Service Controls ou de règles de pare-feu spécifiques peut restreindre l'accès à l'API K8s depuis les agents CI/CD.
Monitoring des Pipelines CI/CD
Le pipeline CI/CD qui gère SAS Viya 4 est lui-même un système critique qui doit être surveillé pour garantir sa performance et sa fiabilité.
- Importance: Le monitoring permet de détecter les goulots d'étranglement (ex: builds lents, tests longs), d'identifier les étapes fréquemment en échec, de mesurer l'efficacité du processus d'automatisation et d'améliorer la productivité des équipes.
- Métriques Clés à Suivre: Plusieurs métriques sont pertinentes :
- Taux de Succès des Builds/Déploiements: Pourcentage de passages réussis du pipeline. Un taux élevé est souhaitable, mais doit être corrélé avec l'efficacité des tests.
- Durée des Builds/Déploiements: Temps nécessaire pour compléter les différentes étapes. Aide à identifier les lenteurs.
- Fréquence des Déploiements: À quelle fréquence les changements (configurations, mises à jour Viya) sont-ils déployés en production? Indicateur clé de l'agilité (métrique DORA).
- Délai de Livraison (Lead Time for Changes): Temps écoulé entre un commit dans Git et son déploiement réussi en production. Autre métrique DORA essentielle.
- Taux d'Échec des Changements (Change Failure Rate): Pourcentage de déploiements entraînant une dégradation ou nécessitant un rollback (métrique DORA).
- Temps Moyen de Récupération (Mean Time To Recover - MTTR): Temps nécessaire pour restaurer le service après un échec de déploiement (métrique DORA).
- Taux de Rollback: Fréquence à laquelle les déploiements doivent être annulés.
- Outils de Monitoring:
- Les plateformes CI/CD (GitLab, Jenkins, GitHub Actions) fournissent souvent des tableaux de bord et des métriques intégrés.
- Des outils d'observabilité généraux comme Prometheus, Grafana, InfluxDB, Datadog, Dynatrace peuvent être utilisés pour collecter et visualiser les métriques du pipeline.
- SAS fournit sa propre solution de monitoring pour l'environnement Viya lui-même (SAS Viya Monitoring for Kubernetes ), qui peut fournir des données contextuelles sur l'état de Viya après un déploiement. SAS supporte également l'intégration avec Azure Monitor.
Le suivi de ces métriques, en particulier celles alignées sur les standards DORA, permet d'évaluer objectivement la performance du processus d'automatisation de SAS Viya 4 et d'identifier les axes d'amélioration continue.
Recommandations et Conclusion
L'automatisation du déploiement et des mises à jour de SAS Viya 4 est non seulement bénéfique mais devient une nécessité pour gérer efficacement la plateforme dans les environnements Kubernetes modernes. En s'appuyant sur les principes CI/CD et GitOps, et en utilisant une combinaison judicieuse des outils fournis par SAS et des standards de l'écosystème cloud-native, les organisations peuvent atteindre un haut niveau de fiabilité, d'agilité et de sécurité.
Synthèse des Stratégies Clés
Plusieurs stratégies interdépendantes émergent comme fondamentales pour une automatisation réussie :
- Infrastructure as Code (IaC): Utiliser Terraform (via les projets
viya4-iac-*
de SAS ou des scripts personnalisés) pour provisionner et gérer de manière reproductible l'infrastructure Kubernetes sous-jacente et les prérequis (stockage, ingress, certificats). - Configuration Déclarative avec Kustomize: Adopter Kustomize comme standard pour gérer la configuration spécifique de SAS Viya 4, en utilisant la structure
sas-bases
/site-config
pour superposer les personnalisations environnementales sur la base fournie par SAS. - Orchestration du Déploiement/Mise à Jour via Outils SAS: Choisir entre le SAS Deployment Operator (approche recommandée pour GitOps natif via CRD) et la commande
sas-orchestration
(alternative externe scriptable) pour automatiser l'application des configurations Kustomize et la gestion du cycle de vie Viya. Le projet Ansibleviya4-deployment
est excellent pour le déploiement initial mais limité pour les mises à jour. - Intégration CI/CD: Mettre en place un pipeline CI/CD (ex: GitLab, Jenkins, GitHub Actions, Azure DevOps) pour orchestrer l'ensemble du processus : récupération des assets, gestion de la configuration Kustomize, déclenchement de l'outil de déploiement SAS, et validation post-déploiement.
- Approche GitOps avec Argo CD: Utiliser Argo CD (ou OpenShift GitOps) en conjonction avec le SAS Deployment Operator pour implémenter un modèle GitOps complet, où Git est la source de vérité et Argo CD assure la réconciliation continue entre Git et l'état du cluster via la CR
SASDeployment
. - Gestion Active des Composants Stateful: Mettre en œuvre des stratégies spécifiques pour minimiser l'indisponibilité lors des mises à jour de CAS (activer CAS State Transfer si possible) et de PostgreSQL (privilégier fortement une instance externe).
Recommandations Pratiques
Basé sur l'analyse des informations disponibles, voici quelques recommandations pratiques :
- Adopter une Approche GitOps: Privilégier une approche GitOps pour la gestion de SAS Viya 4. Le couple SAS Deployment Operator + Argo CD (ou OpenShift GitOps) apparaît comme la solution la plus intégrée et la plus alignée avec les meilleures pratiques actuelles pour gérer le cycle de vie complet (déploiement et mises à jour) de manière déclarative.
- Maîtriser Kustomize: Investir dans la compréhension et la maîtrise de Kustomize est essentiel. Suivre les meilleures pratiques pour structurer les overlays (
site-config
), utiliser les générateurs, et gérer les dépendances avec la base SAS (sas-bases
). - Automatiser l'Infrastructure avec IaC: Utiliser les projets
viya4-iac-*
de SAS comme point de départ pour automatiser le provisionnement de l'infrastructure Kubernetes via Terraform. Intégrer cette étape dans le pipeline CI/CD global. - Prioriser PostgreSQL Externe: Pour réduire significativement les interruptions lors des mises à jour de SAS Viya, opter pour une instance PostgreSQL externe gérée.
- Activer CAS State Transfer: Si la haute disponibilité de CAS pendant les mises à jour est critique, utiliser l'Operator ou
sas-orchestration
et activer CAS State Transfer via Kustomize, en planifiant les ressources supplémentaires nécessaires. - Sécuriser Rigoureusement les Secrets et Assets: Mettre en place une stratégie de gestion des secrets robuste, en envisageant des solutions comme Azure Key Vault (supporté nativement ) ou HashiCorp Vault (via intégration K8s). Sécuriser les identifiants API SAS et les assets de déploiement téléchargés via
viya4-orders-cli
. Utiliser Ansible Vault pour les configurations Ansible. - Automatiser la Gestion des Licences: Intégrer
viya4-orders-cli
dans le pipeline pour récupérer les licences et automatiser leur application via la modification dukustomization.yaml
ou de la CRSASDeployment