部署 Apache Pulsar

2022年2月24日 2862点热度 0人点赞 0条评论
内容纲要

Docker

Apache Pulsar 是一个云原生的分布式消息传递和流媒体平台,最初由 Yahoo! 创建。现在是顶级 Apache 软件基金会项目.

而 pulsar-manager 是管理 Pulsar 的一个 web 工具。

https://github.com/apache/pulsar-manager

Docker 部署 Pulsar 和 Pulsar-manager

docker pull apachepulsar/pulsar:latest
docker run -d -it \
    -p 6650:6650 \
    -p 8080:8080 \
    --name pulsar-standalone \
    apachepulsar/pulsar:latest \
    bin/pulsar standalone

docker pull apachepulsar/pulsar-manager:v0.2.0
docker run -it \
    -p 9527:9527 -p 7750:7750 \
    -e SPRING_CONFIGURATION_FILE=/pulsar-manager/pulsar-manager/application.properties \
    --link pulsar-standalone \
    apachepulsar/pulsar-manager:v0.2.0

如果要持久化:

docker run -d -it \
    -p 6650:6650 \
    -p 8080:8080 \
    -v pulsardata:/pulsar/data \
    -v pulsarconf:/pulsar/conf \
    --name pulsar-standalone \
    apachepulsar/pulsar:latest \
    bin/pulsar standalone

如果 启动后报错,试试去掉 /pulsar/conf 的映射。

然后打开 9527 端口即可访问 pulsar-manager。

file

但是默认没有账号密码,因此需要进入容器操作。

1.设置国内镜像源

 sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories

2.安装curl

apk add curl

执行以下命令创建一个管理员用户。

CSRF_TOKEN=$(curl http://localhost:7750/pulsar-manager/csrf-token)

CSRF_TOKEN=$(curl http://localhost:7750/pulsar-manager/csrf-token)
curl \
   -H 'X-XSRF-TOKEN: $CSRF_TOKEN' \
   -H 'Cookie: XSRF-TOKEN=$CSRF_TOKEN;' \
   -H "Content-Type: application/json" \
   -X PUT http://localhost:7750/pulsar-manager/users/superuser \
   -d '{"name": "pulsar", "password": "pulsar123456", "description": "test", "email": "username@test.org"}'

如果密码太短,会导致出问题。
不一定要进入容器,在外面操作也是一样,例如:

CSRF_TOKEN=$(curl http://10.43.30.135:7750/pulsar-manager/csrf-token)
curl \
    -H "X-XSRF-TOKEN: $CSRF_TOKEN" \
    -H "Cookie: XSRF-TOKEN=$CSRF_TOKEN;" \
    -H 'Content-Type: application/json' \
    -X PUT http://10.43.30.135:7750/pulsar-manager/users/superuser \
    -d '{"name": "pulsar", "password": "pulsar123456", "description": "whuanle", "email": "yzf@whuanle.cn"}'

因为两个容器使用 docker link 连接起来了,因此可以在 pulsar-manger 容器中访问 pulsar,但是不能通过 127.0.0.1 直接访问。

/pulsar-manager # cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  pulsar-standalone d11df558ff42
172.17.0.3  1f9c6cf31c8b

可以看到,对方的 IP 是 172.71.0.2,而 pulsar-manger 的 IP 是 172.7.0.3。

使用 172.17.0.2pulsar-standalone 都可以访问到 pulsar。

在 pulsar-manger 页面配置连接:

file

然后点进去可以看到:
file

Kubernetes

kubernetes 非 helm 快速启动模板:

kind: Deployment
apiVersion: apps/v1
metadata:
  name: pulsar
  namespace: pulsar
  labels:
    app: pulsar
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pulsar
  template:
    metadata:
      labels:
        app: pulsar
    spec:
      volumes:
        - name: pulsardata
          hostPath:
            path: /pulsar/data
            type: ''
      containers:
        - name: pulsar
          image: 'apachepulsar/pulsar:2.10.0'
          command:
            - bin/pulsar
            - standalone
          ports:
            - name: tcp-6650
              containerPort: 6650
              protocol: TCP
            - name: tcp-8080
              containerPort: 8080
              protocol: TCP
          resources: {}
          volumeMounts:
            - name: pulsardata
              mountPath: /pulsar/data
          imagePullPolicy: IfNotPresent
        - name: pulsar-manager
          image: 'apachepulsar/pulsar-manager:v0.2.0'
          ports:
            - name: tcp-9527
              containerPort: 9527
              protocol: TCP
            - name: tcp-7750
              containerPort: 7750
              protocol: TCP
          env:
            - name: SPRING_CONFIGURATION_FILE
              value: /pulsar-manager/pulsar-manager/application.properties
          resources: {}
          imagePullPolicy: IfNotPresent
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  revisionHistoryLimit: 10
  progressDeadlineSeconds: 600

上面使用了本地存储,如果需要使用存储卷映射:

      volumes:
        - name: pulsar
          persistentVolumeClaim:
            claimName: pulsar
kind: Service
apiVersion: v1
metadata:
  name: pulsar-svc
  namespace: pulsar
  labels:
    app: pulsar-svc
spec:
  ports:
    - name: pulsar-tcp-6650
      protocol: TCP
      port: 6650
      targetPort: 6650
      nodePort: 36650
    - name: pulsar-tcp-8080
      protocol: TCP
      port: 8080
      targetPort: 8080
      nodePort: 38080
    - name: pulsar-mana-tcp-9527
      protocol: TCP
      port: 9527
      targetPort: 9527
      nodePort: 39527
    - name: pulsar-mana-tcp-7750
      protocol: TCP
      port: 7750
      targetPort: 7750
      nodePort: 37750
  selector:
    app: pulsar
  type: NodePort

痴者工良

高级程序员劝退师

文章评论