2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ICPでRabbitMQを稼働してみる(1/2)

Last updated at Posted at 2019-04-20

Summary

やったこと

やっていないこと

  • RabbitMQ についての説明はしていません。
  • Liberty アプリケーションの詳細な説明はしていません。

RabbitMQを稼働

Pureイメージを使用した起動

公式イメージを使用します。
今後、管理画面を使用できるように、<バージョン名>-managementのバージョンを使用します。
また、デフォルトの VHOST 、ユーザー、パスワードを指定します。

# Key Value
VHOST RABBITMQ_DEFAULT_VHOST vhost1
ユーザー RABBITMQ_DEFAULT_USER rabbitmq
パスワード RABBITMQ_DEFAULT_PASS rabbitmq
$ docker run --rm -d --hostname rabbitmq --name rabbitmq -e RABBITMQ_DEFAULT_VHOST=vhost1 -e RABBITMQ_DEFAULT_USER=rabbitmq -e RABBITMQ_DEFAULT_PASS=rabbitmq rabbitmq:3.7.7-management

起動時に読み込む定義の作成

docker execで アプリユーザー、Exchange、Queue、Bingdings を作成します。

$ docker exec rabbitmq rabbitmqctl add_user ossapl ossapl
Adding user "ossapl" ...
$ docker exec rabbitmq rabbitmqctl set_permissions -p vhost1 ossapl ".*" ".*" ".*"
Setting permissions for user "ossapl" in vhost "vhost1" ...
$ docker exec rabbitmq rabbitmqadmin -u rabbitmq -p rabbitmq -V vhost1 declare exchange name=exchange1 type=direct
exchange declared
$ docker exec rabbitmq rabbitmqadmin -u rabbitmq -p rabbitmq -V vhost1 declare queue name=queue1 auto_delete=false durable=true
queue declared
$ docker exec rabbitmq rabbitmqadmin -u rabbitmq -p rabbitmq -V vhost1 declare binding source=exchange1 destination=queue1
binding declared

custom_definitions.jsonを作成し、docker cpでローカルに持ってきます。

$ docker exec rabbitmq rabbitmqadmin -u rabbitmq -p rabbitmq export custom_definitions.json
Exported definitions for localhost to "custom_definitions.json"
$ docker cp rabbitmq:custom_definitions.json .
custom_definitions.json
{
	"rabbit_version": "3.7.7",
	"users": [
		{
			"name": "ossapl",
			"password_hash": "rFTe2HD9vOb8zFdG83KlokhakaK4OLFKIC2POssvvZUaL6+f",
			"hashing_algorithm": "rabbit_password_hashing_sha256",
			"tags": ""
		},
		{
			"name": "rabbitmq",
			"password_hash": "8JLE1YW/TKIqh7LmzxcFTfGwRqt8xpr7AHa9kxezPBCbGOc6",
			"hashing_algorithm": "rabbit_password_hashing_sha256",
			"tags": "administrator"
		}
	],
	"vhosts": [
		{
			"name": "vhost1"
		}
	],
	"permissions": [
		{
			"user": "rabbitmq",
			"vhost": "vhost1",
			"configure": ".*",
			"write": ".*",
			"read": ".*"
		},
		{
			"user": "ossapl",
			"vhost": "vhost1",
			"configure": ".*",
			"write": ".*",
			"read": ".*"
		}
	],
	"topic_permissions": [],
	"parameters": [],
	"global_parameters": [],
	"policies": [],
	"queues": [
		{
			"name": "queue1",
			"vhost": "vhost1",
			"durable": true,
			"auto_delete": false,
			"arguments": {}
		}
	],
	"exchanges": [
		{
			"name": "exchange1",
			"vhost": "vhost1",
			"type": "direct",
			"durable": true,
			"auto_delete": false,
			"internal": false,
			"arguments": {}
		}
	],
	"bindings": [
		{
			"source": "exchange1",
			"vhost": "vhost1",
			"destination": "queue1",
			"destination_type": "queue",
			"routing_key": "",
			"arguments": {}
		}
	]
}

定義が作成できたら、コンテナを停止します。

$ docker stop rabbitmq

Dockerfileの作成

RabbitMQのDockerfile を作成します。
custom_definitions.jsonをコピーし、起動時に読み込むよう定義を追記します。

FROM rabbitmq:3.7.7-management
COPY custom_definitions.json /etc/rabbitmq/
RUN printf 'management.load_definitions = /etc/rabbitmq/custom_definitions.json\n' >> /etc/rabbitmq/rabbitmq.conf

ビルド、タグの作成、イメージのプッシュ

Dockerfileを用いてビルド、タグを作成し、ICPのプライベートDocker Registry へプッシュします。

$ docker build . -t mycluster.icp:8500/default/docker_hub_id/rabbitmq:v0.0.1
$ docker push mycluster.icp:8500/default/docker_hub_id/rabbitmq:v0.0.1

ICPの管理画面から確認できます。
スクリーンショット 2019-04-20 21.28.47.png

Secretの作成

ここから、Kubernetes へリソースを定義していきます。
RabbitMQ のデフォルトパスワードを変更していますので Secret を作成します。
パスワードを Base64 でエンコードします。

$ echo -n "rabbitmq" | base64
cmFiYml0bXE=

Secretを作成します。

rabbitmq-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: rabbitmq-secret
type: Opaque
data:
  rabbitmq-default-pass: cmFiYml0bXE=

ConfigMapの作成

デフォルトの VHOST とユーザーを定義した ConfigMap を作成します。

rabbitmq-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: rabbitmq-config
data:
  rabbitmq-default-vhost: "vhost1"
  rabbitmq-default-user: "rabbitmq"

Deploymentの作成

使用するイメージは、先ほどICPのプライベート Docer Registryにプッシュしたものを指定します。
RabbitMQ で使用するポートはいくつかあります。
今回はデフォルトの5672と、管理画面用の15672を開けます。

rabbitmq-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rabbitmq
spec:
  selector:
    matchLabels:
      app: rabbitmq
  replicas: 1
  template:
    metadata:
      labels:
        app: rabbitmq
	spec:
      containers:
      - name: rabbitmq
        image: mycluster.icp:8500/default/docker_hub_id/rabbitmq:v0.0.1
        imagePullPolicy: Always
        ports:
        - containerPort: 5672
        - containerPort: 15672
        env:
        - name: RABBITMQ_DEFAULT_VHOST
          valueFrom:
            configMapKeyRef:
              name: rabbitmq-config
              key: rabbitmq-default-vhost
        - name: RABBITMQ_DEFAULT_USER
          valueFrom:
            configMapKeyRef:
              name: rabbitmq-config
              key: rabbitmq-default-user
        - name: RABBITMQ_DEFAULT_PASS
          valueFrom:
            secretKeyRef:
              name: rabbitmq-secret
              key: rabbitmq-default-pass

Serviceの作成

Service を作成します。
複数のポートを定義する場合は、それぞれにnameを指定する必要があります。

rabbitmq-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
spec:
  type: ClusterIP
  selector:
    app: rabbitmq
  ports:
  - name: amqp
    protocol: TCP
    port: 5672
  - name: mgmt
    protocol: TCP
    port: 15672

Ingressの作成

管理画面用です。

rabbitmq-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: rabbitmq
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host:
    http:
      paths:
      - path: /rabbitmq/
        backend:
          serviceName: rabbitmq
          servicePort: 15672

ICP上でRabbitMQを稼働

kubectl applyをします。
作成したファイルを再帰的にアプライします。

$ find . -name "*.yaml"|xargs -I {} kubectl apply -f {}
deployment.apps/rabbitmq created
secret/rabbitmq-secret created
ingress.extensions/rabbitmq created
service/rabbitmq created
configmap/rabbitmq-config created

管理画面が表示されました。
スクリーンショット 2019-04-20 22.13.19.png

ICPでRabbitMQを稼働してみる(2/2) へ続きます。

参考

https://hub.docker.com/_/rabbitmq
https://www.rabbitmq.com/networking.html
https://qiita.com/ptiringo/items/c554fa66f0d985394fed
https://qiita.com/MahoTakara/items/e0aa723b02d04e1accd2
https://qiita.com/hana_shin/items/c674ccdf0aecdcb91747
https://qiita.com/tototoshi/items/83c5897bb4890a328067

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?