Argo Workflows 로컬에서 실행하기 - 파이널

뚜비·2023년 7월 31일
0

윈도우에서 WSL2로 손쉽게 리눅스와 golang 사용하기
How to install and setup Golang development under WSL 2




현재 windows에 wsl2와 Ubuntu가 설치되어 있는 상황이다(Windows에 wsl2와 Linux(혹은 Ubuntu)가 설치되어 있지 않은 경우 윈도우에 WSL로 리눅스 설치 라고 인터넷에 검색해보길!)

wsl -l -v

위 명령어를 cmd에서 실행시키면 사용가능한 Linux 배포판과 버전을 확인할 수 있다. (WSL의 기본 명령)



1. WSL 계정 만들기

계정 생성 및 사용

root 계정 대신 argo 계정을 만들어볼 것이다.

adduser argo

windows 명령프롬포트에서 wsl 명령어를 입력하면 wsl 환경이 뜨고 기본 계정인 root가 보이는데 이때, 위의 명령어를 입력하면 argo라는 이름의 계정을 생성한다. 패스워드 입력까지 진행되니 참고하길 바란다.


mkdir -p /home/argo
ls -l /home

위의 명령어는 각각 Ubuntu의 home 디렉토리에서 argo 폴더를 생성해주고 home에 있는 모든 파일과 디렉토리를 나열하는 명령어이다.


실제 Linux -> Ubuntu > home에 가보면 argo 폴더가 생성된 것을 확인할 수 있다.


chown -R 계정명:계정명 홈디렉토리 경로

argo라는 홈 디렉토리를 만들었으면 해당 홈 디렉토리에 argo 계정에 대한 권한을 부여해준다.
(해당 과정은 디렉토리에 본인이 원하는 계정이 특정 디렉토리에 대한 접근 권한을 부여한다. 위의 예시는 argo 계정에서 디렉토리를 생성했으므로 사실 안해도 된다^^)

🤔 잠깐! sudo 명령어시 에러발생

[계정] is not in the sudoers file.  This incident will be reported.

sudo 명령어를 사용했는데 위와 같은 에러가 뜬다면 해당 계정이 root 권한이 없을 때 발생한다.
root 계정으로 바꾸고

usermod -aG sudo argo
grep "sudo" /etc/group


위외 같은 명령어로 root 권한을 부여해주고 확인해준다!



2. go 설치

해당 가상 환경에 go를 설치하는 것이므로 그냥 다운로드 받으면 압축풀기를 할 때 가상환경에 접근을 못한다.

wget https://dl.google.com/go/go1.20.linux-amd64.tar.gz
wget https://dl.google.com/go/리눅스 버전

위의 명령어로 다운로드를 받은 후 golang 사이트에서 Linux 최신 버전을 입력한다.


sudo tar -xvf go1.20.linux-amd64.tar.gz

압축풀기를 진행한 후

sudo mv go /usr/local

go를 /usr/local 아래로 이동시킨다.


🤔잠깐 go 폴더에 접근권한이 없는 경우

su root

root로 계정을 바꾸고 해당 go 디렉토리가 있는 local 디렉토리까지 이동한 후

chmod 777 go

로 권한을 바꿔주었다! 확인해보니 소유자에 대해서만 접근권한이 있어서 root와 같은 그룹에 대해서는 접근이 불가했다.
파일 혹은 디렉토리 권한 바꾸기는 linux chmod 사용법를 참고하길 바란다.



짜잔 go 폴더에 잘 설치된 것을 확인할 수 있다.



3. go 환경설정

go env

해당 명령어는 GOPATHGOROOT와 같은 환경변수를 확인할 수 있는 명령어이다.


GOPATH와 GOROOT가 디폴트로 설치된 경로를 확인할 수 있다. 이를 바꿔보자!


Ubuntu 경로 변경하기

sudo vi ~/.bashrc

.bashrc를 vi에디터로 실행하라는 명령어이다.


i 키를 눌러서 변경 모드로 바꾸고

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH

esc를 눌러서 명령어 모드로 전환하고 :wq(저장, vi종료)를 입력한다.


source ~/.bashrc
echo $GOROOT

source ~/.bashrc로 변경사항을 적용시켜주고 $GOROOT의 값을 확인하는 명령어다.
잘 뜨는 것을 확인할 수 있다.


아까 GOPATH를 /home/argo/go로 지정했기 때문에 /home/argo 디렉 아래에 go 폴더를 생성하고 그 아래에 src 폴더를 생성해준다.
src 폴더가 argo 프로젝트 소스 코드가 들어갈 곳이다!



4. git clone

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

즉 argo 깃허브를 옆의 파일 경로에 clone하라는 의미이다.!

짜잔 잘 설치되었다.



5. npm과 devcontainer cli 설치

해당 argo-workflows 경로가 위치한 곳(/home/oss/go/src/github.com/argoproj/argoproj-workflows)

sudo apt install nodejs npm

해당 명령어를 입력하여 nodejs와 npm을 설치해주고


npm install -g @devcontainers/cli

으로 devcontainer를 설치하고자 한다.

문제발생 - EACCES: permission denied, mkdir 경로명

[NodeJS] npm install -g EACCES: permission denied 해결하기

'mkdir [경로]' 부분에서 에러가 났다. 즉 해당 경로가 존재하지 않기 때문에 mkdir 명령어를 실행할 수 없어 발생한 문제이다.



아놔 path가 /home/argo로 설정되어 있었다.. 조사해보니 $HOME 변수가.. /home/argo로 되어 있던 것.. 리눅스 환경변수 설정

root 계정에서 다음 명령어를 입력한다.

usermod -d /var/www/ testuser

즉 testuser의 홈디렉을 /var/www/로 변경해달라는 명령어이다.


문제발생 - EACCES: permission denied, rename


이거.. 예전에도 본 에러같은데..?
이제야 알겠다. 어떤 에러인지!!!

즉 이름을 수정할 권한이 없어서 발생한 문제이다. 권한을 다시한번 확인해보라고 한다.

chmod -R 755 usr

즉 usr 폴더 아래에 있는 모든 애들의 권한을 755로 바꿔주었다.


그래도 또 똑같은 에러가 나길래
Error: EACCES: permission denied, rename '/usr/local/lib/node_modules/expo-cli'
블로그


먼저 root 계정에서 /usr/bin/sudo의 권한을 root와 root가 포함된 그룹에 부여하고 4755로 권한 변경을 한 후.. argo 계정에서 node_modules에 접근이 가능하도록 해주었다.


문제 발생 - Not Found

뭐가 그렇게 불만이냐 앙!!!!
Dev Container CLI
공식문서를 확인해보니 Nodejs가 14버전이어야 한다고 하길래 다 삭제해주고 최신 버전으로 설치하기로 했다.
nodejs, npm 제거
node js 실행 시 Error: Can not find module semver 에러 해결하기


문제 발생 - EACCES: permission denied


이 문제는 접근권한에 대한 것이라

sudo chown -R $USER /usr/local/lib/node_modules

해당 명령어로 하면 해결 완..

드디어.. 드디어 되엇따!!!!!!!



6. devcontainer 생성 및 실행

docker desktop을 열고

devcontainer up --workspace-folder .

위의 명령어를 실행했는데...



문제발생 - docker ps -q -a --filter

outcome":"error","message":"Command failed: docker ps -q -a --filter label=devcontainer.local_folder=/home/oss/go/src/github.com/argoproj/argo-workflows --filter label=devcontainer.config_file=/home/oss/go/src/github.com/argoproj/argo-workflows/.devcontainer/devcontainer.json","description":"An error occurred setting up the container."}

어 이것도 어디서 본 에러다. docker desktop을 열고 실행하면 된다!



흐어어어 성공했다..ㅠㅠㅠㅠㅠ 한 5~10분 정도 걸린 것 같다.


Container, Images, Volumes이 위와 같이 생성되었다.



7. devcontianer 접속 및 실행

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

생성한 devcontianer에 접속하면


문제 발생 - 아무것도 안 뜬다?

이렇게 아무것도 안 뜬다.(?)


Docker Desktop에 가서 restart를 눌러보니

종료되었음을 확인할 수 있다.


echo $SHELL로 현재 사용중인 shell을 확인해보았는데 /bin/bash로 뜬다.. 현재 데브컨테이너가 실행중이고 해당 /bin/bash가 현재 내가 작업하고 있는 쉘이기 때문인 것 같다.



8. make 및 실행하기!!!

make clean

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

혹시 몰라 make clean을 해봤는데 흠 역시나 에러가 뜬다. 오호 go부분에서 에러가 뜬다. /home/argo에서 permission denied가 뜨는데 home 디렉 밑에 argo 디렉이 없기 때문이다. oss로 이름을 바꾸지 말껄.. 하... 어떤 부분이 /home/oss로 설정되어있는지를 찾는게 관건이다.


아놔 확인해보니까 PATH랑 GOPATH가 /home/argo로 잘못 설정되어 있는게 아닌가!!! (필자는 환경변수 설정을 다 해놓고 argo를 oss로 폴더 이름을 변경하였음. 여러분은 절대 그런 짓 하지 마쇼)


sudo vi ~/.bashrc

.bashrc를 vi에디터로 실행하고 수정해주었다.. 하이고...


docker desktop에 있는 container와 image와 volumes를 다 삭제해주고 다시 devcontainer 부터 생성해야 겠다.. 허허허
위와 같이 잘 뜨면

make start UI=true

로 실행시켜보자!!



문제발생 - error current-context is not set

왜 대체 나는 쉽게쉽게 진행되는 일이 없을까? 하나 문제 생기면 다른 곳 하나 문제 생기고 아주 난리난리^^


지금 makefile의 444줄에서 에러가 뜬다..


링크텍스트
슬랙에서 비슷한 에러를 해결하신 팀원분의 글을 보았다..(감사합니다.. 흙흙..)쳐기


아주 빡치는 구나..


list 확인




여기서 에러!!


문제발생 = Config not found : Manage kubeconfigs



아 설마 쿠버네티스를 안 깔아줘서?!

쿠버네티스 설치


sudo apt install curl

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

해주면

짜잔 잘 생성되었음

version확인


이후에 다시 docker로 돌아가

Configure Access to Multiple Clusters

생각해보니 pre-build.sh에서 쿠버네티스가 제대로 설치도 안 되어있고 생성이 안 되었던 걸 보면 curl 명령어가 실행이 안 되었던 것 같아. devcontainer 부터 다시 생성하기로 했다.

역시나.. curl 명령어가 되니 pre-build.sh에서 문제가 있었다.. 즉 pre-biuld.sh를 보면 sudo 명령어를 한다. 생각해보면 우분투에서 sudo명령어를 하면 계속 비미를 번호르(벨로그 정책상..)를 작성해주었는데... argo계정을 sudo 명령어 허가를 줘야 하는듯

# install kubectl
curl -LO https://dl.k8s.io/release/v1.27.3/bin/linux/$(go env GOARCH)/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl cluster-info

리눅스 접근

vi /etc/sudoers

로 수정해줄 것이다.

이렇게 수정해주고

Stack Overflow에 나와있는 것처럼

$ sudo apt-get remove curl
$ sudo apt install curl

를 진행한 후 다시 devcontainer up work..

그래도 똑같은 에러 발생하는데.. 흠.. 일단 kubectl 명령어를 입력하면 잘 출력하는 것을 보니 curl 명령어는 제대로 완료가 되었다. 문제는


chmod 명령어 허가가 안 되었다는 의미..


그래서 root로 바꿔주고 devcontainer 명령어를 주었다. 그래도 안 됨.. kubectl 파일은 있는데 HOME(/home/oss)에 .kube 폴더가 생성이 안 됨..

그래서 root 계정에서 src까지 접근한 후 prebuild.sh에 있는 명령어를 문제의 명령어까지 치니 갑자기 되는 것이 아니겠는가!!!


뭐야 왜 생긴거야~~

chmod -R 755 oss

아무래도 접근 권한 문제 가능성이 커서 root 계정으로 바꾸고 위와 같은 명령어로 권한을 바꿔주었다.

아니 그니까 되는데..?


아니 왜 되는거야?



이전에는 저 contecxt 부분이 다 null로 되어있었는데.. 진짜 감동이다... ㅠㅠㅠㅠ 심지어 context도 존재한다...

일단 문제 해결을 위해서는
문제 해결 인프런
블로그

앗 그냥 Deocker desktop에서 컨테이너를 중지하고.. 했는데오

문제발생 - The connection to the server was refused

The connection to the server 192.168.1.2:6443 was refused - did you specify the right host or port?


현재 bash 쉘에서 config 파일을 확인해보면 잘 있었는데 클러스터가 없다???

오류가 난 Makefile 444줄의 코드를 bash에서 실행해봤는데... 역시ㅣ.. 자꾸 저 API 그룹을 찾을 수 없다고 뜬다.. 그리고 kubectl api-resources를 입력해보니 계속 같은 이슈발생!!


해당 파일 경로로 들어가보면 api 파일이 잘 있는디???
근데 etc/kubernetess 폴더가 존재하지 않는다.. 설치과정에서 문제가 있음이 분명 즉 .kube는 잘 설치되었으나... kluster와 node, api 등의 설치에 문제가 있는 것 같다.

해결방법 을 토대로 명령어를 입력하니
역시나 또 에러 발생^^ 그냥 명령어 앞에 sudo를 붙여주면 된다.


해당 경로에 kubernetes-archive가 없군.. 확실히 문제가 있었어.

Install and Set Up kubectl on Linux

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

0개의 댓글