Adapter et optimiser Jenkins sur Kubernetes Engine d'Oracle Cloud Infrastructure

Jenkins est un système d'intégration et de déploiement en continu encore utilisé par les développeurs pour vérifier, créer et déployer automatiquement leur code, afin qu'ils puissent se concentrer uniquement sur la livraison de nouvelles fonctions.

Avec la sortie de Kubernetes, aucune architecture distribuée et partagée n'est progressivement devenue la norme, à tel point que tous les systèmes d'intégration et de développement en continu les plus récents sont déployés sur Kubernetes. Quant à Jenkins, l'architecture contrôleur/agent peut ne pas être suffisamment évolutive pour les grandes organisations et les équipes de développement, mais grâce à l'effort de la communauté, il est possible de conteneuriser Jenkins et de le déployer de manière native en nuage.

Vous pouvez héberger Jenkins sur Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine ou OKE) pour centraliser l'automatisation des versions et l'adapter à la croissance de vos projets logiciels. En mettant en œuvre un Jenkins évolutif sur OKE, les développeurs pourront développer de nouveaux services avec agilité et ajuster facilement leurs pipelines d'IC/DC.

Architecture

Cette architecture de référence de haut niveau présente un exemple de plusieurs déploiements Jenkins sur OKE. En déployant Jenkins sur OKE as a Service, vous pouvez l'adapter au besoin.

Chaque pod de contrôleur Jenkins est associé à un volume persistant afin de conserver l'historique du pipeline et les plugiciels supplémentaires installés par les équipes. Les agents Jenkins sont créés chaque fois qu'une tâche de pipeline est déclenchée et détruite automatiquement à la fin.

Chaque instance Jenkins peut être exposée individuellement au moyen d'un équilibreur de charge ou à l'aide d'un trafic entrant Kubernetes.

Le diagramme suivant illustre cette architecture de référence.



oci-jenkins-oke-arch-oracle.zip

L'architecture comprend les composants suivants :

  • Région

    Une région Oracle Cloud Infrastructure est une zone géographique localisée qui contient 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 (dans différents pays ou continents).

  • Domaines de disponibilité

    Les domaines de disponibilité sont des centres de données indépendants et autonomes dans une région. Les ressources physiques de chaque domaine de disponibilité sont isolées des ressources des autres domaines de disponibilité, ce qui garantit la tolérance aux pannes. Les domaines de disponibilité ne partagent pas les éléments d'infrastructure (alimentation ou refroidissement, par exemple) ni le réseau de domaines de disponibilité interne. Par conséquent, une défaillance d'un domaine de disponibilité ne devrait pas affecter les autres domaines de disponibilité de la région.

  • Réseau en nuage virtuel (VCN) et sous-réseau

    Un VCN est un réseau défini par logiciel personnalisable que vous avez configuré dans une région Oracle Cloud Infrastructure. Comme les réseaux en nuage virtuels traditionnels, ils vous offrent un contrôle sur votre environnement de réseau. Un VCN peut disposer de plusieurs blocs CIDR sans chevauchement que vous pouvez modifier après avoir créé le VCN. Vous pouvez segmenter un VCN en sous-réseaux, dont la portée peut concerner une région ou un domaine de disponibilité. Un sous-réseau est constitué d'un intervalle contigu d'adresses qui ne chevauchent pas les autres sous-réseaux dans le réseau en nuage 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é.

  • Équilibreur de charge

    Le service Oracle Cloud Infrastructure Load Balancing permet une répartition automatisée du trafic à partir d'un point d'entrée unique vers plusieurs serveurs dorsaux.

  • Liste de sécurité

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

  • Moteur Kubernetes

    Oracle Cloud Infrastructure Kubernetes Engine pour (Moteur Kubernetes pour OCI ou OKE) est un service entièrement géré, évolutif et hautement disponible que vous pouvez utiliser pour déployer vos applications conteneurisées dans le nuage. Vous indiquez les ressources de calcul dont vos applications ont besoin et Kubernetes Engine les provisionne sur Oracle Cloud Infrastructure dans une location existante. OKE utilise Kubernetes pour automatiser le déploiement, l'ajustement et la gestion des applications conteneurisées sur les grappes d'hôtes.

Recommandations

Utilisez les recommandations suivantes comme point de départ. Vos exigences 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 aux sous-réseaux du VCN. Utilisez des blocs CIDR qui se trouvent dans l'espace d'adresses IP privées standard.

    Sélectionnez les blocs CIDR qui ne chevauchent aucun autre réseau (dans Oracle Cloud Infrastructure, votre centre de données sur place ou un autre fournisseur de nuage) auquel vous voulez 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 de vos exigences en matière de flux de trafic et 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é.

  • Sécurité

    Utilisez Oracle Cloud Guard pour surveiller et maintenir de manière proactive la sécurité de vos ressources OCI dans Oracle Cloud Infrastructure. Le service de protection d'infrastructure en nuage utilise des recettes de détecteur que vous pouvez définir pour examiner vos ressources afin de détecter les faiblesses en matière de sécurité et pour surveiller les opérateurs et les utilisateurs à la recherche d'activités risquées. Lorsqu'une mauvaise configuration ou une activité non sécurisée est détectée, le service de protection d'infrastructure en nuage recommande des actions correctives et aide à effectuer ces actions, en fonction des recettes de répondant que vous pouvez définir.

    Pour les ressources qui nécessitent une sécurité maximale, Oracle recommande d'utiliser des zones de sécurité. Une zone de sécurité est un compartiment associé à une recette de politiques de sécurité définie par Oracle et basée sur les meilleures pratiques. Par exemple, les ressources d'une zone de sécurité ne doivent pas être accessibles par l'Internet public et elles doivent être chiffré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é, OCI valide les opérations en fonction des politiques de la recette de zone de sécurité et refuse les opérations qui violent l'une des politiques.

  • Bande passante de l'é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 spécifier une forme personnalisée (flexible) dans laquelle vous définissez une plage de bande passante et laissez le service ajuster la bande passante automatiquement en fonction des modèles de trafic. Avec l'une ou l'autre approche, vous pouvez modifier la forme en tout temps après avoir créé l'équilibreur de charge.

  • Oracle Cloud Infrastructure Kubernetes Engine et formes de calcul

    Au minimum, deux groupes de noeuds sont déployés sur le moteur Kubernetes pour OCI : l'un pour les contrôleurs Jenkins et l'autre pour les agents Jenkins.

    Pour économiser des coûts et optimiser l'ensemble de la solution, il est recommandé d'utiliser VM.Standard.A1. Instances flexibles pour les contrôleurs Jenkins, car Jenkins est entièrement compatible avec les instances ARM. Pour le groupe de noeuds d'agent, il est recommandé d'utiliser des instances préemptives, car les tâches de pipeline sont généralement de courte durée et tolérantes aux pannes.

  • Oracle Cloud Infrastructure Registry

    Oracle Cloud Infrastructure Registry est un référentiel de conteneurs privé conforme à OCI pour héberger des images. Dans cette architecture, il est facultatif et peut être utilisé pour héberger vos propres images personnalisées Jenkins avec tous les plugins nécessaires installés. Il est recommandé de créer une image de contrôleur Jenkins personnalisée pour renforcer la sécurité et regrouper tous les plugiciels couramment utilisés dans une seule image de conteneur.

Points à considérer

Tenez compte des points suivants lors du déploiement de cette architecture de référence.

  • Performance et extensibilité

    En utilisant Kubernetes, il est facile d'adapter le contrôleur et les agents Jenkins à mesure que l'équipe de développement grandit ou se rétrécit. De plus, comme les pods d'agent sont créés à chaque exécution d'une tâche de pipeline, il est possible de personnaliser les ressources utilisées par ces pods sur une base de pipeline.

  • Disponibilité

    Pour maximiser la disponibilité, il est recommandé de provisionner plusieurs noeuds OKE dans différents domaines de disponibilité ou d'erreur. En outre, pour protéger Jenkins des perturbations volontaires et involontaires, il est possible d'utiliser un mécanisme Kubernetes standard, tel que les budgets de perturbation des pods et l'anti-affinité des pods.

  • Coût

    L'objectif de cette architecture est également de minimiser les coûts lors de l'utilisation de Jenkins sur OKE. Il est possible d'utiliser des noeuds ARM pour les contrôleurs Jenkins, qui coûtent un quart des instances de calcul flexibles. Quant aux agents Jenkins, les noeuds d'instance préemptifs permettent aux clients d'économiser la moitié du budget.

Confirmation

  • Author: Alberto Campagna
  • Contributor: Marta Tolosa