컨테이너 플랫폼 클러스터 환경에서 RabbitMQ 구축
Container Platform cluster 환경에서 RabbitMQ를 구축해보기 전에 아래의 링크를 기반으로 정리한 것임을 밝힘
https://www.rabbitmq.com/kubernetes/operator/using-operator.html
https://www.rabbitmq.com/kubernetes/operator/operator-overview.html
RabbitMQ Kubernetes Operators: Cluster Operator and Message Topology Operator — RabbitMQ
RabbitMQ Kubernetes Operators: Cluster Operator and Message Topology Operator The RabbitMQ team develop and maintain two kubernetes operators: the RabbitMQ Cluster Kubernetes Operator and the RabbitMQ Messaging Topology Operator. The RabbitMQ Cluster Kuber
www.rabbitmq.com
우선 첫번째 링크에서
1. RabbitMQ Cluster Kubernetes Operator 사용 방법
# 서비스 가용성 확인
kubectl get customresourcedefinitions.apiextensions.k8s.io
# Rabbitmqclusters.rabbitmq.com 목록에 있는지 확인
kubectl get customresourcedefinitions.apiextensions.k8s.io
# NAME CREATED AT
# rabbitmqclusters.rabbitmq.com 2019-10-23T10:11:06Z
# RabbitMQ 인스턴스 생성
#/home/[usr]/cp-deployment/standalone/single_control_plane/rabbitMQ-cluster-resource
# 필자는 k-paas 구축환경에서 진행되는 상황이므로 rabbitMQ-cluster-resource폴더를 만들어
# 그 안에 yaml 파일을 생성함
vi definition.yaml
[ definition.yaml 내용 ]
apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
name: definition <--이름은 바꿔도될듯... 나중에 검색할때 참고할 수 있도록(근데 namespace명인지, pod명인지,node명인지 모름)
#다음을 실행하여 정의를 적용
kubectl apply -f definition.yaml
#다음을 실행하여 프로세스가 성공했는지 확인
kubectl get all -l app.kubernetes.io/name=definition
#성공 샘플
kubectl get all -l app.kubernetes.io/name=definition
# NAME READY STATUS RESTARTS AGE
# pod/definition-server-0 1/1 Running 0 112s
#
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
# service/definition-nodes ClusterIP None None 4369/TCP 113s
# service/definition ClusterIP 10.103.214.196 None 5672/TCP,15672/TCP,15692/TCP 113s
이렇게 해서 RabbitMQ를 설치하고 실행시킨 후 RabbitMQ Management로 RabbitMQ관리 및 모니터링이 가능하다.
2. RabbitMQ 관리UI 설치 - rabbitmq_management
# rabbitmq-plugins명령어를 사용하기 위해 설치
sudo apt install rabbitmq-server
# RabbitMQ 관리UI 연결을 위한 설치
sudo rabbitmq-plugins enable rabbitmq_management
설치가 완료되고 나면
http://{master IP}:15672 로 관리UI 웹브라우저에 액세스할 수 있음
더 자세히 port가 연결된것을 확인하려면 아래의 명령어로 LISTEN되어있는 포트 확인 (LISTENING 아님)
netstat -an | grep LISTEN
3 .RabbitMQ 관리UI 웹브라우저 터널링하기
위에서 만들어진 주소로 웹브라우저를 확인하고 rabbitMQ의 최초 로그인 아이디인 guest/guest로 접속하면 아래와 같이 나올 것이다.
이렇게 로그인 거절되서 당황스러울 것이다.(나만)
그렇다면 putty 접속 IP load -> 아래 그림과 같이 터널링해준다.
하고 나서 open 하고 접속하면
http://{node-hostname}:15672 또는 http://localhost:15672 로 관리UI 웹브라우저에 액세스할 수 있음.
그러면 geust로 로그인도 가능함. 근데 putty창이 꺼지면 접속도 끊어져서 다시 접속이 안될테니 아예 user을 생성해버리자
3-1. rabbitMQ RabbitMQ 관리 웹브라우저에 유저 생성하기
# 유저 생성하기
rabbitmqctl add_user {userID} {userPW}
# 권한주기 (관리자)
rabbitmqctl set_user_tags {userID} administrator
<<
- set_user_tags 종류
- administrator : 관리자
- monitoring : 조회
- policymaker
- management
- none
>>
# consume, publich 등 할 수 있는 권한 부여
rabbitmqctl set_permissions -p / {userID} ".*" ".*" ".*"
# 위의 명령어가 안먹힌다면 root권한 실행일 수 있으므로 sudo를 붙여서 실행할것
http://{master IP}:15672 로 접속해서 내가 생성한 유저로 바로 접속해버리자
4 . kubectl용 krew 명령어 설치 & RabbitMQ 플러그인 설치
(이건 RabbitMQ설치와 별 상관이 없지만 krew명령어를 쓸수도 있으므로 기록용으로 남겨놈)
플러그인을 설치하기 전에 다음 도구가 설치되어 있는지 확인.
kubectl krew
없다면, krew를 설치해야하는데,
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
명령어를 통해 설치한다.
# 플러그인 설치완료 후 PATH를 추가해야 완성됨
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
# 정상적으로 설치되었는지 확인
kubectl krew
krew가 설치되면 이제 플러그인을 설치할 수 있다.
# 플러그인 설치
kubectl krew install rabbitmq
# 필자는 갑자기 tail?도 설치하라고 떠서 아래 명령어도 실행함
kubectl krew install tail
5 . 이후, Spring Application과 RabbitMQ를 사용해 메세지 주고 받기
[Message Queue]RabbitMQ를 사용해 메세지 주고 받기
RabbitMQ를 통해 메세지를 송, 수신하는 2개의 서비스를 간단히 만들어봅시다.
velog.io
를 참고한 블로그 이다