DevOps 실현을 위한 CI/CD 구축 (22.06.07)

박민선·2022년 6월 7일
0

ArgoCD

GitOps의 구현체

Argo공식site:
https://argo-cd.readthedocs.io/en/stable/

1) Install Argo CD

Argo설치를 위해선 (kubernetes 필요)

  • Installed kubectl command-line tool.
  • Have a kubeconfig file (default location is ~/.kube/config).
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

2) Download Argo CD CLI

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 확인

외부에서 접근하도록 설정 필요.

3) argo CD 서비스 노출

  • 로드밸런서 타입으로 변경
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

kubectl describe svc argocd-server -n argocd
# Load Balancer Port 확인

4) 웹 브라우저에서 login

웹브라우저에서 [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

[문자들이 나옴]= 암호

5) CLI도 argocd 로그인

argocd 엔터
argocd login --insecure <ARGOCD_SERVER_DOMAIN>:<PORT>
	   				192.168.100.100:65001

login id : admin
password : (위에서 확인한 문자)

6) application 생성하기 - CLI

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

7) CLI로 application 확인

argocd app get guestbook

webui로 확인하시면 노란색 (동기화 안됨)

CLI 동기화 하기

argocd app sync guestbook
argocd app get guestbook

ArgoCD web UI에서 guestbook application을 삭제해보기
kubernetes 확인

8) guestbook appliname을 WEB UI에서 생성하기

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/ 하위에 등록

9) git repo와 kubernetes cluster를 연동하는 application을 생성해보기

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와 동기화

10) git repository - guestbook-ui-deployment.yaml

1차 변경
replicas: 1 ---> 2 개
local pc라면 commit > push

git site에서 편집

11) argoCD webui에서 git소스/live소스를 diff 확인 > 동기화sync

kubectl get all -n default

Argocd WebUI - application 내에서 상단에 “HISTORY”

현시점 외에 과거로 rollback 해보기(2개,1개), 동기화 하면 다시 현재로.(2개)

rollback 시 이전(1개) 으로 돌아가며 sync(동기화)하면 원 상태(2개)로 복구됨

12) kubernetes manifest 를 동기화 해보자.

자신의 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

13) templates 이용하는 방법 - helm (helm chart)

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 연결에 사용


profile
클라우드신생아

0개의 댓글