본문 바로가기

⌛ AWS 인프라 구성하기 (MiniProject)/✅ 개발환경 구성 (EKS)

(미완성) CI/CD 환경 구성 (1)

728x90
반응형

# 이전에 배포한 EKS 클러스터 환경에 CI/CD를 붙여보자.

구성할 CI/CD 배포 프로세스는 아래와 같다.

# 위의 구성도를 활용하여 실제 CI/CD 파이프라인을 구성 해보자.

1. 우선 ArgoCD가 바라봐야할 Repository를 생성 한다.

여기서는 저장소를 ECR로 할 예정이므로 ECR 레포지토리에서 저장소를 생성 한다.

저장소의 이름은 cd-test-api-yaml 이라고 설정 하고 유형은 프라이빗으로 설정 한다.

2. EKS 환경에서 ArgoCD 설치

EKS 환경에서는 일반적인 로컬 환경과는 다르게 설정해야할 부분이 존재한다.

하나하나씩 설정을 진행하며 수행해보자.

첫번째, ArgoCD 설치

아래 명령어를 입력하여 Namespace를 생성하고 생성한 Namespace에 Argocd를 설치 한다.

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

두번째, ArgoCD CLI 설치

VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')

ArgoCD CLI 최신버전을 다운로드 한다.

sudo curl --silent --location -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64

다운로드 한 폴더의 권한을 부여

sudo chmod +x /usr/local/bin/argocd

세번째, 로드밸런서 설정

EKS 환경에서 서비스가 구현되므로, 타입을 로드밸런서 타입으로 변경한다. 변경을하면 AWS 로드밸런서 메뉴에 신규로 하나의 서비스가 생성이 된다.

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

 

네번째, 로드밸런서 생성

export ARGOCD_SERVER=`kubectl get svc argocd-server -n argocd -o json | jq --raw-output .status.loadBalancer.ingress[0].hostname`

로드밸런서를 생성하면 하면 AWS 로드밸런서 메뉴에 아래와 같이 생성이 되는것을 볼 수 있다.

3. ArgoCD 로그인 수행

로드밸런서 주소 URL을 웹 브라우저에 입력하면 아래와 같이 ID와 PASSWORD를 입력하는 창이 나온다.

여기서 ID는 기본으로 admin이고 패스워드는 아래의 명령어를 통해 알아 내야 한다.

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

왜 문어대가리가 아이콘인지는 모르겠지만, 암튼 귀엽긴 하다.

admin과 얻은 비밀번호를 통해 접근을 하면 아래와 같은 화면이 나온다.

패스워드는 원하는 패스워드로 변경 후 다시 로그인을 수행한다.

최신 버전의 ArgoCD가 설치되었다.

4. ArgoCD가 Kubernetes에 배포할 수 있도록 admin 권한을 부여

kubectl create clusterrolebinding default-admin --clusterrole=admin --serviceaccount=argocd:default

아래와 같이 정상적으로 생성이 되면 된다.

ubuntu@ip-192-168-0-74:~$ kubectl create clusterrolebinding default-admin --clusterrole=admin --serviceaccount=argocd:default
clusterrolebinding.rbac.authorization.k8s.io/default-admin created

5. ArgoCD에 ECR 레포지토리를 등록

Connect repo using HTTPS 클릭하여 등록 화면으로 이동한다.

여기서는 테스트로, 개인 계정의 github URL을 입력하여 연동이 가능한지를 체크 한다.

아래와 같이 입력 후 등록을 진행 하면 된다.

연동 성공여부 체크, 정상적으로 연동이 된 모습이다.

6. 실제 테스트 애플레이션, Nginx를 배포해 보자.

ArgoCD의 Applications 탭에서 NEW APP 을 클릭하자

간단하게 nginx를 배포하는 Manifest 파일을 git 레포지토리에 올려두고 ArgoCD로 배포해보자

- 2개의 파일이 생성 되어 있어야 한다.

- deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mynginx
spec:
  replicas: 1
  selector:
    matchLabels:
      run: mynginx
  template:
    metadata:
      labels:
        run: mynginx
    spec:
      containers:
      - image: nginx
        name: mynginx
        ports:
        - containerPort: 80

- service.yaml

apiVersion: v1
kind: Service
metadata:
  name: mynginx
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: mynginx

- Application Name : nginx를 배포할거니까 간단하게 nginx라고 지정
- Project : ArgoCD에서 애플리케이션을 구분하고 관리하기 위한 논리적인 그룹
- SYNC POLICY : Git의 환경과 비교하는 것을 수동으로 할지 자동으로 할지 선택
- Prune Resources : 변경 사항에 기준 리소스를 업데이트할 때, 기존의 리소스를 삭제하고 새로운 리소스를 생성
- Self Heal : ArgoCD가 지속적으로 Git 레포지토리의 설정값과 싱크를 맞춤

- Repository URL : 사용할 레포지토리 URL
- Revision : Git의 Revision (HEAD , Master branch 등)을 선택
- Path : Git의 저장소의 주소
- Cluster URL  : Kubernetes의 어느 클러스터에 배포할지 결정
- Namespace : Kubernetes 클러스터의 어느 Namespace에 배포할지 결정

위에 구성에서 Cluster URL은 위와 같이 default 값으로 두고, Namespace는 만약에 아직 만들어지지 않은 Namespace를 넣어도 신규로 Namespace 생성을 한다.

마지막으로 GUI 환경으로 ArgoCD를 컨트롤 하는 영상을 첨부

 

728x90
반응형