169 Commits

Author SHA1 Message Date
冉小龙
4178c70d90
Bump the image version to 2.6.1 (#57)
Signed-off-by: xiaolong.ran rxl@apache.org

Motivation
Follow release process and bump the image version to 2.6.1
pulsar-2.6.1-1
2020-08-21 22:50:27 +08:00
Thomas O'Neill
b44b523c8a
Allow initialization to be set (#53)
Fixes #47 

### Motivation
Only create the initialize job on install. 

### Modifications

- Added an initialize value that can be set to true on install, matching the documentation in the README.md
2020-08-13 10:20:01 -07:00
Thomas O'Neill
207d697bed
Fix zookeeper antiaffinity (#52)
Fixes #39 

### Motivation

The match expression for the "app" label was incorrect breaking the antiaffinity since they would never match. Fixing this makes the podAntiAffinity work, but now requires at least N nodes to be in the cluster where N = largest replica set with affinity. Added the option to set the affinity type to preferredDuringSchedulingIgnoredDuringExecution where it will try to follow the affinity, but will still deploy a pod if it needs to break it. 

### Modifications

- Fixed app matchExpression 
- Added option to set the affinity type 
- bumped chart version

### Verifying this change

- [X] Make sure that the change passes the CI checks.
pulsar-2.6.0-3
2020-08-13 10:19:01 -07:00
Thomas O'Neill
8426c8de9c
Fix deprecated values (#49)
Fixes #46

### Motivation

There were some templates that relied on extra values that are deprecated. 

### Modifications

Modified the checks to check for non deprecated values or deprecated values. 

### Verifying this change

- [X] Make sure that the change passes the CI checks.
pulsar-2.6.0-2
2020-08-12 20:37:22 -07:00
Thomas O'Neill
a41b6c5063
Allow Grafana to work with a reverse proxy (#48)
### Motivation

Allow Grafana to be served from a sub path.  

### Modifications

- Added a config map to add extra environment variables to the grafana deployment. As the grafana image adds new features that require environment variables, this can be used to set them.
- Bumped the grafana image to allow a reverse proxy
- removed ingress annotations as they are specific to nginx, and to match all the other ingresses
- bumped the chart version as per the README 


Example values:
```
grafana:
  configData:
    GRAFANA_ROOT_URL: /pulsar/grafana
    GRAFANA_SERVE_FROM_SUB_PATH: "true"
  ingress:
      enabled: true
      port: 3000
      path: "/pulsar/grafana/?(.*)"
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$1
```
pulsar-2.6.0-1
2020-08-12 00:31:23 -07:00
John Harris
6b92881149
Add zookeeper metrics port and PodMonitors (#44)
* Add 'http' port specification to zookeeper statefulset

This makes the zookeeper spec inline with the other statefulset specs
in this chart and it provides a port target for custom podMonitors

* Added PodMonitors for bookie, broker, proxy, and zookeeper

New PodMonitors are needed for prometheus-operator to pickup scrape
targets.
Defaults to disabled so users need to opt in to deploy

* Added Apache license info to podmonitor yamls
2020-07-23 10:34:43 +08:00
冉小龙
682dfcee69
Update grafana dashboard images version to 0.0.9 (#45)
Signed-off-by: xiaolong.ran <rxl@apache.org>

### Modifications

- Update grafana dashboard images version to 0.0.9
- Add `.gitignore` file
2020-07-23 10:34:12 +08:00
BaochunLiuBJ
5995172c35
changes for aws (#43) 2020-07-22 09:00:04 -07:00
Niklas Wagner
2fbec08b02
Add Ingress to Pulsar Proxy and Pulsar Manager (#42) 2020-07-19 23:04:32 -07:00
Niklas Wagner
3cb674dfea
Fix wrong variable reference in Grafana & Pulsar Manager port (#41)
### Motivation

PR #37 updated the location of the ports in the default values yaml. This causes a null pointer exception when rendering this helm chart.

### Modifications

Fix variable reference
2020-07-18 10:41:40 +08:00
wuYin
135868c66c
Add optional user provided zookeeper as metadata store for other components (#38)
## Motivation
### Case
I have a physical zk cluster and want configure bookkeeper & broker & proxy to use it.
So I set components.zookeeper as false, and only found pulsar.zookeeper.connect to set my physical zk address.
But deploy stage was stucked in bookkeeper wait-zookeeper-ready container.

### Issue
The wait-zookeeper-ready initContainer in bookkeeper-cluster-initialize Job used spliced zk Service hosts to detect zk ready or not, other component init Job initContainer do the same thing. Actually, zk service are unreachable because I disabled zk component.

## Modifications
- Add optional pulsar_metadata.userProvidedZookeepers config for this case, and make component's init Job use user zk to detect liveness, instead of spliced Service hosts.

- Delete redundant image reference in bookkeeper init Job.
2020-07-15 13:19:06 +08:00
Rahul Vashishth
714ff4131e
add targetport for grafana nad manager service (#37)
Co-authored-by: rahul.name <rahul@mail.com>
2020-07-14 22:14:11 -07:00
Sijie Guo
8f9c1d126e
Update appVersion to 2.6.0 (#36)
*Motivation*

based on [helm documentation](https://helm.sh/docs/topics/charts/),
the `appVersion` is the version of the app that this contains. Since the repo
is using 2.6.0 image, update `appVersion` to 2.6.0
2020-07-03 10:04:24 +08:00
Sijie Guo
e6a2766e78
Update Pulsar Helm Chart README (#35) 2020-07-02 01:38:03 -07:00
Sijie Guo
0b719122b7
Add the release process (#34) 2020-07-02 00:11:02 -07:00
Sijie Guo
cfabdc9332
Release workflow should fetch all tags (#33)
*Motivation*

The helm chart release workflow should fetch all tags.
pulsar-2.6.0
2020-07-01 23:19:32 -07:00
Prashanth Tirupachur Vasanthakrishnan
bf152134b2
Issue-29: Bump missed out pulsar-image tags to 2.6.0 (#30)
Fixes #29 

### Motivation

Bumped missed out pulsar-image tags to 2.6.0

### Modifications

Modified the following files:
1. .ci/clusters/values-pulsar-image.yaml
2. charts/pulsar/values.yaml
3. examples/values-one-node.yaml
4. examples/values-pulsar.yaml
2020-07-01 23:01:39 -07:00
Sijie Guo
93d8fd1981
Release Helm Chart 2.6.0 (#21)
* Release Helm Chart 2.6.0
2020-06-29 18:16:16 -07:00
Sijie Guo
1c8a434ef6
Don't substitute environment variables (#28)
*Motivation*

environment variables are already taken by bash scripts. We don't need to substitute them.
2020-06-25 20:24:03 -07:00
tabalt
248f11c932
Fixed apache/pulsar-helm-chart#25 (#27) 2020-06-25 18:33:54 -07:00
Sijie Guo
9778ce2fe1
Remove double quotes from the environment variables (#24)
*Motivation*

Some of the environment variables still use double quotes. They result in the following

```bash
Could not find or load main class "
```
2020-06-23 10:14:23 -07:00
Julien Berard
6cddb81da1
Allow to change broker service account annotations (#22)
### Motivation

We need to be able to change annotation to inject AWS IAM role (EKS based deployment).
https://docs.aws.amazon.com/eks/latest/userguide/specify-service-account-role.html

With 2.6.0 and this annotation change we were able to use Tiered Storage with S3 and EKS/IAM(OIDC).

e.g : 
```
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::66666:role/my-iam-role-with-s3-access
```
values.yaml
```
broker:
  service_account:
    annotations:
      eks.amazonaws.com/role-arn: arn:aws:iam::66666:role/my-iam-role-with-s3-access
```
### Modifications

Added a value to allow to change annotations fro broker service account.
I've tried following style from other part of the code.

### Verifying this change

- [ ] Make sure that the change passes the CI checks.
2020-06-22 18:11:28 -07:00
Sijie Guo
d5a788e617
Update pulsar image to 2.6.0 (#20)
* Update pulsar image to 2.6.0

* Update the image to the official release image
2020-06-19 23:17:41 -07:00
Oscar Espitia
552e86c663
Remove newline from secret tokens generation (#18)
### Motivation

The secret resources generation was appending a newline at the end of the JWT token strings (```\n```). From my understanding, this is not an issue inside Pulsar likely because it trims the contents of the JWT programmatically. However, when setting pulsar as a sink destination for [Vector](https://vector.dev/) (vector produces messages into Pulsar), I noticed the token was always invalid due to this extra newline.

### Modifications

Remove newline from secret tokens generation by using the utility command tr. Granted, this is not the nicest way to go about it but given that the contents are JWT strings, it appears to do the job just fine while keeping everything else working (e.g.: producing/consuming as well as other components like Prometheus). Please advise if you have any concerns or suggestions.
2020-06-09 22:40:27 -07:00
Luke Stephenson
5914996e89
Removing reference to bastion pod (#14)
Has otherwise been cleaned up in f64c396906e9f99999ec14bd3ac7336e6609a86a
2020-05-29 17:33:54 -07:00
Matteo Merli
6e9ad25ba3
Use regular 2-2-2 BK client settings by default (#13)
Using write=3 and ack=2 leads to unbound memory usage in BK client when one bookie is slow or failing, so we should avoid it by default.
2020-05-21 21:52:53 -07:00
Luke Stephenson
96dbab924f
Support load balance source ip range (#12)
Grafana and pulsar manager now support restricting
the available IPs that can be used.
2020-05-18 01:24:58 -07:00
Luke Stephenson
45fd2c6878
symmetric / create_namespace flags were only working if last argument (#11)
Move defaults outside the while loop so they are not constantly reset

Fixes #10
2020-05-14 00:35:48 -07:00
Oscar Espitia
06652d7e8b
Decouple credentials from key secrets generation (#7)
Fixes #6 

### Motivation

As suggested here: https://pulsar.apache.org/docs/en/helm-deploy/#prepare-the-helm-release. The ```prepare_helm_release.sh``` script provided with this Helm chart can create a secret credentials resource and
> The username and password are used for logging into Grafana dashboard and Pulsar Manager.

However, I haven't been able to make use of such a feature for a number of reasons:

1. This secret doesn't seem to affect the ```pulsar-manager-deployment.yaml``` definition. Instead, the ```./templates/pulsar-manager-admin-secret.yaml``` seems to be the one providing the credentials for the pulsar manager (UI) (with the added possibility to overwrite via values.yaml at ```pulsar_manager.admin.user/password```).

2. Using the Pulsar chart as a dependency for an umbrella chart (this is currently my use case), will bring extra hassle that will make it very hard to have all resources follow the same naming structure, thus causing some resources to never be deployed successfully e.g.: ```./templates/grafana-deployment.yaml``` will complain that it couldn't find the secret created by the bash script. Attempting to fix this issue via the ```-k``` flag passed to the script will cause the JWT secret tokens to have a name that's unexpected by the broker, etc.

### Modifications

Decouple grafana credentials from pulsar manager via a new secret resource named ```./charts/pulsar/templates/grafana-admin-secret.yaml```.

Add credentials overriding via values.yaml in the same way as pulsar_manager (grafana.admin.user/password) & delete secret resource manipulation from bash scripts (cleaup_helm_release.sh & prepare_helm_release.sh)

### Verifying this change

- [x] Make sure that the change passes the CI checks.
2020-04-29 01:27:16 -07:00
Oscar Espitia
4009c04811
Update grafana & prometheus docker images (#8)
### Motivation

As seen below, there is a fix for one of the Grafana dashboards that are currently broken in this project (available since version 0.0.5):
- [The Pulsar-topics metrics can't load in Grafana](https://github.com/streamnative/charts/issues/49)

Additionally, upgrading Prometheus to the latest version improves performance as seen here: https://prometheus.io/blog/2017/11/08/announcing-prometheus-2-0

### Modifications

Bring Docker images to their most up-to-date version (streamnative/apache-pulsar-grafana-dashboard-k8s:0.0.6, prom/prometheus:v2.17.2) to fix the following issues:
- https://github.com/streamnative/charts/issues/49 <- fixes Pulsar-topics metrics failure to load
- https://github.com/prometheus/prometheus/pull/2859 <- prevent escalation vulnerabilities by defaulting to the ```nobody``` user

**Note**: upgrading to the latest version of Prometheus (currently v2.17.2) caused the pod to fail with the following error: ```open /prometheus/queries.active: permission denied```. In order to fix this issue I followed the instructions from these 2 comments:

- [Permission denied UID/GID solution](https://github.com/prometheus/prometheus/issues/5976#issuecomment-532942295)
- [Unable to create mmap-ed active query log securityContext fix](https://github.com/aws/eks-charts/issues/21#issuecomment-607031756)

### Verifying this change

- [x] Make sure that the change passes the CI checks.
2020-04-29 01:25:32 -07:00
Oscar Espitia
3e451fecb3
Fix namespace delete command in cleanup-helm-release.sh script (#5)
### Motivation

While making use of the scripts provided in this repo to prepare helm releases, I noticed that providing the ```-d``` flag (delete namespace) for the ```./scripts/pulsar/cleanup_helm_release.sh``` would always fail claiming that the **namespace already exists**. Upon closer examination, I noticed that the kubectl command to delete the provided namespace is actually attempting to create it instead.

### Modifications

I've gone ahead and made the corresponding modification on the script to delete the namespace (went from ```kubectl create namespace ${namespace}``` to ```kubectl delete namespace ${namespace}```).

### Verifying this change

I'm not sure what possible verifications I can provide for this PR. Please advise.
2020-04-27 00:11:45 -07:00
Sijie Guo
0338d17b89
Publish chart index to gh-pages branch (#3)
*Motivation*

Release helm chart when new tags are created
2020-04-21 02:44:58 -07:00
Sijie Guo
47f05b7650
Add github action to check license header (#2) v2.5.0 2020-04-21 00:23:01 -07:00
Sijie Guo
7dcf1c7aca
Enable CI for pulsar chart (#1) 2020-04-21 14:14:14 +08:00
Sijie Guo
f38711d581
Merge branch 'master' of https://github.com/apache/pulsar 2020-04-20 22:55:34 -07:00
Sijie Guo
8410c0d4c4
Initialize the Pulsar Helm chart 2020-04-20 22:31:15 -07:00
Yong Zhang
977999f9a0 Make secret name consistent (#6739)
* Make secret name consistent
---

*Motivation*

Make the secret name consistent. And all secret names should
use the release name as the prefix.

* Update ci script

* Fix the file path

* Fix path

* Fix env

Co-authored-by: Sijie Guo <sijie@apache.org>
2020-04-16 23:59:26 +08:00
Sijie Guo
9e540ab791 Update Helm Chart Documentation (#6725)
*Motivation*

The current helm chart is lacking documentation. This pull request aims to add documentation.

*Changes*

- Update Helm chart documentation
- Add a get-started section with Helm chart
- Remove the documentation of using yaml files.
2020-04-13 10:17:41 -07:00
Sijie Guo
f64c396906 Improve Helm chart (#6673)
* Improve Helm chart

- Support TLS for all components
- Support Authentication & Authorization (TLS)
- Add CI for different cluster settings
2020-04-08 11:20:01 -07:00
Sijie Guo
19ed28a330 Remove deprecated -XX:+AggressiveOpts (#6689)
*Motivation*

-XX:+AggressiveOpts is deprecated in JDK11
2020-04-07 17:55:04 -07:00
Sijie Guo
cbc1c68e91 Remove PULSAR_PREFIX for k8s yaml and helm values file (#6671)
*Motivation*

In versions older than 2.5.0, PULSAR_PREFIX is used for appending settings
that don't exist in existing configuration files.

*Modifications*

Remove `PULSAR_PREFIX` for backward compatibility
2020-04-06 10:43:51 -07:00
Kévin Dunglas
6a2d9a1091 Fix an error in the Helm chart (#6665) 2020-04-03 10:14:24 -07:00
John Harris
4efddf92c5 [Issue 6355][HELM] autorecovery - could not find or load main class (#6373)
This applies the recommended fix from
https://github.com/apache/pulsar/issues/6355#issuecomment-587756717

Fixes #6355

### Motivation

This PR corrects the configmap data which was causing the autorecovery pod to crashloop
with `could not find or load main class`

### Modifications

Updated the configmap var data per [this comment](https://github.com/apache/pulsar/issues/6355#issuecomment-587756717) from @sijie
2020-02-21 22:07:10 -08:00
liyuntao
2ee5fb61df explicit statement env 'BOOKIE_MEM' and 'BOOKIE_GC' for values-mini.yaml (#6340)
Fixes #6338

### Motivation
This commit started while I was using helm in my local minikube, noticed that there's a mismatch between `values-mini.yaml` and `values.yaml` files. At first I thought it was a copy/paste error. So I created #6338;

Then I looked into the details how these env-vars[ were used](28875d5abc/conf/bkenv.sh (L36)), found out its ok to use `PULSAR_MEM` as an alternative. But it introduce problems:
1. Since `BOOKIE_GC` was not defined , the default [BOOKIE_EXTRA_OPTS](28875d5abc/conf/bkenv.sh (L39))  will finally use default value of `BOOKIE_GC`, thus would cover same the JVM parameters defined prior in `PULSAR_MEM`.
2. May cause problems when bootstrap scripts changed in later dev, better to make it explicitly.

So I create this pr to solve above problems(hidden trouble).

### Modifications

As mentioned above, I've made such modifications below:
1. make `BOOKIE_MEM` and `BOOKIE_GC` explicit in `values-mini.yaml` file.  Keep up with the format in`values.yaml` file.
2. remove all  print-gc-logs related args. Considering the resource constraints of minikube environment. The removed part's content is `-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -verbosegc -XX:G1LogLevel=finest`
3. leave `PULSAR_PREFIX_dbStorage_rocksDB_blockCacheSize` empty as usual, as [conf/standalone.conf#L576](df15210941/conf/standalone.conf (L576)) says it would to use 10% of the direct memory size by default.
2020-02-17 18:41:06 +08:00
roman-popenov
a6d1f86974 [Issue-6143][helm]: Add the rbac policy to give the brokers permissions to deploy functions (#6191)
### Motivation
Fixes feature enhancement request #6143:
Currently, there are quite a few undocumented steps that are needed to be performed manually in order to make sure that the functions can be submitted as pods in K8s runtime environment. It would be much better if this process would be automated.

#### Proposed solution:
Automate this process via helm install and update the helm charts with templates.

### Modifications

I've added an additional `functionsAsPods` filed in extra components inside the values file. If the setting is set to `yes`, then it would add `serviceAccount` to the broker deployment. It will also add the rbac policy to give the brokers permissions to deploy functions. The policies can be found in the new `broker-rbac.yaml` template file. Moreover, it will also change the `functions_worker` settings and set the function runtime factory setting that can be found inside `broker-configmap.yaml`.
### Verifying this change
1) Set `functionsAsPods: yes` inside helm values yaml file.
2) Follow the instructions on how deploying helm and run:
`helm install pulsar --values pulsar/values-mini.yaml ./pulsar/`. 
3) Wait until all the services are up and running.
4) Set up tenant, namespace.
5) Create a function, sink and source and submit it using the CLI to make sure the pods are running alongside the Pulsar cluster. In addition, set up such a flow where the data is flowing from source to topics, the processed by a function and sink outputs the data
6) Push data into cluster through the source and make sure it comes out of the sink into destination. There shouldn't be any errors in the logs of brokers, bookie, sources, sinks and functions.

#### Modules affected:
The changes in the PR are affecting the deployment using the helm charts. Now the if the flag `functionsAsPods` is set to `yes` inside the `values.yaml. file, the functions would run as pods.

### Documentation
Currently, the documentations explaining the helm chart deployment process is lacking and this should be updated.
2020-02-13 13:45:31 -08:00
SakaSun
7abb297a6b [Helm] Pulsar Manager do not work if Pulsar authentication is enabled (#6315)
Fixes ##6314

### Motivation

Pulsar Manager do not work if Pulsar authentication is enabled.

### Modifications

pulsar-manager-configmap.yaml was created in order to allow configuration of the enviroment properties in values.yaml
2020-02-13 13:39:32 -08:00
roman-popenov
4d00b385ac [deployment][helm] Add Grafana ingress template (#6280)
### Motivation
Exposing Grafana via soft ingress controller so that it can be exposed through a Load Balancer. 

#### Proposed solution:
Create ingress template for Grafana so that it can be automatically picked up if ingress controller instance is running in the cluster. The other solutions are to expose Grafana as NodePort or setting it as a LoadBalancer.

### Modifications
Added `grafana-ingress.yaml` template in the templates and an `ingress` section for Grafana in the values file.

### Verifying this change
1) Set ingress to `true` for Grafana in values file and provide hostname. Currently tested with NGINX, but can use another ingress controller, but will need to change the ingress controller class to another one in the template.

2) Add NGINX Helm repository :

```bash
helm repo add nginx-stable https://helm.nginx.com/stable
helm repo update
```
3) Install with Helm 3:

```bash
helm install nginix-ingress-crl nginx-stable/nginx-ingress
```

4) Follow the instructions on how deploying helm and run:
`helm install pulsar --values pulsar/values-mini.yaml ./pulsar/`. 

5) Wait until all the services are up and running.

6) Verify that Grafana is accessible via url.


**Path settings**

Currently, by default the path setting is set to `/grafana`. For that to work, the NGINX configuration file `nginx.conf` should have `grafana` sub path enabled:
```    
See https://grafana.com/docs/grafana/latest/installation/behind_proxy/

To avoid having to mess with NGINX configurations files `path` can be changed to `/`, but this path might conflict with other services that are being proxied in the cluster.

#### Modules affected:
The changes in the PR are affecting the deployment using the helm charts. Now the if the flag `functionsAsPods` is set to `yes` inside the `values.yaml. file, the functions would run as pods.

### Documentation
This PR will be adding ingress capability for Grafana and this should be documented.
2020-02-10 00:09:56 -08:00
roman-popenov
ef099c96d2 [ISSUE-6131]: Ensure JVM memory and GC options are set for bookie (#6201)
### Motivation
Fixes #6131 (caused by #5675):

When upgrading an existing 2.4.1 bookie cluster to 2.5.0 on kubernetes, the bookie fails to start with the following exception during initialization: io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 16777216 byte(s) of direct memory (used: 2147483648, max: 2147483648). This is caused by the fact that the bookie environment variables `BOOKIE_MEM` and `BOOKIE_FC` defined in conf/bkenv.sh has no effect, and it is always using the defaults values. 

#### Proposed solution:
Set `BOOKIE_MEM` and `BOOKIE_GC` in the helm deployments charts and default to `PULSAR_MEM` if the `BOOKIE` settings are not set and then use the default settings if none of those environment variables are set.

#### Changes made
Helm chart deployment `values.yaml` and `values-mini.yaml` along with the `bkenv.sh` configuration script.

### Documentation
Currently, the documentation explaining the deployment process and how to change settings is lacking and need to be updated.
2020-02-07 17:15:53 -08:00
ericpsimon
e760ae3118 Fix mispelling of tolarations. Correctly spelled at tolerations. (#6265) 2020-02-07 09:45:56 -08:00
Thomas Memenga
13dabe6edf add missing check to dashboard-ingress (helm chart) (#6160)
### Motivation

if you deploy pulsar using the helm chart and disable monitoring with

```
extras:
  dashboard: no

```

but you have the ingress of the dashboard set to true

```
dashboard:
  ingress:
    enabled: true
```
	

the helm chart will create an ingress that points to a non-existing service because the dashboard itself was not deployed.


### Modifications

I've added the same check that is already in place in dashboard-service and dashboard-deployment

### Verifying this change

I dont know of any automated tests, i tested it manually. In the end it's the same "if" that is already in place in dashboard-service and dashboard-deployment


### Does this pull request potentially affect one of the following parts:

Affects deployment via helm chart. An unwanted ingress object is suppressed.

### Documentation

 no documentation need
2020-02-01 00:07:42 -08:00