2021/07 6

Kubernetes Custom Resource와 Controller

시작하며... Kubernetes는 기본로 제공하는 Built-in Object(ex: Deployment, Service) 외에 따로 정의한 Custom Resource를 통해 클러스터의 기능을 확장시킬 수 있다. 예를 들어 Istio의 VirtualService나 DestinationRule, ArgoCD의 Project, Application 등을 예로 들 수 있다. 물론 Custom Resource만을 정의한다고 해서 새로운 기능을 추가할 수는 없으며, 'Custom Controller' 또는 'Operator'를 통해 built-in object와 custom resource에 대한 동작을 구현해야 한다. 참고로 k8s는 Custom Controller의 쉬운 구현을 위해 client-go 라이..

Argo Workflows - (5) Retry, 재귀 호출

Retry Strategy 실제 서비스 운영시, DB 연결시 Timeout 등의 문제로 프로세스를 재시작해야 하는 경우가 발생할 수 있다. Argo Workflows에서도 Task에서 에러 발생시, task를 다시 생성하여 재시도하는 기능을 제공한다. 다음은 일부러 Python 스크립트 에러를 발생시켜 지정된 횟수만큼 retry를 하는 워크플로우 예시이다. apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: wf-retrystrategy- spec: entrypoint: dag-template arguments: parameters: - name: messageA value: A templates: - name: dag-temp..

CI-CD 2021.07.12

Argo Workflows - (4) Secret, 반복 및 조건부 실행

Secret Template 정의시, 미리 생성해 놓은 K8s Secret 또는 ConfigMap 리소스를 사용할 수 있다. 우선 다음 명령어로 Secret 'test-secret'을 생성한다. kubectl -n argo create secret generic test-secret --from-literal test-password="Password123" 그리고 wf-artifact 워크플로우를 아래와 같이 수정하여, secret을 환경변수로 사용하는 'wf-secret-env'를 정의하였다. apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: name: wf-secret-env spec: entrypoint: dag-template argument..

CI-CD 2021.07.10

Argo Workflows - (3) Parameter, Artifact

Parameters Workflow를 정의할 때, template에서 사용할 변수를 정의하고 해당 template 호출시 값을 전달해 줄 수 있는 이를 Parameter라고 한다. Argo Workflows에는 Input과 Output 두가지 타입의 Parameter가 존재한다. Input Input Parameter의 값을 달리 하여, Template 실행시 다른 동작을 하도록 구성할 수 있다. 이전에 작성했던 wf-dag-template.yaml을 수정하여, 다음과 같은 Workflow manifest를 작성해보자. apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: name: wf-input-parameter-templates spec: entry..

CI-CD 2021.07.07

Argo Workflows - (2) Core Concepts

Core Concepts 이번 시간엔 Argo Workflows의 기본 개념과 Workflow에 대해서 알아보자. 가장 먼저 Argo Workflows 공식 홈페이지에서 제공하는 간단한 'Hello world' 예제부터 시작한다. 'Hello world' Workflow 아래와 같이 'wf-hello-world.yaml'을 작성한다. apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: hello-world- # Name of this Workflow spec: entrypoint: whalesay # Defines "whalesay" as the "main" template templates: - name: whalesay # ..

CI-CD 2021.07.04

Argo Workflows - (1) Introduction

Argo Workflows Workflow 엔진의 필요성 Kubernetes가 웹서버 형태로 동작하는 마이크로서비스를 배포하기에 최적화된 플랫폼인 것은 부정할 수 없는 사실이다. 다만 현실 세계에서 부딪힐 수 있는 문제 중엔 단순 Batch 또는 Machine Learning, ETL(Extract, Transform, Load)과 같이 일회성의 프로세스들이 일련의 흐름으로 묶인 작업을 처리할 경우가 있다. K8s에선 이를 위해 Job, CronJob 등의 Workload를 제공하나, 이것만으로 여러 컨테이너가 유기적으로 연결되도록 구성하기엔 많은 어려움이 있다. 현재 시장엔 K8s의 기능을 확장시켜 복잡한 Workflow를 생성, 실행할 수 있는 다양한 솔루션이 존재하며, 이를 Workflow Engi..

CI-CD 2021.07.01