로컬 환경과는 다르게, kubernetes에 서비스를 올리기 위해서는 kafka를 설치해야 한다.
이후, kubernetes에서 kafka와 호환하여 작동하도록 소스 일부를 수정해야 한다.
kubernetes에 kafka를 설치하기 위해서, 먼저 helm을 설치하자.
helm 설치
로컬에서 테스트할 때와 마찬가지로, kubernetes에도 kafka를 설치한다.
또한, kafka 설치를 위해서 helm을 설치한다.
이전에 설치했던 choco를 이용한다.
choco install kubernetes-helm
명령어를 실행한다.
질문에는 Y로 대답한다.
설치가 완료됐다.
kubectl --namespace kube-system create sa tiller
helm의 설치 관리자를 위한 사용자 시스템을 생성한다.
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
위 명령어를 수행한다.
helm init --service-account tiller
위 명령어를 수행하면 에러가 난다.
init 명령어는 helm 2.x 버전까지만 존재했다.
3.x 버전 helm이 설치돼있다면, 위 명령어는 skip해도 된다.
helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
helm의 repository를 추가한다.
helm repo update
repository를 update한다.
kubectl create ns kafka
kubernetes에 kafka라는 namespace를 생성한다.
이로써 helm 설치 및 업데이트는 완료됐다.
kafka 설치
helm install my-kafka --namespace kafka incubator/kafka
helm으로 kafka를 설치한다.
kubectl get all -n kafka
kafka namespace를 조회하여 정상 설치됐음을 확인한다.
이제, 위에서 생성한 kafka를 외부 LoadBalancer로 변경한다.
kubectl -n kafka edit svc my-kafka
my-kafka 파일을 수정한다.
아래 type을 ClsuterIP 에서 LoadBalancer로 변경한다.
이후 저장 버튼을 눌러 수정을 완료한다.
kafka pod 올리기
위에서 설치한 kafka와 별도로, 내 프로젝트를 중개할 kafka를 pod로 올려야 한다.
먼저, local pc에 다음과 같은 yaml 파일을 생성한다.
-파일명: 1jokafka
-pod명: 1jokafka
위 파일 생성 후, cmd에서 위 파일이 있는 위치에서 다음 명령어를 수행한다.
-해당 폴더로 이동
kubectl -n kafka create -f [파일명].yaml
ex) kubectl -n kafka create -f 1jokafka.yaml
위 명령어로, kubectl 의 kafka라는 namespace에 1jokafka 이름으로 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 설치, 설정 및 코드 수정을 완료했다.
'IT | Cloud > MSA 설계 구현 및 AWS 배포' 카테고리의 다른 글
MSA 설계 구현부터 AWS 배포까지 - 7. Cloud 서비스 실행 (0) | 2020.07.14 |
---|---|
MSA 설계 구현부터 AWS 배포까지 - 6. 도커라이징 & PUSH (1) | 2020.07.08 |
MSA 설계 구현부터 AWS 배포까지 - 4. AWS 환경설정 (0) | 2020.07.08 |
MSA 설계 구현부터 AWS 배포까지 - 0. 개요 (0) | 2020.07.08 |