[프로젝트01] 2. 구축

dongdorrong·2022년 12월 19일
0

Career

목록 보기
3/3
post-thumbnail

1. EKS 클러스터 Terraform 코드 작성 (참고)

2. terraform apply

3. Dockerfile, GitHub Action workflow 작성 (참고)

원래는 1개 Dockerfile을 가지고 서비스 A,B,C에 대한 키워드 [A, B, C] 를 환경 변수 처리한 다음, docker build 할 때 주입시켜서 서비스 A, B, C에 대한 이미지를 만들 수 있도록 처리하고 싶었는데, workflow에 구현을 아직 디테일하게 다루지는 못해서 서비스 별 Dockerfile을 따로 만들어서 빌드하였다.

#######################################
# .github/workflows/main.yaml
#######################################
jobs:
  image-push:
    runs-on: ubuntu-latest
    steps:
    ...
      - name: Build and push (A)
        uses: docker/build-push-action@v2
        id: docker_build_a
        with:
          context: .
          file: ./project01/resources/container/service_a/Dockerfile
          push: true
          tags: |
            ghcr.io/${{ github.repository_owner }}/project01/service_a:latest
      - name: Build and push (B)
        uses: docker/build-push-action@v2
        id: docker_build_b
        with:
          context: .
          file: ./project01/resources/container/service_b/Dockerfile
          push: true
          tags: |
            ghcr.io/${{ github.repository_owner }}/project01/service_b:latest   
    ...
#######################################
# Example (Dockerfile, Service 'A')
#######################################
FROM nginx:alpine
RUN echo "My name is SERVICE_A !!" > /usr/share/nginx/html/index.html ; \
    chmod +x run.sh ;\
    apk update && apk upgrade --ignore alpine-baselayout

4. 테스트 이미지 기반으로 배포할 Helm Chart 작성 (링크)

1개 차트에다가 value만 업데이트 하는 방식으로 배포할 수 있도록 구성하였다.

##################################
# 1. EKS Cluster Configuration
##################################
# namespace
kubectl create ns dongdorrong

# ghcr.io credential
kubectl create secret docker-registry ddr-regcred -n dongdorrong \ 
--docker-server=https://ghcr.io/dongdorrong/project01 \
--docker-username=$DUN \
--docker-password=$DPW \
--docker-email=$DMAIL

##################################
# 2. helm dry-run
##################################
helm upgrade -i ddr-a ./dongdorrong-nginx-chart --dry-run --debug \
--set service.name=ddr-svc-a \
--set deployment.name=ddr-deploy-a \
--set serviceAccount.name=ddr-sa-a \
--set image.repository=ghcr.io/dongdorrong/project01/service_a \
--set service.port=8181
...
...

##################################
# 3. helm install
##################################
helm upgrade -i ddr-a ./dongdorrong-nginx-chart \
--set service.name=ddr-svc-a \
--set deployment.name=ddr-deploy-a \
--set serviceAccount.name=ddr-sa-a \
--set image.repository=ghcr.io/dongdorrong/project01/service_a \
--set service.port=8181
...
...


root@project01host:~# kubectl get all -n dongdorrong
NAME                                READY   STATUS    RESTARTS   AGE
pod/ddr-deploy-a-7b5db99757-szlz7   1/1     Running   0          75s
pod/ddr-deploy-b-79999476c7-4nllx   1/1     Running   0          14s
pod/ddr-deploy-c-59d885dd4f-jwhhf   1/1     Running   0          5s

NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/ddr-svc-a   ClusterIP   172.20.27.202    <none>        8181/TCP   76s
service/ddr-svc-b   ClusterIP   172.20.208.128   <none>        8282/TCP   15s
service/ddr-svc-c   ClusterIP   172.20.28.247    <none>        8383/TCP   6s

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ddr-deploy-a   1/1     1            1           76s
deployment.apps/ddr-deploy-b   1/1     1            1           15s
deployment.apps/ddr-deploy-c   1/1     1            1           6s

NAME                                      DESIRED   CURRENT   READY   AGE
replicaset.apps/ddr-deploy-a-7b5db99757   1         1         1       76s
replicaset.apps/ddr-deploy-b-79999476c7   1         1         1       15s
replicaset.apps/ddr-deploy-c-59d885dd4f   1         1         1       6s

5. Prometheus, Grafana 설치 (링크)

클러스터 모니터링에 대한 대시보드를 import해서 모니터링 가능함을 확인하였다.

6. ArgoCD 설치 (링크)

GitHub repository 연동까지 마치고 Dockerfile과 chart 버전을 수정해서 푸시하였는데 싱크가 자동으로 수행되지 않았다. 확인해보니까 서비스 별 차트를 하나로 통합해서 사용하려고 하다보니, 차트에 누락된 값이 있어서 싱크가 이뤄지지 않은 것으로 확인했다. 생각해보니 MSA 형태로 수 많은 서비스에서 차트를 통합해서 쓰이는 일은 별로 없어서 이번 테스트 방법 자체가 잘못되지 않았나 싶다.

7. 정리

ELK를 제외하고는 경험해보지 못했던 서비스들을 이번 프로젝트로 구축을 해보게 되어서 개인적으로는 의미가 큰 프로젝트였다. 생각했던 것 만큼 AWS 비용도 많이 나오지 않아서 좀 더 자주 구축 테스트를 해볼 예정이고, 서비스 사용 방법의 경우에는 Local PC에 구축해서 좀 더 심도있게 다뤄볼 수 있도록 연습해봐야겠다.

8. ArgoCD 다시 배포 테스트 (2022.12.22)

ArgoCD 통해서 배포 상태를 확인했을 때 정상적으로 배포가 되지 않은 것 같았다. 1개 Helm chart로 values 값을 서비스 3개에 별도로 할당해서 배포했던 것을 의심스러워서 서비스 3개에 대한 Helm chart를 따로 두었을 때 배포가 잘 되는지 테스트를 진행해 보았다.
컨테이너 이미지 수정을 했을 때, 파드가 저절로 재배포 되지는 않았지만 적절한 옵션만 부여한다면 자동으로 배포될 것으로 예상된다.
ArgoCD DeepDive는 내년 상반기 내로 시간을 길게 두고 여러가지 테스트를 해보아야겠다.

profile
DevOps 엔지니어 / 열심히 해서 잘하자

0개의 댓글