/
14. 애플리케이션 배포(CD)

14. 애플리케이션 배포(CD)


Gitea(Git 호스팅 서비스), Harbor(도커 레지스트리), 그리고 ArgoCD(쿠버네티스 애플리케이션 배포 도구)를 사용하여 자동화된 애플리케이션 배포 방법을 소개합니다.

1. Gitea

Gitea Helm Charts 다운로드 및 설치(Minimal)

[root@m-k8s ~]# helm repo add gitea-charts https://dl.gitea.com/charts/ [root@m-k8s ~]# helm repo list NAME URL prometheus-community https://prometheus-community.github.io/helm-charts gitea-charts https://dl.gitea.com/charts/ [root@m-k8s ~]# helm pull gitea-charts/gitea [root@m-k8s ~]# tar xvfz gitea-10.1.4.tgz [root@m-k8s ~]# cd gitea [root@m-k8s gitea]# vi values.yaml service: http: type: LoadBalancer // ClusterIP -> LoadBalancer redis-cluster: enabled: false // true -> false postgresql: enabled: false// true -> false postgresql-ha: enabled: false// true -> false persistence: enabled: false// true -> false gitea: config: // 아래 내용 추가 database: DB_TYPE: sqlite3 session: PROVIDER: memory cache: ADAPTER: memory queue: TYPE: level [root@m-k8s gitea]# kubectl create ns gitea [root@m-k8s gitea]# helm install gitea -n gitea -f values.yaml . [root@m-k8s gitea]# kubectl get all -n gitea NAME READY STATUS RESTARTS AGE pod/gitea-d59784fb-s2l8m 1/1 Running 0 34s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/gitea-http LoadBalancer 10.99.62.47 192.168.1.201 3000:32001/TCP 34s service/gitea-ssh ClusterIP None <none> 22/TCP 34s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/gitea 1/1 1 1 34s NAME DESIRED CURRENT READY AGE replicaset.apps/gitea-d59784fb 1 1 1 34s

 

브라우저에서 접속 후 로그인

[root@m-k8s gitea]# cat values.yaml | grep -A gitea_admin username: gitea_admin password: r8sA8CPHD9!bt6d

LoadBalancer IP 확인 후 접속

[root@m-k8s 021]# k get svc -n gitea NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gitea-http LoadBalancer 10.101.73.252 192.168.1.154 3000:32270/TCP 2m49s gitea-ssh ClusterIP None <none> 22/TCP 2m49s http://192.168.1.154:3000

 

Repository 생성하기

우측 + 버튼 클릭

저장소 이름을 지정하고 저장소 만들기

 

생성한 Repository에 쿠버네티스 manifest 업로드 하기
해당 manifest는 Harbor로 구축한 Private Registry를 이용해 이미지를 가져올 예정입니다.

웹에서 업로드 확인

 

2. Harbor

Harbor Helm Charts 다운로드 및 설치

 

 

브라우저에서 접속 후 로그인

LoadBalancer IP 확인 후 접속
http://192.168.1.155

기본으로 생성되어 있는 project 인 library를 사용하겠습니다.

Harbor Registry에 이미지 push 하기

브라우저에서 push 된 이미지 확인

 

쿠버네티스에서 Insecure Registry를 사용 가능 하도록 등록
모든 노드에서 containerd 설정 추가 및 재시작이 필요합니다.

다시 마스터 노드로 돌아와 이미지 활용이 가능한지 테스트합니다.

 

3. ArgoCD

ArgoCD Helm Charts 다운로드 및 설치

 

브라우저에서 접속 후 로그인
argrocd는 최초 접속 패스워드를 시크릿으로 무작위 생성합니다.
따라서 이를 base64 디코딩하여 확인합니다.

LoadBalancer IP 확인 후 접속
http://192.168.1.203

 

ArgoCD를 활용하여 쿠버네티스 클러스터에 배포하기

Repository 등록하기

  1. Settings → Repositories 클릭

  1. 좌측 상단 + CONNECT REPO

  1. Git Repository 설정
    앞서 만든 gitea repository를 등록하는 작업입니다.
    Connection Method: VIA HTTPS
    Type: git
    Project: default
    Repository URL: http://192.168.1.154:3000/gitea_admin/my_application
    Skip server verification: 체크

    이후 상단 CONNECT 버튼 클릭

성공적으로 연결된 모습입니다.

 

Application 배포하기

  1. 메인 화면 좌측 상단 + NEW APP 버튼 클릭

  1. GENERAL 항목 설정
    Application Name: mynginx-test
    Project Name: default
    SYNC POLICY: Manual 수동으로 git 리포지토리를 SYNC
    Automatic, 주기적으로 git 리포지토리를 체크하여 SYNC

Automatic SYNC로 Git의 브랜치 변화를 자동으로 감지하고 지속적인 배포가 가능합니다.

  1. SOURCE 항목 설정
    Repository URL : http://192.168.1.154:3000/gitea_admin/my_application
    Revision: HEAD
    Path: .

  1. DESTINATION 항목 설정
    어느 쿠버네티스 클러스터에 배포할지 설정하는 부분입니다.
    Cluster URL: https://kubernetes.default.svc
    Namespace: default

  1. 상단 CREATE 버튼 클릭

  1. Application 생성이 완료된 모습입니다.
    SYNC 정책을 Manual로 했기 때문에 배포가 시작되지 않았습니다.
    SYNC 버튼을 클릭해 배포를 시작합시다.

  1. 배포가 정상적으로 완료된 모습입니다.
    Application을 클릭하여 자세한 배포 현황을 확인 가능합니다.

실제로 배포되었는지 쿠버네티스에서도 확인합니다.

 

Application의 변경 적용

쿠버네티스 manifest 변경 후 git 에 반영
mariadb 이미지를 추가 하도록 변경하였습니다.

 

ArgoCD 배포 확인

  1. Refresh 버튼을 통해 새로 고침을 하니 Git에 변경 사항이 생겨 Missing, OutOfSync 상태가 되었습니다.

  1. 다시 SYNC 버튼으로 동기화를 진행하고 pod가 배포된 모습을 확인할 수 있습니다.
    앞서 설명된 것과 같이 SYNC 정책을 Auto로 변경하면 자동으로 Git의 변경 사항을 감지해 반영합니다.

쿠버네티스에서도 mariadb pod와 서비스가 추가 되었음을 확인 가능합니다.

 

 

Related content