이전 포스트에서 구현한 흐름
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의 타입을 로드밸런서로 바꾸면
이렇게 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 선택
일단 username 하고 password 를 입력하긴 했는데
repo 가 public 이면 굳이 입력 안해도 연결이 된다
굿
ArgoCD Application 생성
메인화면에서 new app
sync policy 는 git repo 의 변경사항을 자동으로 탐지하기 위해 Automatic 으로 설정하고
self heal 까지 선택
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 하나 만들어주고
목적지 설정해주고 create
SYNC 확인
status 가 초록불
argocd 를 쓰는 이유인것 같은데
이렇게 diagram 식으로 배포환경을 보여줘서 많이 쓰는것 같다
맨 우측 pod 까지 모두 정상 배포된 모습
음.. 클러스터 ip 로 배포되는건 좀 그런데
나중에 로드밸런서 타입으로 서비스 되도록 service.yaml 을 수정해야겠다
CI-CD 전체 확인
굿
11.19 7:20pm
근데 만약 다시 배포가 되면 저 외부 ip 의 로드밸런서가 바뀌는지 잘 모르겠다
저게 고정되어있으면 좋을텐데 흠...
11.20 5:46pm
로드밸런서 dns 주소는 유지된다
route53 연결 가능할듯
그리고 왜인지는 모르겠지만 jenkins 에서 ci 가 되었을때
argocd 를 수동으로 싱크 시키거나 기존 pod 를 삭제하지 않으면 새로운 버전이 깔리지 않는 오류가 발생했었다.
kustomize 로 버전관리를 해줘야 하는 이유인것 같은데
조원 한분이 helm chart 로도 버전관리 자동화가 가능하다고 해서 이 부분을 알아볼 생각이다.
테스트 영상
참고 했던 블로그
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
'Kubernetes > CICD' 카테고리의 다른 글
argoCD pipeline demo (0) | 2023.07.17 |
---|---|
깃허브 웹훅이 작동하지 않을때 (0) | 2023.04.19 |
Jenkins + ArgoCD + ECR + EKS 구성해보기 - CI -완- (0) | 2022.11.18 |
Jenkins + EKS 구성해보기 6 (테스트 성공) (0) | 2022.11.17 |
Jenkins + EKS 구성해보기 5 (참고) (0) | 2022.11.17 |