CICD 배포/CICD 배포

ChartMuseum

김붕어87 2023. 2. 9. 10:52
반응형
개요
kubernetes에 resource를 배포하려면 yaml 형태로 배포 한다.
kubernetes에 여러 개의 resource를 배포하려면 여러 개의 yaml 파일을 만들어서 배포해야한다.
여러 개의 yaml파일을 패키지해서 만든 것이 Chart(yaml 파일 모음)이라고 한다.
yaml파일의 모음인 “Chart”를 배포하기 위해서는 helm 명령어를 사용해서 배포한다.

 

Helm 이란? (링크)

 

ChartMuseum 이란? (링크)

Chart를 ChartMuseum에 저장해놓고서 불러와서 사용할 수 있는 Repository 이다. (예: yum, apt)

Chart를 배포하기 위해서는 해당 파일을 다운로드 받아서 설치 준비 과정이 필요하지만,

ChartMuseum를 사용하면 ChartMuseum에 바로 연결해서 chart 다운로드하지 않고도 설치 할 수 있다.

 

ChartMuseum 사용하는 이유

helm 명령어로 ChartMuseum에 업로드되어 있는 Chart들을 검색 및 사용할 수 있다.

Chart는 버전 별로 자동으로 관리해준다.

GitHub에 yaml 형태로 배포하게 되면 배포 후 에러가 발생해서 다시 원복 하려면 GitHub의 yaml 파일을 다시 원래되로 원복을 해야하지만, ChartMuseum를 사용하게 되면, 이전에 배포되었던 Chart 버전으로 바로 배포해서 빠른 롤백이 가능하다.

몇달 전에 배포된 이력도 Chart 버전으로 바로 찾거나 다시 사용할 수 있다.

 

ChartMuseum Install

  • ChartMuseum Chart정보는 AWS S3에 저장된다.
  • User / Password 및 IP 제한으로 보안 정책을 걸 수 있다.
  • 추후 SSL 인증서 설정해서 https으로 연결할 수 있다.

1. ChartMuseum 명령어 설치

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

chartmuseum -version
ChartMuseum version 0.15.0 (build 460d8ec)

2. ChartMuseum 구성

chartmuseum --debug --port=9090 --storage=amazon --storage-amazon-bucket=dev-chartmuseum --storage-amazon-prefix= --storage-amazon-region=ap-northeast-2 --basic-auth-user=<username> --basic-auth-pass=<password> &

3. Helm 명령어 설치

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh


helm version
version.BuildInfo{Version:"v3.9.4", GitCommit:"dbc6d8e20fe1d58d50e6ed30f09a04a77e4c68db", GitTreeState:"clean", GoVersion:"go1.17.13"}

4. ChartMuseum Repository 연결

helm repo add prod-chartmuseum http://localhost:9090  --username admin --password xxxxx
helm repo list

helm repo update
helm search repo  # chartmuseum에 업로드된 chart보기

5. Chart 업로드 / 다운로드

1. 차트 생성
helm package chartmuseum/ # chart 폴더
Successfully packaged chart and saved it to: /Users/dean/test/git/test/chartmuseum/chartmuseum-3.9.0.tgz

2. 차트 업로드 
curl --data-binary "@chartmuseum-3.9.0.tgz" https://localhost:9090/api/charts
curl --data-binary "@chartmuseum-3.9.0.tgz" https://localhost:9090/api/charts -u user:password

3. 차트 업로드 확인
helm repo update; helm search repo chartmuseum


4. 차트 삭제 
curl -X DELETE http://localhost:9090/api/charts/chartmuseum/3.9.0  -u user:password
helm repo update; helm search repo chartmuseum
  • ArgoCD & Spinnaker에서 ChartMuseum repository 연결 가능

 

 

 


ChartMuseum를 EKS Pod 설치 방법 - 테스트중…

 

1. custom.yaml 생성

vi custom.yaml

env:
  open:
    STORAGE: amazon
    STORAGE_AMAZON_BUCKET: prod-chartmuseum
    STORAGE_AMAZON_PREFIX:
    STORAGE_AMAZON_REGION: ap-southeast-1
  secret:
    AWS_ACCESS_KEY_ID: "xxxxx" ## aws access key id value
    AWS_SECRET_ACCESS_KEY: "xxxxx" ## aws access key secret value

2. chartmuseum 설치

helm repo add chartmuseum https://chartmuseum.github.io/charts
helm repo update

helm install chartmuseum chartmuseum/chartmuseum --version 3.1.0 -f custom.yaml

3. chartmuseum ingress 연결

vi chartmuseum_alb.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig":
      { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-southeast-1:xxxxx:certificate/xxxxxx
    alb.ingress.kubernetes.io/group.name: prod-chartmuseum
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/load-balancer-name: chartmuseum-load-balancer
    alb.ingress.kubernetes.io/scheme: internal
    alb.ingress.kubernetes.io/ssl-redirect: "443"
    alb.ingress.kubernetes.io/target-type: ip
    kubernetes.io/ingress.class: alb
  labels:
  name: chartmuseum-ingress
  namespace: infra
spec:
  rules:
  - host: chartmuseum.xxx.com
    http:
      paths:
      - backend:
          service:
            name: chartmuseum
            port:
              name: http
        path: /*
        pathType: ImplementationSpecific
반응형

'CICD 배포 > CICD 배포' 카테고리의 다른 글

[ Jenkins ] GitHub webhook 설정  (0) 2023.02.09
[ Jenkins ] 구성  (0) 2023.02.09
ArgoCD Vs Spinnaker 비교  (0) 2023.02.09
CD - Spinnaker - Artifact  (0) 2023.02.09
[ ArgoCD ] Notification 구성  (0) 2023.02.08