데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      Argo workflow 설치하기

      seungkyua 21.09.24
      5,552 6 0

      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

       

      Install yaml 생성

      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

       

       

      mysql 사용으로 configmap 변경

      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 설치

      여기서는 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

       

      workflow 서버 설정 변경

      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

       

      Service expose

      서버에 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 가 실행된 결과 화면으로 동일한 작업을 클릭 한 번으로 실행할 수 있습니다. 다음은 워크 플로우를 만드는 방법에 대해서 살펴보겠습니다.

       

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      seungkyua 님의 최신 블로그

      더보기
      동영상 기고하기