Cloud Infra Architecture (AWS)/AWS Build

AWS EKS pod에서 RabbitMQ 설치하기 (설치 후 pod 접속 테스트)

seongduck 2024. 10. 20. 23:05

EKS Pod에 RabbitMQ를 설치하고 접속 테스트를 진행해보겠다.

RabbitMQ는 Helm Chart로 설치해도 되지만 yaml 파일을 만들어서 접속해보겠다.

또한 다른 pod에서 Ping 테스트를 진행해 보겠다.

 

필자는 해당 환경에서 이어서 진행한다.

 

AWS EKS 생성 후 접속하기 (Node 그룹, Pod 생성하기, Pod 접속하기)

AWS EKS 클러스터를 생성하고 해당 EKS에 접속하기 위해서는 2가지 방법이 있다.EC2 접속AWS CLI 접속 필자는 EC2로 쉽게 실습해서 접속하는 방법을 소개합니다.이후 EKS를 생성하고 접속은 물론, Node

seongduck.tistory.com


1) RabbitMQ PV yaml 파일 만들기 (저장소)

1) $ vi rabbitmq-pv.yaml
"""
apiVersion: v1
kind: PersistentVolume
metadata:
  name: rabbitmq-pv
spec:
  capacity:
    storage: 1Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: gp2-immediate
  awsElasticBlockStore:
    volumeID: "생성한 EBS ID" #""는 제거
    fsType: ext4
"""

$ kubectl apply -f rabbitmq-pv.yaml #yaml 배포
$ kubectl get svc #서비스 생성 확인

 

2) RabbitMQ PVC yaml 파일 만들기 (저장소 전달)

# vi rabbitmq-pvc.yaml
"""
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rabbitmq-pvc
  labels:
    app: rabbitmq
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: gp2-immediate
"""

$ kubectl apply -f rabbitmq-pvc.yaml #yaml 배포
$ kubectl get svc #서비스 생성 확인

 

3) RabbitMQ yaml 파일 만들고 실행하기

vi rabbitmq-deployment.yaml
"""
# RabbitMQ Deployment 정의
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rabbitmq
  labels:
    app: rabbitmq
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rabbitmq
  template:
    metadata:
      labels:
        app: rabbitmq
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: kubernetes.io/hostname
                    operator: In
                    values:
                      - ip-172-31-0-33.ap-northeast-2.compute.internal
      containers:
        - name: rabbitmq
          image: rabbitmq:3-management
          ports:
            - containerPort: 5672
            - containerPort: 15672
          env:
            - name: RABBITMQ_DEFAULT_USER
              value: user
            - name: RABBITMQ_DEFAULT_PASS
              value: password
          volumeMounts:
            - mountPath: /var/lib/rabbitmq
              name: rabbitmq-pv
      volumes:
        - name: rabbitmq-pv
          persistentVolumeClaim:
            claimName: rabbitmq-pvc
"""

$ kubectl apply -f rabbitmq-deployment.yaml #yaml 배포
$ kubectl get svc #서비스 생성 확인

 

4) RabbitMQ Service 실행

vi rabbit-service.yaml
"""
apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
  labels:
    app: rabbitmq
spec:
  selector:
    app: rabbitmq
  ports:
    - name: amqp
      protocol: TCP
      port: 5672
      targetPort: 5672
    - name: management
      protocol: TCP
      port: 15672
      targetPort: 15672
  type: ClusterIP
"""

$ kubectl apply -f rabbit-service.yaml #yaml 배포
$ kubectl get svc #서비스 생성 확인

 

5) AWS EBS CSI 드라이버 설치

eksctl utils associate-iam-oidc-provider --region=<REGION> --cluster=<CLUSTER_NAME> --approve
kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/ecr/?ref=master"

 

 

6) Pod에서 RabbitMQ 접속 테스트

1) $ kubectl get pods #rabbitmq pod 이름 확인
2) $ kubectl get pod rabbitmq-5d797cbcfd-8tv6s -o wide #생성한 rabbitmq pod IP 확인
3) kubectl exec -it my-nginx-pod -- /bin/bash #pod 접속
4) ping rabbitmqIP


<Ping이 안될 때>
apt-get update && apt-get install -y iputils-ping #ping 명령어 설치
혹은 
curl -I http://rabbitmqIP:15672 #ping이 안될때