Présentation des outils
Flux et ArgoCD sont tous deux des outils permettant d’améliorer la gestion de vos conteneurs Kubernetes. Plus le nombre de conteneurs est élevé et plus le risque de perdre la trace des différents déploiements est grand. Le gestionnaire de configuration Helm permet de répondre, en partie seulement, à cette question. Son utilisation est néanmoins peu agréable et il est impossible de voir d’un seul coup d’œil la totalité des objets présent sur le cluster Kubernetes.
C’est pour répondre à cette problématique que des outils comme Flux et ArgoCD existent. Ils viennent apporter au gestionnaire Helm des fonctions supplémentaires pour faire office de véritable tour de contrôle sur tous nos objets Kubernetes. Cela fait partie des technologies dites Gitops.
Qu’est-ce que le Gitops ?
L’approche Gitops repose sur un unique référentiel (le Git) pour distribuer l’infrastructure en tant que code. Les technologies Gitops vérifient et standardisent le framework d’application. Ainsi, toute modification apportée au code est suivie. Les mises à jour et le contrôle de versions en cas de restauration sont facilités.
L’approche Gitops facilite donc les tâches quotidiennes des DevOps à l’aide d’une série de fonctionnalités ad hoc :
- Workflow unique et standardisé pour toutes les applications
- Sécurité renforcée
- Meilleur contrôle et visibilité des versions
- Cohérence entre tous les clusters
Pour savoir quel est le meilleur outil Gitops pour vous, nous avons réalisé un comparatif sur plusieurs fonctions clés où les solutions diffèrent.
Installation/Boostraping
Flux et ArgoCD ont besoin tous les deux d’être installés sur le cluster que vous souhaitez gérer. Une fois installés, vous devez les configurer pour qu’ils puissent lire les fichiers YAML de votre référentiel Git. Les différences entre les deux outils apparaissent dès cette étape.
Flux
Sur Flux, le processus d’installation et de bootstraping peut être fait simultanément. Pendant le processus de bootstraping Flux créé d’abord un référent .git puis tous les manifestes pour l’installation et la connexion dans ce même dépôt. Flux vous laisse ensuite la main pour synchroniser le cluster avec l’environnement choisi.
ArgoCD
ArgoCD ne possède pas de mécanisme natif pour le bootstraping. La partie installation s’arrête avec les manifestes YAML et tout le reste doit être fait manuellement.
Synchronisation/réconciliation
La synchronisation (ou réconciliation) est l’acte de modifier l’état du cluster pour lui faire matcher celui stocké dans le Git. Elle peut être faite de 2 manières différente : manuelle ou automatique.
Synchronisation Manuelle
Flux
Pour Flux, La synchronisation automatique est la norme, mais il est tout à fait possible de suspendre la ressource Git. Il est alors possible de faire des demandes de synchronisation manuelles avec la commande :
kubectl annotate --field-manager=flux-client-side-apply --overwrite \
kustomization/podinfo reconcile.fluxcd.io/requestedAt="$(date +%s)"
ArgoCD
ArgoCD vous permet de décider de votre politique de synchronisation manuelle vous-même. La commande syncPolicy lui permet de continuer à détecter les changements sur les clusters, mais de ne pas les modifier sans votre intervention. La synchronisation peut ainsi s’effectuer sur l’interface web ou le CLI.
Configuration
Flux
Flux laisse l’utilisateur déterminer à quelle fréquence l’outil cherche les changements sur les applications (Ex : toutes les 3 minutes) et à quelle fréquence celles-ci sont mises à jour. Les deux peuvent être réglés différemment pour chaque application.
ArgoCD
ArgoCD gère la réconciliation comme un paramètre global et n’autorise donc pas autant de personnalisation. La recherche et la mise à jour sont réglées par défaut sur 3 minutes, mais il est possible de changer cette durée. Il est cependant impossible de régler les 2 actions séparément ni de régler un temps différent par application.
Déploiement
Les deux outils fonctionnent avec des manifestes Kubernetes purs : les fichiers YAML, Kustomize et Helm. Néanmoins, ils diffèrent profondément dans la manière de traiter ces fichiers.
Flux
Flux Utilise principalement Kustomize. Son contrôleur rend et applique tous les manifestes synchronisés par Flux dans le répertoire source même si ceux-ci sont des fichiers YAML purs. Il peut créer un fichier Kustomization.YAML directement s’il ne détecte pas Kustomize. Il vous est possible de créer des dépendances entre les Kustomization.
De plus, il lit nativement les fichiers Helm. Le contrôleur gère toutes les chartes que vous souhaitez déployer sur le cluster. Helm est déployé directement grâce à sa bibliothèque Golang. Comme avec Kustomize, Vous pouvez créer des dépendances entre les fichiers Helm.
ArgoCD
ArgoCD lit les fichiers Kustomize et Kubernetes YAML mais il lui est également possible d’appliquer directement des fichiers YAML purs sans utiliser Kustomize. Cela peut conduire à des problèmes de synchronisation dans les applications ArgoCD.
Si un fichier Kustomize est détecté, il va agir de façon comparable à Kubectl. Vous avez également plus de contrôle sur les ressources individuelles (sur des fichiers YAML spécifiques) avec les syncwaves.
Helm est compatible avec ArgoCD mais il ne l’utilise pas de la même manière que son concurrent. La bibliothèque Golang n’est pas utilisée. ArgoCD utilise Helm pour envoyer les fichiers template directement sur Kubectl.
Les Hooks graphiques de Helm sont convertis directement en fichiers syncwave. Cela a pour effet secondaire de ne pas vous laisser la possibilité d’utiliser le CLI sur le cluster.
Gestion Multiscluster
La gestion de nombreux clusters différents est toujours un véritable défi. Heureusement Flux et ArgoCd sont tous les deux capable de vous assister dans cette tâche.
Flux
Flux peut créer un cluster maitre qui permet à une instance de contrôler les autres qui lui sont rattachées. La gestion multicluster est accomplie via une architecture design and process. La solution fonctionne alors comme une interface commune pour la gestion des clusters.
ArgoCD
ArgoCD peut être configuré comme une instance « pull » (une instance par cluster) ou « push » (une instance pour plusieurs clusters). Il comprend nativement le concept de cluster. Vous pouvez donc installer un hub de contrôle central et y rattacher autant de clusters souhaités.
Conclusion
Pour résumer, Flux est plus simple dans son utilisation qu’ArgoCD mais ce dernier dispose d’un environnement plus riche et plus flexible. ArgoCD sera donc réservé à des Devops plus expérimentés qui n’ont pas besoin d’être guidés dans la gestion quotidienne de leurs environnements Kubernetes.
Que vous préférez Argo CD ou Flux, nous proposons une formation pour chacun de ces outils. En effet, en intra ou interentreprises, vous pouvez vous former à Flux ou ArgoCD chez nous. Nous proposons également une formation Kubernetes avancé, indispensable pour comprendre les manœuvres complexes pour maîtriser le célèbre orchestrateur de conteneurs.