[CLOUD NATIVE] 클라우드 네이티브한 서비스 만들기[6] - 배포 준비(Kubernetes)

seongbin·2026년 1월 7일

CLOUD NATIVE

목록 보기
7/7

우선 프로젝트를 진행할 당시 공모전 단체에서 클러스터를 제공해줬기에 클러스터 생성은 내가 하지 않았다.
이후에 공부할 겸 한 번 직접 만들어봤는데 https://dev-gallery.tistory.com/66 이 블로그를 보고 하니 잘 됐다.

또 공모전이 끝난 지금 내가 클러스터에 접근할 수 없기 때문에, 아래 적은 방법들은 내가 직접 배포할 때 간단하게 기록해놓은 것을 바탕으로 한다는 것을 적어둔다.

그래서 기록하지 말까도 생각해봤는데, 미래의 나를 위해서 시행착오를 겪은 경험이라도 적어두는게 나을 것 같아서 기록한다.
그래서 사진이 없을 수도, 정확하지 않은 정보가 있을 수도 있다.

공모전 기관이 제공해준 인프라는 Naver Cloud Platform 의 Ncloud Kubernetes Service, SourcePipeline등 이다.

쿠버네티스(Kubernetes, k8s)

쿠버네티스는 애플리케이션이 아니라 컨테이너 단위로 앱을 실행하고 관리한다.
따라서 msa 구조에 적합한 도구이다.

쿠버네티스 특징

https://kubernetes.io/ko/docs/concepts/overview
1. 자동화된 복구 : 실행중인 컨테이너가 문제가 생겨 동작하지 않으면, 자동으로 다시 시작한다.
2. 로드밸런싱 : 트래픽이 한 곳으로 쏠리지 않게 여러 컨테이너에 골고루 나누어 준다.
3. 무중단 배포 : 서비스를 끄지 않고도 새 버전을 배포할 수 있고, 문제가 생기면 순식간에 이전 버전으로 되돌릴 수 있다.

사용이유

msa 구조는 관리해야 할 서비스가 많아지기 때문에 직접 하나하나 관리하기에는 어려움이 있다. 쿠버네티스는 msa구조에서 발생할 수 있는 문제들을 자동으로 관리해주기 때문에 자연스럽게 사용하게 되었다.

배포과정

ci/cd를 통해 자동으로 배포를 할 수도 있지만, 처음에 쿠버네티스가 제대로 동작하는지 확인하고 싶어서 처음에는 직접 이미지를 올리고 진행했다.

컨테이너 이미지 올리기

쿠버네티스는 컨테이너 이미지를 기반으로 실행되기 때문에 먼저 DockerFile을 작성하고 빌드해 이미지를 Container Registry에 올려두었다.

NCP Container Registry 를 참고해서 진행하였다.

  1. Dockerfile 작성
# user-service/Dockerfile
# 자바 런타임 환경 설정
FROM amazoncorretto:17

# 애플리케이션이 배포될 독립 디렉터리 생성
RUN mkdir -p /usr/app/user-service

# 애플리케이션이 위치할 경로 환경 변수로 설정
ENV APP_HOME=/usr/app/user-service

# 작업 디렉토리 설정
WORKDIR ${APP_HOME}

# JAR 파일 복사
ARG JAR_FILE=build/libs/user-service-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} user-service.jar

# 컨테이너에서 노출할 포트
EXPOSE 8080

# Spring 프로파일을 동적으로 설정할 수 있도록 CMD 명령어 수정
ENV SPRING_PROFILES_ACTIVE=k8s
CMD ["java", "-Dspring.profiles.active=${SPRING_PROFILES_ACTIVE}", "-jar", "user-service.jar"]

서비스마다 Dockerfile을 작성하여 각각 빌드해야 한다.

  1. 빌드 명령어 : ./gradlew clean build
    빌드시 무슨 에러가 엄청 뜨는데 eureka 서버가 안띄워져 있다는 뜻이었다.

  2. docker container 이미지 빌드 : docker build -t [이미지명] .
    마지막 '.'을 꼭 붙여줘야 한다. (빌드 경로)

  3. docker login : docker login [레지스트리 주소]
    이후 username과 password에 api인증키 입력

  4. 이미지 태그 만들기 : docker tag [기존_이미지명]:[기존_태그] [새_이미지명]:[새_태그]
    이때 NCP Container Registry 에 올릴 거면 새 이미지를
    [레지스트리 이름].kr.ncr.ntruss.com/[이미지이름]:[태그]
    이런 식으로 만들면 편리하다.

  5. 이미지를 저장소에 push : docker push [새_이미지명]:[새_태그]

클러스터 접속

클러스터를 관리하기 위해 kubectl을 사용해 클러스터에 접속해야 한다.
powershell에서 작업을 수행할 때 관리자 권한으로 접속하자.

  1. kubectl 설치 : 클러스터를 제어하는 데 사용되는 CLI
    powershell 터미널에서 진행하면 된다.
    choco install kubernetes-cli (설치) -> kubectl version --client (설치 및 버전 확인)

  2. ncp-iam-authenticator 설치 : IAM 인증 도구
    ncp-iam-authenticator 설치 (windows) 를 보고 진행하였다.

  • powershell에서 다음 명령어 수행
    curl -o ncp-iam-authenticator.exe -L https://github.com/NaverCloudPlatform/ncp-iam-authenticator/releases/latest/download/ncp-iam-authenticator_windows_amd64.exe
    (그새 명령어가 바뀐 모양이다)
    curl.exe -LO "https://dl.k8s.io/release/v1.35.0/bin/windows/amd64/kubectl-convert.exe"

  • C: 에 폴더 생성후 다운받은 실행 파일 집어넣기

  • 시스템 속성 - 고급 - 환경 변수 - 시스템 변수 path 에 넣어주기

  • ncp-iam-authenticator 설치 확인
    ncp-iam-authenticator help 에러가 안뜨면 잘 설치가 된거다.

  1. IAM 인증 kubeconfig 생성
    IAM 인증 kubeconfig 생성 및 업데이트 를 참고했다.
  • OS 환경 변수 설정
    powershell에서 $env:NCLOUD_ACCESS_KEY = [할당받은 ACCESS_KEY 입력]
    확인은 $env:NCLOUD_ACCESS_KEY 를 입력해주면 된다.

  • configure 파일 설정
    OS 환경변수만 해도 되는건지 모르겠는데 나는 둘 다 만들었다.
    bash 터미널을 이용해서 vi ~/.ncloud/configure
    이후 아래 내용을 작성하고 ' : + w ' (저장) → ' : + q ' (나가기) 를 수행하면 된다.
ncloud_access_key_id     = {accesskey} // 본인 access key 입력
ncloud_secret_access_key = {secretkey}
ncloud_api_url           = https://ncloud.apigw.ntruss.com
  • kubeconfig 생성
    ncp-iam-authenticator create-kubeconfig --region KR --clusterUuid { 본인의 cluster uuid } --output kubeconfig.yaml

  • 테스트
    kubectl get namespaces --kubeconfig kubeconfig.yaml

  • 환경변수 등록
    기본경로가 아닌 폴더에 configure를 만들었기에 window에게 configure 파일위치를 알려줘야 한다.
    setx KUBECONFIG "C:\경로\kubeconfig.yaml"

  • 연결 확인 (새 터미널에서)
    kubectl get nodes

정리

  • kubernetes는 애플리케이션이 빌드 되는 방식이 아닌, 컨테이너 이미지를 실행되는 방식으로 운영된다.
  • 관리자는 kubectl을 통해 전반적으로 kubernetes를 운영 및 관리할 수 있다.

0개의 댓글