Argo Workflows: An Introduction and Web UI Setup

In this blog, we will explore the features, benefits, and use cases of Argo Workflows, which can accelerate and streamline your application deployments, data pipelines, machine learning workflows, and more.

What is Argo Workflows?

Argo Workflows is an open-source container-native workflow engine for orchestrating parallel jobs on Kubernetes. It is deployed as Kubernetes Custom Resource Definition (CRD). The users can define Argo Workflows using YAML manifests, making it easy to create, manage, and visualize workflows. It supports a range of features, including DAG (Directed Acyclic Graph) workflows, container-based tasks, workflow templates, and extensibility through hooks and plugins. 

A simple Hello World example manifest:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: hello-world-
  labels:
    workflows.argoproj.io/archive-strategy: "false"
  annotations:
    workflows.argoproj.io/description: |
      This is a simple hello world example.
spec:
  entrypoint: whalesay
  templates:
  - name: whalesay
    container:
      image: docker/whalesay:latest
      command: [cowsay]
      args: ["hello world"]

Deploying Argo Workflows on a microk8s cluster

We will create ‘argo’ namespace and install the required CRDs.

kubectl create namespace argo

kubectl apply -n argo -f https://github.com/argoproj/argo-workflows/releases/download/v3.4.8/install.yaml

Let’s check what is deployed in the ‘argo’ namespace:

Argo Workflows Server

As the cluster is deployed on a remote VM, I’ll also expose the deployment ‘argo-server’ on Node Port so that it can be accessed remotely:

Use the existing argo-server Cluster IP Service to generate a template for the new service and edit it accordingly.

kubectl get svc argo-server -n argo -oyaml > argo-server-np.yaml
Argo Workflows Server

Let’s apply this manifest to create the Node Port service: argo-server-np

Argo Workflows Server

Argo Workflows UI

Let’s try to access the Argo Server Web UI using the newly created Node Port Service:

https://ipaddress:30085

I’m using 30085 port to access Web UI, you have to use the node port mentioned in the manifest above.

Argo Workflows Login Screen

Argo Web Interface

How to create a token to log in to Argo Web UI?

We will create a service account, cluster role, and cluster role binding for this.

microk8s kubectl create clusterrole argowork --verb=list,update --resource=workflows.argoproj.io

microk8s kubectl create sa argowork -n argo

microk8s kubectl create clusterrolebinding argowork --clusterrole=argowork --serviceaccount=argo:argowork
Argo Workflows Token

Token creation:

microk8s kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: argowork.service-account-token
  namespace: argo
  annotations:
    kubernetes.io/service-account.name: argowork
type: kubernetes.io/service-account-token
EOF

Retrieve the token value:

ARGO_TOKEN="Bearer $(microk8s kubectl get secret argowork.service-account-token -n argo -o=jsonpath='{.data.token}' | base64 --decode)"

Print the token value:

echo $ARGO_TOKEN

Now copy the token value and paste into the Web UI login field:

Argo Workflows Login

Click on the LOGIN button:

Argo Workflows Login

This is the landing page of the Argo Workflows Web UI.

Argo Workflows Web UI

How to install the Argo CLI binary?

# Download the binary
curl -sLO https://github.com/argoproj/argo-workflows/releases/download/v3.4.8/argo-linux-amd64.gz

# Unzip
gunzip argo-linux-amd64.gz

# Make binary executable
chmod +x argo-linux-amd64

# Move binary to path
mv ./argo-linux-amd64 /usr/local/bin/argo

# Test installation
argo version

Argo Workflows CLI

argo cli version

Make sure Kubeconfig file is present in standard location or set the KUBECONFIG environment variable:

cd .kube/
microk8s config > config

Let’s submit our Hello Argo sample workflow:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: hello-world-
  labels:
    workflows.argoproj.io/archive-strategy: "false"
  annotations:
    workflows.argoproj.io/description: |
      This is a simple hello argo example.
spec:
  entrypoint: whalesay
  templates:
  - name: whalesay
    container:
      image: docker/whalesay:latest
      command: [cowsay]
      args: ["hello argo"]

hello-argo.yaml

Workflow has started:

Argo Workflows Started

Workflow is complete now:

Argo Workflows Completed

Let’s check logs of the workflow we submitted using argo cli:

argo logs hello-world-xh57h  -n argo
Argo Workflows Logs

Status of the completed workflow on the Argo Web UI:

Argo Workflows Status

To get more details of the workflow just click on the workflow name:

Argo Workflows Status

Argo Workflow Examples

The example folder in the Argo Workflows git repository is a great place to see a wide variety of example manifest files to learn various concepts.

Argo Workflows Use cases

Some of the use cases where Argo Workflows is a great fit:

  • Continuous Integration and Delivery (CI/CD) Pipelines: Automating the build, test, and deployment processes of applications.
  • Data Processing and ETL Pipelines: Orchestrating data workflows for data ingestion, transformation, and analytics.
  • Machine Learning Workflows: Managing end-to-end machine learning pipelines, including model training and inference.
  • Event-Driven Workflows: Reacting to events and triggering workflows based on system events or external triggers.
  • Infrastructure Provisioning and Management: Automating the provisioning and lifecycle management of infrastructure resources.

Conclusion

Argo Workflows provides a great piece of kit the Kubernetes users to automate and orchestrate their complex tasks and workflows, providing enhanced productivity, scalability, and reliability. By taking advantage of Argo Workflows, you can unlock the full potential of your Kubernetes cluster and streamline your application deployments, data processing pipelines, machine learning workflows, and more.

Please read our blog on Argo Workflows vs Kubernetes Job for more details on Argo.

Leave a Comment