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가 연결된 것을 볼 수 있다.