And Brain said,

CI/CD Argonautica - Helm, 타륜 본문

IT/CICD Argonautica

CI/CD Argonautica - Helm, 타륜

The Man 2023. 9. 12. 15:28
반응형

 

CI/CD Argonautica

Docker, 선박
Kubernetes, 조타수 Harbor, 항구
Helm, 타륜
Istio, 돛
Jenkins, 선장
ArgoCD, 출항

1장/ Loki, Trickster

Troubleshooting

 

이제, 우리는 선박도 있고 조타수도 있고 우리만의 항구까지 갖췄습니다. 출항을 하려고 배를 봤지만 조종석에 키가 없습니다. 출항하기 위해선 조종석이 필요하겠죠. Helm은 우리 조종석의 키가 되줄 것입니다. 설치는 아래 링크를 참고바랍니다.

https://theworldaswillandidea.tistory.com/189

 

Helm, 컨테이너 오케스트레이션을 위한 타륜

Kubernetes는 yaml 파일들을 사용하여 간단하고 편리하게 컨테이너 오케스트레이션을 가능하게 합니다. 하지만 이를 위해 우리는 복잡한 yaml 파일들을 관리해야 합니다. 우리는 이마저도 불편합니

theworldaswillandidea.tistory.com

 

아래의 Helm 명령어를 통해 chart를 만드시길 바랍니다.

helm create msa-chart

 

우리의 MSA Chart의 기본 구조는 아래와 같을 것입니다.

msa-chart/
│
├── charts/
│   ├── discovery/
│   ├── config-server/
│   ├── apigateway/
│   ├── user-service/
│   └── ... (다른 서비스들)
│
├── templates/
│   ├── harbor-cert-secret.yaml
│   ├── harbor-regcred-secret.yaml
│   ├── hpa.yaml
│   └── ...
│
├── files/
│   ├── harbor-cert.pem
│
├── values.yaml
└── Chart.yaml

 

이전 시간에 만든 harbor-cert.pem 파일을 files 디렉토리 내에 만들어줍시다. Service Discovery 를 위해 MSA의 discovery pod를 올려보도록 할 것입니다.

 

image:
  name: discovery
  tag: latest

service:
  type: ClusterIP
  port: 8761

volume:
  logPath: /usr/app/logs

 

discovery 차트 내의 values.yaml 파일에 위 부분만 추가해줍시다. discovery 차트는 

 

 

이렇게 deployment yaml파일과 service yaml 파일로 구성될 것입니다. 아래는 deployment yaml 파일입니다. 간략하게 적은 것이니 참고하시길 바랍니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: discovery
  labels:
    app: discovery
spec:
  replicas: 1
  selector:
    matchLabels:
      app: discovery
  template:
    metadata:
      labels:
        app: discovery
    spec:
      containers:
      - name: discovery
        image: {{ .Values.global.imageRegistry }}/{{ .Values.image.name }}:{{ .Values.image.tag }}
        imagePullPolicy: Always
        ports:
        - containerPort: 8761
        env:
        - name: apigateway.hostname
          value: {{ .Values.env.apigatewayHostname }}
        volumeMounts:
        - mountPath: {{ .Values.volume.logPath }}
          name: log-volume
        - name: certs
          mountPath: /etc/ssl/certs/
      imagePullSecrets:
      - name: harbor-regcred
      volumes:
      - name: certs
        secret:
          secretName: harbor-certs
      - name: log-volume
        emptyDir: {}

 

service yaml 파일은 아래와 같이 작성하였습니다.

apiVersion: v1
kind: Service
metadata:
  name: discovery
spec:
  type: {{ .Values.service.type }}
  ports:
  - port: 80
    targetPort: 8761
    protocol: TCP
  selector:
    app: discovery

 

이제 harbor에 접근을 위한 인증서 설정을 해볼 것입니다. 최상위 차트에 harbor-cert-secret.yaml 파일과 harbor-regcred-secret.yaml 파일을 작성합니다.

 

// harbor-cert-secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: harbor-certs
type: Opaque
data:
  harbor-cert.pem: {{ .Files.Get "files/harbor-cert.pem" | b64enc | quote }}
// harbor-regred-secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: harbor-regcred
  labels:
    app: {{ template "msa-chart.name" . }}
    chart: {{ template "msa-chart.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: {{ printf "{\"auths\":{\"%s\":{\"username\":\"%s\",\"password\":\"%s\"}}}" .Values.registry.server .Values.registry.username .Values.registry.password | b64enc | quote }}

 

이제,

 

helm install 명령어를 통해 배포해줍니다. kubectl get pods로 discovery pod 가 잘 띄워졌는지 확인까지하면 끝. 다음 시간에 config server와 apigateway 그리고, 서비스 하나까지 연결지어서 MSA 구축을 해보도록 할 것입니다. 그럼 다음에 만날 때까지 안녕~

(설정을 하면서 글을 적은 것이 아닌 완성 후 적은 것이니 빠진 부분이 있을 수 있습니다. 안되신다면 댓글을 남겨주세요.)

 

Thanks for watching, Have a nice day.

반응형
Comments