Helm Chart를 사용한 마이크로서비스 배포

날아올라돼지야·2024년 9월 1일
0

Helm Chart를 사용한 마이크로서비스 배포

이 강의에서는 Helm Chart를 활용하여 마이크로서비스를 Kubernetes 클러스터에 배포하는 방법을 알아보겠습니다. 기존에 WordPress Helm Chart를 설치했지만, 실제 프로젝트에서는 조직의 마이크로서비스 요구사항에 맞는 Helm Chart를 직접 작성해야 합니다. 이를 통해 Helm의 강력한 기능을 활용하여 여러 마이크로서비스를 효과적으로 배포하고 관리할 수 있습니다.

1. Helm Chart 생성 및 초기 설정

먼저, Helm Chart를 생성하기 위해 작업 디렉토리를 설정합니다. 이 과정에서는 helm create 명령어를 사용하여 Helm Chart의 초기 구조를 생성합니다.

  • 작업 디렉토리 설정:

    mkdir -p section_16/Helm
    cd section_16/Helm
  • Helm Chart 생성:

    helm create easybank-common

이 명령어를 실행하면 easybank-common이라는 이름의 Helm Chart가 생성되고, 이 Chart는 기본적인 템플릿과 파일 구조를 포함합니다.

2. 불필요한 템플릿 파일 삭제 및 초기 설정

Helm Chart가 생성되면 기본적으로 포함된 템플릿 파일들을 삭제하고, 필요한 템플릿 파일만을 사용하여 Helm Chart를 구성합니다.

  • 불필요한 파일 삭제:
    기본적으로 생성된 템플릿 파일(deployment.yaml, service.yaml 등)은 Nginx 웹사이트 배포를 위한 것이므로, 이를 삭제하고 필요한 템플릿 파일을 새로 작성합니다.

  • 기본 설정 수정:
    values.yaml 파일의 기본 값들도 삭제하거나 수정하여 사용하지 않는 값을 제거합니다.

3. 템플릿 파일 작성

이제 Helm Chart의 템플릿 파일들을 작성합니다. 여기서는 service.yaml, deployment.yaml, configmap.yaml 세 가지 파일을 작성합니다.

  • service.yaml 템플릿:
    이 템플릿 파일은 서비스 객체를 정의합니다.

    {{- define "common.service" }}
    apiVersion: v1
    kind: Service
    metadata:
      name: {{ .Values.service.name }}
    spec:
      selector:
        app: {{ .Values.app.label }}
      type: {{ .Values.service.type }}
      ports:
        - protocol: TCP
          port: {{ .Values.service.port }}
          targetPort: {{ .Values.service.targetPort }}
    {{- end }}
  • deployment.yaml 템플릿:
    이 템플릿 파일은 배포 객체를 정의합니다.

    {{- define "common.deployment" }}
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ .Values.app.label }}
    spec:
      replicas: {{ .Values.replicaCount }}
      selector:
        matchLabels:
          app: {{ .Values.app.label }}
      template:
        metadata:
          labels:
            app: {{ .Values.app.label }}
        spec:
          containers:
          - name: {{ .Values.app.label }}
            image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
            ports:
              - containerPort: {{ .Values.containerPort }}
    {{- end }}
  • configmap.yaml 템플릿:
    이 템플릿 파일은 ConfigMap 객체를 정의합니다.

    {{- define "common.configmap" }}
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: {{ .Values.global.configmapName }}
    data:
      spring.profiles.active: {{ .Values.global.activeProfile }}
      spring.config.import: {{ .Values.global.configImport }}
      eureka.client.serviceUrl.defaultZone: {{ .Values.global.eurekaUrl }}
      keycloak.auth-server-url: {{ .Values.global.keycloakUrl }}
    {{- end }}

4. Values 파일 설정

각 마이크로서비스에 맞는 설정 값을 values.yaml 파일에 정의합니다. 이 파일은 템플릿 파일에서 동적으로 참조할 값을 포함합니다.

5. Helm Chart 사용 예시

이제 이 Helm Chart를 사용하여 마이크로서비스를 배포할 수 있습니다. 모든 마이크로서비스에 대해 동일한 템플릿을 사용하지만, values.yaml 파일에서 각 마이크로서비스의 구체적인 설정 값을 제공합니다.

  • Helm Chart 설치:

    helm install easybank-common ./easybank-common
  • Helm Chart 제거:

    helm uninstall easybank-common

결론

Helm Chart를 통해 여러 Kubernetes 매니페스트 파일을 단순화하고, 대규모의 마이크로서비스 네트워크를 효과적으로 관리할 수 있습니다. 다음 강의에서는 이 Helm Chart를 실제로 사용하여 EazyBank 마이크로서비스를 배포하는 방법에 대해 알아보겠습니다.

참고 자료

profile
무슨 생각하며 사니

0개의 댓글