ArgoCD Kubernetes 구축
ArgoCD
ArgoCD
는 GitOps를 활용해 인프라와 솔루션을 함께 관리하여 Kubernetes Application
의 자동 배포를 위한 오픈 소스이며 Continuous Deliver(CD)의 대표적인 솔루션입니다.
argo-cd 설치
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64
argocd version
agrocd help
ArgoCD 배포
Namespace를 생성합니다.
kubectl create ns argocd
Virtual Service와 Cert Manager를 활용한다면 Cert에 호스트를 등록합니다.
kubectl edit cert -nistio-system [CERT_NAME]
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: [CERT_NAME]
namespace: istio-system
spec:
commonName: ABC.net
dnsNames:
- argocd.ABC.net
Helm으로 ArgoCD 배포를 진행합니다.
# Repo 추가
helm repo add argo https://argoproj.github.io/argo-helm
# Helm 가져오기
git clone https://github.com/argoproj/argo-helm.git
cd argo-helm/charts/argo-cd
# values에서 도메인 수정하기
vi values.yaml
---
## Globally shared configuration
global:
# -- Default domain used by all components
## Used for ingresses, certificates, SSO, notifications, etc.
domain: argocd.ABC.net
helm install argo -n argocd argo/argo-cd -f values.yaml
ArgoCD 배포된 내용 수정
insecure 모드 지정합니다.
kubectl edit deployment -nargocd argo-argocd-server
--
- args:
- /usr/local/bin/argocd-server
- --port=8080
- --metrics-port=8083
- --insecure
Kubernetes Cluster 환경에서 Proxy 서버를 사용 중이라면 repo-server에서 proxy 설정을 해야됩니다.
Proxy 설정을 하지 않을 경우 GitHub 연동 시에 이슈가 있습니다.
kubectl edit deployment -nargocd argo-argocd-repo-server
env:
- name: https_proxy
value: http://10.27.251.30:3128
- name: http_proxy
value: http://10.27.251.30:3128
Istio의 Virtual Service를 활용한다면 다음의 설정을 진행합니다.
vi virtualservice.yaml
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: argocd-server
namespace: argocd
spec:
gateways:
- XXX/https-gateway
- XXX/http-gateway
hosts:
- argocd.ABC.net
http:
- corsPolicy:
allowHeaders:
- authorization
- content-Type
- accept
allowMethods:
- POST
- GET
- DELETE
- PUT
- OPTIONS
allowOrigins:
- regex: .*
exposeHeaders:
- authorization
- location
maxAge: 24h
match:
- uri:
prefix: /
route:
- destination:
host: argo-argocd-server.argocd.svc.cluster.local
port:
number: 80
kubectl apply -f virtualservice.yaml
ArgoCD WEB UI
초기 계정은 admin 이고, 패스워드는 다음을 통해 확인합니다.
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
----
R8xBudP0D6KFLylO
Kubernetes port-forward
를 활용해 Cluster 외부에서 내부 Pod 트래픽으로 전달되도록 설정하여 로컬 환경에서 웹으로 접속해보겠습니다.
kubectl port-forward service/argo-argocd-server -n argocd 38080:443
----
Forwarding from 127.0.0.1:38080 -> 8080
Forwarding from [::1]:38080 -> 8080
Handling connection for 38080
Handling connection for 38080
Handling connection for 38080
VS Code를 활용해 원격 서버의 포트 포워딩을 진행하고 로컬 환경의 웹 브라우저에서 http://localhost:38080으로 접속합니다.
위에서 설정한 VirtualService가 있따면 도메인으로 접속해봅니다.
CLI를 활용하기 위해서는 로그인을 진행합니다.
argocd login argocd.ABC.net
---
WARN[0000] Failed to invoke grpc call. Use flag --grpc-web in grpc calls. To avoid this warning message, use flag --grpc-web.
Username: admin
Password:
'admin:login' logged in successfully
Context 'argocd.ABC.net' updated
ArgoCD Example Application 배포
- https://github.com/argoproj/argocd-example-apps
- helm-guestbook
WEB UI에서 Applications 사이드 메뉴를 클릭하고 New App 버튼을 클릭합니다.
- Application Name: argocd-example-app
- Project name: default (초기에는 default만 존재하며, Settings에서 프로젝트를 추가할 수 있습니다.
- Sync Policy: Automatic
- Sync Options: auto-create namespace
- Repository URL: https://github.com/argoproj/argocd-example-apps
- Revision: HEAD
- Path: helm-guestbook
- Destination: https://kubernetes.default.svc 로 ArgoCD가 구축된 Kubernetes 클러스터입니다.
- Namespace: 저의 경우에는 argocd-test라는 namespace로 지정하겠습니다.
생성이 완료되면 새로운 Application이 확인됩니다.
ArgoCD 구축 및 Example App 배포까지 확인하였습니다.
감사합니다!