[Kubernetes] Helm deploy 정리

안녕하세요? 정리하는 개발자 워니즈입니다. 지난 시간에 Helm 차트로의 이관에 대해서 정리를 했습니다. 우선 helm chart로 정리된 내용을 배포하는 방법에 대해서 정리를 해보도록 하겠습니다.

지난 글들은 아래를 참고 해주시면 됩니다.

애초에 구성한대고 kubectl apply를 통해 각 resource를 배포할 수도있고, helm을 설치했기때문에 헬름을 통해서도 배포가 가능합니다. 하지만 운영에서는 안정성과 정확성이 가장 중요하기 때문에 어떤 도구를 이용하여 배포를 할 것인가를 고민을 많이 했습니다.

1. 헬름 배포를 위한 아키텍처

전체적인 구성도는 위와 같습니다. 작업 flow는 아래와 같은 작업 순서로 진행이 됩니다.

  • Image Build
  • Helm Chart fix
  • Helm repo added
  • Helm deploy
  • Service check

위으 순서로 진행되는 가운데 Helm 을 관리해줄 방안이 필요했습니다. 찾던중에 Helm에서 공식으로 지원하는 Chart museum 이 있습니다. cahrt museum 을 우선 로컬에 설치하고 repo를 localhost로 지정을 했습니다.(추후에는 S3를 이요해서 upload하는 방식으로 가는 것이 맞을 것 같습니다. )

2. Image build

우선 위의 순서상으로 operation team에서 필요한 작업(ex apache 웹서버에 대한 수정 발생)을 gitlab을 통해 수행 후, push합니다. 그 후에 jenkins에서는 gitlab의 내용을 모두 받습니다.

author
├── dispatcher.any
├── Dockerfile
└── httpd.conf

author를 기준으로 파일 들은 위와 같습니다.

  • 2개의 설정 파일
  • 1개의 Docker file

Docker file의 내용은 다음과 같습니다

FROM httpd:2.4.29
WORKDIR /usr/src/app
ADD https://www.adobeaemcloud.com/content/companies/public/adobe/dispatcher/dispatcher/_jcr_content/top/download_8/file.res/dispatcher-apache2.4-linux-x86-64-4.2.3.tar.gz ./dispatcher/
RUN tar -xzvf ./dispatcher/dispatcher-apache2.4-linux-x86-64-4.2.3.tar.gz -C ./dispatcher && \
    cp ./dispatcher/dispatcher-apache2.4-4.2.3.so /usr/local/apache2/modules/mod_dispatcher.so
RUN mkdir /usr/local/apache2/cache
RUN chmod 777 -R /usr/local/apache2/cache
ADD dispatcher.any /usr/local/apache2/conf/dispatcher.any
COPY httpd.conf /usr/local/apache2/conf/httpd.conf

httpd의 아파치 웹서버에서 AEM 필요 모듈을 설치하고 2개의 config file을 넣어주는 내용입니다.

jenkins는 helm 으로 CLI 서버에 올라가있습니다.

$(aws ecr get-login --no-include-email --region ap-northeast-2) && \
docker build -t ssdc-ecr . && docker tag ssdc-ecr:latest 194506033013.dkr.ecr.ap-northeast-2.amazonaws.com/ssdc-ecr:author_$time && \
docker push 194506033013.dkr.ecr.ap-northeast-2.amazonaws.com/ssdc-ecr:author_$time

Job의 내용은 위와 같고, 실제 docker build를 통해서 태깅을 한 후, ECR로 올리는 내용입니다.

3. Helm Deploy

Image Build 수행시에 오늘의 날짜로 태깅을 하도록 해두었습니다. (ex 20200109) 실제 이미지는 author_20200109와 같은 형식으로 올라가있고, Helm을 통해서 신규 Revision으로 배포를 하면됩니다.

Deploy같은 경우는, Rundeck으로 구성을 했습니다. 시중에 많이 사용하는 Tool로는 argoCD, spinnaker 등 여러가지가 있습니다.

Rundeck을 사용한 이유는 아직까지는 복잡한 배포 절차가 없고, helm 명령을 통해서 Deploy만 하면되기 때문입니다.

오늘의 날짜가 자동지정되어 배포하게 됩니다.

helm upgrade dev-aem-author --set image.tag=author_$time /root/helmchart/chart/dev-aem-author

위의 상태가 반영이 되면, 아래와 같이 배포 결과를 보여줍니다.

15:39:39    Release "dev-aem-author" has been upgraded.
15:39:39    LAST DEPLOYED: Thu Jan  9 06:39:39 2020
15:39:39    NAMESPACE: dev-aem
15:39:39    STATUS: DEPLOYED
15:39:39    
15:39:39    RESOURCES:
15:39:39    ==> v1/Pod(related)
15:39:39    NAME                                   AGE
15:39:39    dev-disp-author-helm-6749748478-l4bht  0s
15:39:39    dev-disp-author-helm-7655dddd5b-88pzr  25s
15:39:39    
15:39:39    ==> v1/Service
15:39:39    NAME                      AGE
15:39:39    dev-disp-svc-author-helm  45h
15:39:39    
15:39:39    ==> v1beta1/Deployment
15:39:39    NAME                  AGE
15:39:39    dev-disp-author-helm  45h

이렇게 이미지 빌드 & 쿠버네티스 배포를 통해서 실제 쿠버네티스 클러스터내에 어플리케이션을 업데이트 해주는 작업을 진행합니다.

4. 마치며..

이번시간에는 Helm 차트에 대한 이미지 빌드와 Helm을 어떻게 배포하는지를 확인해보았습니다. 헬름을 통해서 배포를 하는 것이 훨씬 간편하고 차트또한 repo로 저장이 되어있어야 관리차원에서 좋습니다. 쿠버네티스 플랫폼에 대해서 얼추 전체 흐름을 공부하다보니, 확실히 정리가 잘 되어있는듯 합니다. 구글에서 왜 수십년 넘게 사용해왔는지 알 수 있을것 같습니다.

다음 이시간부터는 심화과정으로 정리를 해볼까 합니다. 다음시간도 기대해주세요!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다