GCP에서 argoCD 설치 및 구현
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-server를 LoadBalancer 또는 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 눌러서 적용되는지 확인