2020/06/05
RabbitMQをGKE上に導入する
概要
Titleの通りですが、メッセージングミドルウェアの一つであるRabbitMQをGKEを使って導入しました。
RabbitMQはBackground task管理に利用しています。(BackendにCeleryを導入しているのですが、それのBroker用にRabbitMQを使っています。)
実施事項
以下の通り設定ファイルを作って、deployしました。
k8sのデプロイ内容詳細
事前準備
- RabbitMQデータの永続化のためのCompute Diskを作成しました。
以下のようなコマンドで作成しました。(daily-snapshotという一日に一回スナップショットをとるポリシー付きです)
gcloud beta compute disks create "rabbitmq" \
--project="your-google-project-id" \
--zone="your-google-project-zone" \
--type=pd-ssd \
--size=20GB \
--resource-policies=projects/your-google-project-id/regions/your-google-project-region/resourcePolicies/daily-snapshot
k8sへのデプロイ設定ファイル及び順序
namespace
apiVersion: v1
kind: Namespace
metadata:
name: rabbitmq
config map
apiVersion: v1
kind: ConfigMap
metadata:
name: rabbitmq
namespace: rabbitmq
data:
user: your_rabbitmq_username
vhost: your_rabbitmq_default_vhost_name
secret
apiVersion: v1
kind: Secret
metadata:
name: rabbitmq
namespace: rabbitmq
type: Opaque
data:
password: <your-rabbitmq-password base64 encoded string here>
pv & pvc
apiVersion: v1
kind: PersistentVolume
metadata:
name: rabbitmq
spec:
storageClassName: rabbitmq
capacity:
storage: 20Gi # <- 事前準備で作成したDisk Size
accessModes:
- ReadWriteOnce
gcePersistentDisk:
pdName: rabbitmq # <- 事前準備で作成したDisk Name
fsType: ext4
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rabbitmq
namespace: rabbitmq
spec:
storageClassName: rabbitmq
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: rabbitmq
namespace: rabbitmq
spec:
replicas: 1
selector:
matchLabels:
app: rabbitmq
template:
metadata:
name: rabbitmq
labels:
app: rabbitmq
spec:
containers:
- name: rabbitmq
image: rabbitmq:3.8.3-management-alpine
ports:
- name: rabbitmq
containerPort: 5672
- name: management
containerPort: 15672
env:
- name: RABBITMQ_DEFAULT_USER
valueFrom:
configMapKeyRef:
name: rabbitmq
key: user
- name: RABBITMQ_DEFAULT_PASS
valueFrom:
secretKeyRef:
name: rabbitmq
key: password
- name: RABBITMQ_DEFAULT_VHOST
valueFrom:
configMapKeyRef:
name: rabbitmq
key: vhost
volumeMounts:
- mountPath: /var/lib/rabbitmq
name: rabbitmq
volumes:
- name: rabbitmq
persistentVolumeClaim:
claimName: rabbitmq
service
apiVersion: v1
kind: Service
metadata:
name: rabbitmq
namespace: rabbitmq
spec:
ports:
- name: rabbitmq
port: 5672
targetPort: rabbitmq
selector:
app: rabbitmq
その他
management consoleへのログイン
以下を実行して、podの15672portをlocalhostにフォワーディングします。
kubectl port-forward $(kubectl get pods --no-headers -o custom-columns=":metadata.name" -n rabbitmq | grep rabbitmq) -n rabbitmq 15672:15672
その後 http://localhost:15672 にアクセスして、configmapやsecretで定義したuser/passwordでログインできます。
rabbitmqのpodへのログイン
kubectl exec -it $(kubectl get pods --no-headers -o custom-columns=":metadata.name" -n rabbitmq | grep rabbitmq) -n rabbitmq -- bash
関連する記事
[小〜中規模向け]GKEにTiDBをデプロイする
MySQL互換のNewSQLであるTiDBをGKEにデプロイしてみました。
NATS JetStream Controllerを使ってNATSをGKEにデプロイする
helm chartのnackを使って、NATS JetStreamサーバーをデプロイして、Stream/Consumerをk8sリソースとして管理する
GKEにDragonflydbをデプロイする
redis互換のdragonflydbをGKEにデプロイしました
[GKE]Kafka Strimziをアップグレードする
GKEにデプロイしているKafka Strimzi 0.26.0を0.30.0にアップグレードする