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.
helm repo add argo https://argoproj.github.io/argo-helm
Kemudian install.
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.
kubectl get all -n argo | grep argo
Hasilnya:
pod/argo-workflows-server-76967b45bd-76fpg 1/1 Running 0 17hpod/argo-workflows-workflow-controller-5987f8755c-r2dqb 1/1 Running 0 17hservice/argo-workflows-server ClusterIP 10.128.137.169 <none> 2746/TCP 17hdeployment.apps/argo-workflows-server 1/1 1 1 17hdeployment.apps/argo-workflows-workflow-controller 1/1 1 1 17hreplicaset.apps/argo-workflows-server-76967b45bd 1 1 1 17hreplicaset.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.
kubectl port-forward svc/argo-workflows-server 2746:2746
Forwarding from 127.0.0.1:2746 -> 2746Forwarding 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: v1kind: ServiceAccountmetadata: name: argo-service-account namespace: argo---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: argo-workflows-full-accessrules: - apiGroups: ["*"] resources: ["*"] verbs: ["*"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: argo-workflows-full-access-bindingsubjects: - kind: ServiceAccount name: argo-service-account namespace: argoroleRef: kind: ClusterRole name: argo-workflows-full-access apiGroup: rbac.authorization.k8s.io---apiVersion: v1kind: Secretmetadata: name: argo-service-account annotations: kubernetes.io/service-account.name: argo-service-accounttype: 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.
kubectl auth can-i create pods --as=system:serviceaccount:argo:argo-service-accountkubectl 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
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/v1alpha1kind: Workflowmetadata: 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.
