devops/minikube

helm template 수정

꼬락이 2024. 11. 27. 15:56

지금까지 Helm으로 배포할 때는 환경변수를 고려하게 세팅되어 있지 않았다. 환경변수를 쿠버네티스의 secret형태로 넣어서 DB 정보를 추가하여 camping-backend가 aws rds와 통신하는 것을 목표로 하겠다.

 

그럴려며 우선 Helm 차트를 가져와야 하겠다.

$ helm repo add ggocamping https://chart.ggocamping.com/devopscharts/
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ggocamping" chart repository
Update Complete. ⎈Happy Helming!⎈

$ helm pull ggocamping/ggocamping-backend --untar
$ cd ggocamping-backend

 

values.yaml 하단에 아래와 같이 수정하고

...
secrets: {}
#  - name: my-secret
#    keys: ["DB_USER", "DB_HOST", "DB_PASSWORD", "DB_PORT"]

configs: {}
#  - name: my-config
#    keys: [ "PROXY"]

주석 부분은 나중에 helm-values에서 풀어주면서 사용할 것이기 때문에 현재는 이렇게 두자.

 

그리고 핵심부분은 deployments.yaml이다.

여기를 신경써서 바꾸도록 하자.

...
      containers:
        - name: {{ .Chart.Name }}
          securityContext:
            {{- toYaml .Values.deployment.securityContext | nindent 12 }}
          image: "{{ .Values.deployment.image.repository }}:{{ .Values.deployment.image.tag | default .Chart.AppVersion }}"
          imagePullPolicy: {{ .Values.deployment.image.pullPolicy }}
          {{- if or .Values.secrets .Values.configs}}
          env:
          {{- with .Values.secrets}}
          {{- range . }}
          {{- $secretName := .name }}
            {{- range .keys }}
            - name: {{ . | upper}}
              valueFrom:
                secretKeyRef:
                  name: {{ $secretName }}
                  key: {{ . | upper }}
            {{- end}}
          {{- end }}
          {{- end }}
          {{- with .Values.configs }}
          {{- range . }}
          {{- $configName := .name }}
            {{- range .keys }}
            - name: {{ . | upper }}
              valueFrom:
                configMapKeyRef:
                  name: {{ $configName }}
                  key: {{ . | upper }}
            {{- end}}
          {{- end }}
          {{- end }}
          {{- end}}
          ports:
...(이하중략)

 

이렇게 파일을 수정했으면 차트를 배포하면되겠다. 차트 버전이 바뀐 것이니 차트는 2.0.0으로 수정해서 배포하겠다.

 

$helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ggocamping" chart repository
Update Complete. ⎈Happy Helming!⎈

$helm search repo ggocamping
NAME                            CHART VERSION   APP VERSION     DESCRIPTION                        
ggocamping/ggocamping-backend   2.0.0           1.23.0          A Helm chart for ggocamping-backend
ggocamping/istio-gateway        1.0.0           1.0.0           istio-gateway for kubernetes

 

차트 버전이 바뀌었으니 이제 helm-values파일을 바꿀차례다.

helm-values/dev/ggocamping-backend/values.yaml

secrets:
  - name: aws-rds-db-credentials
    keys: ["DB_USER", "DB_HOST", "DB_PASSWORD", "DB_PORT", "DB_NAME"]

configs:
  - name: camping-backend-cm
    keys: ["PROXY"]

 

이렇게 배포하면 error가 날텐데

 

그 이유는 aws-rds-db-credentials secrets과 camping-backend-cm configmap이 없기 때문이다. 일단 배포하고 이 리소스들을 만들어주겠다.

xxxx라고 써있는 부분은 적절히 수정하면 된다.

kubectl apply -f - << EOF
apiVersion: v1
kind: Secret
metadata:
  name: aws-rds-db-credentials
  namespace: ggocamping-backend
type: Opaque
stringData:
  DB_USER: "admin"
  DB_PASSWORD: "xxxxxx"
  DB_HOST: "ggocamping-db-v1.xxxxxxxxxxxxxxxxx.rds.amazonaws.com"
  DB_PORT: "3306"
  DB_NAME: "xxxxx"
EOF

 

그리고 proxy 세팅도 추가해주자.

kubectl apply -f - << EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: camping-backend-cm
  namespace: ggocamping-backend
data:
  PROXY: "false"
EOF

 

이제 배포를 하게 되면

 

성공적으로 database가 연결된 것을 볼 수 있다.