반응형
Argo Workflows 설치 방법
Argo Workflows를 설치하기 위해서는 Kubernetes 클러스터가 필요합니다. 아래는 Argo Workflows를 설치하는 방법입니다.
1. Kubernetes 클러스터 준비
- 로컬에서 Kubernetes를 실행하려면 minikube나 kind를 사용할 수 있습니다. 클라우드에서는 Google Kubernetes Engine(GKE), Amazon EKS, Azure AKS 등을 사용할 수 있습니다.
2. Argo Workflows 설치
kubectl 설치: Kubernetes 클러스터에 접근하기 위해 kubectl을 설치합니다.
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
Argo CLI 설치: Argo Workflows를 사용하기 위한 CLI를 설치합니다.
curl -sLO https://github.com/argoproj/argo-workflows/releases/latest/download/argo-linux-amd64
chmod +x argo-linux-amd64
sudo mv argo-linux-amd64 /usr/local/bin/argo
Argo Workflows 설치: Helm을 사용하여 Argo Workflows를 설치할 수 있습니다. Helm이 설치되어 있어야 합니다.
# Helm repository 추가
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
# Argo Workflows 설치
helm install argo argo/argo-workflows --namespace argo --create-namespace
UI 접근: Argo Workflows는 웹 UI를 제공합니다. 포트 포워딩을 통해 UI에 접근할 수 있습니다.이제 브라우저에서 http://localhost:2746로 접근하여 Argo UI를 확인할 수 있습니다.
kubectl port-forward svc/argo-ui -n argo 2746:2746
Argo Workflows 예제 설명
1. Hello World 예제
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: hello-world-
spec:
entrypoint: hello-world
templates:
- name: hello-world
steps:
- - name: say-hello
template: hello
- name: hello
container:
image: ubuntu:latest
command: [bash, -c]
args: ["echo Hello, World!"]
- 예제 설명:
- 이 워크플로우는 "Hello, World!"를 출력하는 간단한 작업을 수행합니다.
- entrypoint에서 hello-world 템플릿을 시작으로 설정하고, steps를 통해 say-hello 작업을 정의합니다.
- hello 템플릿에서는 Ubuntu 이미지를 사용해 echo 명령어를 실행합니다.
2. 데이터 생성 및 분석 예제
- 예제 설명:
- 이 워크플로우는 두 개의 작업을 수행합니다: 데이터 생성과 데이터 분석.
- 첫 번째 작업(generate-data)은 1에서 100 사이의 무작위 숫자 10개를 생성하고 출력합니다.
- 두 번째 작업(analyze-data)는 첫 번째 작업의 출력을 입력으로 받아 평균값을 계산합니다.
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: data-processing-
spec:
entrypoint: process-data
templates:
- name: process-data
steps:
- - name: step-1
template: generate-data
- - name: step-2
template: analyze-data
arguments:
parameters:
- name: input-data
value: "{{steps.step-1.outputs.result}}"
- name: generate-data
script:
image: python:3.8
command: [python]
source: |
import random
data = [random.randint(1, 100) for _ in range(10)]
print(data)
- name: analyze-data
inputs:
parameters:
- name: input-data
script:
image: python:3.8
command: [python]
source: |
input_data = {{inputs.parameters.input-data}}
avg = sum(input_data) / len(input_data)
print("Average:", avg)
3. 병렬 작업 예제
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: parallel-jobs-with-follow-up-
spec:
entrypoint: run-jobs
templates:
- name: run-jobs
steps:
- - name: job-1
template: process-job
arguments:
parameters:
- name: job-name
value: "Job 1"
- - name: job-2
template: process-job
arguments:
parameters:
- name: job-name
value: "Job 2"
- - name: job-3
template: process-job
arguments:
parameters:
- name: job-name
value: "Job 3"
# 병렬 작업이 완료된 후 실행할 작업
- - name: follow-up-job
template: follow-up
- name: process-job
inputs:
parameters:
- name: job-name
container:
image: ubuntu:latest
command: [bash, -c]
args: ["echo Processing {{inputs.parameters.job-name}}"]
- name: follow-up
container:
image: ubuntu:latest
command: [bash, -c]
args: ["echo All jobs completed, executing follow-up task."]
- 예제 설명:
- 이 워크플로우는 세 개의 작업을 병렬로 실행합니다: Job 1, Job 2, Job 3.
- 각 작업은 process-job 템플릿을 참조하고, 각 작업 이름을 인자로 전달합니다.
- 각 작업은 자신에게 할당된 이름을 출력합니다.
- 병렬 작업이 모두 완료된 후 follow-up-job이라는 후속 작업이 실행됩니다. 이 작업은 follow-up 템플릿을 사용하여 "All jobs completed, executing follow-up task."라는 메시지를 출력합니다.
4. 조건부 실행 예제
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: conditional-execution-
spec:
entrypoint: conditional-workflow
templates:
- name: conditional-workflow
steps:
- - name: check-condition
template: evaluate-condition
- - name: run-if-true
template: true-branch
when: "{{steps.check-condition.outputs.result}} == 'true'"
- name: evaluate-condition
script:
image: python:3.8
command: [python]
source: |
# Here, implement your logic to evaluate a condition
condition_met = True
print(condition_met)
- name: true-branch
container:
image: ubuntu:latest
command: [bash, -c]
args: ["echo Condition is true, executing this branch."]
- 예제 설명:
- 이 워크플로우는 특정 조건을 평가한 후 그 결과에 따라 다음 작업을 실행합니다.
- evaluate-condition 템플릿에서 조건을 평가하고 결과를 출력합니다.
- when 절을 사용하여 조건이 참일 때만 run-if-true 작업이 실행됩니다.
5. 재시도 메커니즘 예제
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: retry-job-
spec:
entrypoint: retry-example
templates:
- name: retry-example
steps:
- - name: failing-job
template: fail-with-retry
- name: fail-with-retry
retryStrategy:
limit: 3
container:
image: ubuntu:latest
command: [bash, -c]
args: ["exit 1"] # Always fails for demonstration
- 예제 설명:
- 이 워크플로우는 실패할 작업을 정의하고, 최대 3회 재시도합니다.
- retryStrategy를 설정하여, 작업이 실패할 경우 자동으로 재시도하도록 합니다.
결론
Argo Workflows를 통해 Kubernetes 환경에서 복잡한 데이터 처리 및 분석 파이프라인을 효과적으로 관리할 수 있습니다. 위에서 설명한 설치 방법과 다양한 예제를 통해 Argo의 기본 기능을 이해하고, 필요에 맞게 파이프라인을 확장할 수 있습니다. 각 예제는 실제 사용 시나리오에 따라 조정할 수 있으며, 더 복잡한 작업 흐름을 생성하는 데 기초가 될 수 있습니다.
반응형
'Computer Science > linux' 카테고리의 다른 글
AWS에서 EKS를 사용한 파이프라인 구축 (2) | 2024.10.01 |
---|---|
프롬프트 스트링 (1) | 2024.09.24 |
Docker Compose 사용하기 (0) | 2024.09.20 |
Dockerfile 작성하기 (1) | 2024.09.15 |
Docker 사용하기 (0) | 2024.09.15 |