Docker
Apache Pulsar is a cloud-native distributed messaging and streaming platform originally created by Yahoo!. It is now a top-level project of the Apache Software Foundation.
pulsar-manager is a web tool for managing Pulsar.
https://github.com/apache/pulsar-manager
Docker Deployment of Pulsar and 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
If you want to persist data:
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
If you encounter errors after starting, try removing the mapping of
/pulsar/conf
.
Then open port 9527 to access pulsar-manager.
However, there is no default username and password, so you will need to operate inside the container.
- Set the domestic mirror source
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
- Install curl
apk add curl
Execute the following command to create an administrator user.
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"}'
If the password is too short, it may cause issues.
You don’t have to enter the container, you can also operate from the outside, for example: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"}'
Because the two containers are linked together using docker link, you can access Pulsar from the pulsar-manager container, but you cannot access it directly via 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
You can see that the IP of the other container is 172.17.0.2, while the IP of the pulsar-manager is 172.17.0.3.
You can access Pulsar using either 172.17.0.2
or pulsar-standalone
.
Configure the connection on the pulsar-manager page:
Then clicking in you can see:
Kubernetes
A kubernetes deployment template without helm for quick startup:
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
The above uses local storage. If you need to use volume mapping:
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
文章评论