skip to content
Adiatma Blog's

Mengenal Argo Workflows

/ 3 min read

Overview

Argo Workflows adalah tools open source yang biasa di sebut workflow engine untuk orkestrasi tugas secara pararel di atas kubernetes.

Untuk implementasi nya argo workflows bisa digunakan untuk otomasi dan proses CI/CD, mirip seperti Github Actions, Gitlab CI/CD, dan Bitbucket Pipelines.

Pre-requisites

  • Install helm (package manager untuk kubernetes).

Getting Started

Install Argo Workflows

Untuk meng-install Argo Workflows saya akan pakai helm.

untuk penyebutan sebuah packages / resources / library kalau di helm biasanya di kenal sebagai charts.

Untuk alamat resmi charts bisa cek disini https://artifacthub.io/.

Kunjungi halaman charts kemudian cukup ketik keyword “argo-workflows”.

Untuk meng-install biasanya perlu menambahkan charts tersebut ke lokal repository, perintah nya seperti di bawah ini.

Terminal window
helm repo add argo https://argoproj.github.io/argo-helm

Kemudian install.

Terminal window
helm install argo-workflows argo/argo-workflows \
--create-namespace --namespace argo \
--set crds.install=false

Perintah di atas akan meng-install argo-workflows di dalam sebuah namespace argo dengan setup tanpa custom CRDs https://artifacthub.io/packages/helm/argo/argo-workflows#custom-resource-definitions.

Jika hasil install berhasil bisa di pastikan dengan perintah di bawah ini.

Terminal window
kubectl get all -n argo | grep argo

Hasilnya:

Terminal window
pod/argo-workflows-server-76967b45bd-76fpg 1/1 Running 0 17h
pod/argo-workflows-workflow-controller-5987f8755c-r2dqb 1/1 Running 0 17h
service/argo-workflows-server ClusterIP 10.128.137.169 <none> 2746/TCP 17h
deployment.apps/argo-workflows-server 1/1 1 1 17h
deployment.apps/argo-workflows-workflow-controller 1/1 1 1 17h
replicaset.apps/argo-workflows-server-76967b45bd 1 1 1 17h
replicaset.apps/argo-workflows-workflow-controller-5987f8755c 1 1 1 17h

Kemudian untuk melihat dashboard ui argo workflows teman - teman bisa melakukan port-forward service argo-workflows-server yang running di port 2746.

Terminal window
kubectl port-forward svc/argo-workflows-server 2746:2746
Forwarding from 127.0.0.1:2746 -> 2746
Forwarding from [::1]:2746 -> 2746

Dengan port-forward otomatis service argo-workflow-server bisa di akses di lokal dengan port 2746.

Setup RBAC & Secret

Selanjutnya perlu untuk membuat serviceaccount dan juga menetapkan role akses pada account tersebut.

roles.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
name: argo-service-account
namespace: argo
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: argo-workflows-full-access
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: argo-workflows-full-access-binding
subjects:
- kind: ServiceAccount
name: argo-service-account
namespace: argo
roleRef:
kind: ClusterRole
name: argo-workflows-full-access
apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: Secret
metadata:
name: argo-service-account
annotations:
kubernetes.io/service-account.name: argo-service-account
type: kubernetes.io/service-account-token

Selanjutnya jalankan perintah kubectl apply -f roles.yaml.

Jika berhasil kemudian perlu untuk verifikasi roles tersebut, memastikan akses dan lain sebagainya.

Terminal window
kubectl auth can-i create pods --as=system:serviceaccount:argo:argo-service-account
kubectl auth can-i list deployments --as=system:serviceaccount:argo:argo-service-account

Jika hasil nya yes artinya roles tersebut punya akses create dan list untuk resources pods dan deployments.

Generate TOKEN

Terminal window
TOKEN="Bearer $(kubectl get secret argo-service-account -o=jsonpath='{.data.token}' | base64 --decode)"
echo $TOKEN

Kemudian copy hasil token di atas dan paste di halaman dashboard argo workflows bagian login client authentication.

Submit workflow

steps.yaml

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: steps-
spec:
entrypoint: hello-hello-hello
templates:
- name: hello-hello-hello
steps:
- - name: hello1
template: whalesay
arguments:
parameters: [{name: message, value: "hello1"}]
- - name: hello2a
template: whalesay
arguments:
parameters: [{name: message, value: "hello2a"}]
- name: hello2b
template: whalesay
arguments:
parameters: [{name: message, value: "hello2b"}]
- name: whalesay
inputs:
parameters:
- name: message
container:
image: docker/whalesay
command: [cowsay]
args: ["{{inputs.parameters.message}}"]

Jalankan perintah argo submit steps.yaml --watch jika sukses akan tampil seperti di bawah.