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 등록하기
Settings → Repositories 클릭
좌측 상단 + CONNECT REPO
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 배포하기
메인 화면 좌측 상단 + NEW APP 버튼 클릭
GENERAL 항목 설정
Application Name: mynginx-test
Project Name: default
SYNC POLICY: Manual 수동으로 git 리포지토리를 SYNC
Automatic, 주기적으로 git 리포지토리를 체크하여 SYNC
Automatic SYNC로 Git의 브랜치 변화를 자동으로 감지하고 지속적인 배포가 가능합니다.
SOURCE 항목 설정
Repository URL : http://192.168.1.154:3000/gitea_admin/my_application
Revision: HEAD
Path: .
DESTINATION 항목 설정
어느 쿠버네티스 클러스터에 배포할지 설정하는 부분입니다.
Cluster URL: https://kubernetes.default.svc
Namespace: default
상단 CREATE 버튼 클릭
Application 생성이 완료된 모습입니다.
SYNC 정책을 Manual로 했기 때문에 배포가 시작되지 않았습니다.
SYNC 버튼을 클릭해 배포를 시작합시다.
배포가 정상적으로 완료된 모습입니다.
Application을 클릭하여 자세한 배포 현황을 확인 가능합니다.
실제로 배포되었는지 쿠버네티스에서도 확인합니다.
Application의 변경 적용
쿠버네티스 manifest 변경 후 git 에 반영
mariadb 이미지를 추가 하도록 변경하였습니다.
ArgoCD 배포 확인
Refresh 버튼을 통해 새로 고침을 하니 Git에 변경 사항이 생겨 Missing, OutOfSync 상태가 되었습니다.
다시 SYNC 버튼으로 동기화를 진행하고 pod가 배포된 모습을 확인할 수 있습니다.
앞서 설명된 것과 같이 SYNC 정책을 Auto로 변경하면 자동으로 Git의 변경 사항을 감지해 반영합니다.
쿠버네티스에서도 mariadb pod와 서비스가 추가 되었음을 확인 가능합니다.