k8s部署rabbitmq

发布于:2025-02-10 ⋅ 阅读:(21) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到