클라우드/GCP

GCP에서 argoCD 설치 및 구현

work01 2025. 4. 15. 10:26

1. GKE 생성

리전은 한국으로 설정했다.

노드수는 2, asia-northeast3 영역에는 a, b, c zone이 있어서 총 노드수가 6개가 됨 

이건 상관없는건데, 무료크레딧을 받아 사용하다보니 할당량이 부족하여 디스크 크기 줄여 생성함
 
클러스터 생성 완료 후 

 

GKE 연결, kubectl 활성화 확인 함

cloud shell에서 위의 명령어 입력


 
2. argoCD 방화벽 등록

네트워크 보안 > 방화벽 정책 > 방화벽 정책 만들기

방화벽 규칙 만들기 클릭

Argo CD 기본 UI 접속 포트는 8080번이므로 GKE 외부에서 Argo CD 접속하려면 방화벽에서 8080 포트를 열어야 함
LoadBalancer 또는 NodePort 방식으로 외부 노출할 생각임
 

3. argoCD 설치
 
kubectl create namespace argocd

Kubernetes 클러스터 안에 argocd라는 이름의 네임스페이스(namespace)를 새로 생성

- 네임스페이스란? Kubernetes 내부를 논리적으로 구분하는 가상의 공간
Argo CD는 다양한 리소스(Deployment, Service 등)를 만듦. 클러스터 전체에 마구잡이로 설치하면 뒤죽박죽이 되기 때문에 argocd 전용 공간을 하나 만들고, 그 안에만 설치함
즉 argocd 네임스페이스는 Argo CD 전용 폴더 같은거임

argoCD 설치

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

kubectl get service -n argocd

argoCD의 서비스 확인

 

현재 서비스 타입이 ClusterIP외부에서 접속 불가
→ 외부접속을 위해 argocd-serverLoadBalancer 또는 port-forward로 변경
 
LoadBalancer로 외부 IP 부여
 
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
입력
 
kubectl get service -n argocd
서비스 상태 확인

 
 
EXTERNAL-IP에 값이 뜨면, IP를 브라우저 주소창에 입력하면 ArgoCD 접속 됨

 
4. argoCD 접속

 

Argo CD 접속 비밀번호 확인
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d && echo

3iytZchJPICVkTxn
이게 비밀번호임
username  은 admin
 

 
접속 완료
 
5. github repo 설정
일단 github를 가입한 후, 난 해당 설정파일들을 private으로 관리할거라 토큰 생성함

셋팅 클릭

developer settings 클릭

새로운 토큰 발행
(Argo CD 같은 툴이 GitHub의 Private Repository에 접근할 수 있도록 인증)

repo 와 admin:repo_hook 클릭
repo : Argo CD가 GitHub 리포지토리의 소스코드를 읽고, 동기화하고, GitOps로 배포하기 위한 모든 권한
Argo CD에서 https://github.com/리포지토리 를 등록하려고 할 때 토큰 인증 방식으로 GitHub Private Repo에 접근하려면 이 토큰을 사용해야함
admin:repo_hook : GitHub 리포지토리에 Webhook을 생성·수정·삭제할 수 있는 관리자 권한을 의미
 
 

 
토큰 발행
 

ghp_ 으로 시작하는 저게 토큰문자열임
이후 이 토큰을 Argo CD나 Git 클라이언트에서 비밀번호처럼 사용함
이 토큰은 다시는 확인할 수 없기 때문에, 반드시 복사해서 안전하게 저장하기!

 
6.github 파일생성 하는 법

create a new file 클릭

아무거나 입력 후 commit
 
7. github 리포 등록
1) 일단 argoCD cli 설치
 

VERSION=$(curl -s https://api.github.com/repos/argoproj/argo-cd/releases/latest | grep tag_name | cut -d '"' -f 4)
curl -sSL -o argocd "https://github.com/argoproj/argo-cd/releases/download/${VERSION}/argocd-linux-amd64"
chmod +x argocd
sudo mv argocd /usr/local/bin/

 
 
ArgoCD 서버에 로그인 (최초 1회만 필요)
argocd login <ARGOCD-서버-주소> --username admin --password <초기비번>

 
→ 만든 Argo CD 서버는 **자체 서명된 인증서(self-signed)**를 사용하고 있는데, 그 인증서에 도메인 이름은 있어도 IP 주소가 없어서 TLS 검증이 실패한 상황
하지만 --insecure 옵션 또는 y 누르면 그냥 접속 강행 가능
 
 
2) GitHub 리포 등록
argocd repo add https://github.com/본인주소.git \
  --username 유저네임 \
  --password ghp_토큰

 
 
8.deployment.yaml 설정 예시
 

apiVersion: apps/v1

kind: Deployment

metadata:

  name: nginx

spec:

  replicas: 1

  selector:

    matchLabels:

      app: nginx

  template:

    metadata:

      labels:

        app: nginx

    spec:

      containers:

      - name: nginx

        image: nginx

 
 

 
9. argoCD CLI에서 새 app 생성
argoCD CLI에서 새로운 애플리케이션을 생성할 때 사용하는 argocd app create의 기본 포맷
Git 리포지토리와 Kubernetes 클러스터를 연결하는 핵심적인 GitOps 선언 명령

argocd app create <앱이름> \
  --repo <Git 저장소 주소> \
  --path <디렉토리 경로> \
  --dest-server <쿠버네티스 API 서버 주소> \
  --dest-namespace <설치할 네임스페이스> \
  [옵션들...]

 
난 단순하게 이렇게 함
 
argocd app create test \
  --repo https://github.com/주소.git \
  --path . \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default
 

 
 
argocd에서 확인하면

이렇게 나옴
앱 들어가서 디테일 누르면

repo url 에 내 주소 입력함
 
 

 
 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webserver                      # ← 원하는 이름으로 변경 가능
  namespace: default                   # ← 사용하는 네임스페이스
spec:
  replicas: 2                          # ← 여기서 Pod 개수 조절
  selector:
    matchLabels:
      app: webserver
  template:
    metadata:
      labels:
        app: webserver
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

 
 
sync 눌러서 적용되는지 확인

반응형