GitOps의 구현체
Argo공식site:
https://argo-cd.readthedocs.io/en/stable/
Argo설치를 위해선 (kubernetes 필요)
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
chmod +x /usr/local/bin/argocd
cli 설치 링크:
https://argo-cd.readthedocs.io/en/stable/cli_installation/
kubectl get all -n argocd
# argocd-server Cluster-IP 확인
외부에서 접근하도록 설정 필요.
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
kubectl describe svc argocd-server -n argocd
# Load Balancer Port 확인
웹브라우저에서 [master_IP]:[port]
예) 192.168.59.10:31958
https 로 redirect됨.
web UI의 로그인 계정은 admin
암호는 확인해서 입력
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
[문자들이 나옴]= 암호
argocd 엔터
argocd login --insecure <ARGOCD_SERVER_DOMAIN>:<PORT>
192.168.100.100:65001
login id : admin
password : (위에서 확인한 문자)
argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default
source : (git) --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook
destination ; local kubernetes cluster
--dest-server https://kubernetes.default.svc --dest-namespace
argocd app get guestbook
webui로 확인하시면 노란색 (동기화 안됨)
CLI 동기화 하기
argocd app sync guestbook
argocd app get guestbook
ArgoCD web UI에서 guestbook application을 삭제해보기
kubernetes 확인
web UI에서 동기화
git------------------kubernetes cluster
applicaton
git 로그인 repository 생성
guestbook-ui-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: guestbook-ui
spec:
replicas: 1
revisionHistoryLimit: 3
selector:
matchLabels:
app: guestbook-ui
template:
metadata:
labels:
app: guestbook-ui
spec:
containers:
- image: gcr.io/heptio-images/ks-guestbook-demo:0.2
name: guestbook-ui
ports:
- containerPort: 80
guestbook-ui-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: guestbook-ui
spec:
ports:
- port: 80
targetPort: 80
selector:
app: guestbook-ui
/guestbook/ 하위에 등록
source : git URL
https : https://github.com/soyoung-2020/argocd.git (**)
ssh : git@github.com:Sunny-1030/argocd.git
PATH : repository 하위 디렉토리 명 . guestbook
repository 하위에 바로 yaml 파일이있을 경우에는 .
project : default
destination
https://kuberntes.default.svc
namespace : default (다른 이름이 지정이 가능하나, 미리 생성해야함)
application name : myguestbook
myguestbook을 kubernetes cluster와 동기화
1차 변경
replicas: 1 ---> 2 개
local pc라면 commit > push
git site에서 편집
kubectl get all -n default
Argocd WebUI - application 내에서 상단에 “HISTORY”
현시점 외에 과거로 rollback 해보기(2개,1개), 동기화 하면 다시 현재로.(2개)
rollback 시 이전(1개) 으로 돌아가며 sync(동기화)하면 원 상태(2개)로 복구됨
자신의 git에 repository 생성
nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
type: LoadBalancer # 서비스 타입
ports:
- port: 8080 # 서비스 포트
targetPort: 80 # 타켓, 즉 pod의 포트
protocol: TCP
name: http
selector:
app: nginx
nginx-deployment.yaml
apiVersion: apps/v1 # 쿠버네티스 api 버전
kind: Deployment # 생성할 오브젝트 종류
metadata:
name: nginx-deployment # deployment의 이름
labels:
app: nginx # label 지정
spec: # deployment의 스펙을 정의
replicas: 3 # 3개의 pod 설정
selector: # deployment가 관리할 pod를 찾는 방법을 정의
matchLabels:
app: nginx
template:
metadata:
labels: # pod의 label
app: nginx
spec:
containers: # 컨테이너 설정
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
application 추가
repository : git -> helm
repository : https://github.com/argoproj/argocd-example-apps.git
path : apps
chart : repository를 인식하면 자동으로 목록 뜸. Chart.yaml 선택
하단에 helm 설정파트가 있음 values: values.yaml (또는 values.yaml파일을 보제하여 값을 변경하고자하는 셋팅가능)
repository
-HTTPS git연결
-SSH git 연결
key 생성
github : public key 등록
argocd : private 등록, repository 등록 -> application 연결에 사용