1. 创建provisioner制备器(如果已存在,则不需要)
1.1 编写nfs-provisioner-rbac.yaml配置文件
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisionernamespace: 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: ServiceAccountname: nfs-client-provisionernamespace: wms
roleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisionernamespace: 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: ServiceAccountname: nfs-client-provisionernamespace: wms
roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: 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-provisionernamespace: wms #与RBAC文件中的namespace保持一致labels:app: wms-nfs-provisioner
spec:replicas: 1strategy:type: Recreate # 不滚动更新,直接停止旧版本,更新新版本selector:matchLabels:app: wms-nfs-provisionertemplate:metadata:labels:app: wms-nfs-provisionerspec:serviceAccountName: nfs-client-provisioner # 要与nfs-client-provisioner-rabc.yaml中的名称一致containers:- name: wms-nfs-provisionerimage: harbor.cool.team/k8s/provisioner/provisioner:v4.0.2volumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: wms-nfs-provisioner # provisioner制备器名称,请确保该名称与 StorageClass.yaml文件中的provisioner名称保持一致- name: NFS_SERVERvalue: 192.168.10.5 # NFS Server IP地址- name: NFS_PATHvalue: "/data/wms" # NFS挂载卷volumes:- name: nfs-client-rootnfs: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: rabbitmqlabels: rabbitmq
spec:type: ClusterIPclusterIP: Noneselector:app: rabbitmqports:- name: rabbitmqport: 5762targetPort: 5672- name: rabbitmq-webport: 15762targetPort: 15672- name: rabbitmq-stompport: 61613targetPort: 61613
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: rabbitmq
spec:serviceName: rabbitmqreplicas: 1selector:matchLabels:app: rabbitmqtemplate:metadata:labels:app: rabbitmqspec:containers:- name: rabbitmqimage: harbor.cool.team/common/rabbitmq:3-managementimagePullPolicy: IfNotPresentports:- name: rabbitmqcontainerPort: 5672protocol: "TCP"- name: rabbitmq-webcontainerPort: 15672protocol: "TCP"- name: rabbitmq-stompcontainerPort: 61613protocol: "TCP"env:- name: RABBITMQ_DEFAULT_USER value: "guest" # 默认用户名 - name: RABBITMQ_DEFAULT_PASS value: "guest" # 默认密码volumeMounts:- name: rabbitmq-datamountPath: /var/lib/rabbitmqsubPath: data/rabbitmq# 定义钩子函数,在RabbitMQ容器启动后,自动启用RabbitMQ的STOMP插件lifecycle:postStart:exec:command: ["rabbitmq-plugins", "enable", "rabbitmq_stomp"]restartPolicy: AlwaysvolumeClaimTemplates:- metadata:name: rabbitmq-dataspec: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