2024. 12. 6. 11:32ㆍKubernetes/Kubernetes_Service
안녕하세요, 달콤한달팽이입니다.🐌🙂
이번 시간에는 AWS CodePipeline과 ArgoCD를 사용
EKS 자동 배포 환경을 구축하는 방법에 대하여 알아보겠습니다.
ArgoCD란?
ArgoCD란, Kubernetes 환경에서의 GitOps 기반 CD(Continuous Delivery) 도구입니다.
즉, Manifest 파일(yaml)의 변경사항을 감시하며, 현재 배포된 환경의 상태와 Menifest 파일의 상태를 동일하게 유지하도록 도와줍니다.
앞선 실습들에선 Kubernetes에서 구성 요소 배포를 위해 Manifest 파일(yaml)을 사용하였습니다.
이러한 파일들은 점점 쌓이게 되고, 관리가 힘들어지게 될 것입니다.
실제로 최근들어 다양한 기업들에서도 MSA(MicroService Application) 방식의 운영환경이 증가하며 관리가 필요한 파일이 증가하고 있습니다.
때문에 Kubernetes 환경에서의 CI/CD 구성이 요구되었고, 이를 위해 ArgoCD를 구성하여 더욱 효율적인 관리가 가능해졌습니다.
그렇다면 GitOps란 무엇일까요?
GitOps란?
GitOps란 Git과 Ops를 합친 단어로, Git 리포지토리 상태와 클러스터 환경을 동일하게 유지하도록 도와주는 방식을 의미합니다.
때문에 GitOps는 중앙 리포지토리 관리만을 수행하여 리포지토리와 배포된 리소스들 간의 일관된 환경 유지가 가능하게 됩니다.
동작 과정
동작 과정
1) 개발자의 코드 푸시를 통한 CodePipeline 실행
2) CodePipeline 과정을 통한 컨테이너 이미지 생성 및 ECR 푸시
3) ArgoCD가 ECR의 신규 이미지 배포 감지
4) EKS 내부에 신규 이미지 배포
이제 실제로 위 환경을 구축해보도록 하겠습니다.
Pipeline을 통한 ECR 이미지 푸시 과정은 이전 글에서 다뤄보았으니 이번 글에서는 제외하도록 하겠습니다. :)
1) ArgoCD 네임스페이스 생성
우선, ArgoCD 관련된 리소스를 배포할 네임스페이스를 생성해주세요.
앞으로 생성되는 ArgoCD와 관련된 모든 오브젝트는 argocd 네임스페이스에 생성될 예정입니다.
$ kubectl create namespace argocd
2) ArgoCD 배포
이제 ArgoCD에서 제공하는 yaml파일을 사용하여 ArgoCD를 배포해주세요.
$ kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml -n argocd
배포가 완료되면 아래와 같이 여러 요소들이 생성됩니다.
$ kubectl get all -n argocd
이제 Ingress를 생성하여 ALB를 통해 ArgoCD를 노출시켜보도록 하겠습니다.
Ingress 배포에 사용될 코드는 아래를 참고해주세요.
[argocd-ingress.yaml]
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-ingress
namespace: argocd
labels:
app: argocd-ingress
annotations:
alb.ingress.kubernetes.io/certificate-arn: {ACM ARN}
alb.ingress.kubernetes.io/subnets: {Subnet-AZ-a}, {Subnet-AZ-c}
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
alb.ingress.kubernetes.io/backend-protocol: HTTPS
alb.ingress.kubernetes.io/healthcheck-path: /healthz
alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 443
이제 ingress를 배포하고, ADDRESS도 정상적으로 출력되는지 확인해주세요.
$ kubectl apply -f argocd-ingress.yaml
$ kubectl get ingress -A
AWS 콘솔 상에서도 정상적으로 ALB가 생성되었는지 확인해주세요.
80, 443 포트도 정상적으로 연결되어있네요!
이제 CLI를 통해 ArgoCD 접속을 위한 기본계정의 ID와 PW를 확인해 봅시다.
$ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
이제 ALB의 DNS를 사용하여 ArgoCD에 접속해주세요.
(ID는 admin, PW는 바로 위에서 얻은 암호입니다!)
** 만약 ID/PW를 제대로 입력했는데도 다시 로그인 페이지로 돌아오는 현상이 있다면 아래를 참고해주세요!
웹 페이지를 띄우는 Pod의 로그를 우선 확인해주세요.
$ kubectl logs -n argocd {argocd-server-PodName}
오류 내용이 길지만 저 중 "code Unauthenticated error"라는 문구가 출력됩니다.
무언가의 권한이 없는 것으로 보이네요!
이를 해결하기 위해 ALB 생성시 사용한 인증서에 포함된 도메인을 사용하여 Route53에서 레코드 등록을 해주었습니다.
이후 도메인을 통해 접속해보았더니 정상접속 되는걸 확인했습니다!
로그인까지 성공했다면 EKS로 ArgoCD 배포하기는 성공입니다!
지금까지 EKS를 통해 ArgoCD를 배포하는 방법에 대하여 알아보았습니다.
다음 시간에 이어서 ArgoCD와 BitBucket을 연결해보도록 하겠습니다.
감사합니다!
[참고글]
1편: AWS CodeBuild로 ECR 이미지 등록하기
2편: ArgoCD를 사용한 EKS 자동배포(1) - ArgoCD 배포하기
'Kubernetes > Kubernetes_Service' 카테고리의 다른 글
[Kubernetes] ArgoCD를 사용한 EKS 자동배포(3) - ArgoCD ImageUpdater (0) | 2024.12.11 |
---|---|
[Kubernetes] ArgoCD를 사용한 EKS 자동배포(2) - BitBucket 연결 (0) | 2024.12.09 |
[Kubernetes] AWS CodeBuild로 ECR 이미지 등록하기 (0) | 2024.11.25 |
[Kubernetes] 쿠버네티스 볼륨(Volume) - PV & PVC (0) | 2024.10.08 |
[Kubernetes] 쿠버네티스 볼륨(Volume) - hostPath (2) | 2024.10.08 |