curl "https://github.com/rabbitmq/cluster-operator/releases/latest/download/cluster-operator.yml" > ./cluster-operator.yaml
kubectl apply -f ./cluster-operator.yaml
# namespace/rabbitmq-system created
# customresourcedefinition.apiextensions.k8s.io/rabbitmqclusters.rabbitmq.com created
# serviceaccount/rabbitmq-cluster-operator created
# role.rbac.authorization.k8s.io/rabbitmq-cluster-leader-election-role created
# clusterrole.rbac.authorization.k8s.io/rabbitmq-cluster-operator-role created
# rolebinding.rbac.authorization.k8s.io/rabbitmq-cluster-leader-election-rolebinding created
# clusterrolebinding.rbac.authorization.k8s.io/rabbitmq-cluster-operator-rolebinding created
# deployment.apps/rabbitmq-cluster-operator created
rabbitmq-system이라는 네임스페이스에 CRD를 포함한 필요한 리소스들이 생성된다. 그리고 이 API를 사용하여 rabbimq를 요청하면 statefulset을 생성해준다.
-- rabbitmq.yaml
apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
name: rabbitmq-node
spec:
service:
type: NodePort
replicas: 3
persistence:
storageClassName: "gp2"
storage: 2Gi
resources:
limits:
cpu: "0.25"
memory: 2Gi
requests:
cpu: "0.25"
memory: 2Gi
rabbitmq:
envConfig: |
RABBITMQ_DEFAULT_USER=user
RABBITMQ_DEFAULT_PASS=user1234
RABBITMQ_NODE_PORT=5672
steve@MacBookPro ~/eks/prd/rabbitmq # k apply -f ./rabbitmq.yaml
steve@MacBookPro ~/eks/prd/rabbitmq # k get all -l app.kubernetes.io/name=rabbitmq-node
NAME READY STATUS RESTARTS AGE
pod/rabbitmq-node-server-0 1/1 Running 0 24h
pod/rabbitmq-node-server-1 1/1 Running 0 2d10h
pod/rabbitmq-node-server-2 1/1 Running 0 24h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/rabbitmq-node NodePort 172.20.218.143 <none> 5672:31012/TCP,15672:32533/TCP,15692:30533/TCP 2d10h
service/rabbitmq-node-nodes ClusterIP None <none> 4369/TCP,25672/TCP 2d10h
NAME READY AGE
statefulset.apps/rabbitmq-node-server 3/3 2d10h
내가 요청한 yaml은 노드 수는 3개, gp2 sc에 pvc를 요청하여 동적 볼륨을 할당 받고, 서비스 타입은 NodePort로 하되 alb-ingress로부터 트래픽을 받도록 설정하였다.