본문 바로가기
Cloud

Kustomize, Helm Chart 시스템 개선

by VENUSIM 2024. 12. 27.


이 글에 대한 개선 버전 입니다.

https://dev-junhee.tistory.com/79

 

Kustomize, Helm Chart 시스템 구축

Helm은 템플릿 엔진이고 Kustomize는 오버레이 메커니즘을 따릅니다.Helm Chart에서 템플릿된 YAML 파일을 불러옵니다.Kustomize 가 환경별(Dev,Stg,Live) 로 YAML 파일을 수정(Patch/Overlay) 합니다.완성된 Yaml 이

dev-junhee.tistory.com

 

Helm Chart 를 S3 가 아닌 Git으로 이전 

  1. 현재 Helm Chart 는 Object Storage 에 올라가 있어, 수정이 쉽지 않고 심지어 Public 하게 공개 되어 있다
  2. 수정하려면 로컬에서 Helm Package 작업을 한 뒤 S3 Upload 하는 불편한 과정을 거쳐야 함
  3. Helm Chart 를 Git으로 옮기고, 폴더 Hierarchy 구조 변경
├── backend
│   ├── Chart.yaml
│   ├── templates
│   │   ├── deployment.yaml
│   │   └── service.yaml
│   └── values.yaml
├── frontend
│   ├── Chart.yaml
│   ├── templates
│   │   └── job.yaml
│   └── values.yaml
└── socket
    ├── Chart.yaml
    ├── templates
    │   ├── configmap.yaml
    │   ├── service.yaml
    │   └── statefulset.yaml
    ├── values-prod.yaml
    └── values.yaml

 

ArgoCD 에서 Gitlab 으로 바로 붙는 경우, 인증도 되고 Charts 로 바로 사용 가능하다.

Kustomize 를 통해 Gitlab Repo 를 바라보려면, Repo 가 Chart 형태를 갖춰야 한다.

Kustomize 를 하는 서버에서 Charts 로 접근이 가능해야 한다.

 

따라서 Charts 에 대한 수정 사항을 Push 한 뒤 로컬에서 아래 명령어 실행

간단하게 object Storage 에 넣을 걸 Gitlab에 넣는 작업으로 개선하였다.

# 패키징 하기 (폴더 이름으로 수정 사항 있으면 아래 작업으로 반영)
helm package backend

# 퍼블리싱하기 (gitlab.com Access)
curl --fail-with-body --request POST \
     --form 'chart=@backend-0.1.0.tgz' \
     --user charts:glpat-xmEcybDSdMFaR1ZRDb_j \
     https://gitlab.com/api/v4/projects/83/packages/helm/api/stable/charts

 

Kustomize 에서 Charts 세팅

helmCharts:
- name: backend  # CHART 이름
  repo: https://gitlab.com/api/v4/projects/83/packages/helm/stable # Chart 주소, Project=83 이고, channel 은 stable 이다.
  version: 0.1.0
  releaseName: example-helm
  namespace: default
  valuesFile: values.yaml

 

 

Jenkins를 이용한 자동화

@Library('shared-library-teams') _ // Shared Library (Jenkins > System > Global Pipeline)

pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                script{
                    checkout([
                        $class: 'GitSCM',
                        branches: [[name: "main"]],
                        userRemoteConfigs: [[credentialsId: 'gitlab-access-token', url: "http://gitlab.com/helmcharts/charts.git"]]
                    ])
                }
            }
        }
        
        stage("delete exist charts") {
          steps {
              script{
                try{
                  def runServer = sh(script: """
                    helm package backend
                    helm package frontend
                  
                    curl --fail-with-body --request POST \
                     --form 'chart=@backend-0.1.0.tgz' \
                     --user charts:glpat-access--token\
                     https://gitlab.com/api/v4/projects/83/packages/helm/api/stable/charts
                     
                    curl --fail-with-body --request POST \
                     --form 'chart=@frontend-0.1.0.tgz' \
                     --user charts:glpat-access-token \
                     https://gitlab.com/api/v4/projects/83/packages/helm/api/stable/charts
                     
                  """, returnStatus: true, returnStdout: true)
                }catch (Exception e){
                    echo "fail"
                }
              }
          }
        }
    }
}

  1. Application Kustomize 수정

기존 base/kustomization.yaml 에서 dev 로 helmChart 선언 이동

helmCharts:
- name: backend
  repo: https://gitlab.com/api/v4/projects/83/packages/helm/stable
  version: 0.1.0
  releaseName: example
  namespace: default
  valuesFile: values.yaml

 

 

values.yaml 추가

# 사용하지 않는 값들은 Default 유지
# 사용 하는들에 대해서는 Values.yaml (Kustomize) 에 표기

#### Deployment Conf ####
image:  example-image
imagePullSecrets:
  - name: ncpsecret
replicas: 1

#### Application Conf ####
applicationPort: 8080
healthcheckPath: /

#### Security Enabled ####
security:
  enable: false

#### Common Environment ####
commonEnv:
  enable: true
  type: "dev"  # config-map, secret 등의 namesuffix 로 들어감

#### Live Mode ####
isLive:
  enable: false  # true or false
  cpuRequest:  # ex) 100m, 3, 5
  memRequest:  # 1Gi, 512Mi
  diskRequest:  # 옵션, 1Gi, 500Mi
  minReplicas: 
  maxReplicas: 
  hpaCpu:  # request 기반 Percentage
  hpaMem: 
###################

 

ArgoCD 에서 공통 리소스를 공유 하다보니 Out Of Sync 발생
https://argo-cd.readthedocs.io/en/stable/user-guide/diffing/

 

System-level diff 적용 (argocd-cm)

resource.customizations.ignoreDifferences.all:
    managedFieldsManagers:
    - kube-controller-manager
    jsonPointers:
    - /metadata/labels

'Cloud' 카테고리의 다른 글

[Gitlab] Backup, Restore 이후 500 에러 트러블 슈팅  (1) 2025.01.13
[CSAP] K8S Node Init Script  (2) 2024.12.27
[ArgoCD] 계정 생성  (2) 2024.12.27
[ArgoCD] FE 배포 Helm 구성기  (3) 2024.12.27
[Tempo] Grafana Tempo 적용기 (2)  (1) 2024.11.19

댓글