일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- api gateway 설계
- api gateway 필터
- ApplicationEvent
- argocd
- assertThat
- async/await
- AVG
- AWS
- aws autoscaling
- aws eks
- AWS KMS
- aws vpc peering
- Today
- Total
기록
K3s 기반 멀티 노드 클러스터 구축기 (7) - ArgoCD 설치 및 외부 접속 구성 본문
1. 프로젝트 개요
이번 실습에서는 K3s 기반의 소규모 쿠버네티스 클러스터에 ArgoCD를 설치하고, 퍼블릭 IP를 통해 외부에서 바로 접속할 수 있는 환경을 구축한다.
목표는 불필요한 리소스를 최대한 배제하여 설치를 최소화하고, 간편한 외부 접속 환경을 만드는 것이다.
2. 사전 준비: Helm 저장소 추가
ArgoCD를 설치하기 위해 Helm Chart를 사용한다.
Helm 저장소를 추가하고 최신 버전으로 업데이트한다.
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
3. 설치 커스터마이징: Values 파일 작성
설치에 앞서 K3s 환경에 맞게 ArgoCD 구성을 최적화했다.
작성한 argocd-values.yaml 파일은 다음과 같은 설정을 포함하고 있다.
3.1 NodePort 서비스로 외부 접속 설정
기본적으로 ArgoCD는 ClusterIP 서비스로 배포되지만, 이번 실습에서는 설치 직후 퍼블릭 IP를 통해 바로 접속하고자 NodePort 타입을 사용했다.
HTTP(30223)와 HTTPS(32244) 포트를 명시적으로 지정하여, 별도의 Ingress 구성 없이 외부 접속이 가능하도록 구성했다.
3.2 불필요한 컴포넌트 비활성화
ApplicationSet, Notifications, Dex, Redis 컴포넌트를 비활성화했다.
이번 실습은 GitOps 핵심 기능만 확인하는 것을 목표로 했기에, 부가 기능을 모두 제거하여 설치 속도와 리소스 사용량을 최소화했다.
특히 Redis는 캐시용 컴포넌트로, 대규모 운영 환경에는 필요하지만 소규모 실습에서는 충분히 생략 가능했다.
3.3 모든 컴포넌트 Control Plane 노드에 배치
Worker Node 없이 Control Plane 노드 하나로 모든 리소스를 운용할 수 있도록 Node Affinity 설정을 추가했다.
node-role.kubernetes.io/control-plane 라벨이 붙은 노드에 모든 컴포넌트가 스케줄링되도록 선호하여, 단일 노드 환경에서도 안정적으로 운영할 수 있게 했다.
3.4 최종 Values 파일 내용
server:
service:
type: NodePort
nodePortHttp: 30223
nodePortHttps: 32244
controller:
replicas: 1
repoServer:
replicas: 1
applicationSet:
enabled: false
notifications:
enabled: false
dex:
enabled: false
redis:
enabled: false
controller:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: Exists
server:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: Exists
repoServer:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: Exists
4. ArgoCD 설치
Helm을 사용하여 커스터마이징된 ArgoCD를 설치한다.
helm install argocd argo/argo-cd -n argocd --create-namespace -f argocd-values.yaml
설치가 완료된 후, 다음 명령어로 서비스 상태를 확인할 수 있다.
kubectl get svc -n argocd
예상 결과:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argocd-server NodePort 10.43.xxx.xxx <none> 80:30223/TCP,443:32244/TCP 5m
- ArgoCD 설치 시 생성되는 주요 파드 및 역할
ArgoCD를 설치하면 네임스페이스(argocd) 안에 여러 개의 파드가 함께 생성된다. 각 파드는 ArgoCD의 전체 기능을 구성하는 독립적인 컴포넌트들이며, 각각 중요한 역할을 담당하고 있다.
파드 이름 |
역할 설명 |
argocd-application-controller | ArgoCD의 핵심 컨트롤러로, Git 저장소에 정의된 애플리케이션 상태와 실제 쿠버네티스 클러스터 상태를 지속적으로 비교하고, 필요한 경우 동기화를 수행하는 역할을 한다. 클러스터 리소스 생성, 업데이트, 삭제 등을 실제로 실행하는 핵심 엔진이라고 볼 수 있다. |
argocd-applicationset-controller | ApplicationSet 리소스를 관리하는 컴포넌트이다. 여러 애플리케이션을 템플릿 기반으로 자동 생성하고 관리할 수 있도록 지원한다. 이번 실습에서는 ApplicationSet 기능을 비활성화했지만, 기본 설치 시에는 함께 배포된다. (Enabled: false로 설정하면 Pod는 생성되지 않는다.) |
argocd-repo-server | Git 저장소를 관리하는 서버로, Git 저장소를 주기적으로 모니터링하고, 새로운 커밋이나 변경사항을 감지하는 역할을 한다. ArgoCD는 이 Repo Server를 통해 Git 저장소로부터 매니페스트 파일을 가져오고, 변경 사항이 감지되면 동기화 작업을 수행한다. Helm Chart, Kustomize 리소스 같은 다양한 매니페스트 형식을 처리하는 기능도 담당한다. |
argocd-server | 사용자가 직접 접속하는 Web UI 및 API 서버 역할을 한다. 브라우저에서 접속하는 ArgoCD 대시보드가 바로 이 argocd-server에 의해 제공된다. 사용자의 인증을 처리하고, 리소스 동기화 요청, 클러스터 관리, 애플리케이션 상태 모니터링 같은 모든 상호작용은 이 서버를 통해 이루어진다. NodePort로 외부에 노출하여 브라우저에서 접근할 수 있도록 구성했다. |
- ArgoCD는 기본적으로 컨트롤러 (application-controller), Git 연결 (repo-server), UI/API 서버 (server) 로 나뉘어 서로 다른 책임을 분담한다.
- 이 구조 덕분에 Git 저장소 감시, 리소스 동기화, 사용자 인터페이스 제공이 병렬적으로 빠르고 안정적으로 이루어진다.
- 필요에 따라 특정 컴포넌트를 수평 확장하거나 리소스 리밋을 조정하여 성능을 튜닝할 수 있다.
5. ArgoCD 외부 접속 테스트
퍼블릭 IP와 NodePort를 통해 브라우저에서 바로 ArgoCD에 접속할 수 있다.
- HTTP 접속: http://<퍼블릭IP>:30223/
- HTTPS 접속: https://<퍼블릭IP>:32244/
HTTPS 접속 시 self-signed 인증서로 인해 브라우저 경고가 발생할 수 있는데, 실습 환경에서는 무시하고 접속해도 무방하다.
6. ArgoCD 로그인
ArgoCD에 접속하려면 기본 관리자 계정 정보를 알아야 한다.
6.1 기본 아이디
admin
6.2 초기 비밀번호 조회
초기 비밀번호는 Kubernetes Secret에 저장되어 있으며, 다음 명령어로 복호화하여 확인할 수 있다.
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
확인한 비밀번호를 복사하여 로그인하면 된다.
'DevOps' 카테고리의 다른 글
Kafka 연결 테스트 및 Config Server에서 Kafka 접근 시 고려사항 (0) | 2025.05.15 |
---|---|
Bitnami Kafka Helm Chart PVC 바인딩 실패 이슈 해결기 (0) | 2025.05.13 |
K3s 기반 멀티 노드 클러스터 구축기 (6) - GitHub Actions와 AWS ECR로 경량화 배포 (0) | 2025.05.11 |
K3s 기반 멀티 노드 클러스터 구축기 (5) - Helm을 이용한 Jenkins 설치 및 접속 테스트 (0) | 2025.05.05 |
AWS EKS에서 EBS CSI Driver 설치 및 IAM 권한 구성하기 (0) | 2025.05.05 |