Evolutivité et optimisation de Jenkins sur Oracle Cloud Infrastructure Kubernetes Engine
Jenkins est un système d'intégration continue et de déploiement 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 fourniture de nouvelles fonctionnalités.
Avec la sortie de Kubernetes, les architectures distribuées et sans partage sont progressivement devenues la norme, à tel point que tous les systèmes d'intégration continue et de déploiement continu les plus récents sont déployés sur Kubernetes. En ce qui concerne 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 mettre en conteneur Jenkins et de le déployer de manière native du cloud.
Vous pouvez héberger Jenkins sur Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine ou OKE) pour centraliser votre automatisation de la création et l'adapter à la croissance de vos projets logiciels. En implémentant un Jenkins évolutif sur OKE, les développeurs seront en mesure de développer de nouveaux services avec agilité et de faire évoluer facilement leurs pipelines d'intégration continue et de déploiement continu.
Architecture
Cette architecture de référence de haut niveau présente un exemple de déploiements Jenkins multiples sur OKE. En déployant Jenkins sur OKE as a Service, vous pouvez évoluer selon vos besoins.
Chaque pod de contrôleur Jenkins est associé à un volume persistant, afin de conserver l'historique du pipeline et les modules d'extension supplémentaires installés par les équipes. Les agents Jenkins sont créés chaque fois qu'un travail de pipeline est déclenché et détruit automatiquement à la fin.
Chaque instance Jenkins peut être affichée individuellement via un équilibreur de charge ou à l'aide d'une entrée Kubernetes.
Le schéma 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 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).
- 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. Par conséquent, une panne sur un domaine de disponibilité ne doit pas affecter les autres domaines de disponibilité de la région.
- 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 le contrôle 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 seul point d'entrée vers plusieurs serveurs dans le back-end.
- 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.
- Kubernetes Engine
Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine ou OKE) est un service entièrement géré, évolutif et hautement disponible que vous pouvez utiliser pour déployer vos applications en conteneur vers le cloud. Indiquez les ressources de calcul requises par vos applications et Kubernetes Engine les provisionne sur Oracle Cloud Infrastructure dans une location existante. OKE utilise Kubernetes pour automatiser le déploiement, le redimensionnement et la gestion des applications en conteneur dans les clusters d'hôtes.
Recommandations
- 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 sur site 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é.
- 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. 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é, OCI 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.
- 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.
- Oracle Cloud Infrastructure Kubernetes Engine et formes de calcul
Au minimum, deux pools de noeuds sont déployés sur OCI Kubernetes Engine : l'un pour les contrôleurs Jenkins et l'autre pour les agents Jenkins.
Pour réduire les coûts et optimiser l'ensemble de la solution, il est recommandé d'utiliser VM.Standard.A1. Instances Flex pour les contrôleurs Jenkins, car Jenkins est entièrement compatible avec les instances ARM. Pour le pool de noeuds d'agent, il est conseillé d'utiliser des instances préemptives, car les travaux de pipeline sont généralement de courte durée et tolérants aux pannes.
- Oracle Cloud Infrastructure Registry
Oracle Cloud Infrastructure Registry est un référentiel de conteneurs privé compatible OCI permettant d'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 packager tous les modules d'extension couramment utilisés dans une seule image de conteneur.
Points à prendre en compte
Tenez compte des points suivants lors du déploiement de cette architecture de référence.
- Performances et évolutivité
En utilisant Kubernetes, il est facile de faire évoluer à la fois le contrôleur Jenkins et les agents à mesure que l'équipe de développement se développe ou diminue. De plus, comme les pods d'agent sont créés à chaque exécution d'un travail de pipeline, il est possible de personnaliser les ressources utilisées par ces pods sur une base de pipeline.
- Disponibilité
Pour optimiser la disponibilité, il est recommandé de provisionner plusieurs noeuds OKE dans différents domaines de disponibilité ou de pannes. En outre, pour protéger Jenkins des perturbations volontaires et involontaires, il est possible d'utiliser le mécanisme standard de Kubernetes, tel que les budgets de perturbation de pod et l'anti-affinité de pod.
- 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. Comme pour les agents Jenkins, les noeuds d'instance préemptifs permettent aux clients d'économiser la moitié du budget.
En savoir plus
Consultez ces ressources supplémentaires pour en savoir plus sur les fonctionnalités de cette architecture de référence.
- Blog : Redimensionnement et optimisation de Jenkins sur Oracle Container Engine
- Graphique Helm de la communauté Jenkins
- Documentation Oracle Cloud Infrastructure Kubernetes Engine
- Structure des meilleures pratiques pour Oracle Cloud Infrastructure
- Documentation Oracle Cloud Infrastructure
- Estimateur de coût Oracle Cloud