Déployez GitOps avec le CD Argo et OCI Kubernetes Engine

Cet article décrit l'architecture de base sous-jacente au déploiement de GitOps avec le CD Argo et Oracle Cloud Infrastructure Kubernetes Engine.

GitOps est une variante de l'intégration continue et du déploiement continu qui utilise les référentiels Git comme source unique d'informations fiables pour fournir l'infrastructure sous forme de code. Il préconise de placer la totalité de l'application, à partir du code source et de la configuration de l'application, de manière déclarative dans les référentiels Git. Cela fournit un moyen cohérent de déployer les modifications apportées à la configuration d'une application et fournit un contrôle des versions en utilisant des workflows Git bien connus, tels que les demandes d'extraction et de fusion.

L'utilisation des principes GitOps garantit :
  • Workflow standard pour le développement d'applications.
  • Sécurité accrue pour la configuration initiale des exigences des applications.
  • Amélioration de la fiabilité grâce à la visibilité et au contrôle des versions grâce à Git.
  • Cohérence entre tous les clusters, tous les clouds et tous les environnements on-premise.
Argo CD est un outil déclaratif de livraison continue spécialement conçu pour Kubernetes. Avec le CD Argo, les configurations Kubernetes sont créées de manière uniforme, grâce à des modifications apportées aux référentiels Github. Cela permet aux référentiels Git d'être la source unique d'informations fiables pour toutes les configurations d'application fournies dans un cluster Kubernetes. Le CD Argo utilise un modèle d'extraction, qui vérifie les modifications dans les référentiels Git, quelle que soit la source de la modification. Ces modifications peuvent provenir d'un pipeline d'intégration continue ou être une configuration manuelle d'un développeur ou d'un administrateur. Cela permet de séparer le pipeline CI/CD. Étant donné que l'intégration continue est destinée à la création de code, elle convient mieux aux développeurs, tandis que le CD est la préoccupation de l'équipe des opérations. La séparation entre les deux permet à chaque équipe d'apporter des modifications au pipeline CI/CD, indépendamment l'une de l'autre.

Il est recommandé d'avoir des référentiels Git distincts pour le code source et la configuration de l'application, car les modifications de configuration ne nécessitent généralement pas de modifications du code source de l'application. Le fait de disposer de référentiels différents vous permet de modifier la configuration de l'application sans déclencher de build d'intégration continue.

Le CD Argo prend en charge les configurations Kubernetes dans les formats suivants :
  • Manifestes Kubernetes
  • Graphiques Helm
  • Kustomiser les manifestes.
Pour les applications gérées par Argo CD, la configuration de l'état actif de l'application est surveillée en permanence. Il est comparé à l'état souhaité spécifié dans le référentiel Git. Si l'état actif s'écarte de l'état souhaité, le CD Argo identifie les applications en tant que OutOfSync, puis extrait la configuration du référentiel Git et applique les modifications.

Architecture

Cette architecture présente un cluster OCI Kubernetes Engine avec l'outil de CD Argo déployé dans son propre espace de noms.

Vous pouvez accéder à l'application Argo CD via son interface Web ou l'interface de ligne de commande d'Argo CD. La connectivité à l'outil CD Argo est fournie par un service d'équilibreur de charge déployé dans le cluster OCI Kubernetes Engine. Une fois le CD Argo déployé, vous le configurez pour une synchronisation avec les référentiels Git hébergés en interne ou en externe vers Oracle Cloud Infrastructure, à condition que le cluster OCI Kubernetes Engine dispose d'une connectivité IP sur les ports requis et des informations d'identification pour les référentiels Git. Une fois le CD Argo synchronisé avec les référentiels, toutes les mises à jour de la configuration d'application effectuées dans le référentiel sont appliquées au cluster OCI Kubernetes Engine. Si des modifications sont apportées à l'application en dehors du référentiel Git, Argo CD considérera l'application désynchronisée et rétablira les modifications afin qu'elles soient conformes à l'état souhaité du référentiel Git.

Le schéma suivant illustre cette architecture de référence.

Description de argocd.png
Description de l'illustration argocd.png

argocd-oracle.zip

Cette architecture comporte les composants suivants :
  • Tenancy

    Oracle Autonomous Transaction Processing est un service de base de données doté de plusieurs fonctions : pilotage, sécurité et réparation automatiques, optimisé pour les charges de travail de traitement des transactions. Vous n'avez pas à configurer ni à gérer le matériel, ni à installer de logiciel. Oracle Cloud Infrastructure gère la création, ainsi que la sauvegarde, la mise à niveau et le réglage de la base de données.

  • Région

    Une région Oracle Cloud Infrastructure est une zone géographique précise, incluant un ou plusieurs centres de données, appelés domaines de disponibilité. Les régions sont indépendantes les unes des autres et de grandes distances peuvent les séparer (entre pays, voire continents).

  • Compartiment

    Les compartiments sont des partitions logiques inter-région au sein d'une location Oracle Cloud Infrastructure. Utilisez des compartiments pour organiser les ressources dans Oracle Cloud, en contrôler l'accès et définir des quotas d'utilisation. Pour contrôler l'accès aux ressources d'un compartiment donné, vous définissez des stratégies qui indiquent qui peut accéder aux ressources et les actions réalisables.

  • Domaines de disponibilité

    Les domaines de disponibilité sont des centres de données autonomes indépendants au sein d'une région. Les ressources physiques de chaque domaine de disponibilité sont isolées de celles des autres, ce qui garantit la tolérance aux pannes. Les domaines de disponibilité ne partagent ni infrastructure (par exemple, alimentation, système de refroidissement), ni réseau de domaine de disponibilité interne. Ainsi, il est peu probable qu'une panne sur un domaine de disponibilité affecte les autres domaines de disponibilité de la région.

  • Domaines de pannes

    Un domaine de pannes est un regroupement de matériel et d'infrastructures au sein d'un domaine de disponibilité. Chaque domaine de disponibilité comporte trois domaines de pannes avec du matériel et une alimentation indépendants. Lorsque vous répartissez les ressources entre plusieurs domaines de pannes, vos applications peuvent tolérer les pannes physiques du serveur, la maintenance du système et les pannes d'alimentation au sein d'un domaine de pannes.

  • Réseau cloud virtuel (VCN) et sous-réseaux

    Un VCN est un réseau personnalisable défini par logiciel que vous configurez dans une région Oracle Cloud Infrastructure. Comme les réseaux de centre de données traditionnels, les réseaux cloud virtuels vous donnent un contrôle total sur l'environnement réseau. Un réseau cloud virtuel peut comporter plusieurs blocs CIDR qui ne se chevauchent pas et que vous pouvez modifier après l'avoir créé. Vous pouvez segmenter un réseau cloud virtuel en plusieurs sous-réseaux ciblant une région ou un domaine de disponibilité. Chaque sous-réseau est composé d'une plage contiguë d'adresses qui ne chevauchent pas celles des autres sous-réseaux du réseau cloud virtuel. Vous pouvez modifier la taille d'un sous-réseau après sa création. Un sous-réseau peut être public ou privé.

  • Equilibreur de charge

    Le service Oracle Cloud Infrastructure Load Balancing fournit une répartition de trafic automatique à partir d'un point d'entrée unique vers plusieurs serveurs dans le back-end. L'équilibreur de charge donne accès à différentes applications.

  • référentiel de code

    Dans le service DevOps, vous pouvez créer vos propres référentiels de code privés ou vous connecter à des référentiels de code externes tels que GitHub, GitLab et Bitbucket Cloud.

  • Liste de sécurité

    Pour chaque sous-réseau, vous pouvez créer des règles de sécurité qui indiquent la source, la destination et le type de trafic qui doivent être autorisés à entrer et à sortir du sous-réseau.

  • passerelle NAT

    La passerelle NAT permet aux ressources privées d'un VCN d'accéder aux hôtes sur Internet, sans les exposer aux connexions Internet entrantes.

  • Passerelle de service

    La passerelle de service fournit un accès à partir d'un VCN à d'autres services, tels qu'Oracle Cloud Infrastructure Object Storage. Le trafic provenant du réseau cloud virtuel et à destination du service Oracle emprunte la topologie de réseau Oracle et ne passe jamais par Internet.

  • Cloud Guard

    Vous pouvez utiliser Oracle Cloud Guard pour surveiller et maintenir la sécurité de vos ressources dans Oracle Cloud Infrastructure. Cloud Guard utilise des recettes de détecteur que vous pouvez définir pour examiner les faiblesses de sécurité de vos ressources et pour surveiller les opérateurs et les utilisateurs afin de détecter les activités à risque. Lorsqu'une erreur de configuration ou une activité non sécurisée est détectée, Cloud Guard recommande des actions correctives et vous aide à effectuer ces actions, en fonction des recettes de répondeur que vous pouvez définir.

  • Zone de sécurité

    Les zones de sécurité garantissent les meilleures pratiques de sécurité d'Oracle dès le départ en appliquant des stratégies telles que le cryptage des données et la prévention de l'accès public aux réseaux pour l'ensemble d'un compartiment. Une zone de sécurité est associée à un compartiment du même nom et inclut des stratégies de zone de sécurité ou une "recette" qui s'applique au compartiment et à ses sous-compartiments. Vous ne pouvez pas ajouter ou déplacer un compartiment standard vers un compartiment de zone de sécurité.

  • Object Storage

    Le stockage d'objets permet d'accéder rapidement à de grandes quantités de données, structurées ou non, de tout type de contenu, y compris des sauvegardes de base de données, des données analytiques et du contenu riche tel que des images et des vidéos. Vous pouvez stocker les données, puis les extraire directement à partir d'Internet ou de la plate-forme cloud, et ce, en toute sécurité. Vous pouvez redimensionner le stockage de manière transparente sans dégradation des performances ni de la fiabilité des services. Utilisez le stockage standard pour le stockage "à chaud" auquel vous devez accéder rapidement, immédiatement et fréquemment. Utilisez le stockage d'archive pour le stockage "à froid" que vous conservez pendant de longues périodes et auquel vous accédez rarement.

  • FastConnect

    Oracle Cloud Infrastructure FastConnect permet de créer facilement une connexion privée dédiée entre le centre de données et Oracle Cloud Infrastructure. FastConnect offre des options de bande passante plus élevée et une expérience de réseau plus fiable par rapport aux connexions Internet.

  • Passerelle d'appairage local

    Une passerelle d'appairage local vous permet d'appairer un VCN avec un autre VCN dans la même région. L'appairage signifie que les réseaux cloud virtuels communiquent à l'aide d'adresses IP privées, sans que le trafic ne passe par Internet ou ne soit routé via votre réseau sur site.

  • Base de données autonome

    Les bases de données autonomes Oracle Cloud Infrastructure sont des environnements de base de données entièrement gérés et préconfigurés que vous pouvez utiliser pour les charges de travail de traitement des transactions et d'entreposage de données. Vous n'avez pas à configurer ni à gérer le matériel, ni à installer de logiciel. Oracle Cloud Infrastructure gère la création, ainsi que la sauvegarde, la mise à niveau et le réglage de la base de données.

  • Autonomous Data Warehouse

    Oracle Autonomous Data Warehouse est un service de base de données à pilotage, sécurité et réparation automatiques optimisé pour les charges de travail d'entreposage de données. Vous n'avez pas à configurer ni à gérer le matériel, ni à installer de logiciel. Oracle Cloud Infrastructure gère la création, ainsi que la sauvegarde, la mise à niveau et le réglage de la base de données.

  • Autonomous Transaction Processing

    Oracle Autonomous Transaction Processing est un service de base de données doté de plusieurs fonctions : pilotage, sécurité et réparation automatiques, optimisé pour les charges de travail de traitement des transactions. Vous n'avez pas à configurer ni à gérer le matériel, ni à installer de logiciel. Oracle Cloud Infrastructure gère la création, ainsi que la sauvegarde, la mise à niveau et le réglage de la base de données.

  • Système de base de données Exadata

    Exadata Cloud Service vous permet de tirer parti de la puissance d'Exadata dans le cloud. Vous pouvez provisionner des systèmes X8M flexibles qui vous permettent d'ajouter des serveurs de stockage et des serveurs de calcul de base de données aux systèmes en fonction de l'évolution de vos besoins. Les systèmes X8M offrent des fonctions de réseau RoCE (RDMA sur Ethernet convergé) pour assurer une bande passante élevée et une faible latence, des modules de mémoire persistante (PMEM) et le logiciel Exadata intelligent. Vous pouvez provisionner des systèmes X8M à l'aide d'une forme équivalente à un système X8 en quart de rack, puis ajouter des serveurs de base de données et de stockage à tout moment après le provisionnement.

Recommandations

Utilisez les recommandations suivantes comme point de départ lors du déploiement de GitOps avec le CD Argo et OCI Kubernetes Engine. Vos exigences spécifiques peuvent différer de l'architecture décrite ici.
  • VCN

    Lorsque vous créez un VCN, déterminez le nombre de blocs CIDR requis et la taille de chaque bloc en fonction du nombre de ressources que vous prévoyez d'attacher à des sous-réseaux dans le VCN. Utilisez des blocs CIDR qui se trouvent dans l'espace d'adresse IP privée standard.

    Sélectionnez les blocs CIDR qui ne chevauchent aucun autre réseau (dans Oracle Cloud Infrastructure, votre centre de données on-premise ou un autre fournisseur cloud) auquel vous avez l'intention de configurer des connexions privées.

    Après avoir créé un VCN, vous pouvez modifier, ajouter et supprimer ses blocs CIDR.

    Lorsque vous concevez les sous-réseaux, tenez compte du flux de trafic et des exigences de sécurité. Attachez toutes les ressources d'un niveau ou d'un rôle spécifique au même sous-réseau, qui peut servir de limite de sécurité.

    Utiliser des sous-réseaux régionaux.

  • Sécurité

    Utilisez Oracle Cloud Guard pour surveiller et maintenir la sécurité de vos ressources dans Oracle Cloud Infrastructure de manière proactive. Cloud Guard utilise des recettes de détecteur que vous pouvez définir pour examiner les faiblesses de sécurité de vos ressources et pour surveiller les opérateurs et les utilisateurs afin de détecter les activités à risque. Lorsqu'une erreur de configuration ou une activité non sécurisée est détectée, Cloud Guard recommande des actions correctives et vous aide à effectuer ces actions, en fonction des recettes de répondeur que vous pouvez définir.

    Pour les ressources nécessitant une sécurité maximale, Oracle vous recommande d'utiliser des zones de sécurité. Une zone de sécurité est un compartiment associé à une recette de stratégies de sécurité définie par Oracle qui repose sur les meilleures pratiques. Par exemple, les ressources d'une zone de sécurité ne doivent pas être accessibles à partir du réseau Internet public et doivent être cryptées à l'aide de clés gérées par le client. Lorsque vous créez et mettez à jour des ressources dans une zone de sécurité, Oracle Cloud Infrastructure valide les opérations par rapport aux stratégies de la recette de zone de sécurité et refuse les opérations qui enfreignent l'une des stratégies.

  • Cloud Guard

    Cloner et personnaliser les recettes par défaut fournies par Oracle afin de créer des recettes de détecteur et de répondeur personnalisées. Ces recettes vous permettent de spécifier le type de violation de sécurité qui génère un avertissement et les actions autorisées à y être exécutées. Par exemple, vous pouvez détecter les buckets Object Storage dont la visibilité est définie sur Public.

    Appliquez Cloud Guard au niveau de la location pour couvrir la portée la plus large et réduire la charge administrative liée à la maintenance de plusieurs configurations.

    Vous pouvez également utiliser la fonction Liste gérée pour appliquer certaines configurations aux détecteurs.

  • Zones de sécurité

    Cloner et personnaliser les recettes par défaut fournies par Oracle afin de créer des recettes de détecteur et de répondeur personnalisées. Ces recettes vous permettent de spécifier le type de violation de sécurité qui génère un avertissement et les actions autorisées à y être exécutées. Par exemple, vous pouvez détecter les buckets Object Storage dont la visibilité est définie sur Public.

    Appliquez Cloud Guard au niveau de la location pour couvrir la portée la plus large et réduire la charge administrative liée à la maintenance de plusieurs configurations. Vous pouvez également utiliser la fonction Liste gérée pour appliquer certaines configurations aux détecteurs.

  • Groupes de sécurité réseau

    Vous pouvez utiliser des groupes de sécurité réseau pour définir un ensemble de règles entrantes et sortantes qui s'appliquent à des cartes d'interface réseau virtuelles spécifiques. Nous vous recommandons d'utiliser des groupes de sécurité réseau plutôt que des listes de sécurité, car ces derniers vous permettent de séparer l'architecture de sous-réseau du VCN des exigences de sécurité de votre application.

    Vous pouvez utiliser des groupes de sécurité réseau pour définir un ensemble de règles entrantes et sortantes qui s'appliquent à des cartes d'interface réseau virtuelles spécifiques. Nous vous recommandons d'utiliser des groupes de sécurité réseau plutôt que des listes de sécurité, car ces derniers vous permettent de séparer l'architecture de sous-réseau du VCN des exigences de sécurité de votre application.

  • Bande passante d'équilibreur de charge

    Lors de la création de l'équilibreur de charge, vous pouvez sélectionner une forme prédéfinie qui fournit une bande passante fixe ou indiquer une forme personnalisée (flexible) dans laquelle vous définissez une plage de bande passante et laisser le service redimensionner automatiquement la bande passante en fonction des modèles de trafic. Dans l'une ou l'autre approche, vous pouvez modifier la forme à tout moment après avoir créé l'équilibreur de charge.

Déployez

Le code Terraform pour cette architecture de référence est disponible en tant qu'exemple de pile dans Oracle Cloud Infrastructure Resource Manager. Cet exemple de pile Terraform déploie un environnement d'application OCI Data Flow, ainsi que des stratégies IAM et des buckets OCI Object Storage (et non un stockage tiers). Par défaut, une application de démonstration Python Spark sera également déployée. Vous pouvez également télécharger le code à partir de GitHub et le personnaliser en fonction de vos besoins spécifiques.

  • Déployez à l'aide de l'exemple de pile dans Oracle Cloud Infrastructure Resource Manager :
    1. Cliquez sur Déploiement vers Oracle Cloud.

      Si vous n'êtes pas déjà connecté, entrez la location et les informations d'identification utilisateur.

    2. Sélectionnez la région de déploiement de la pile.
    3. Suivez les invites à l'écran et les instructions pour créer la pile.
    4. Après avoir créé la pile, cliquez sur Actions Terraform, puis sélectionnez Planifier.
    5. Attendez que le travail soit terminé et vérifiez le plan.

      Pour apporter des modifications, revenez à la page Détails de la pile, cliquez sur Modifier la pile et apportez les modifications requises. Exécutez ensuite à nouveau l'action Planifier.

    6. Si aucune autre modification n'est nécessaire, revenez à la page Détails de la pile, cliquez sur Actions Terraform et sélectionnez Appliquer.
  • Déployez à l'aide du code Terraform dans GitHub :
    1. Accédez à GitHub.
    2. Clonez ou téléchargez le référentiel sur votre ordinateur local.
    3. Suivez les instructions du document README.

Outre le code Terraform fourni sur GitHub, les fragments de code ci-dessous illustrent la connexion à Amazon Web Services S3 et l'interrogation des données.

  • Pour vous connecter aux données de S3 et les interroger, vous devez inclure les packages hadoop-aws.jar et aws-java-sdk.jar. Vous pouvez référencer ces packages dans le fichier pom.xml comme suit :
    <dependency>
    	<groupId>org.apache.hadoop</groupId>
    	<artifactId>hadoop-aws</artifactId>
    	<version>2.9.2</version>
    	<exclusions>
    	<exclusion>
    		<groupId>org.apache.hadoop</groupId>
    		<artifactId>hadoop-common</artifactId>
    	</exclusion>
    	</exclusions>
    </dependency>
    <dependency>
    	<groupId>com.amazonaws</groupId>
    	<artifactId>aws-java-sdk</artifactId>
    	<version>1.7.4</version>
    </dependency>
  • Utilisez un code similaire à ce qui suit pour vous connecter à Amazon Web Services S3. Vous devez fournir la clé d'accès et la clé secrète. Dans le fragment de code ci-dessous, ces valeurs sont représentées par les variables ACCESS et SECRET respectivement :
    SparkSession spark = SparkSession.builder().master("local")
    	.config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
    	.config("spark.hadoop.fs.s3a.access.key", ACCESS)
    	.config("spark.hadoop.fs.s3a.secret.key", SECRET)
    	.config("fs.s3a.connection.ssl.enabled", "false")
    	.getOrCreate();
  • Utilisez un code semblable au suivant pour interroger les données à l'aide de l'emplacement S3 et du nom de table que vous indiquez.
    Dataset<Row> ds = sqlContext.read().format("csv").option("header","true").load("<S3 Location>");
    ds.createOrReplaceTempView("<Table Name>");
    Dataset<Row> result_ds = sqlContext.sql("<SQL Query Using <Table Name>>");

En savoir plus

En savoir plus sur Argo CD et sur la façon de l'utiliser pour déployer GitOps avec OCI Kubernetes Engine.

Consultez les ressources supplémentaires suivantes :

Accusés de réception

Auteur : Chiping Hwang