공부하기싫어
article thumbnail

이전 포스트에서 구현한 흐름

 

1. 로컬에서 깃허브로 push 하면

2. github 하고 jenkins webhook 으로 변화를 감지해서 트리거가 발동

3. eks 외부 jenkins 서버에서 깃의 jenkinsfile 에 따라 stages 진행

4. stage(checkout) - 깃허브 자격증명으로 repo clone

5. stage(image build) - jenkins 서버 내에서 이미지 빌드

6. stage(image push) - hub.docker 로 이미지 push

7. stage(deploy) - updated docker image 태그를 git push (미완)

 

이제 EKS 내 argoCD를 설치해서 CD 까지 구현해보자

eks 클러스터로 접근해서 시작

 

CD

이전 포스트 초반에 helm 과 aws-loadbalancer-controller 를 설치했었다

 

ArgoCD 설치 + 웹 접속

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

kubectl -n argocd get all

svc의 타입을 로드밸런서로 바꾸면

namespace - argocd

이렇게 dns 주소가 나와서 이를 통해 접속

문어

숙회땡기누

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo

위 코드로 admin 초기 비밀번호를 얻을 수 있다

admin / passwd

로 접속

 

Repository 연결

저번에 삽질했던 파트인데 ㅋㅋ

argoCD 메인 - 설정 - repository - CONNECT REPO USING HTTPS 선택

private

일단 username 하고 password 를 입력하긴 했는데

repo 가 public 이면 굳이 입력 안해도 연결이 된다

successful

굿

 

ArgoCD Application 생성

메인화면에서 new app

general

sync policy 는 git repo 의 변경사항을 자동으로 탐지하기 위해 Automatic 으로 설정하고

self heal 까지 선택

 

source

repo url 은 connect 에서 연결해줬기때문에 목록에서 선택해주고

배포할 app의 git repo 에서의 위치를 path 에 입력해줌

나는 yaml 파일들을 prod 에 넣어놨음

aicore0934:~/environment $ kubectl create namespace demo-prod-1
namespace/demo-prod-1 created
aicore0934:~/environment $ kubectl get namespace
NAME              STATUS   AGE
argocd            Active   17m
default           Active   29h
demo-prod-1       Active   5s
kube-node-lease   Active   29h
kube-public       Active   29h
kube-system       Active   29h
aicore0934:~/environment $

EKS 에 namespace 하나 만들어주고

 

destination

목적지 설정해주고 create

 

SYNC 확인

app status

status 가 초록불

applications

argocd 를 쓰는 이유인것 같은데

이렇게 diagram 식으로 배포환경을 보여줘서 많이 쓰는것 같다

맨 우측 pod 까지 모두 정상 배포된 모습

음..

음.. 클러스터 ip 로 배포되는건 좀 그런데

나중에 로드밸런서 타입으로 서비스 되도록 service.yaml 을 수정해야겠다

 

 

 

 

 

 

CI-CD 전체 확인

push
webhook
build
sync
service
application

굿

 

11.19 7:20pm

근데 만약 다시 배포가 되면 저 외부 ip 의 로드밸런서가 바뀌는지 잘 모르겠다

저게 고정되어있으면 좋을텐데 흠...

 

11.20 5:46pm

로드밸런서 dns 주소는 유지된다

route53 연결 가능할듯

그리고 왜인지는 모르겠지만 jenkins 에서 ci 가 되었을때

argocd 를 수동으로 싱크 시키거나 기존 pod 를 삭제하지 않으면 새로운 버전이 깔리지 않는 오류가 발생했었다.

kustomize 로 버전관리를 해줘야 하는 이유인것 같은데

조원 한분이 helm chart 로도 버전관리 자동화가 가능하다고 해서 이 부분을 알아볼 생각이다.

 

테스트 영상

https://youtu.be/fgW6DCzxXfw

 

 

참고 했던 블로그

docker 설치
https://dongle94.github.io/docker/docker-ubuntu-install/#%EC%9B%B9%EC%97%90%EC%84%9C-%EC%84%A4%EC%B9%98-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC-%EB%B0%9B%EC%95%84-%EA%B0%84%EB%8B%A8%EC%84%A4%EC%B9%98


헬름 설치 참고
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/helm.html


cicd 참고
https://ssunw.tistory.com/entry/CICD-EKS-%EC%97%90%EC%84%9C-Jenkins-ArgoCD-%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8-%EA%B5%AC%EC%84%B1-1

https://velog.io/@joshua_s/EKS-CICD-%ED%99%98%EA%B2%BD%EA%B5%AC%EC%B6%95-1#3-ecr-%EC%83%9D%EC%84%B1

https://velog.io/@joshua_s/EKS-CICD-%ED%99%98%EA%B2%BD%EA%B5%AC%EC%B6%95-2#eks


jenkinsfile 작성 참고
https://kubernetes.io/ko/docs/tasks/manage-kubernetes-objects/kustomization/#%EB%8B%A4%EC%9D%8C-%EB%82%B4%EC%9A%A9


kustomization 작성 참고
https://malwareanalysis.tistory.com/402


jenkins-github webhook 참고
https://cokes.tistory.com/119

https://velog.io/@suhongkim98/jenkins-%EC%9B%B9%ED%9B%85-%EC%84%A4%EC%A0%95%ED%95%B4%EC%84%9C-CI-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0#github-integration-%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8-%EC%84%A4%EC%B9%98