로컬 환경과는 다르게, kubernetes에 서비스를 올리기 위해서는 kafka를 설치해야 한다.

이후, kubernetes에서 kafka와 호환하여 작동하도록 소스 일부를 수정해야 한다.

 

kubernetes에 kafka를 설치하기 위해서, 먼저 helm을 설치하자.

 

helm 설치

로컬에서 테스트할 때와 마찬가지로, kubernetes에도 kafka를 설치한다.

또한, kafka 설치를 위해서 helm을 설치한다.

 

이전에 설치했던 choco를 이용한다.

 

helm 설치

 

choco install kubernetes-helm

명령어를 실행한다.

질문에는 Y로 대답한다.

 

 

helm 설치 완료

 

설치 완료됐다.

 

 

helm

 

kubectl --namespace kube-system create sa tiller

helm의 설치 관리자를 위한 사용자 시스템을 생성한다.

 

 

계정에 역할 부여

 

kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

위 명령어를 수행한다.

 

 

helm init

 

helm init --service-account tiller

위 명령어를 수행하면 에러가 난다.

init 명령어는 helm 2.x 버전까지만 존재했다.

3.x 버전 helm이 설치돼있다면, 위 명령어는 skip해도 된다.

 

 

helm repo 추가

 

helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator

helm repository를 추가한다.

 

 

repository update

 

helm repo update

repository update한다.

 

 

namespace 생성

 

kubectl create ns kafka

kubernetes kafka라는 namespace 생성한다.

 

이로써 helm 설치 및 업데이트는 완료됐다.

 

 

kafka 설치

 

 

kafka 설치

 

helm install my-kafka --namespace kafka incubator/kafka

helm으로 kafka를 설치한다.

 

 

kafka 설치 확인

 

kubectl get all -n kafka

kafka namespace를 조회하여 정상 설치됐음을 확인한다.

 

이제, 위에서 생성한 kafka를 외부 LoadBalancer로 변경한다.

kafka 파일 수정

kubectl -n kafka edit svc my-kafka

my-kafka 파일을 수정한다.

아래 type을 ClsuterIP 에서 LoadBalancer로 변경한다.

이후 저장 버튼을 눌러 수정을 완료한다.

 

kafka pod 올리기

위에서 설치한 kafka와 별도로, 내 프로젝트를 중개할 kafka를 pod로 올려야 한다.

 

먼저, local pc에 다음과 같은 yaml 파일을 생성한다.

kafka yaml 파일

-파일명: 1jokafka

-pod명: 1jokafka

 

1jokafka.zip
0.00MB

 

위 파일 생성 후, cmd에서 위 파일이 있는 위치에서 다음 명령어를 수행한다.

-해당 폴더로 이동

kubectl -n kafka create -f [파일명].yaml

ex) kubectl -n kafka create -f 1jokafka.yaml

 

위 명령어로, kubectl 의 kafka라는 namespace1jokafka 이름으로 pod가 생성된다.

 

kubectl get pod -n kafka

명령어로 확인 해보자.

 

이제 kafka 올리기는 완료됐다.

다음은 소스 수정을 한다.

 

kubernets kafka 연동 위한 소스 수정

 

수정할 부분은 두 가지이다.

 

1. brokers

소스에서 ctrl + shift + f 를 누르면 전체 검색을 할 수 있다.

여기서 brokers 를 검색하면, profilese 값이 docker 인 설정 안에 brokers 부분이 있다.

이 부분을 다음과 같이 변경한다.

변경 전: localhost:9092

변경 후:  [my-kafa EXTERNAL IP]:9092

ex) brokers: a205882851c0d47c38e467574c2439ab-1315745141.ap-northeast-2.elb.amazonaws.com:9092

my-kafka의 EXTERNAL IP 확인 방법은 다음과 같다.

 

kubectl get svc -n kafka

 

2. FeignClient

MSA의 Architecture에 의해, 다른 Aggregate을 접근하기 위한 코드들이 있다.

이 중, FeignClient 부분을 localhost에서 접근할 Aggregate 이름으로 수정을 해줘야 한다.

 

위는, Billing aggregate에서 deal aggregate로 요청을 전달하는 부분이다.

@FeignClient 의 원래 코드인

//@FeignClient(name = "deal", url = "http://localhost:8085")

이 부분을 주석처리하고,

@FeignClient(name = "deal", url = "http://deal:8080")

위처럼 localhost를 deal로, 8085와 같은 각 aggregate의 포트를 8080으로 일괄 변경한다.

 

위와 같은 작업을, 각 FeignClient 어노테이션(?) 마다 해준다.

 

이로써, kafka 설치, 설정 및 코드 수정을 완료했다.

+ Recent posts