카카오 클라우드의 CI/CD를 알아보자~
kr-central-1
명령서버 centos 환경
GitHub계정
로컬환경에서 git설치 및 계정 세팅
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
카카오클라우드 인증 클라이언트 다운로드 및 설정
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 > 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
결재자 선택 > 결재자 이메일 입력
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를 부여한다.
로드밸런서 공인ip로 접속한다.
https://docs.kakaocloud.com/tutorial/dev-ops/devops-pipeline-cicd
https://brunch.co.kr/@topasvga/3651
감사합니다.