k8s部署rabbitmq
1. 创建provisioner制备器(如果已存在,则不需要)
1.1 编写nfs-provisioner-rbac.yaml配置文件
apiVersion: v1
kind: ServiceAccount
metadata:
name: nfs-client-provisioner
namespace: wms
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nfs-client-provisioner-runner
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: run-nfs-client-provisioner
subjects:
- kind: ServiceAccount
name: nfs-client-provisioner
namespace: wms
roleRef:
kind: ClusterRole
name: nfs-client-provisioner-runner
apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-nfs-client-provisioner
namespace: wms
rules:
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-nfs-client-provisioner
subjects:
- kind: ServiceAccount
name: nfs-client-provisioner
namespace: wms
roleRef:
kind: Role
name: leader-locking-nfs-client-provisioner
apiGroup: rbac.authorization.k8s.io
1.2 在wms命名空间下,导入nfs-provisioner-rbac.yaml配置文件,或者执行以下命令
$ kubectl apply -f nfs-provisioner-rbac.yaml
1.3 创建wms-nfs-provisioner.yaml配置文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: wms-nfs-provisioner
namespace: wms #与RBAC文件中的namespace保持一致
labels:
app: wms-nfs-provisioner
spec:
replicas: 1
strategy:
type: Recreate # 不滚动更新,直接停止旧版本,更新新版本
selector:
matchLabels:
app: wms-nfs-provisioner
template:
metadata:
labels:
app: wms-nfs-provisioner
spec:
serviceAccountName: nfs-client-provisioner # 要与nfs-client-provisioner-rabc.yaml中的名称一致
containers:
- name: wms-nfs-provisioner
image: harbor.cool.team/k8s/provisioner/provisioner:v4.0.2
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: wms-nfs-provisioner # provisioner制备器名称,请确保该名称与 StorageClass.yaml文件中的provisioner名称保持一致
- name: NFS_SERVER
value: 192.168.10.5 # NFS Server IP地址
- name: NFS_PATH
value: "/data/wms" # NFS挂载卷
volumes:
- name: nfs-client-root
nfs:
server: 192.168.10.5 # NFS Server IP地址
path: "/data/wms" # NFS挂载卷
1.4 在wms命名空间下,导入wms-nfs-provisioner.yaml配置文件,或者执行以下命令
注意:需要先在服务器上面创建/data/wms这个文件夹,否则会构建失败
$ kubectl apply -f nfs-client-provisioner.yaml
2. 编写wms-rabbitmq-data-sc.yaml配置文件
apiVersion: storage.k8s.io/v1
kind: StorageClass # 描述资源对象为SC类型
metadata:
name: wms-rabbitmq-data # SC的名称,在集群范围内需要保证唯一
provisioner: wms-nfs-provisioner # 外部制备器提供者,编写为提供者的名称
parameters:
archiveOnDelete: "true" # 是否存档,false表示不存档,会删除oldPath下面的数据,true表示存档,会重命名路径
reclaimPolicy: Delete # 回收策略
volumeBindingMode: Immediate # 默认为Immediate,表示创建PVC立即进行绑定
3. 导入wms-rabbitmq-data-sc.yaml配置文件(创建StorageClass资源)
4. 查看StorageClass资源
$ kubectl get sc
5. 编写rabbitmq.yaml文件
---
apiVersion: v1
kind: Service
metadata:
name: rabbitmq
labels: rabbitmq
spec:
type: ClusterIP
clusterIP: None
selector:
app: rabbitmq
ports:
- name: rabbitmq
port: 5762
targetPort: 5672
- name: rabbitmq-web
port: 15762
targetPort: 15672
- name: rabbitmq-stomp
port: 61613
targetPort: 61613
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: rabbitmq
spec:
serviceName: rabbitmq
replicas: 1
selector:
matchLabels:
app: rabbitmq
template:
metadata:
labels:
app: rabbitmq
spec:
containers:
- name: rabbitmq
image: harbor.cool.team/common/rabbitmq:3-management
imagePullPolicy: IfNotPresent
ports:
- name: rabbitmq
containerPort: 5672
protocol: "TCP"
- name: rabbitmq-web
containerPort: 15672
protocol: "TCP"
- name: rabbitmq-stomp
containerPort: 61613
protocol: "TCP"
env:
- name: RABBITMQ_DEFAULT_USER
value: "guest" # 默认用户名
- name: RABBITMQ_DEFAULT_PASS
value: "guest" # 默认密码
volumeMounts:
- name: rabbitmq-data
mountPath: /var/lib/rabbitmq
subPath: data/rabbitmq
# 定义钩子函数,在RabbitMQ容器启动后,自动启用RabbitMQ的STOMP插件
lifecycle:
postStart:
exec:
command: ["rabbitmq-plugins", "enable", "rabbitmq_stomp"]
restartPolicy: Always
volumeClaimTemplates:
- metadata:
name: rabbitmq-data
spec:
accessModes: [ "ReadWriteMany" ]
storageClassName: "wms-rabbitmq-data"
resources:
requests:
storage: 1Gi
6. 在k8中,指定wms命名空间,导入rabbitmq.yaml文件
7. 查看部署结果
8. 查看PVC和PV信息
$ kubectl get pvc -n wms
$ kubectl get pv -n wms
9. 查看rabbitmq启动日志
10. 使用ip访问rabbitmq页面
192.168.10.1:15672
11. 添加Ingress
12. 本地修改host文件
192.168.10.1 wmsrabbitmq.dev.cool.team
13. 使用域名访问rabbitmq页面
wmsrabbitmq.dev.cool.team