Kubernetes ArgoCD 디플로이
ArgoCD 디플로이
이제는 ArgoCD 를 이용하여 kubernetes 에 배포를 수행할 것이다.
그러기 위해서는 기본적으로 2가지 작업을 수행해 주어야한다.
- Deployment: Kubernetes 에 어플리케이션을 배포하기 위해서는 Deployment 를 통해서 배포를 수행하게 된다. 버전관리 등 다양한 이점이 있다.
- Service: Service 는 외부 접속을 위한 연결 정의를 수행하는 매니페스트이다.
Deployment 작성하기.
greetweb-deploy.yml 파일을 다음과 같이 작성한다.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: greet
name: greet
spec:
replicas: 2
selector:
matchLabels:
app: greet
template:
metadata:
labels:
app: greet
spec:
containers:
- image: unclebae/gogreet:v1.0
name: unclebae-gogreet
Service 작성하기
서비스를 생성한다.
apiVersion: v1
kind: Service
metadata:
labels:
app: greet
name: greet
namespace: default
spec:
ports:
- port: 9999
protocol: TCP
targetPort: 8080
selector:
app: greet
type: NodePort
위 작성한 코드를 모두 github으로 올린다.
ArgoCD 접속하기.
https://localhost:31602/
으로 지난번에 argocd 를 설치 했었다. 이제는 argocd 로 배포를 수행해 보자.
리포지토리 등록하기
우선 argocd 레 우리가 작성한 디플로이먼트 를 수행하기 위해서는 다음과 같은 리포지토리 등록 절차가 필요하다.
- Manage your repositories, projects, settings 탭을 선택하다.
- Repositories 부분을 클릭해준다.
- 위 화면에서 CONNECT REPO USING HTTPS 를 선택하자.
- Type: git
- Repository URL: 배포 매니페스트가 존재하는 리포지토리를 추가한다.
- https://github.com/schooldevops/argocd-tutorials 을 입력해준다.
- Username / Password: 위 리포지토리는 오픈이기 때문에 입력없이 스킵한다. (private repository라면 username/password가 필요하다.)
- TLS 부분은 그냥 넘어가자.
- Skip Server verification: 기본으로 유지한다.
- Enable LFS support: 기본으로 유지한다.
생성하기를 완료하면 리포지토리 목록을 확인할 수 있게 된다.
Application 생성하기.
이제는 Kubernetes 에 배포해보자.
왼쪽 탭 맨 상단의 탭을 클릭한다.
CREATE APPLICATION 을 선택하자.
- Application Name: greet 로 지정했다.
- Project: default 로 그대로 두자.
- SYNC POLICY:
- Manual: git과 kubernetes 의 배포 상태가 다른경우 수동으로 싱크할경우 사용한다.
- Auto: 자동으로 git 코드가 변경이 되면 kubernetes에 반영하게 된다.
- USE A SCHEMA TO VALIDATE RESOURCE MANIFESTS: 기본 체크로 그대로 둔다. (스키마 검사를 수해할지 여부이다.)
- AUTO-CREATE NAMESPACE: 매니페스트의 네임스페이스가 없는경우 자동 생성할지 여부를 설정한다. (기본으로 언체크한다.)
- Repository URL: 등록한 리포지토리에서 선택한다.
- Revision: HEAD는 최신의 리비젼을 사용하도록 한다.
- Path: 매니페스트 위치가 deploy 이므로 우리는 deploy로 잡았다.
- Cluster URL: 현재 context에 있는 cluster 의 정보를 지정한다. ArgoCD가 kubernetes 에서 올라가 있으므로, 현재 kubernetes의 엔드포인트가 된다.
- Namespace: 별도 네임스페이스를 작성하기 않았으므로, default 를 기술한다.
- DIRECTORY RECURSE: 디렉토리가 계층적이라면 체크한다. 아닌경우 그냥 언체크로 둔다.
- 이후 부분은 아규먼트와 환경값이 없으므로 그대로 둔다.
생성하기를 클릭하면 다음과 같은 내용을 볼 수 있다.
- 현재 상태는 OutOfSync로 주황색 표시가 되어 있음을 알 수 있다.
볼드된 어플리케이션을 클릭하여 상세 내용에 들어가 보자.
위 그림과 같이 greet 어플리케이션 형상을 보여준다.
- greet service 가 존재하며 서비스 연결을 위한 설정정보가 있다.
- greet deploy 는 배포를 수행할 deployment 매니페스트이다.
아직 싱크가 되지 않았으며, 배포가 이루어 지지 않았음을 알 수 있다.
App Detail 속성 보기
좌측 App Details 버튼을 클릭하면 앱 상세 정보를 확인할 수 있다.
우리가 작성한 그대로의 정보를 확인할 수 있다.
동기화 하기
이제 동기화를 통해서 Kubernetes 에 우리의 어플리케이션을 배포해보자.
Sync 를 클릭한다. 그럼 우측에 패널이 나타나며, 몇가지 옵션들을 선택할 수 있다.
- Synchronizing … from: 싱크될 매니페스트 위치를 알려준다.
- Revision: 배포할 리비젼 정보를 보여준다. 여기서는 HEAD 최신 내용임을 알 수 있다.
- Kubernetes 에서 Deployment 시에 revision 옵션이 자동으로 설정되므로, 배포 히스토리를 알 수 있다.
- 이 속성을 통해서 롤백도 가능하다.
- 아래 정보들은 배포한 디플로이먼트를 정리, 테스트로 수행해보기 등 다양한 옵션들이 있다. 이 부분은 차후 상세히 알아보겠다.
SYNCHRONIZE 를 클릭하여 실제 Kubernetes 에 반영한다.
반영된 형상 확인하기.
이제 실제 반영된 형상을 살펴 보자.
초기 준비 단계에서 sync 된 이후의 상태를 보면 다음과 같은 내용을 확인할 수 있다.
- Service: 서비스 엔드포인트가 배포 되었음을 확인할 수 있다.
- EP: 실제 서비스를 구현하는 여러 엔드포인트들의 묶음을 의미한다.
- endpointslice: 서비스를 구현하는 엔드포인트의 하위 집합을 말한다. 실제 엔드포인트 구현체이다.
- Deployment:
- RS: 한개의 리플리카셋을 확인할 수 있다. 리플리카 셋이 Pod의 리플리케이션을 컨트롤한다.
- 2개의 Pod: 리플리카 셋에 정의한 리플라카 값이 2 이므로 2개의 Pod가 생성되었다.
- RS: 한개의 리플리카셋을 확인할 수 있다. 리플리카 셋이 Pod의 리플리케이션을 컨트롤한다.
배포된 서비스 확인하기.
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
greet NodePort 10.102.28.18 <none> 9999:32496/TCP 44s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 8d
접속 테스트하기.
curl localhost:32496/health
OK
curl localhost:32496/hello/schooldevops
Hello schooldevops
정상으로 완료된것을 확인되었다.
결론
지금까지 웹 프로그램을 생성하고, docker hub에 추가하였으며, docker hub의 이미지를 가져와서 로컬 쿠버네티스에 argoCD를 이용하여 배포 해 보았다.
몇가지 단계를 거쳐서 소위 말하는 GitOps를 구현해 보았고, 어떻게 ArgoCD를 이용하는지 퀵하게 알아 보았다.
ArgoCD는 시각적으로 투명하게 배포 작업을 수행할 수 있도록 제공해주고, 간단한 설정을 통해서 배포 자동화를 구현할 수 있는 괞찮은 CD틀인것 같다.