AWS EKS로 Rabbitmq pod를 만들었는데 10분이 지나도록 Pending이 뜨면 무언가 문제가 있는 것이다.
즉, Status가 Pending이라면 다음과 같은 원인들이 있고 해결할 수 있다.
원인1
클러스터에 사용 가능한 스토리지 클래스인지 확인
해결법
$ kubectl get storageclass
생성한 EBS Volume의 Type과 해당 클러스터의 Type이 일치한지 확인한다.
다르다면 AWS EBS를 해당 Type에 맞춰 다시 생성해준다.
원인2
Helm Chart로 RabbitMQ를 생성할 때, PV가 설정이 안되어 있는 경우
해결법 예시는 다음과 같다.
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 #서비스 생성 확인
원인3
AWS EBS CSI 드라이버가 설치되지 않아 EBS 볼륨을 생성하지 못하는 경우
해결법
EC2 (Bastion) 서버 접속
$ 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"
원인4
PVC와 PV, Rabbitmq.yaml 실행파일이 모두 같은 가용영역인지 확인한다.
해결법
kubectl describe pvc "해당 명" #AZ 확인
kubectl get pv #클러스터에 있는 지 확인
kubectl describe pv "해당 명" #AZ 확인
kubectl get pvc #클러스터에 있는 지 확인
kubectl nodes #AZ 확인
확인 후 yaml파일에서 가용영역을 선언해준다.