on
Argo CD
Argo CD
Argo CD 주요 구성 요소
1. API Server
- WebUI, CLI, CICD 시스템용 API
2. Repository Server
- 매니페스트를 보관하는 git 저장소의 로컬 캐시를 유지하는 내부 서비스
3. Application Controller
- 애플리케이션 제어, 모니터링 / 상태 비교하는 Kubernetes 컨트롤러
Argo CD 설치
- 위 세 구성요소는 Argo Project에서 매니페스트를 제공한다.
mzmz01:~/environment $ kubectl create namespace argocd namespace/argocd created mzmz01:~/environment $ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.0.4/manifests/install.yaml customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io created customresourcedefinition.apiextensions.k8s.io/appprojects.argoproj.io created serviceaccount/argocd-application-controller created serviceaccount/argocd-dex-server created serviceaccount/argocd-redis created ... ... networkpolicy.networking.k8s.io/argocd-repo-server-network-policy created networkpolicy.networking.k8s.io/argocd-server-network-policy created
Argo CD CLI 설치
sudo curl --silent --location -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v2.0.4/argocd-linux-amd64 sudo chmod +x /usr/local/bin/argocd
argocd version 명령어를 통해 버전을 확인한다.
mzmz01:~/environment $ argocd version argocd: v2.0.4+0842d44 BuildDate: 2021-06-23T01:27:53Z GitCommit: 0842d448107eb1397b251e63ec4d4bc1b4efdd6e GitTreeState: clean GoVersion: go1.16 Compiler: gc Platform: linux/amd64 FATA[0000] Argo CD server address unspecified
version의 맨 마지막 줄을 보면 Argo CD 서버 주소와 관련된 noti가 보인다.
기본적으로 Argo CD Server는 외부에 노출되어 있지 않기 때문에 로드밸런서 서비스를 만들어준다.
로드밸런서 생성을 위해 약 2분간 대기하고, EXTERNAL-IP 값을 변수로 등록해준다.
mzmz01:~/environment $ export ARGOCD_SERVER=`kubectl get svc argocd-server -n argocd -o json | jq --raw-output '.status.loadBalancer.ingress[0].hostname'` mzmz01:~/environment $ echo $ARGOCD_SERVER a2a1822d0bc86427399485a2415433c9-1257108177.ap-northeast-2.elb.amazonaws.com
초기 암호는 ArgoCD API 서버의 Pod 이름으로 자동 생성된다.
mzmz01:~/environment $ export ARGO_PWD=`kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d` mzmz01:~/environment $ echo $ARGO_PWD JLmYmFRvNzPpGrDW
앞서 설정했던 SERVER와 PWD 값으로 로그인을 시도한다.
아래와 같이 successfully 로그가 표시되면 된다.
mzmz01:~/environment $ argocd login $ARGOCD_SERVER --username admin --password $ARGO_PWD --insecure 'admin:login' logged in successfully
실제 WebUI에서도 정상적으로 로그인되는지 확인한다.
Username에 admin을 입력해주고, Password로 $ARGO_PWD 값을 입력해준다.
이제 Argo CD가 구축됐고, 애플리케이션을 구축하는 과정을 설명한다.
먼저 github에 로그인해서 https://github.com/brentley/ecsdemo-nodejs.git로 이동한다.
https URL을 가져온다. ==> https://github.com/brentley/ecsdemo-nodejs.git
위 URL은 Argo CD로 애플리케이션을 구성할 때 필요하다.
Application 만들기
클러스터 컨텍스트를 사용하여 Argo CD CLI로 연결한다.
mzmz01:~/environment $ kubectl config view -o jsonpath='{.current-context}' arn:aws:eks:ap-northeast-2:371156277055:cluster/cccr3 mzmz01:~/environment $ CONTEXT_NAME=`kubectl config view -o jsonpath='{.current-context}'`
mzmz01:~/environment $ argocd cluster list SERVER NAME VERSION STATUS MESSAGE https://kubernetes.default.svc in-cluster Unknown Cluster has no application and not being monitored. mzmz01:~/environment $ argocd cluster add $CONTEXT_NAME INFO[0001] ServiceAccount "argocd-manager" created in namespace "kube-system" INFO[0002] ClusterRole "argocd-manager-role" created INFO[0002] ClusterRoleBinding "argocd-manager-role-binding" created Cluster 'https://4D737EDC2081C11BE5B251137E0BC129.gr7.ap-northeast-2.eks.amazonaws.com' added mzmz01:~/environment $ argocd cluster list SERVER NAME VERSION STATUS MESSAGE https://4D737EDC2081C11BE5B251137E0BC129.gr7.ap-northeast-2.eks.amazonaws.com arn:aws:eks:ap-northeast-2:371156277055:cluster/cccr3 1.20+ Successful https://kubernetes.default.svc in-cluster Unknown Cluster has no application and not being monitored.
새로운 namespace를 만들고 애플리케이션을 구성한다.
mzmz01:~/environment $ argocd app create ecsdemo-nodejs --repo https://github.com/brentley/ecsdemo-nodejs.git --path kubernetes --dest-server https://kubernetes.default.svc --dest-namespace ecsdemo-nodejs application 'ecsdemo-nodejs' created mzmz01:~/environment $ argocd app list NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET ecsdemo-nodejs https://kubernetes.default.svc ecsdemo-nodejs default OutOfSync Missing https://github.com/brentley/ecsdemo-nodejs.git kubernetes
현재 ecsdemo-nodejs 애플리케이션의 정보를 보면 STATUS가 OutOfSync 상태로 돼있다.
(아직 배포되지 않았기 때문에 OutOfSync)
mzmz01:~/environment $ argocd app get ecsdemo-nodejs Name: ecsdemo-nodejs ... Sync Status: OutOfSync from (c61db33) Health Status: Missing GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE Service ecsdemo-nodejs ecsdemo-nodejs OutOfSync Missing apps Deployment default ecsdemo-nodejs OutOfSync Missing
명령어로 확인하는 방법 이외에도 Argo CD 관리자 페이지에서 확인하는 방법이 있다.
app sync 명령어로 애플리케이션을 동기화 시켜준다.
mzmz01:~/environment $ argocd app sync ecsdemo-nodejs
app get 명령어와 대시보드를 통해 애플리케이션 상태를 확인한다.
mzmz01:~/environment $ argocd app get ecsdemo-nodejs Name: ecsdemo-nodejs ... GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE Service ecsdemo-nodejs ecsdemo-nodejs Synced Healthy service/ecsdemo-nodejs created apps Deployment default ecsdemo-nodejs Synced Healthy deployment.apps/ecsdemo-nodejs created
from http://public-cloud.tistory.com/76 by ccl(A) rewrite - 2021-10-13 21:26:40