k8s에 해당하는 글 3

[k8s] Argo 설치 후 살펴본 기능들

Server/k8s|2020. 3. 11. 19:52

k8s 환경만 있다면 Argo 설치는 간단했습니다.

 

Argo 설치

kubectl create namespace argo
kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo/stable/manifests/install.yaml

네임스페이스(argo)를 만들고

yaml 파일을 apply 하면 끝 입니다.

 

Argo 설치 후 Pod 확인

kubectl get pod -n argo
NAME                                   READY   STATUS    RESTARTS   AGE
argo-server-55f5985454-gwlkv           1/1     Running   60         6d11h
workflow-controller-7dffbf956c-nv8vn   1/1     Running   0          6d11h

그리고 생성한 네임스페이스에 떠있는 pod을 확인해보면

두가지가 있는데(이전에 생성했던거라 AGE가 올라가 있습니다)

argo-server, workflow-controller 입니다.

 

 

Argo-Server

argo-server는 argo-ui로 기본적으로 2746을 포트로 하고 있고 브라우저를 통해 접속해보면

flow를 작성해서 submit 한다거나 모니터링이 가능합니다.

최근 2.5에서는 cron도 추가 된것을 확인 할 수 있습니다.

보통 저는 사용이 필요할때

kubectl -n argo port-forward deployment/argo-server 2746:2746

커맨드를 통해서 포트포워딩 하여 활용하고 있습니다.

 

Workflow-Controller

workflow-controller는 argo에서 사용하는 crd(커스텀 리소스)인 wf(WorkFlow)나 cwf(cronWorkFlow) 를 처리 합니다

 

 

Argo 기능들

Argo는 Step과 DAG(그래프 방식) 지원하지만

추가적인 기능들도 제공하고 있습니다.

 

 

 

추후 Argo를 통해 제공해야할 업무가 있어서

추가적인 기능들을 하나씩 파악하며 예제를 돌려보았습니다.

 

suspend & resume
- suspend 초, 분, 시, 일 단위 가능, 시간을 안주면 approve 방식으로도 가능
- resume은 UI에서 가능, argo cli에서도 가능


retry
- 재처리 duration(s,m,h,day)
- maxDuration, 이 시간동안 성공안하면 실패
- limit 

exit-handlers
- 워크플로우 상태에 따라 처리할수 있도록, {{workflow.status}}
- 마지막 종료 실패 결과를 운영자에게 알리기 위해서 주로 활용할듯 함(이메일, SMS)

volumeMounts
- 기존에 만들어둔 Volume을 마운트 시키거나, Flow내 LifeCycle을 갖는 Volume을 마운트 하여 Step간 파일 전달

Daemon Containers
- 워크 플로우가 실행되는 동안 사용될 컨테이너를 실행할 수 있음
- Step중에 Daemon으로 설정하게 되면 해당 Pod은 내려가지 않고 다음 Step 실행

Sidecars
- 실행하는 Step의 Pod에 sidecar(한 pod 안에 같이 뜨는 컨테이너)를 지정할 수 있음

 

 

 

이미지 출처 : https://github.com/argoproj/argo/blob/master/docs/architecture.md

'Server > k8s' 카테고리의 다른 글

[k8s] MINIO  (0) 2020.02.21
[k8s] Argo  (0) 2020.02.20

댓글()

[k8s] MINIO

Server/k8s|2020. 2. 21. 19:40

Argo 그리고 KubeFlow를 살펴보며

 

Argo의 경우에는 Step Step 마다 넘겨주는 artifact

그리고 KubeFlow는 pipeline에 넘기는 파일들을 어디서 저장하고 어떻게 넘겨주나 살펴봤더니

 

Artifact 서버 설정 파트가 있고, Argifact 서버 설정으로는 Cloud Storage 혹은 MINIO(Object Storage)를 설정하도록 되어있었습니다

(https://argoproj.github.io/docs/argo/docs/configure-artifact-repository.html)

(https://www.kubeflow.org/docs/pipelines/overview/pipelines-overview/)

 

Cloud 업체들이 지원하는건 일단 상용 서비스들일테니 우선 고려대상은 아니고

오픈소스인 MINIO를 잠시 살펴보았습니다.

 

MINIO, 어디서는 MINIO어디서는 Minio라고 적혀있고 어디서는 MinIO로 적혀있고

처음 봤을때 "민 아이오" 가 맞나? "미니오"가 맞나? 애매 했는데

MINIO 채널 유튜브를 보니 강의자 분이 "민 아이오"로 읽으시는걸 보며 "민 아이오"로 읽는게 맞는것 같습니다.

로고는 MINIO, 공식 홈페이지 타이틀은 MinIO...

(https://min.io/)

(https://github.com/minio/minio)

 

MINIO는 Object Storage며, Cloud Storage로 적합하다고 합니다

(AWS S3가 ObjectStorage의 표준이라고 볼수 있다고 하는데, S3와 호환을 지원한다고 합니다.)

 

공식 홈페이지에 따르면, 표준 하드웨어 환경기준 R/W 속도가 183GB/s , 171GB/s 라고 표기되어있습니다

(https://min.io/resources/docs/MinIO-Throughput-Benchmarks-on-NVMe-SSD-32-Node.pdf)

(https://min.io/resources)

(32노드, SSD 기준이네요)

(24노드 하드디스크 기준으로는 16GB/s, 9GB/s )

 

MINIO에는 "Bucket" 그리고 "Object" 라는게 존재합니다.

거의 파일의 "디렉토리" 그리고 "파일" 에 대응 된다고 보면 되는것 같습니다.

 

MINIO는 기본적인 Cli 커맨드로는 

파일 시스템처럼

ls(list 확인, bucket이나 object), cat(object의 내용 확인), cp(object 복사), rm(object 삭제) 등 익숙한 명령어를 지원하고

 

Bucket에 Event를 설정하여 변경을 감지 하는 부분도 물론 지원합니다.

(Webhook으로도 받을수 있지만 여러 큐 시스템이나, MySQL로도 이벤트를 받을 수 있습니다.)

데이터 조회도 SQL 로도 가능한것으로 보입니다.

 

MINIO 클라이언트는 자바, 자바스크립트, 파이썬, Go, .Net, Haskell 로 지원하고 있어 원하는 언어에 맞게 클라이언트 프로그램을 작성 할수 있도록 되어있습니다.

 

하드웨어 장애에도 데이터를 보호하기 위해 Erasure Code 라거나, 분산 처리 환경을 위해 여러 방식들을 지원하고 있는데 각 내용들은 필요해지면 추가적으로 살펴볼 예정입니다.

 

'Server > k8s' 카테고리의 다른 글

[k8s] Argo 설치 후 살펴본 기능들  (0) 2020.03.11
[k8s] Argo  (0) 2020.02.20

댓글()

[k8s] Argo

Server/k8s|2020. 2. 20. 19:27

업무상 필요에 의해 

Container 기반 WorkFlow 엔진을 알아볼 필요가 있었습니다.

(배치의 Flow에 활용할까? 하는 부분 때문이죠)

 

물론 짧은 시간동안 알아봤기 때문에 깊이는 부족하지만 기억력이 좋지 않아 글로 남깁니다.

 

Argo(프로젝트 중 WorkFlow, https://github.com/argoproj/argo

vs

AirFlow(https://airflow.apache.org/)

 

Argo는 Container 기반, 즉 단계마다 KubeContainer를 각각 띄움

 

AirFlow는 AirFlow 서버가 떠있다 가정하고(airflow scheduler) 동작하는것으로 보여

필요한것은 Kube 기반이 필요했기 때문에 Argo를 살펴봤습니다.

 

Argo는 KubeFlow에도 활용되고 오픈소스 컨테이너 워크 플로우로 

Go로 작성 되어있습니다.

 

설치하는 부분을 살펴보면 workFlow를 처리하기 위한 커스텀 컨트롤러(workflow-controller) 를 설치하는 부분들이 나오고

(https://argoproj.github.io/docs/argo/docs/getting-started.html)

 

실제 workFlow를 사용하는것도 yaml파일에 kind를 Workflow(커스텀 리소스)를 활용해서 동작합니다.

 

Argo는 WorkFlow 기능을 제공하는 만큼 다양한 기능들을 제공하는데

(https://argoproj.github.io/docs/argo/examples/README.html)

단순 Flow를 위한 Step이나 더 복잡한 flow처리를 위한 DAG, 

종료에 따른 Flow처리를 위한 Condition 등 많은 기능들을 살펴보고 있는데

(사실.. 이 각 부분은 추가로 살펴볼 부분이...없...)

 

추가로 살펴볼 예정인것은 artifact 부분인데, 앞에 실행한 output 들에 대해

다른 Job을 처리시 넘겨주거나 할때 artifact를 통해 처리하는것 같아 보이고

(아직은 확실하지는 않지만..)

artifact storage로 'Minio'(Open Source Object Storage server) 라는 것들 지원한다고 합니다..

 

음.. 오브젝트 스토리지라...

저장소긴 한데.. Minio가 뭘해주는지 Job간 어떻게 데이터를 전달하는지 추가로 봐야할듯 합니다..

 

일단은.. 여기까지..

 

 

 

 

'Server > k8s' 카테고리의 다른 글

[k8s] Argo 설치 후 살펴본 기능들  (0) 2020.03.11
[k8s] MINIO  (0) 2020.02.21

댓글()