brunch
매거진 kakao cloud

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

by Master Seo

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

감사합니다.



매거진의 이전글카카오 클라우드 4탄-18.Git을 통한 이미지 업로드