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。
但是默认没有账号密码,因此需要进入容器操作。
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.2
或 pulsar-standalone
都可以访问到 pulsar。
在 pulsar-manger 页面配置连接:
然后点进去可以看到:
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
文章评论