一、前言
本次部署方式为setafulset的方式部署rabbitmq集群,使用svc的无头服务,本次涉及使用到的服务有setafulset、secret、configmap、service、pv、pvc、sa,在rabbitmq的官网中使用的是operator的方式
operator方式参考:rabbitmq cluster kubernetes operator quickstart | rabbitmq
二、部署
创建rabbitmq yaml文件存放目录
mkdir /opt/rabbitmq && cd /opt/rabbitmq
编辑secret配置
vi secret.yaml
kind: secret apiversion: v1 metadata: name: rabbitmq namespace: rabbitmq type: opaque stringdata: rabbitdefauluser: admin #设置rabbitmq集群的用户名 rabbitdefaultpass: admin #设置rabbitmq集群的密码 erlang.cookie: erlang_cookie #集群需要用到的cookie值,每个节点都需要保持一致
编辑configmap配置
vi configmap.yaml
kind: configmap
apiversion: v1
metadata:
name: rabbitmq-config
namespace: rabbitmq
data:
enabled_plugins: |
[rabbitmq_management,rabbitmq_peer_discovery_k8s].
rabbitmq.conf: |
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s
cluster_formation.k8s.host = kubernetes.default.svc.cluster.local
cluster_formation.k8s.address_type = hostname
cluster_formation.k8s.hostname_suffix = .rabbitmq-headless.rabbitmq.svc.cluster.local
cluster_formation.node_cleanup.interval = 30
cluster_formation.node_cleanup.only_log_warning = true
cluster_partition_handling = autoheal
queue_master_locator=min-masters
cluster_formation.randomized_startup_delay_range.max = 2
vm_memory_high_watermark.absolute = 1gb
disk_free_limit.absolute = 2gb
loopback_users.guest = false编辑rbac配置
vi rbac.yaml
apiversion: v1 kind: serviceaccount metadata: name: rabbitmq namespace: rabbitmq --- kind: role apiversion: rbac.authorization.k8s.io/v1 metadata: name: endpoint-reader namespace: rabbitmq rules: - apigroups: [""] resources: ["endpoints"] verbs: ["get"] --- kind: rolebinding apiversion: rbac.authorization.k8s.io/v1 metadata: name: endpoint-reader namespace: rabbitmq subjects: - kind: serviceaccount name: rabbitmq roleref: apigroup: rbac.authorization.k8s.io kind: role name: endpoint-reader
编辑service配置
vi service.yaml
kind: service
apiversion: v1
metadata:
name: rabbitmq-headless #该service服务为提供无头服务
namespace: rabbitmq
spec:
clusterip: none
publishnotreadyaddresses: true
ports:
- name: amqp
port: 5672
- name: http
port: 15672
selector:
app: rabbitmqvi service-nodeport.yaml
kind: service
apiversion: v1
metadata:
namespace: rabbitmq
name: rabbitmq-service
spec:
ports:
- name: http
protocol: tcp
port: 15672
nodeport: 30015 #管理web界面
- name: amqp
protocol: tcp
port: 5672
targetport: 5672
nodeport: 30016
selector:
app: rabbitmq
type: nodeport编辑pv配置(使用该nfs路径时一定要配置一定的写入权限,不然启动rabbitmq服务时会出现没有写入权限而报错)
vi pv.yaml
apiversion: v1
kind: persistentvolume
metadata:
name: rabbitmq-pv01
spec:
storageclassname: rabbitmq-pv #定义了存储类型
capacity:
storage: 30gi
accessmodes:
- readwritemany
persistentvolumereclaimpolicy: retain
nfs:
path: /volume2/k8s-data/rabbitmq/rabbitmq-pv01
server: 10.1.13.99
---
apiversion: v1
kind: persistentvolume
metadata:
name: rabbitmq-pv02
spec:
storageclassname: rabbitmq-pv #定义了存储类型
capacity:
storage: 30gi
accessmodes:
- readwritemany
persistentvolumereclaimpolicy: retain
nfs:
path: /volume2/k8s-data/rabbitmq/rabbitmq-pv02
server: 10.1.13.99
---
apiversion: v1
kind: persistentvolume
metadata:
name: rabbitmq-pv03
spec:
storageclassname: rabbitmq-pv #定义了存储类型
capacity:
storage: 30gi
accessmodes:
- readwritemany
persistentvolumereclaimpolicy: retain
nfs:
path: /volume2/k8s-data/rabbitmq/rabbitmq-pv03
server: 10.1.13.99编辑setafulset配置
vi setafulset.yaml
apiversion: apps/v1
kind: statefulset
metadata:
name: rabbitmq
namespace: rabbitmq
spec:
podmanagementpolicy: parallel
servicename: rabbitmq-headless
selector:
matchlabels:
app: rabbitmq
replicas: 3 #副本数3
template:
metadata:
labels:
app: rabbitmq
annotations:
pod.alpha.kubernetes.io/initialized: "true"
spec:
affinity: #配置反亲和性,使pod不能部署再同一个node上
podantiaffinity:
requiredduringschedulingignoredduringexecution:
- labelselector:
matchexpressions:
- key: "app"
operator: in
values:
- rabbitmq
topologykey: "kubernetes.io/hostname"
tolerations: #该配置是容忍污点,使pod可以部署再master上,可以不要该配置
- key: "node-role.kubernetes.io/control-plane"
operator: "exists"
effect: noschedule
serviceaccountname: rabbitmq
terminationgraceperiodseconds: 10
containers:
- name: rabbitmq
image: rabbitmq:3.10-management
securitycontext:
runasuser: 1000
resources:
limits:
cpu: 2
memory: 2gi
requests:
cpu: 1
memory: 1gi
volumemounts:
- name: config-volume
mountpath: /etc/rabbitmq
- name: rabbitmq-data #使用pvc挂载数据目录,rabbitmq启动时会往该目录写入数据,所以挂载的该目录要具有写入权限
mountpath: /var/lib/rabbitmq/mnesia
ports:
- name: http
protocol: tcp
containerport: 15672
- name: amqp
protocol: tcp
containerport: 5672
livenessprobe:
exec:
command: ["rabbitmq-diagnostics", "status"]
initialdelayseconds: 60
periodseconds: 60
timeoutseconds: 5
readinessprobe:
exec:
command: ["rabbitmq-diagnostics", "status"]
initialdelayseconds: 20
periodseconds: 60
timeoutseconds: 5
imagepullpolicy: always
env:
- name: rabbitmq_default_user
valuefrom:
secretkeyref:
key: rabbitdefauluser
name: rabbitmq
- name: rabbitmq_default_pass
valuefrom:
secretkeyref:
key: rabbitdefaultpass
name: rabbitmq
- name: rabbitmq_erlang_cookie
valuefrom:
secretkeyref:
name: rabbitmq
key: erlang.cookie
- name: hostname
valuefrom:
fieldref:
fieldpath: metadata.name
- name: namespace
valuefrom:
fieldref:
fieldpath: metadata.namespace
- name: rabbitmq_use_longname
value: "true"
- name: service_name
value: "rabbitmq-headless"
- name: rabbitmq_nodename
value: rabbit@$(hostname).$(service_name).$(namespace).svc.cluster.local
- name: k8s_hostname_suffix
value: .$(service_name).$(namespace).svc.cluster.local
volumes:
- name: config-volume
configmap:
name: rabbitmq-config
items:
- key: rabbitmq.conf
path: rabbitmq.conf
- key: enabled_plugins
path: enabled_plugins
volumeclaimtemplates:
- metadata:
name: rabbitmq-data
spec:
storageclassname: "rabbitmq-pv"
accessmodes: [ "readwritemany" ]
resources:
requests:
storage: 30gi创建命名空间
kubectl create namespace rabbitmq
创建各yaml服务
kubectl create -f secret.yaml kubectl create -f configmap.yaml kubectl create -f pv.yaml kubectl create -f service.yaml kubectl create -f service-nodeport.yaml kubectl create -f setafulset.yaml
查看集群状态
kubectl exec -it rabbitmq-0 -n rabbitmq -- rabbitmqctl cluster_status

可以看到rabbitmq集群正常运行,至此rabbitmq集群部署完成。
到此这篇关于k8s部署rabbitmq集群的文章就介绍到这了,更多相关k8s部署rabbitmq内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论