Cloud Infra Architecture (AWS)/AWS Build

[Trouble Shooting] AWS EKS Pod에 RabbitMQ 설치시 "curl: (7) Failed to connect to my-rabbitmq port 15672 after 2 ms: Couldn't connect to servercommand terminated with exit code 7" 에러 발생

seongduck 2024. 10. 20. 23:08

1. 원인

  • 필자는 RabbitMQ설치시 스토리지(EBS, 저장소)를 못찾거나 선언해주지 않았을 때 발생했다.

 

2. 해결

1) AWS 콘솔에서 EKS와 Node와 같은 AZ에 EBS 생성
2) pv.yaml 파일에 해당 코드 추가
"""
  awsElasticBlockStore:
    volumeID: "생성한 EBS ID" #""는 제거
"""
3) $ kubectl apply -f pv.yaml #yaml 배포
$4)  kubectl get svc #서비스 생성 확인

3. 해결을 봐도 모르겠으면 예시는 다음과 같다.

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 #서비스 생성 확인