23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
Argo workflow 는 workflow pipeline 을 구성하기 편리한 도구입니다. 경우에 따라 작업이 순차적으로 진행되어야 할 때, 병렬로 진행해야 할 때, 의존성을 가지고 어떤 작업이 끝나야만 다음 작업을 진행할 때등이 있을 수 있는데 이를 쉽게 yaml 로 정의하여 실행할 수 있습니다.
각각의 task 는 컨테이너로 실행됩니다. 정확히는 kubernetes 의 pod 단위로 실행되었는데 최신 버전에서는 이를 pod 내의 container 단위로 할 수 있습니다.
사용의 편리성 때문인지 kubeflow 에서는 ML pipeline 으로 Argo Workflow 를 사용합니다. yaml 을 바로 쓰는 것은 아니고 python 라이브러리를 제공하여 프로그래머블하게 작성할 수 있습니다. 이번에는 Workflow 를 설치해 보도록 하겠습니다.
3.0 버전 이상은 아직 사용해 보지 않았고 helm-chart 로 새롭게 제공되는 부분이 있어 이전의 2.x 버전과의 설치 방법이 다릅니다. 그래서 2.12.4 버전을 기준으로 작성하였습니다.
(참고) https://github.com/argoproj/argo-workflows/tree/master/manifests
kustomize 로 설치할 install.yaml 을 생성합니다.
git repository 도 변경되었네요. 아무튼 관리가 프로젝트별로 될 수 있도록 명확하게 정리를 했네요.
$ ~/ahnsk/argo-workflow
$ git clone https://github.com/argoproj/argo-workflows.git
$ cd argo-workflows
$ git checkout release-2.12.4
$ cd manifests
$ curl -s "https://raw.githubusercontent.com/\
kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
$ ./kustomize build ./cluster-install > my-install.yaml
생성된 yaml 파일로 kubernetes 에 설치합니다.
$ kubectl create ns argo
$ kubectl create -f my-install.yaml -n argo
Argo Workflow 2.x 버전은 인증이 따로 없습니다. 아마도 3.0 에서 큰 변경 중에 하나가 인증부분이라 할 수 있겠습니다. 인증이 없음에도 db 를 사용할 수 있습니다. 이는 단순히 workflow 실행에 대한 아카이빙을 저장하기 위한 사용합니다.
DB 를 사용하기 위해 configmap 부분을 db 사용으로 변경합니다.
$ vi my-configmap.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: workflow-controller-configmap
namespace: argo
data:
metricsConfig: |
disableLegacy: true
enabled: true
path: /metrics
port: 9090
persistence: |
connectionPool:
maxIdleConns: 100
maxOpenConns: 0
connMaxLifetime: 0s
mysql:
host: mysql
port: 3306
database: argo
tableName: argo_workflows
userNameSecret:
name: argo-mysql-config
key: username
passwordSecret:
name: argo-mysql-config
key: password
---
apiVersion: v1
kind: Secret
metadata:
labels:
app: mysql
name: argo-mysql-config
stringData:
password: password
username: mysql
type: Opaque
$ kubectl apply -f my-configmap.yaml -n argo
여기서는 mysql 을 HA 로 설치하지 않습니다. argo workflow 테스트를 위해 단일 pod 로 간단히 설치를 합니다.
$ vi my-mysql.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mysql
name: mysql
spec:
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
name: mysql
spec:
containers:
- env:
- name: MYSQL_USER
value: mysql
- name: MYSQL_PASSWORD
value: password
- name: MYSQL_DATABASE
value: argo
- name: MYSQL_RANDOM_ROOT_PASSWORD
value: "yes"
image: mysql:8
name: main
ports:
- containerPort: 3306
readinessProbe:
exec:
command:
- mysql
- -u
- mysql
- -ppassword
- argo
- -e
- SELECT 1
initialDelaySeconds: 15
timeoutSeconds: 2
nodeSelector:
kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
labels:
app: mysql
name: mysql
spec:
ports:
- port: 3306
protocol: TCP
targetPort: 3306
selector:
app: mysql
$ kubectl apply -f my-mysql.yaml -n argo
mysql 이 설치 되었으니 workflow 서버를 mysql 사용으로 변경합니다. 특별한 내용은 없고 앞에서 생성한 configmap을 사용하게 변경하는 작업입니다.
$ vi my-workflow-controller.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: workflow-controller
spec:
selector:
matchLabels:
app: workflow-controller
template:
metadata:
labels:
app: workflow-controller
spec:
containers:
- args:
- --configmap
- workflow-controller-configmap
- --executor-image
- argoproj/argoexec:v2.12.4
- --namespaced
command:
- workflow-controller
image: argoproj/workflow-controller:v2.12.4
livenessProbe:
httpGet:
path: /metrics
port: metrics
initialDelaySeconds: 30
periodSeconds: 30
name: workflow-controller
ports:
- containerPort: 9090
name: metrics
nodeSelector:
kubernetes.io/os: linux
securityContext:
runAsNonRoot: true
serviceAccountName: argo
$ kubectl delete -f my-workflow-controller.yaml -n argo
$ kubectl apply -f my-workflow-controller.yaml -n argo
서버에 NodePort 로 접속할 수 있게 Service 타입을 변경합니다.
$ vi my-argo-server.yaml
---
apiVersion: v1
kind: Service
metadata:
name: argo-server
spec:
ports:
- name: web
port: 2746
targetPort: 2746
nodePort: 30004
type: NodePort
selector:
app: argo-server
$ kubectl apply -f my-argo-server.yaml -n argo
$ kubectl get svc -n argo
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argo-server NodePort 10.233.56.81 2746:30004/TCP 108d
브라우저를 통해 접속하면 아래와 같은 화면을 볼 수 있습니다.
아래 화면은 workflow 가 실행된 결과 화면으로 동일한 작업을 클릭 한 번으로 실행할 수 있습니다. 다음은 워크 플로우를 만드는 방법에 대해서 살펴보겠습니다.
.png)
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.