brunch

매거진 kakao cloud

You can make anything
by writing

C.S.Lewis

by Master Seo Feb 13. 2024

카카오클라우드 4탄-16.CI/CD

카카오 클라우드의 CI/CD를 알아보자~



kr-central-1

명령서버 centos 환경

GitHub계정

로컬환경에서 git설치 및 계정 세팅


https://kakaocloud.com/



<0> 사전 준비

<1> DevOps Pipeline 환경 설정

<2> 클릭만으로 CI/CD 파이프라인 구축

<3> 서비스 접속 확인하기

<4> 참고 사이트



<0> 사전 준비



1

컨테이너 레지스트리 만들기

공개

test-cr

태그 덮어쓰기 가능

이미지 스캔 수동



2

컨테이너 레지스트리 접근 URI 확인하기

커멘드 보기에서 접근 uri확인이 가능하다.



docker login kakao-infraeng-dev-pz.kr-central-1.kcr.dev --username {사용자 액세스 키 ID} --password {사용자 액세스 보안 키}


docker tag {소스 이미지} kakao-infraeng-dev-pz.kr-central-1.kcr.dev/test-cr/{이미지 이름}:{태그 이름}


docker push kakao-infraeng-dev-pz.kr-central-1.kcr.dev/test-cr/{이미지 이름}:{태그 이름}


docker pull kakao-infraeng-dev-pz.kr-central-1.kcr.dev/test-cr/{이미지 이름}:{태그 이름}



#kubectl 


curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" 


install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl




3

쿠버네티스 클러스터 생성하기


kr-central-1

사용자 엑세스키 준비


클러스터 이름

tutorial

vpc

tutorial

subnet 

main

sn-1

sn-2

sn-6

(10분 걸림)


노드풀 - 노드풀 만들기 - 노드 2개

tutorial-nodepool1

(2분 걸림)



참고 사이트 - 여기는 kr-central-2 에 쿠버네티스 생성으로 되어 있다.

https://docs.kakaocloud.com/tutorial/Kubernetes/k8s-engine-k8s-cluster




# kubectl로 쿠버네티스 API 호출하기



1

kubectl 설치하기

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"



2

버전 확인

kubectl version --client



3

kubeconfig 파일 다운로드 및 설정


콘솔 > 쿠버네티스 클러스터에서 kubeconfig 파일 다운로드


vi kubeconfig-tutorial.yaml


env 필드 수정한다.

엑세스키와 보안키 입력한다.



users:

- name: ${클러스터 이름}-admin

user:

    exec:

    apiVersion: client.authentication.k8s.io/v1beta1

    args: null

    command: kic-iam-auth

    env:

    - name: "OS_AUTH_URL"

        value: "https://iam.kakaoi.io/identity/v3"

    - name: "OS_AUTH_TYPE"

        value: "v3applicationcredential"

    - name: "OS_APPLICATION_CREDENTIAL_ID"

        value: "${사용자 액세스 키 ID 입력}"

    - name: "OS_APPLICATION_CREDENTIAL_SECRET"

        value: "${사용자 액세스 보안 키 입력}"

    - name: "OS_REGION_NAME"

        value: "kr-central-1"




4

기본적으로 kubectl은 $HOME/.kube/config 파일에 저장된 정보를 통해 클러스터에 접근합니다. 

설정한 kubeconfig 파일을 $HOME/.kube/config 경로에 복사합니다.


mkdir $HOME/.kube

cp ${KUBECONFIG_FILE_PATH} $HOME/.kube/config


cp /root/kubeconfig-tutorial.yaml $HOME/.kube/config



카카오클라우드 인증 클라이언트 다운로드 및 설정

https://docs.kakaocloud.com/service/container-pack/k8se/how-to-guides/k8se-kubectl#%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EC%9D%B8%EC%A6%9D-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%84%A4%EC%A0%95


sudo chmod +x ${IAM_FILE_PATH}

mv ${IAM_FILE_PATH} /usr/local/bin


cp kic-iam-auth /usr/local/bin/



# 쿠버네티스 API 호출


kubectl get nodes

NAME              STATUS   ROLES    AGE   VERSION

host-10-0-0-153   Ready    <none>   14m   v1.26.6

host-10-0-1-199   Ready    <none>   14m   v1.26.6


참고 사이트

https://docs.kakaocloud.com/tutorial/Kubernetes/k8s-engine-k8s-cluster




# Helm 설치하기


helm





# 예제 리포지토리 설정하기



1

예제 리포지토리에는 도커 빌드를 위한 Dockerfile과 helm 배포를 위한 설정들이 포함되어 있습니다.


mkdir ~/handson-pipeline

cd ~/handson-pipeline

git clone https://github.com/kakaoenterprise/kic-library-monolithic.git



2

values.yaml 파일은 helm 차트에서 사용하는 기본 설정값을 정의합니다. 

Container Registry에 업로드한 이미지를 LoadBalancer 타입으로 배포하도록 설정합니다. 

아래 명령어를 입력하고 ${CONTAINER_REGISTRY_URI} 값을 변경해 values.yaml 파일을 설정합니다.



    cat <<EOF | sudo tee ~/handson-pipeline/kic-library-monolithic/chart/values.yaml

    app:

        name: library-k8s

        profile:

        replicaCount: 1

        hostAliases: []

        image: ${CONTAINER_REGISTRY_URI}/test-img:latest

        # 예시) test-project.kr-central-1.kcr.dev/hands-on/test-img:latest

        resources: {}

        service:

        type: LoadBalancer

    EOF



cat <<EOF | sudo tee ~/handson-pipeline/kic-library-monolithic/chart/values.yaml

    app:

        name: library-k8s

        profile:

        replicaCount: 1

        hostAliases: []

        image: kakao-infraeng-dev-pz.kr-central-1.kcr.dev/test-cr/test-img:latest

        resources: {}

        service:

        type: LoadBalancer

EOF









3

GitHub에 로그인해 library-monolithic 이름으로 public 리포지토리를 생성합니다.



topasvga@naver.om


library-monolithic



4

git 명령어를 통해 kic-library-monolithic 폴더 내 파일들을 library-monolithic 깃헙 리포지토리에 업로드합니다.


cd ~/handson-pipeline/kic-library-monolithic

git init

git add .

git commit -m "Upload Files"

git branch -M main

git remote add origin https://github.com/topasvga/library-monolithic.git

git push -u origin main



topasvga

ghp_pc5Qxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   <- 토큰 값




# git remote add origin https://github.com/${GITHUB_USER_NAME}/library-monolithic.git



# git   공부하기


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






# 원격 오리진 확인

git remote -v


# 원격 오리진 삭제

git remote rm origin




<1> DevOps Pipeline 환경 설정



1

외부 서비스(소스) 만들기.

DevOps Pipeline > Configuration > 외부 서비스 탭에서 [외부 서비스 만들기]

library-git 

Github

https://github.com/${GITHUB_USER_NAME}/library-monolithic




2

Container Registry 접근용 크리덴셜 만들기

DevOps Pipeline > Configuration > 크리덴셜 탭에서 [크리덴셜 만들기]

cr-secret 

사용자 이름 - 사용자 액세스 키 ID

비밀번호 - 사용자 보안키







3

외부 서비스(빌드) 만들기

도커 이미지 빌드를 위해 외부 서비스 만들기 화면에서 아래 표와 같이 정보를 입력

docker-image 

Docker 

https://${CONTAINER_REGISTRY_URI}

cr-secret



CONTAINER_REGISTRY_URI

kakao-infraeng-dev-pz.kr-central-1.kcr.dev/test-cr






4

Kubernetes cluster 접근용 크리덴셜 만들기

크리덴셜


k8se-cluster-secret

Kubeconfig

kubeconfig 파일 불러오기





5

결재선 템플릿 만들기

DevOps Pipeline > Configuration > 결재선 템플릿 탭에서 [결재선 템플릿 만들기] 

approval-template

결재자 선택 > 결재자 이메일 입력





<2> 클릭만으로 CI/CD 파이프라인 구축



DevOps Pipeline을 이용하면 버튼 클릭 몇 번 만으로 손쉽게 CI/CD 파이프라인을 구축할 수 있습니다.



1

DevOps Pipeline > Pipeline   >  [파이프라인 만들기] 버튼



2

새 파이프라인 팝업창에서 처음부터 만들기





3

새 파이프라인 만들기 화면 > 좌측 태스크 추가 탭에서 다음을 참고해 태스크를 추가한 후, 소스 → 빌드 → 결재 → 배포순으로 태스크를 연결


소스

github


빌드

docker


결재

approval 


배포

helm










파이프라인 저장





참고

https://docs.kakaocloud.com/tutorial/dev-ops/devops-pipeline-cicd



4

테스크별로 설정값을 입력한다.

docker 

docker-image

./Dockerfile

test-img

lastest



5

파이프라인 저장 버튼 클릭.





# 파이프라인 실햅 및 확인.



1

devops pipeline 메뉴 > 파이프라인 탭



2

상세 정보를 확인할 파이프라인 선택



3

실행 - 실행 이력을 확인한다.



4

실행결과 확인.

실행 결과가 결재 대기 상태면 결재를 눌러 결재를 승인한다.



5

콘솔에서 로드밸런서 설정하기.

로드밸런서 목록에서 공인 IP를 부여한다.




<3> 서비스 접속 확인하기



로드밸런서 공인ip로 접속한다.




<4> 참고 사이트


https://docs.kakaocloud.com/tutorial/dev-ops/devops-pipeline-cicd



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




감사합니다.



                    

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