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