본문 바로가기

Cloud/Azure

Local에서 Docker Image 만든 후, Azure 서버에 K8S로 배포하기

배포환경 세팅

Windows 환경에서 Docker와 K8S를 이용해 Azure 서버에 배포한다.

이를 위해 배포 환경(Windows Terminal, Docker, K8S, Azure CLI, Azure K8S 자격증명)이 세팅되어 있어야 한다.

https://developer-minji.tistory.com/110?category=1047490 

 

Windows에 Docker, K8S 환경설정

1. Windows Terminal 설치 Google에서 Windows Terminal을 검색해서 설치합니다. 2. Windows에 WSL2 설치 및 활성화 Docker는 리눅스 환경에서 실행되기 때문에 Windows에서 Docker를 설치하고 사용하려면 WLS(Win..

developer-minji.tistory.com

https://developer-minji.tistory.com/113?category=1045212 

 

Azure CLI(명령줄 인터페이스) 설치 및 K8S 자격증명 받기

먼저 Window에 Window Terminal, Docker와 K8S가 설치되어 있어야한다. 아래 글을 따라 K8S까지 설치한다. https://developer-minji.tistory.com/110?category=1047490 Windows에 Docker, K8S 환경설정 1. Windows..

developer-minji.tistory.com

 

배포하기

배포과정 요약

  1. Local에서 Eclipse로 배포할 파일을 Jar로 target 폴더 아래에 만든다.
  2. Docker로 target에 만든 Jar 파일을 이용해 Docker Image로 만든다.
  3. Local에 만든 Docker Image를 Azure의 Docker Image Repository에 Push한다.
  4. Azure의 K8S Cluster에 접속하여 K8S를 이용해 Azure에 올린 Docker Image를 배포한다.

 

Eclipse로 배포할 프로젝트 Jar 파일 만들기

Eclipse에서 배포할 프로젝트의 Maven Build..에서 아래와 같이 작성해주고 Run을 누른다.

 

build success 후,

 

target에 jar파일이 생성된 것을 확인할 수 있다.

Docker로 Docker Image 만들기

프로젝트의 DockerFile을 Docker로 실행시켜 target에 있는 Jar파일을 가지고 Docker Image로 만든다.

DockerFile 있는 곳에서 아래 Docker 명령어로 Docker컨테이너 이미지를 build한다.

docker build ./ -t <이미지 명>:<tag>
ex) docker build ./ -t tradlinx.azurecr.io/user-api

 

참고로, tradlinx.azurecr.io는 컨테이너 레지스트리의 로그인 서버이다. 

 

docker images 명령어를 사용하면 Local에 만들어진 Docker Image들을 확인할 수 있다.

docker images

Docker Desktop에서도 확인 가능하다.

Azure Repository에 Local의 Docker Image Push

Azure에 로그인 한다.

az login

az acr login -n <리포지토리 명>
ex) az acr login -n tradlinx

 

아래 docker 명령어로 Azure Repository에 Local에 만든 Docker Image를 Push한다.

docker push <이미지 명>:<tag>
	
ex) docker push tradlinx.azurecr.io/user-api
//태그가 없으면 자동으로 latest가 된다.

//아래와 같이 tag를 붙여줄 수 있다.
ex) docker push ./ -t tradlinx.azurecr.io/user-api:20220317-0904

 

Push하면 로그인한 Azure 리포지토리(tradlinx)의 user-api 리포지토리에 Push된 것을 확인할 수 있다.

K8S를 이용해 Azure의 Docker Image 배포하기

context 변경

사용할 context로 변경해준다. context는 Azure의 kubernates service의 이름으로 보면 된다.

local에서 kubectl로 Azure의 Kubernates를 사용하고 싶다면, Azure로부터 K8S 자격증명을 받아와야 한다.

//현재 사용하는 context를 알려준다.
kubectl config current-context

//<컨텍스트명>으로 context를 변경한다.
kubectl config use-context <컨테스트명> 
ex) kubectl config use-context tx-k8s-test2

//context 리스트 조회한다. *로 표시된 것이 사용중인 context이다.
kubectl config get-context

 

K8S에 변경된 yaml파일을 적용한다.

kubectl apply -f <파일명>
ex) kubectl apply -f ./service/user.yaml

Pod 배포 및 Restart

 

아래 명령어를 사용해 Pod의 상태를 확인할 수 있다.

// Pod의 상태를 알려준다.
kubectl get pods -n <Pod 이름> -o wide
ex) kubectl get pods -n user -o wide

//watch는 Pod의 상태를 업데이트 하면서 알려준다.
kubectl get pods -n <Pod 이름> -o wide --watch
ex) kubectl get pods -n user -o wide --watch

 

아래 명령어를 이용해 Pod를 재실행한다.

// Pod 재실행
kubectl rollout restart deployment <deployment 이름> -n <namespace 이름>
ex) kubectl rollout restart deployment user-api -n user

 

아래 명령어를 이용해 Pod의 로그를 확인할 수 있다.

// Pod 로그 보기
kubectl logs -f <pod 이름> -n <namespace>
ex) kubectl logs -f user-api-76cd89b75f-nc4ts -n user

 

k9s를 이용해서 배포한 pod를 모니터링할 수 있다.