Argo Workflows 로컬에서 실행하기

뚜비·2023년 7월 19일
0

참고 영상
참고 문서
다혜님의 블로그



이번에는 멘토님이 참고 영상과 참고 문서를 통해 argo workflows 환경을 직접 로컬에서 실행해보라는 지령을 주셨다.



Overview



Argo workflow controller design

  • 쿠버네티스 서버에서 이벤트가 발생하면 informer를 생성한다. informer를 queue에 넣고

  • 호스트 모드랑 로컬 모드가 있음
  • CLi는 서버랑


Running Locally

Argo workflow를 실행하기 위해서는 2가지 방법이 존재하는데
1. VSCode를 활용하여 Dev-container를 사용하는 방법 (7분 예상)
2. Requirements들을 컴퓨터에 순서대로 직접 설치하는 방법(1시간)


한 팀원 분께서 2가지 방법에 대한 차이를 질문하셨는데 멘토님과 팀원 분이 저렇게 답변을 주셨으니 참고! 그냥 여러가지 필요한 환경세팅을 자동으로 할 것이냐 수동으로 할 것이냐의 차이인듯 하다.


-1번 Git Clone (?)

음.. 공식문서를 읽다가 처음부터 막혔다. 보통 git clone을 할 때

$ git clone https://github.com/argoproj/argo-workflows.git

로 clone 받는 것으로 알고 있는데

$GOPATH/src/github.com/argoproj/argo-workflows

공식문서에는 위와 같이 적혀있는 것이 아닌가!!

Go 언어 설치 글을 참고하였습니다.

  • $GOPATH은 Go 언어로 된 프로젝트를 사용하거나 개발할 때 사용할 Working directory를 가리키는 환경변수를 의미한다.
  • 또한 Go 언어용 Working direcotry로 사용할 곳에 GOPATH 환경변수를 설정해주고 GO 관련 도구를 설치해주면 bin, pkg, src 디렉토리가 설치된다.

즉 Argo workflow Github 프로젝트는 Go 언어로 이루어진 프로젝트이기 때문에 Go의 관례에 따라 src/github.com/argoproj/argo-workflows 디렉토리 안에서 git clone을 해줘야 한다는 의미!!

안 그래도 질문을 주신 팀원이 있었는데.. 멘토님께서 devcontainer 활용한다면 clone 위치가 중요하지 않다고 하셨다!

하지만 난 해보겠다!!


0번 Golang 설치

Go 설치하기 및 hello world 찍어보기![Go] 윈도우에서 Go 설치하기글을 참고하였습니다.

Download and Install에서 OS에 맞게 다운로드를 해주고


명령 프롬포트에서 go version을 확인해주고 정상적으로 설치 되었는지 확인해준다.


Windows > 고급 시스템 설정 > 환경변수에 들어가보면 GOPATH 값이 자동으로 설정되어 있는 것을 확인할 수 있는데 이를 내가 원하는 폴더 위치로 바꿔준다.


나는 로컬 디스크 C에 go 폴더를 생성해주고 해당 위치 값으로 바꿔주었다.
GOROOT는 go가 설치된 경로여야 한다.


1번 Git Clone


go 폴더 아래에 위와 같은 폴더를 생성하고


해당 폴더에서 git clone https://github.com/argoproj/argo-workflows.git을 진행시켰다!!


2번 Development Container

  • Development Container는 잘 정의된 tool/runtime stack과 필수요소들과 함께 실행되고 있는 Docker container이다.
  • 개인의 local 환경에서 tool을 install 하지 않고도 development container를 사용하여 argo workflows를 개발하기 위해 해야할 모든 것들을 할 수 있게 해준다.

development container는 다음과 같은 방법으로 사용할 것이다.

  1. Visual studio codeThe Visual Studio Code Remote - Containers extension 설치
    해당 extension은 Docker container를 full-featured 개발환경으로 사용할 수 있게 한다.
  • clone한 argo-workflow 폴더를 VS code 환경에서 열면 development container를 자동으로 사용할 수 있다^_^
  • 시스템 요구사항은 해당 링크에서 확인!
  1. Dev-Container CLI 이용!

  1. Vscode extension을 활용한 방법
    짜잔 VSCode를 통해 argo-workflows 폴더를 열어보았다. 안에 .devcontainer 폴더를 확인할 수 있었다!!

Dev containers 공식문서

그러나 Dev containters extension에 가보니 Reopne in Container 알림을 클릭하면 Dev container가 자동으로 빌드되고 실행되는 것을 알 수 있었다! (해당 공식문서에 가서 requirement를 확인하시길! Docker가 설치되어야 한다.)


문제 발생 - error during connect : error during connect: In the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect.

아놔 자동으로 빌드되지 않고 해당 에러 발생

✅ 해결과정
고마우신 분의 해결 글을 참고하여 해결했다.

Docker를 처음 열어보니까 알약의 호스트 파일 보호 알림 창이 뜨면서 다시 꺼졌는데 아마 원인이 알약 때문이 아닐지..
다시 Docker를 실행하니 잘 된다.


혹시 몰라 docker > settings > General에서 Expose daemon~을 눌러주었다.



다시 Reopen in Container를 클릭하니 위와 같이 Dev container가 설치되고 실행되고 있음을 확인할 수 있었다.


문제 발생 - devcontainer.json.git 에서 error



Dev containers는 잘 설치가 되었는데.. 흠. 왜 에러가 뜨는 걸까

✅ 해결과정1 : WSL 배포..

Dev-containers 공식문서에 다시 확인해보니 WSL2(windows 용 리눅스 시스템)를 사용하지 않는 경우 Docker에 해당 설정이 필요함을 알았다.

그래서 Docker > settings > Resources > WSL Integration에 갔는데 해당 설정은 체크되어 있는데.. WSL2 distro가 없어서 WSL1을 WSL2로 바꿔주거나 새로 설치하라고 한다. docker 공식문서 참조

wsl ---install

명령 프롬포트에 가서 wsl를 설치하라는 명령어를 입력해준다.. 이미 설치되어 있다고 한다.

wsl -l -v

wsl의 버전을 확인해준다.
오잉 docker-desktop, docker-desktop는 VERSION2로 잘 설치되어 있었다!

아 잠깐만... WSL2 distro(배포판)이 없어서 생긴 문제가 아니겠는가?!!? (wsl --install 사진보면 '다음은 설치할 수 있는 유효한 배포 목록입니다'라고 잘 설명되어 있거늘)

wsl --install -d Ubuntu

명령어를 실행하여 ubuntu라는 이름으로 배포판을 설치해줬다(User랑 비번 입력하면 끝!) 옆에 보면 Window에서 돌아가는 나의 작은 Ubuntu 환경을 확인할 수 있다.^^

wsl --set-default Ubuntu

distro 배포 디폴트는 Ubuntu로 설정해주었다!


Docker > settings > Resources > WSL integration에 다시 들어가보니 경고글이 Ubuntu로 바뀌어 있다는 것을 확인할 수 있다! 야호!


✅ 해결과정2 : 다시 Reopen
VScode로 다시 Argo-workflows에 들어가니 Reopen 버튼이 생겼고 클릭했다!


문제발생 - container setting 중 발생한 에러


이건 또 뭐니.. 하나 고치려면 다른 하나가 또 문제고 홀리..



2. devcontainer CLI를 활용

갓수녕(님) 갓수녕(님)!
dev container
devcontainer cli를 사용하기 위해 설치를 해줘야 한다.


나는 이미 npm이 설치되어 있기 떄문에 해당 명령어로 바로 devcontainer를 설치했다.
npm install -g @devcontainers/cli


devcontainer <command>

Commands:
  devcontainer up                   Create and run dev container
  devcontainer build [path]         Build a dev container image
  devcontainer run-user-commands    Run user commands
  devcontainer read-configuration   Read configuration
  devcontainer features             Features commands
  devcontainer templates            Templates commands
  devcontainer exec <cmd> [args..]  Execute a command on a running dev container

Options:
  --help     Show help                                                 [boolean]
  --version  Show version number                                       [boolean]

devcontainer 명령어의 경우 위와 같다!


devcontainer up --workspace-folder .

위의 명령어는 --workspace-folder . 를? 생성하고 실행하라는 건가?


문제 발생 - command failed : docker ps -q -a --filter

참고자료
docker ps -q -a --filter 명령어를 해석하면 다음과 같다.

  • --filter : 특정 상태의 컨테이너를 나열
  • -a : 중지된 Container를 포함해 실행 중인 Docker Container 나열
  • -q : Docker container 나열
    실행중인 container와 중지된 container를 나열하라는 명령어 인데 해당 명령어가 실패했다는 뜻

Stack Overflow에서 확인해보니 docker desktop을 열지 않았기 때문이라네!!

뭐야 되네!!



문제 발생 - /usr/bin/env: 'sh\r': No such file or directory

출처, stackoverflow
운영체제의 차이에 의해서 발생한 에러로 .devcontainer/pre-build.sh 의 onCreateCommand 명령어에서 windows는 폴더 접근 시 /로 접근하는데 MAC OS나 리눅스는 \로 접근해서 생긴 문제다.

If you are using VS Code, you can switch from CRLF to LF and save the file again. This will replace all CRLF with LF.

CRLF를 LF로 바꾸면 된다고 한다..
사실 위의 명령어로 실행했다가 이 에러가 뜬 건데 컴퓨터 끄고 다시 켜보니 잘 된다.. 뭐지



devcontainer exec --workspace-folder . /bin/bash

해당 명령어는 실행중인 container 위에서 워크스페이스 폴더에 /bin/bash를 열고 명령어를 실행하겠다는 의미인것 같다.

오왕 bash shell이 보인다! 이제 shell에서 code를 빌딩할 수 있다!



아놔 공식문서 왜케 실행하기 어렵게 만들었냐!!! 다혜님의 블로그글을 참고해보았다.

make clean 

make clean은 Makefile에 정의된 매크로인데

위와 같은 명령어를 실행하라는 의미이다.

문제 발생 - go:could not create module cache

해당 에러는 go 언어에서 발생한 문제인 것 같다... 잘 보면.. go 폴더 아래에 pkg 폴더에 접근이 권한이 불가하다는 의미같은데..

예제로 배우는 Go 프로그래밍
pkg, bin 폴더를 안 만들어서 그런건지.. 나는.. 그냥 go 프로그램 시키면 자동으로 만들어주는 줄 알았는데.. 아니었나보다!!

fatal: detected dubious ownership in repository at '/home/vscode/go/src/github.com/argoproj/argo-workflows'
To add an exception for this directory, call:

        git config --global --add safe.directory /home/vscode/go/src/github.com/argoproj/argo-workflows
fatal: detected dubious ownership in repository at '/home/vscode/go/src/github.com/argoproj/argo-workflows'
To add an exception for this directory, call:

        git config --global --add safe.directory /home/vscode/go/src/github.com/argoproj/argo-workflows
fatal: detected dubious ownership in repository at '/home/vscode/go/src/github.com/argoproj/argo-workflows'
To add an exception for this directory, call:

        git config --global --add safe.directory /home/vscode/go/src/github.com/argoproj/argo-workflows

그 위의 에러를 확인해보니 로컬 레포에서 의심스러운 소유권을 감지했다는데..


git config --global --add safe.directory /home/vscode/go/src/github.com/argoproj/argo-workflows

즉 안전한 폴더 경로 설정을 해두라는 명령어를 실행하니 아래와 같이 master가 나왔다.



그럼에도 pkg에 접근을 못한다는 에러가 뜬다.. GO가 설치된 경로가 Program Files에 있었는데 계속 관리자 권한이 필요하다는 내용이 있었다.

profile
SW Engineer 꿈나무 / 자의식이 있는 컴퓨터

0개의 댓글