### Motivation Some of the links in the README are out of date. This PR fixes the ones that I found. Note that the ones with `/en` were not technically broken.
267 lines
12 KiB
Markdown
267 lines
12 KiB
Markdown
<!--
|
|
|
|
Licensed to the Apache Software Foundation (ASF) under one
|
|
or more contributor license agreements. See the NOTICE file
|
|
distributed with this work for additional information
|
|
regarding copyright ownership. The ASF licenses this file
|
|
to you under the Apache License, Version 2.0 (the
|
|
"License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing,
|
|
software distributed under the License is distributed on an
|
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
KIND, either express or implied. See the License for the
|
|
specific language governing permissions and limitations
|
|
under the License.
|
|
|
|
-->
|
|
# Official Apache Pulsar Helm Chart
|
|
|
|
This is the officially supported Helm Chart for installing Apache Pulsar on Kubernetes.
|
|
|
|
Read [Deploying Pulsar on Kubernetes](http://pulsar.apache.org/docs/deploy-kubernetes/) for more details.
|
|
|
|
## Features
|
|
|
|
This Helm Chart includes all the components of Apache Pulsar for a complete experience.
|
|
|
|
- [x] Pulsar core components:
|
|
- [x] ZooKeeper
|
|
- [x] Bookies
|
|
- [x] Brokers
|
|
- [x] Functions
|
|
- [x] Proxies
|
|
- [x] Management & monitoring components:
|
|
- [x] Pulsar Manager
|
|
- [x] Prometheus
|
|
- [x] Grafana
|
|
|
|
It includes support for:
|
|
|
|
- [x] Security
|
|
- [x] Automatically provisioned TLS certs, using [Jetstack](https://www.jetstack.io/)'s [cert-manager](https://cert-manager.io/docs/)
|
|
- [x] self-signed
|
|
- [x] [Let's Encrypt](https://letsencrypt.org/)
|
|
- [x] TLS Encryption
|
|
- [x] Proxy
|
|
- [x] Broker
|
|
- [x] Toolset
|
|
- [x] Bookie
|
|
- [x] ZooKeeper
|
|
- [x] Authentication
|
|
- [x] JWT
|
|
- [ ] Mutal TLS
|
|
- [ ] Kerberos
|
|
- [x] Authorization
|
|
- [x] Non-root broker, bookkeeper, proxy, and zookeeper containers (version 2.10.0 and above)
|
|
- [x] Storage
|
|
- [x] Non-persistence storage
|
|
- [x] Persistence Volume
|
|
- [x] Local Persistent Volumes
|
|
- [ ] Tiered Storage
|
|
- [x] Functions
|
|
- [x] Kubernetes Runtime
|
|
- [x] Process Runtime
|
|
- [x] Thread Runtime
|
|
- [x] Operations
|
|
- [x] Independent Image Versions for all components, enabling controlled upgrades
|
|
|
|
## Requirements
|
|
|
|
In order to use this chart to deploy Apache Pulsar on Kubernetes, the followings are required.
|
|
|
|
1. kubectl 1.18 or higher, compatible with your cluster ([+/- 1 minor release from your cluster](https://kubernetes.io/docs/tasks/tools/install-kubectl/#before-you-begin))
|
|
2. Helm v3 (3.0.2 or higher)
|
|
3. A Kubernetes cluster, version 1.18 or higher.
|
|
|
|
## Environment setup
|
|
|
|
Before proceeding to deploying Pulsar, you need to prepare your environment.
|
|
|
|
### Tools
|
|
|
|
`helm` and `kubectl` need to be [installed on your computer](https://pulsar.apache.org/docs/helm-tools/).
|
|
|
|
## Add to local Helm repository
|
|
|
|
To add this chart to your local Helm repository:
|
|
|
|
```bash
|
|
helm repo add apache https://pulsar.apache.org/charts
|
|
```
|
|
|
|
To use the helm chart:
|
|
|
|
```bash
|
|
helm install <release-name> apache/pulsar
|
|
```
|
|
|
|
## Kubernetes cluster preparation
|
|
|
|
You need a Kubernetes cluster whose version is 1.18 or higher in order to use this chart, due to the usage of certain Kubernetes features.
|
|
|
|
We provide some instructions to guide you through the preparation: http://pulsar.apache.org/docs/helm-prepare/
|
|
|
|
## Deploy Pulsar to Kubernetes
|
|
|
|
1. Clone the Pulsar Helm charts repository.
|
|
|
|
```bash
|
|
git clone https://github.com/apache/pulsar-helm-chart
|
|
```
|
|
```bash
|
|
cd pulsar-helm-chart
|
|
```
|
|
|
|
2. Run `prepare_helm_release.sh` to create required kubernetes resources for installing this Helm chart.
|
|
- A k8s namespace for installing the Pulsar release (if `-c` is specified)
|
|
- Create the JWT secret keys and tokens for three superusers: `broker-admin`, `proxy-admin`, and `admin`.
|
|
By default, it generates asymmetric pubic/private key pair. You can choose to generate symmetric secret key
|
|
by specifying `--symmetric` in the following command.
|
|
- `proxy-admin` role is used for proxies to communicate to brokers.
|
|
- `broker-admin` role is used for inter-broker communications.
|
|
- `admin` role is used by the admin tools.
|
|
|
|
```bash
|
|
./scripts/pulsar/prepare_helm_release.sh -n <k8s-namespace> -k <pulsar-release-name> -c
|
|
```
|
|
|
|
3. Use the Pulsar Helm charts to install Apache Pulsar.
|
|
|
|
This command installs and starts Apache Pulsar.
|
|
|
|
```bash
|
|
$ helm install <pulsar-release-name> apache/pulsar
|
|
```
|
|
|
|
5. Access the Pulsar cluster
|
|
|
|
The default values will create a `ClusterIP` for the proxy you can use to interact with the cluster. To find the IP address of proxy use:
|
|
|
|
```bash
|
|
kubectl get service -n <k8s-namespace>
|
|
```
|
|
|
|
For more information, please follow our detailed
|
|
[quick start guide](https://pulsar.apache.org/docs/getting-started-helm/).
|
|
|
|
## Customize the deployment
|
|
|
|
We provide a [detailed guideline](https://pulsar.apache.org/docs/helm-deploy/) for you to customize
|
|
the Helm Chart for a production-ready deployment.
|
|
|
|
You can also checkout out the example values file for different deployments.
|
|
|
|
- [Deploy ZooKeeper only](examples/values-cs.yaml)
|
|
- [Deploy a Pulsar cluster with an external configuration store](examples/values-cs.yaml)
|
|
- [Deploy a Pulsar cluster with local persistent volume](examples/values-local-pv.yaml)
|
|
- [Deploy a Pulsar cluster to Minikube](examples/values-minikube.yaml)
|
|
- [Deploy a Pulsar cluster with no persistence](examples/values-no-persistence.yaml)
|
|
- [Deploy a Pulsar cluster with TLS encryption](examples/values-tls.yaml)
|
|
- [Deploy a Pulsar cluster with JWT authentication using symmetric key](examples/values-jwt-symmetric.yaml)
|
|
- [Deploy a Pulsar cluster with JWT authentication using asymmetric key](examples/values-jwt-asymmetric.yaml)
|
|
|
|
## Upgrading
|
|
|
|
Once your Pulsar Chart is installed, configuration changes and chart
|
|
updates should be done using `helm upgrade`.
|
|
|
|
```bash
|
|
helm repo add apache https://pulsar.apache.org/charts
|
|
helm repo update
|
|
helm get values <pulsar-release-name> > pulsar.yaml
|
|
helm upgrade -f pulsar.yaml \
|
|
<pulsar-release-name> apache/pulsar
|
|
```
|
|
|
|
For more detailed information, see our [Upgrading](http://pulsar.apache.org/docs/helm-upgrade/) guide.
|
|
|
|
## Upgrading to 2.10.0 and above
|
|
|
|
The 2.10.0+ Apache Pulsar docker image is a non-root container, by default. That complicates an upgrade to 2.10.0
|
|
because the existing files are owned by the root user but are not writable by the root group. In order to leverage this
|
|
new security feature, the Bookkeeper and Zookeeper StatefulSet [securityContexts](https://kubernetes.io/docs/tasks/configure-pod-container/security-context)
|
|
are configurable in the `values.yaml`. They default to:
|
|
|
|
```yaml
|
|
securityContext:
|
|
fsGroup: 0
|
|
fsGroupChangePolicy: "OnRootMismatch"
|
|
```
|
|
|
|
This configuration is ideal for regular Kubernetes clusters where the UID is stable across restarts. If the process
|
|
UID is subject to change (like it is in OpenShift), you'll need to set `fsGroupChangePolicy: "Always"`.
|
|
|
|
The official docker image assumes that it is run as a member of the root group.
|
|
|
|
If you upgrade to the latest version of the helm chart before upgrading to Pulsar 2.10.0, then when you perform your
|
|
first upgrade to version >= 2.10.0, you will need to set `fsGroupChangePolicy: "Always"` on the first upgrade and then
|
|
set it back to `fsGroupChangePolicy: "OnRootMismatch"` on subsequent upgrades. This is because the root file won't
|
|
mismatch permissions, but the RocksDB lock file will. If you have direct access to the persistent volumes, you can
|
|
alternatively run `chgrp -R g+w /pulsar/data` before upgrading.
|
|
|
|
Here is a sample error you can expect if the RocksDB lock file is not correctly owned by the root group:
|
|
|
|
```text
|
|
2022-05-14T03:45:06,903+0000 ERROR org.apache.bookkeeper.server.Main - Failed to build bookie server
|
|
java.io.IOException: Error open RocksDB database
|
|
at org.apache.bookkeeper.bookie.storage.ldb.KeyValueStorageRocksDB.<init>(KeyValueStorageRocksDB.java:199) ~[org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
at org.apache.bookkeeper.bookie.storage.ldb.KeyValueStorageRocksDB.<init>(KeyValueStorageRocksDB.java:88) ~[org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
at org.apache.bookkeeper.bookie.storage.ldb.KeyValueStorageRocksDB.lambda$static$0(KeyValueStorageRocksDB.java:62) ~[org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
at org.apache.bookkeeper.bookie.storage.ldb.LedgerMetadataIndex.<init>(LedgerMetadataIndex.java:68) ~[org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
at org.apache.bookkeeper.bookie.storage.ldb.SingleDirectoryDbLedgerStorage.<init>(SingleDirectoryDbLedgerStorage.java:169) ~[org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
at org.apache.bookkeeper.bookie.storage.ldb.DbLedgerStorage.newSingleDirectoryDbLedgerStorage(DbLedgerStorage.java:150) ~[org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
at org.apache.bookkeeper.bookie.storage.ldb.DbLedgerStorage.initialize(DbLedgerStorage.java:129) ~[org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
at org.apache.bookkeeper.bookie.Bookie.<init>(Bookie.java:818) ~[org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
at org.apache.bookkeeper.proto.BookieServer.newBookie(BookieServer.java:152) ~[org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
at org.apache.bookkeeper.proto.BookieServer.<init>(BookieServer.java:120) ~[org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
at org.apache.bookkeeper.server.service.BookieService.<init>(BookieService.java:52) ~[org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
at org.apache.bookkeeper.server.Main.buildBookieServer(Main.java:304) ~[org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
at org.apache.bookkeeper.server.Main.doMain(Main.java:226) [org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
at org.apache.bookkeeper.server.Main.main(Main.java:208) [org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
Caused by: org.rocksdb.RocksDBException: while open a file for lock: /pulsar/data/bookkeeper/ledgers/current/ledgers/LOCK: Permission denied
|
|
at org.rocksdb.RocksDB.open(Native Method) ~[org.rocksdb-rocksdbjni-6.10.2.jar:?]
|
|
at org.rocksdb.RocksDB.open(RocksDB.java:239) ~[org.rocksdb-rocksdbjni-6.10.2.jar:?]
|
|
at org.apache.bookkeeper.bookie.storage.ldb.KeyValueStorageRocksDB.<init>(KeyValueStorageRocksDB.java:196) ~[org.apache.bookkeeper-bookkeeper-server-4.14.4.jar:4.14.4]
|
|
... 13 more
|
|
```
|
|
|
|
## Uninstall
|
|
|
|
To uninstall the Pulsar Chart, run the following command:
|
|
|
|
```bash
|
|
helm delete <pulsar-release-name>
|
|
```
|
|
|
|
For the purposes of continuity, these charts have some Kubernetes objects that are not removed when performing `helm delete`.
|
|
These items we require you to *conciously* remove them, as they affect re-deployment should you choose to.
|
|
|
|
* PVCs for stateful data, which you must *consciously* remove
|
|
- ZooKeeper: This is your metadata.
|
|
- BookKeeper: This is your data.
|
|
- Prometheus: This is your metrics data, which can be safely removed.
|
|
* Secrets, if generated by our [prepare release script](https://github.com/apache/pulsar-helm-chart/blob/master/scripts/pulsar/prepare_helm_release.sh). They contain secret keys, tokens, etc. You can use [cleanup release script](https://github.com/apache/pulsar-helm-chart/blob/master/scripts/pulsar/cleanup_helm_release.sh) to remove these secrets and tokens as needed.
|
|
|
|
## Troubleshooting
|
|
|
|
We've done our best to make these charts as seamless as possible,
|
|
occasionally troubles do surface outside of our control. We've collected
|
|
tips and tricks for troubleshooting common issues. Please examine these first before raising an [issue](https://github.com/apache/pulsar-helm-chart/issues/new/choose), and feel free to add to them by raising a [Pull Request](https://github.com/apache/pulsar-helm-chart/compare)!
|
|
|
|
## Release Process
|
|
|
|
1. Bump the version in [charts/pulsar/Chart.yaml](https://github.com/apache/pulsar-helm-chart/blob/master/charts/pulsar/Chart.yaml#L24).
|
|
|
|
2. Send a pull request for reviews.
|
|
|
|
3. After the pull request is approved, merge it. The release workflow will be triggered automatically.
|
|
- It creates a tag named `pulsar-<version>`.
|
|
- Published the packaged helm chart to Github releases.
|
|
- Update the `charts/index.yaml` in Pulsar website.
|
|
|
|
4. Trigger the Pulsar website build to make the release available under https://pulsar.apache.org/charts.
|