[Kubernetes] ChartMuseum 설치하기


현업에서는 GKE를 사용하고 있어서 Helm Chart Repository를 당연하게 GCP Artifact Registry를 사용하려고 했다.

하지만 다른 tool과 이슈가 있어 다른 Repo를 찾고 있었다.

artifact hub는 Private하려면 직접 구축해야할 것 같은데, 배보다 배꼽이 더 큰 느낌이 들었다.

그렇게 OpenSource를 뒤적거리던 중, ChartMuseum을 찾았다.




https://github.com/helm/chartmuseum

생각보다 많은 star 수에 놀랐는데, 채택하게된 이유로는 API 기반이며 UI를 추가 설치할 지 선택할 수 있다.

프로세스가 go로 만들어져 가볍고 Backend로 Google Cloud Storage를 사용할 수 있어서 한 번 사용해보고자 한다.
(당연하게도 AWS S3, Azure, Alibaba 등 여러 Cloud의 Storage를 지원한다.)

설치 방식은 helm으로 k8s내에 설치도 가능하지만 binary로 설치했다.

설치 방법은 되게 쉽다.

curl https://raw.githubusercontent.com/helm/chartmuseum/main/scripts/get-chartmuseum | bash

위 명령어만 날리면 설치자체는 마무리 된다.




ChartMuseum에서는 GCS 연결에 필요한 Auth를 env값으로 받는 것 같다.

그래서 주로 사용되는 GOOGLE_APPLICATION_CREDENTIALS 에다가 GCP IAM Key Json를 환경변수로 추가해주면 된다고 한다.

Key의 권한으로는 편하게 스토리지 관련 수정권한을 포함하여 설정했다.

vim /usr/lib/systemd/system/chartmuseum.service
[Unit]
Description=ChartMuseum Server for Helm
Requires=network.target
After=network.target

[Service]
User=chartmuseum
Group=chartmuseum
ExecStart=chartmuseum --port=8080 --storage="google" --storage-google-bucket="chartmuseum" --storage-google-prefix="" --write-timeout 600
Restart=on-failure
Environment="GOOGLE_APPLICATION_CREDENTIALS=/home/chartmuseum/.chartmuseum.json"
RestartSec=5
TimeoutStartSec=30
TimeoutStopSec=30

[Install]
WantedBy=multi-user.target

Repo 서버 자체는 systemd로 관리하면 좀 더 편할 듯 하여 systemd에 등록했다.


systemctl daemon-reload
systemctl start chartmuseum
systemctl enable chartmuseum

추가적으로 daemon을 reload해주고 서비스를 실행했다.


curl -s --data-binary @chart-0.1.0.tgz http://localhost:8080/api/charts

사용법 자체는 간단한데 자세한 API들은 공식문서를 참조하면 될 것 같다.




맨 처음에는 host 장비의 환경변수로 GOOGLE_APPLICATION_CREDENTIALS을 등록하여 시도했는데, 계속 GCS에 접근할 때 에러가 발생했다.

알고보니 systemd에서 따로 변수를 물고가기에 위의 service 파일에다가 환경변수를 설정했다.

그 후에는 정상적으로 GCS에 업로드 되었고 확인해보니 index 파일을 만들어 Helm Chart를 관리하는 것으로 보인다.


좀 더 써봐야 알겠지만은 일단 UI 없이 가벼워서 편하고 GCS를 통해 필요한 기능들을 보완하면 되기에 유용하게 사용할 것 같다.

문제가 있어서 바꾸게 된다면…. 이것보다 간편한게 있을까 싶다.