devops

폐쇄망(on-primise) 기준 k8s+git(gitlab)+helm+argo 사용법

초이짬 2022. 12. 29. 18:12
728x90

k8s를 구축 운영하기 위해 devops 형태의 ci/cd를 많이 구축하고 다양하게도 구축한다.

 

2022년12월 29일 현재 gitlab+tekton+argo 형태이고 jenkins도 있다

 

일단 gitops관련해서는 따로 설명이 필요하지만 현태 gitops 형태로 운영하고 있다.

 

rancher와 gitops형태로 구성되게 되면 더 이상 외부 작업자 혹은 운영관리를 위해 cli 작업은 불 필요해지게 된다.

 

그런 형태의 아키텍처를 구축해서 진행하다 보니 필수 적으로 helm 과 마주하게 된다.

 

결국은 설정 변경을 오직 git에서만 관리하면 되게 되는데 일반 helm은 대부분 설명이 cli 바탕으로 하게 된다.

 

helm 차트는 다양하게 저장소를 선택 할 수 있는데 tgz 형태의 패키지 압축으로 관리할 수 있는데 이걸로는 현재 gitops 연동은 어렵다

 

결국 최종 그림은 git에 helm chart 파일을 모두 올려두고 value 파일을 같이 둔 다음 argo를 해당 위치로 바라보게 하면 된다.

 

그게 아닐경우 일반적인 설명은 아래와 같이 된게 있는데 gitops는 안쓴다.

 

tgz 파일을 만들었다고 가정하에

 

curl 로 git api 를 호출해서 밀어 넣는 구조이다.

 

curl --request POST \

       --form 'chart=@[업로드할tgz파일명]' \

       --user [token명]:[token] \

       http://서버주소/api/v4/projects/[git프로젝트ID]/packages/helm/api/stable/charts

 

이런식으로 호출 하면 해당 git 프로젝트에 등록이 되고 이건 일반 file 항목에 노출되는게 아니고 gitlab 기준 package에 등록이 된다.

 

저기서 중요한건 해당 생성된 프로젝트의 token을 발부 받아야 된다. 즉 user에는 사용자 id 같은거는 안된다.

 

그리고 마지막 호출 api 주소의 경우는 [] 로 묶은 부분외에는 저게 고정 api 주소다 끝에 stable 같은 경우는 변경이 되는걸로 알지만 그대로 유지 했다. 저렇게 등록한 helm 패키지는 정상으로 적용되면 argo에서 등록시 repositories 항목에서 helm 선택 하고 주소를 위에 등록한 주소를 http://서버주소/api/v4/projects/[git프로젝트ID]/packages/helm/api/stable 

이렇게까지만 등록하면 된다. 

 

그렇게 하고 app 생성시 해당 repo를 선택 하게 되면 chart를 불러 오고 생성이 되는데 gitops 형태는 못쓰기 때문에 의미는 없어 보인다.

 

저렇게 등록이 된 helm 패키지의 경우 k8s 마스터에서 helm 설치후 repo add 를 통해 helm 일반적인 사용법으로 사용할 수 있다.

 

helm repo add --username [token명] --password [token] [헬름명]  http://서버주소/api/v4/projects/[git프로젝트ID]/packages/helm/api/stable

 

이렇게 등록하면 정상적으로 helm repo list에 보인다

728x90