Article original : How to Set Up Argo Workflows on Kubernetes
Argo Workflows est un projet open source qui permet l'orchestration de plusieurs jobs Kubernetes. Argo Workflows est implémenté en tant que définition de ressource personnalisée Kubernetes (CRD), ce qui signifie qu'il est natif de l'écosystème Kubernetes et peut s'exécuter sur n'importe quel cluster Kubernetes.
Les workflows sont des étapes définies par lesquelles des jobs individuels sont exécutés. Vous pouvez utiliser Argo Workflows pour diverses finalités, telles que le traitement de données, le machine learning, le CI/CD et l'automatisation de l'infrastructure.
Dans cet article, vous allez installer Argo Workflows sur un cluster Kubernetes et utiliser des templates disponibles pour créer un Workflow à gérer dans un cluster Kubernetes.
Concepts clés d'Argo Workflows
Comme mentionné ci-dessus, Argo Workflows est implémenté en tant que définition de ressource personnalisée Kubernetes (CRD) par son propre contrôleur. Argo Workflows est composé de deux concepts principaux : workflow et Template.
Workflow
Un workflow est une ressource centrale dans Argo Workflows qui définit le workflow à exécuter et stocke l'état du workflow.
Un workflow se compose d'une spécification qui contient un point d'entrée et une liste de templates.
Un workflow peut modéliser une logique complexe en utilisant des graphes acycliques dirigés (DAG) ou des étapes pour capturer les dépendances ou les séquences entre les templates.
Template
Un template est un concept central dans Argo Workflows qui définit les instructions à exécuter dans une étape de workflow. Un template peut être de l'un des types suivants :
- Container : Permet de définir le conteneur. Voici un exemple :
- name: hello-world
container:
image: alpine:latest
command: [sh, -c]
args: ["echo hello world"]
- Script : Un template qui exécute un script dans une image de conteneur. Cela est similaire au type conteneur, mais permet d'écrire le script en ligne au lieu d'utiliser un fichier séparé. Voici un exemple :
- name: factorial
inputs:
parameters:
- name: num
script:
image: python:alpine 3.6
command: [python]
source: |
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
print(factorial(int({{inputs.parameters.num}})))
- Resource : Ce template permet la manipulation directe des ressources du cluster. Il peut être utilisé pour des opérations telles que la récupération, la création, la modification ou la suppression, y compris les requêtes GET, CREATE, APPLY, PATCH, REPLACE ou DELETE. Voici un exemple :
- name: create-configmap
resource:
action: create
manifest: |
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
foo: bar
hello: world
- DAG : Ce template définit un graphe acyclique dirigé d'autres templates. Dans cet exemple, le DAG a trois tâches : A, B et C. La tâche A s'exécute en premier, puis les tâches B et C s'exécutent en parallèle. Voici un exemple :
- name: my-dag
dag:
tasks:
- name: A
template: echo
arguments:
parameters: [{name: message, value: A}]
- name: B
dependencies: [A]
template: echo
arguments:
parameters: [{name: message, value: B}]
- name: C
dependencies: [A]
template: echo
arguments:
parameters: [{name: message, value: C}]
Maintenant, commençons.
Prérequis
Pour suivre ce guide, assurez-vous d'avoir les éléments suivants :
Un cluster Kubernetes. Pour créer un nouveau cluster Kubernetes, suivez ce guide
Une connaissance de base de ce qu'est Kubernetes. Vous pouvez en apprendre davantage sur Kubernetes à partir de leur documentation officielle
Étape 1 - Installer Argo Workflows
- Utilisez
Kubectlpour créer un namespace pour Argo Workflows afin de séparer les ressources de votre cluster Kubernetes.
$ kubectl create namespace argo
- Installez le fichier de release le plus récent d'Argo Workflows à partir de la page GitHub d'Argo Workflows.
$ kubectl apply -n argo -f https://github.com/argoproj/argo-workflows/releases/download/v<VERSION>/install.yaml
La version d'Argo Workflows utilisée dans ce guide est la v3.5.0.
- Vérifiez si toutes les ressources ont été installées correctement.
$ kubectl get all -n argo
Sortie :
NAME READY STATUS RESTARTS AGE
pod/workflow-controller-7f8c9f8f5-9qj2l 1/1 Running 0 2m
pod/argo-server-6f8f9c9f8f-6kx4d 1/1 Running 0 2m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/argo-server ClusterIP 10.3.240.123 <none> 2746/TCP 2m
service/workflow-controller-metrics ClusterIP 10.3.240.124 <none> 9090/TCP 2m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/workflow-controller 1/1 1 1 3m05s
deployment.apps/argo-server 1/1 1 1 3m07s
NAME DESIRED CURRENT READY AGE
replicaset.apps/workflow-controller-7f8c9f8f5 1 1 1 3m33s
replicaset.apps/argo-server-6f8f9c9f8f 1 1 1 2m33s
Étape 2 - Démarrer l'interface utilisateur Argo pour la surveillance
Argo Server dispose d'une interface utilisateur graphique que vous pouvez utiliser pour gérer et surveiller les workflows de votre cluster Kubernetes.
Dans ce guide, vous allez contourner le processus d'authentification de demande de jeton pour accéder à l'interface web Argo car elle ne peut pas être accessible publiquement. Cela s'appelle le mode Authentification du serveur, bien que vous puissiez utiliser l'autre mode, Authentification du client, qui nécessite que vous demandiez un jeton pour pouvoir accéder à l'interface web.
- Changez le mode d'authentification en Authentification du serveur.
$ kubectl patch deployment \
argo-server \
--namespace argo \
--type='json' \
-p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args", "value": [
"server",
"--auth-mode=server"
]}]'
Sortie :
deployment.apps/argo-server patched
Notez que ce mode n'est pas recommandé pour les environnements de production, car il crée des risques de sécurité significatifs. Une option plus sécurisée consiste à utiliser le mode d'authentification client, qui nécessite que les clients fournissent leur jeton porteur Kubernetes.
- Configurez le contrôle d'accès basé sur les rôles Kubernetes (RBAC) pour accorder des permissions de niveau administrateur Argo pour la gestion des ressources au sein du namespace
argo.
$ kubectl create rolebinding argo-default-admin --clusterrole=admin --serviceaccount=argo:default -n argo
- Transférez le port de l'interface web du serveur Argo avec
kubectl port-forward.
$ kubectl -n argo port-forward deployment/argo-server 2746:2746
En utilisant un navigateur comme Chrome, visitez l'adresse IP http://localhost:2746.

Créer un nouveau Workflow
Vous pouvez utiliser un manifeste YAML pour définir des workflows Argo et les appliquer à votre cluster Kubernetes.
- Créez un nouveau fichier de Workflow.
Nano argo-workflow.yaml
- Ajoutez ce qui suit au fichier :
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
name: demo-workflow
spec:
entrypoint: main
templates:
- name: main
container:
image: busybox
command: ["/bin/sh"]
args: ["-c", "echo 'The first step of the Workflow'"]
Voici une brève description des composants du fichier :
entrypointspécifie le point d'entrée pour le workflow, qui est défini commemain.templatescontient une liste de templates, qui définissent les étapes ou tâches au sein du workflow.nameest le nom du template, qui est défini commemain.containerspécifie une étape basée sur un conteneur au sein du workflow.imagespécifie l'image Docker à utiliser pour le conteneur, définie ici commebusybox.commandspécifie la commande à exécuter à l'intérieur du conteneur, définie comme["/bin/sh"].argsspécifie les arguments à passer à la commande à l'intérieur du conteneur, définis comme["-c", "echo 'The first step of the Workflow'"]. Cette commande exécuteraechopour imprimer "The first step of the Workflow".Appliquez le Workflow à votre cluster :
$ kubectl -n argo create -f argo-workflow.yaml
Voici la sortie :
workflow.argoproj.io/hello-world-nb42c created
Comment gérer Argo Workflows
- Pour lister tous les workflows au sein du namespace
argo, faites ce qui suit :
$ kubectl -n argo get wf
Voici la sortie :
NAME STATUS AGE MESSAGE
demo-workflow Succeeded 4m23s
- Pour voir les logs du pod pour votre Workflow, faites ce qui suit :
$ kubectl -n argo logs demo-workflow
Voici la sortie :
This template is the first step of the Workflow
time="2024-02-13T19:56:54.629Z" level=info msg="sub-process exited" argo=true error="<nil>"
- Pour supprimer un workflow, faites ceci :
$ kubectl -n argo delete wf workflow-name
- Pour suspendre ou reprendre un workflow, faites ceci :
$ kubectl -n argo suspend wf workflow-name
$ kubectl -n argo resume wf workflow-name
- Pour soumettre un workflow en utilisant l'interface de ligne de commande Argo, faites ceci :
$ argo submit -n argo workflow.yaml
Vous pouvez en apprendre davantage sur Argo Workflows dans leur documentation officielle.
Conclusion
Vous avez maintenant exploré Argo Workflows et l'avez installé avec succès. Cet outil puissant vous permet de créer une logique en utilisant des DAG ou des étapes individuelles, vous aidant à exécuter diverses tâches à travers différents templates. Vous pouvez également interagir avec vos workflows et suivre leur progression en utilisant des outils comme Argo CLI, Argo UI et Argo Events.
En utilisant Argo Workflows, vous pouvez tirer parti de la scalabilité et de la flexibilité de Kubernetes pour assurer une exécution fiable des tâches.