brunch

매거진 kakao cloud

You can make anything
by writing

C.S.Lewis

by Master Seo Feb 17. 2024

카카오 클라우드 4탄-19.ArgoCD를 이용한 배포

ArgoCD를 이용해 배포해보자~



kr-central-1

vm접근용 키페어

access-key

github 작업 환경



<1> 쿠버네티스 환경 설정

<2> 컨테이너 레지스트리에 이미지 업로드

<3> 배포 관리용 Git 리포지토리 생성

<4> ArgoCD 설정

<5> 배포 확인




<1> 쿠버네티스 환경 설정



1

kubectl get nodes 되도록 준비


kubectl get nodes

NAME              STATUS   ROLES    AGE    VERSION

host-10-0-0-153   Ready    <none>   4d1h   v1.26.6

host-10-0-1-199   Ready    <none>   4d1h   v1.26.6



2

 Container Registry  생성

 비공개

 hands-on

 태그 덮어쓰기 = 가능

 이미지 스캔 = 자동   




<2> 컨테이너 레지스트리에 이미지 업로드



1

 docker pull kicset.kr-central-1.kcr.dev/hands-on/kep-library:v1  



2

이미지 올리기 위해 인증

 docker login {프로젝트 이름}.kr-central-1.kcr.dev \

 --username {사용자 액세스 키 ID} \

 --password {사용자 액세스 보안 키}


 # example) 프로젝트 이름 = "kc-handson"

 # docker login kc-handson.kr-central-1.kcr.dev \

 #  --username imaccesskey \

 #  --password imaccesssecretkey   


docker login kakao-infraeng-dev-pz.kr-central-1.kcr.dev --username 7b361d40 --password DQsFuLQzxlaXX0xLRcz-vJDbN4V6x9DBVBmt1dg


Login Succeeded




 3

docker tag \

kicset.kr-central-1.kcr.dev/hands-on/kep-library:v1 \

{프로젝트 이름}.kr-central-1.kcr.dev/hands-on/kep-library:v1

docker push {프로젝트 이름}.kr-central-1.kcr.dev/hands-on/kep-library:v1

# example) 프로젝트 이름 = "kc-handson"


# docker tag \

# kicset.kr-central-1.kcr.dev/hands-on/kep-library:v1 \

# kc-handson.kr-central-1.kcr.dev/hands-on/kep-library:v1

#

# docker push kc-handson.kr-central-1.kcr.dev/hands-on/kep-library:v1



docker tag kicset.kr-central-1.kcr.dev/hands-on/kep-library:v1 kakao-infraeng-dev-pz.kr-central-1.kcr.dev/hands-on/kep-library:v1

Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.



docker push kakao-infraeng-dev-pz.kr-central-1.kcr.dev/hands-on/kep-library:v1



Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.

Getting image source signatures

Copying blob 4e2bc7291a61 done   |

Copying blob f1b5933fe4b5 done   |

Copying blob 790d9e260cb2 done   |

Copying blob ceaf9e1ebef5 done   |

Copying blob 9b9b7f3d56a0 done   |

Copying config ced899cd86 done   |

Writing manifest to image destination

[root@host-10-0-3-182 ~]#



4

콘솔에서 확인   

컨테이너 레지스트리에서 확인





 4

쿠버네티스 클러스터에서 비공개 컨테이너 레지스트리를 사용하기 위해서는 컨테이너 레지스트리와 Secret 정보가 필요합니다.


 아래 정보를 확인하여 ‘handson-cr’ 이름의 시크릿 및 컨테이너 레지스트리 정보를 추가합니다.


# 네임 스페이스를 만든다.

kubectl create namespace kep-library


kubectl create -n kep-library secret docker-registry handson-cr \

--docker-server={프로젝트 이름}.kr-central-1.kcr.dev \

--docker-username={사용자 액세스 키 ID} \

--docker-password={사용자 액세스 보안 키} \

--docker-email={사용자 이메일}



# example) 프로젝트 이름 = kc-handson

# kubectl create secret docker-registry handson-cr -n kep-library \

# --docker-server=kc-handson.kr-central-1.kcr.dev \

# --docker-username=imaccesskey \

# --docker-password=imaccesssecretkey \

# --docker-email=imawesome@awesomegroup.com


kubectl create secret docker-registry handson-cr -n kep-library --docker-server=kakao-infraeng-dev-pz.kr-central-1.kcr.dev --docker-username=7b3651d40 --docker-password=DQsF6QLI-Bmt1dg --docker-email=topasvga@naver.com




 <3> 배포 관리용 Git 리포지토리 생성



 1

Github 작업 환경



kc-hands-on

공개

리포지토리를 생성

Add a README file(README 파일 추가)를 선택합니다.  



2

Add file


service.yaml

파일을 아래 데이터로 작성하여 추가합니다.

네임스페이스 kep-library와 로드밸런서 타입의 서비스를 생성합니다.


apiVersion: v1

kind: Namespace

metadata:

  name: kep-library

---

apiVersion: v1

kind: Service

metadata:

  name: kep-library

spec:

  type: LoadBalancer

  ports:

  - port: 80

    targetPort: 8080

  selector:

    app: kep-library



 3

 deployment.yaml  


 ‘handson-cr’ 이름으로 생성한 시크릿을 설정    


apiVersion: apps/v1

kind: Deployment

metadata:

  name: kep-library

spec:

  replicas: 2

  revisionHistoryLimit: 3

  selector:

    matchLabels:

      app: kep-library

  template:

    metadata:

      labels:

        app: kep-library

    spec:

      containers:

        # example) kc-handson.kr-central-1.kcr.dev/hands-on/kep-library:v1

      - image: {프로젝트 이름}.kr-central-1.kcr.dev/{리포지토리 이름}/kep-library:{이미지 태그}

        name: kep-library

        ports:

        - containerPort: 8080

      imagePullSecrets:

        - name: handson-cr



 deployment.yaml  


apiVersion: apps/v1

kind: Deployment

metadata:

  name: kep-library

spec:

  replicas: 2

  revisionHistoryLimit: 3

  selector:

    matchLabels:

      app: kep-library

  template:

    metadata:

      labels:

        app: kep-library

    spec:

      containers:

        # example) kc-handson.kr-central-1.kcr.dev/hands-on/kep-library:v1

      - image: kakao-infraeng-dev-pz.kr-central-1.kcr.dev/hands-on/kep-library:v1

        name: kep-library

        ports:

        - containerPort: 8080

      imagePullSecrets:

        - name: handson-cr



작성한 파일을 확인





<4> ArgoCD 설정



1

kubectl create namespace argocd


kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/release-2.8/manifests/install.yaml



2

Github 리포지토리 주소를 작성하여 ArgoCD 프로젝트를 배포



cat <<EOF | kubectl apply -f -

apiVersion: argoproj.io/v1alpha1

kind: Application

metadata:

  name: kep-library

  namespace: argocd

spec:

  project: default

  source:

    repoURL: {GitHub 리포지토리 URL}

    targetRevision: HEAD

    path: ./

  destination:

    server: https://kubernetes.default.svc

    namespace: kep-library

  syncPolicy:

    automated:

      prune: true

      selfHeal: true

      allowEmpty: false

    syncOptions:

      - CreateNamespace=true

EOF



cat <<EOF | kubectl apply -f -

apiVersion: argoproj.io/v1alpha1

kind: Application

metadata:

  name: kep-library

  namespace: argocd

spec:

  project: default

  source:

    repoURL: https://github.com/topasvga/kc-hands-on

    targetRevision: HEAD

    path: ./

  destination:

    server: https://kubernetes.default.svc

    namespace: kep-library

  syncPolicy:

    automated:

      prune: true

      selfHeal: true

      allowEmpty: false

    syncOptions:

      - CreateNamespace=true

EOF




application.argoproj.io/kep-library created



 repoURL: https://github.com/argoproj/argocd-example-apps.git


https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/





<5> 배포 확인



1

argoCD 관리 페이지를 포트 포워딩

kubectl port-forward svc/argocd-server -n argocd 8080:443&



2

8080 포트로 접속

open http://localhost:8080



3

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo

# 기본 계정

# ID: admin

# PW: {출력 결과}



 4

 argoCD 웹페이지 접속해 확인한다.  



 5

 콘솔에서 Load Balancer 서비스에 접속합니다. 생성된 로드밸런서에 공인 IP를 부여

 사이트 접속  



 # 참고 자료

 https://docs.kakaocloud.com/tutorial/dev-ops/gitops/argoCD-publishing



몰아보기

https://brunch.co.kr/@topasvga/3651

 감사합니다.        



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari