[Argo Workflow] Argo Workflow๋ž€?


๐Ÿ’ก Argo Workflow์—๋Œ€ํ•ด araboza

1. Argo Workflow๋ž€?

Kubernetes ํ™˜๊ฒฝ์—์„œ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ Job ์„ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์›Œํฌํ”Œ๋กœ์šฐ ์—”์ง„

  • Workflow์˜ ๊ฐ Step์€ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ •์˜๋จ
  • DAG(Directed Acyclic Graph) ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ task ์‹œํ€€์Šค (๋˜๋Š” task dependency) ๋ฅผ multi-step Workflow ๋กœ ๋ชจ๋ธ๋ง
  • Kubernetes ํ™˜๊ฒฝ์—์„œ Job ์„ ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ
  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šคํ™˜๊ฒฝ์—์„œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๋ณต์žกํ•œ ์„ค์ • ์—†์ด ์‹คํ–‰ํ• ์ˆ˜์žˆ์Œ

2. ๋กœ์ปฌํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•ด๋ณด๊ธฐ

k8s ํ™˜๊ฒฝ ๊ตฌ์„ฑ

์šฐ์„  ๋กœ์ปฌ์— k8sํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•œ๋‹ค. docker-desktop์˜ kubernetes ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, minikube ๋“ฑ์„ ๋กœ์ปฌ์— ์„ค์น˜ํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

argo workflow ์„ค์น˜

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

๋‚˜๋Š” ์ง€๊ธˆ์‹œ์ ์— 3.3.9๊ฐ€ ์ตœ์‹ ์ด๋ผ ๊ทธ ๋ฒ„์ „์œผ๋กœ ๊น”์•˜๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ์ตœ์‹ ๋ฒ„์ „ ํ™•์ธํ•ด์„œ ๊ทธ๊ฑธ๋กœ ๊น”๋ฉด๋œ๋‹ค

argo CLI ์„ค์น˜

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

# Unzip
gunzip argo-darwin-amd64.gz

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

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

# Test installation
argo version
argo: v3.3.9
  BuildDate: 2022-08-10T00:52:18Z
  GitCommit: 5db53aa0ca54e51ca69053e1d3272e37064559d7
  GitTreeState: clean
  GitTag: v3.3.9
  GoVersion: go1.17.13
  Compiler: gc
  Platform: darwin/amd64

์ธ์ฆ์šฐํšŒ

์›๋ž˜ ์•„๋ฅด๊ณ  ui๋“ค์–ด๊ฐ€๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ์ธ์ฆํ•„์š”ํ•œ๋ฐ ์•„๋ž˜์„ค์ • ๋„ฃ์–ด์ฃผ๋ฉด ์šฐํšŒ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ ํ•จ

kubectl patch deployment \
  argo-server \
  --namespace argo \
  --type='json' \
  -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args", "value": [
  "server",
  "--auth-mode=server"
]}]'

UI ํฌํŠธํฌ์›Œ๋”ฉ

kubectl -n argo port-forward deployment/argo-server 2746:2746
# ํ˜น์€
argo server

์ด์ œ https://localhost:2746 ์—ฌ๊ธฐ๋กœ ๋“ค์–ด๊ฐ€์„œ argo workflow ui๋ฅผ ๊ตฌ๊ฒฝํ• ์ˆ˜์žˆ๋‹ค

3. workflow ๋“ฑ๋กํ•ด๋ณด๊ธฐ

argo workflow ๋Š” ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹คํ–‰๋˜๋Š”๋ฐ ์ด ํ…œํ”Œ๋ฆฟ์€ yaml ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋จ

์•„๋ž˜์™€๊ฐ™์ด argo workflow ๊ณต์‹ repo์— ์˜ฌ๋ผ์™€์žˆ๋Š” ์˜ˆ์ œํŒŒ์ผ์„ submitํ•ด๋ณด์ž

argo submit -n argo --watch https://raw.githubusercontent.com/argoproj/argo-workflows/master/examples/hello-world.yaml

์‹คํ–‰ํ•˜๋ฉด ์ด๋Ÿฐ ํ˜„ํ™ฉํŒ์„ ๋„์›Œ์ค€๋‹ค

Name:                hello-world-d5j49
Namespace:           argo
ServiceAccount:      unset (will run with the default ServiceAccount)
Status:              Succeeded
Conditions:
 PodRunning          False
 Completed           True
Created:             Tue Sep 06 14:18:57 +0900 (1 minute ago)
Started:             Tue Sep 06 14:18:57 +0900 (1 minute ago)
Finished:            Tue Sep 06 14:20:09 +0900 (now)
Duration:            1 minute 12 seconds
Progress:            1/1
ResourcesDuration:   28s*(1 cpu),28s*(100Mi memory)

STEP                  TEMPLATE  PODNAME            DURATION  MESSAGE
 โœ” hello-world-d5j49  whalesay  hello-world-d5j49  1m

This workflow does not have security context set. You can run your workflow pods more securely by setting it.
Learn more at https://argoproj.github.io/argo-workflows/workflow-pod-security-context/
argo list -n argo
# ์กฐํšŒํ•˜๋ฉด ํ˜„์žฌ workflow ์ƒํƒœ๋„ ๋ณผ์ˆ˜์žˆ๋‹ค
NAME                STATUS    AGE   DURATION   PRIORITY
hello-world-d5j49   Running   25s   25s        0
NAME                STATUS      AGE   DURATION   PRIORITY
hello-world-d5j49   Succeeded   2m    1m         0

๋‹ค์–‘ํ•œ workflow ํ…œํ”Œ๋ฆฟ์€ ์—ฌ๊ธฐ์„œ ํ™•์ธ ๊ฐ€๋Šฅ

argo-workflows/examples at master ยท argoproj/argo-workflows

4. argo-cli ๋ช…๋ น์–ด ๋ชจ์Œ

# ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‹คํ–‰๋œ workflow ์ƒ์„ธ์ •๋ณด
argo get -n argo @latest

# argo log tailing
argo logs -f {workflowName}





ยฉ 2020. by berrrrr

Powered by berrrrr