1.准备K8S环境
2.下载基础镜像,需要安装两种插件:autocluster、rabbitmq_management
方法一:
下载已有插件镜像
[root@localhost ~]#docker pull registry.cn-hangzhou.aliyuncs.com/wise2c/kubernetes-rabbitmq-autocluster
下面是自定义的Dockerfile
FROM registry.cn-hangzhou.aliyuncs.com/wise2c/kubernetes-rabbitmq-autocluster:latest
RUN rabbitmq-plugins enable --offline rabbitmq_management
构建新镜像(在当前目录新建Dockerfile)
docker build -t . rabbitmq:new
方法二:
下载原始镜像
下面是自定义的Dockerfile(需要下载autocluster-0.6.1.ez插件)
FROM rabbitmq:3.6.8
ENV RABBITMQ_USE_LONGNAME=true \
AUTOCLUSTER_LOG_LEVEL=debug \
AUTOCLUSTER_CLEANUP=true \
CLEANUP_INTERVAL=60 \
CLEANUP_WARN_ONLY=false \
AUTOCLUSTER_TYPE=k8s \
LANG=en_US.UTF-8
ADD plugins/*.ez /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.8/plugins/
RUN rabbitmq-plugins enable --offline autocluster
RUN rabbitmq-plugins enable --offline rabbitmq_management
构建新镜像(在当前目录新建Dockerfile)
docker build -t . rabbitmq:new
3.kubernetes配置文件(serviceAccount.yaml、service.yaml、deployment.yaml)
创建serviceAccount,这样autocluster可以通过serviceAccount去访问rabbitmq-service的endpoints
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: rabbitmq
namespace: default
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: endpoint-reader
namespace: default
rules:
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: endpoint-reader
namespace: default
subjects:
- kind: ServiceAccount
name: rabbitmq
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: endpoint-reader
创建service.yaml
---
apiVersion: v1
kind: Service
metadata:
labels:
app: rabbitmq
name: rabbitmq
spec:
ports:
- port: 5672
name: port-5672
targetPort: 5672
protocol: TCP
nodePort: 5672
- port: 4369
name: port-4369
targetPort: 4369
protocol: TCP
- port: 5671
name: port-5671
targetPort: 5671
protocol: TCP
- port: 15672
targetPort: 15672
nodePort: 15672
name: port-15672
protocol: TCP
- port: 25672
name: port-25672
targetPort: 25672
protocol: TCP
type: NodePort
selector:
app: rabbitmq
创建deployment.yaml,在此之前需要先生成cookie文件
[root@localhost ~]echo $(openssl rand -base64 32) > erlang.cookie
[root@localhost ~]kubectl -n cat create secret generic erlang.cookie --from-file=erlang.cookie
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: rabbitmq
spec:
replicas: 3
template:
metadata:
labels:
app: rabbitmq
spec:
containers:
- name: rabbitmq
image: rabbitmq:new
ports:
- containerPort: 5672
name: port-5672
- containerPort: 4369
name: port-4369
- containerPort: 5671
name: port-5671
- containerPort: 15672
name: port-15672
- containerPort: 25672
name: port-25672
env:
- name: HOSTNAME
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: AUTOCLUSTER_CLEANUP
value: "true"
- name: RABBITMQ_USE_LONGNAME
value: "true"
- name: AUTOCLUSTER_LOG_LEVEL
value: "debug"
- name: CLEANUP_INTERVAL
value: "60"
- name: CLEANUP_WARN_ONLY
value: "false"
- name: AUTOCLUSTER_TYPE
value: "k8s"
- name: LANG
value: "en_US.UTF-8"
- name: RABBITMQ_ERLANG_COOKIE
valueFrom:
secretKeyRef:
name: erlang.cookie
key: erlang.cookie
[root@localhost ~]# kubectl create -f serviceAccount.yaml
[root@localhost ~]# kubectl create -f service.yaml
[root@localhost ~]# kubectl create -f deployment.yaml
启动后出现报错:
若出现节点无法加入集群的问题
20181102更新
部署单节点rabbitmq,使用自带管理界面插件的镜像,在docker hub上搜索rabbitmq,下载镜像docker pull rabbitmq:3.6-management