Code Monkey home page Code Monkey logo

charts's Introduction

Note

Starting March 31st, 2024, using StreamNative Helm Charts in a production environment mandates a paid subscription with StreamNative. By installing StreamNative Helm Charts, you acknowledge and comply with the StreamNative Cloud Subscription Agreement. For a trial license to explore the StreamNative Platform, including its resources, Pulsar operators, and Pulsar images, please reach out to StreamNative.

StreamNative Helm Charts

This repository contains the Helm Charts supported by StreamNative.

General descriptions

Chart Description Usage
sn-platform The Helm Chart used for deploying a self-managed version of StreamNative Cloud under a Private Cloud Licence. For more details on how to use it, please refer to its documentation.
sn-platform-slim StreamNative Platform Slim is based on the StreamNative Platform chart but enhances the security control by removing most third-party componenets. For more details on how to use it, please refer to its documentation.

Start with StreamNative Private Cloud

StreamNative Private Cloud is an enterprise product which brings specific controllers for Kubernetes by providing specific Custom Resource Definitions (CRDs) that extend the basic Kubernetes orchestration capabilities to support the setup and management of StreamNative components.

Capabilities

With StreamNative Private Cloud, you can simplify operations and maintenance, including:

  • Provisioning and managing multiple Pulsar clusters
  • Scaling Pulsar clusters through rolling upgrades
  • Managing the Pulsar cluster configurations through declarative APIs
  • Simplify the cluster operation with Auto-Scaling
  • Cost efficiency with the Lakehouse tiered storage

Apply for trial

Before installing StreamNative Private Cloud, you need to import a valid license. You can contact StreamNative to apply for a free trial.

Quick Start

Follow our Quick Start guide to quickly provision and manage Pulsar clusters with the StreamNative Private Cloud.

About StreamNative

Founded in 2019 by the original creators of Apache Pulsar, StreamNative is one of the leading contributors to the open-source Apache Pulsar project. We have helped engineering teams worldwide make the move to Pulsar with StreamNative Cloud, a fully managed service to help teams accelerate time-to-production.

charts's People

Contributors

addisonj avatar ciiiii avatar danpi avatar dave-b-code avatar dwyger-ci avatar ericsyh avatar fantapsody avatar freeznet avatar fushuwang avatar huanli-meng avatar jdmaguire avatar jiangpengcheng avatar labuladong avatar lhotari avatar lukestephenson avatar marvincai avatar maxsxu avatar mistertimn avatar nickelozz avatar nlu90 avatar rockybean avatar sijie avatar tikafu avatar tuteng avatar urfreespace avatar wolfstudy avatar wuyin avatar yaalsn avatar yuweisung avatar zymap avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

charts's Issues

Support for definining storageClassNames

We've been switching over from a custom pulsar helm deployment to using this one.

I've noticed that the PVC template functions either use a local-storage class or define a new one based on the storageClass object within the different components.

In our on-prem k8s cluster we have already defined several storageclasses, so we would only need a place to add our storageClassName so an appropriate PVC is made.

e.g.

zookeeper:
  component: zookeeper
  replicaCount: 3
  volumes:
    # use a persistent volume or emptyDir
    persistence: true
    data:
      name: data
      size: 50Gi
      local_storage: false
      storageClassName: <our-custom-storageclass>

Now we can only deploy relying on our default storageclass but this is less then ideal.

Is it enough to add this storageClassName entry to all component's volumes object and add a clause to the template functions which make the PVCs? I could add this and start a pull request.

Install pulsar-1.0.0 error

Requirements:

kubectl version

Output:

Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.6", GitCommit:"72c30166b2105cd7d3350f2c28a219e6abcd79eb", GitTreeState:"clean", BuildDate:"2020-01-18T23:31:31Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"14+", GitVersion:"v1.14.10-gke.27", GitCommit:"145f9e21a4515947d6fb10819e5a336aff1b6959", GitTreeState:"clean", BuildDate:"2020-02-21T18:01:40Z", GoVersion:"go1.12.12b4", Compiler:"gc", Platform:"linux/amd64"}
helm version

Output:

version.BuildInfo{Version:"v3.0.3", GitCommit:"ac925eb7279f4a6955df663a0128044a8a6b7593", GitTreeState:"clean", GoVersion:"go1.13.7"}

Reproduce step

0. helm repo add streamnative https://charts.streamnative.io
1. git clone https://github.com/streamnative/charts.git
2. ./scripts/pulsar/prepare_helm_release.sh -n pulsar -k pulsar-1.0.0. -c --control-center-admin admin --control-center-password admin
3. helm install pulsar-1.0.0 streamnative/pulsar

Error output as follows:

Error: Service "pulsar-1.0.0-pulsar-manager" is invalid: metadata.name: Invalid value: "pulsar-1.0.0-pulsar-manager": a DNS-1035 label must consist of lower case alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character (e.g. 'my-name',  or 'abc-123', regex used for validation is '[a-z]([-a-z0-9]*[a-z0-9])?')

[charts/pulsar] Support KoP in Pulsar helm chart

Motivation

Currently, KoP is supported by the Pulsar operator. But it is not well supported by the Pulsar helm chart. This issue is to port the changes from Pulsar operator to Pulsar helm chart.

Add "Kubectl" alias param in config

In our environment, "kubectl" binary file name is not actually "kubectl", but something else.
So, should we add a config for the "kubectl" alias? While the default setting is "kubectl", nothing different as what it is so far, then we can re-direct it to a certain filename from config.

Support for rack aware scheduling

Is your feature request related to a problem? Please describe.
Charts like those of bookkeeper and zookeeper do not provide for a way to ensure that pod placement is rack aware

Describe the solution you'd like
Ability to configure appropriate label to use which can be used to get rack info and then ensuring that pods are not placed in the same rack. This should be optional.

Describe alternatives you've considered
No clear alternatives.

Additional context
Discussed this with @addisonj in a different chat.

[Bug] Can't start pulsar cluster by using helm chart hub

Reproduce

  1. create k8s cluster
  2. helm repo add streamnative https://charts.streamnative.io
  3. helm repo update
  4. kubectl create namespace pulsar
  5. helm install --set initialize=true function-mesh streamnative/pulsar
NAME                                             READY   STATUS      RESTARTS   AGE
function-mesh-pulsar-alert-manager-0             2/2     Running     0          5m52s
function-mesh-pulsar-bookie-0                    0/1     Pending     0          5m52s
function-mesh-pulsar-bookie-1                    0/1     Pending     0          5m52s
function-mesh-pulsar-bookie-2                    0/1     Pending     0          5m51s
function-mesh-pulsar-bookie-3                    0/1     Pending     0          5m50s
function-mesh-pulsar-bookie-init-bzt42           0/1     Completed   0          5m51s
function-mesh-pulsar-broker-0                    0/1     Init:1/2    0          5m52s
function-mesh-pulsar-broker-1                    0/1     Init:1/2    0          5m52s
function-mesh-pulsar-broker-2                    0/1     Init:1/2    0          5m51s
function-mesh-pulsar-grafana-c8f575ff5-nlmvc     1/1     Running     0          5m53s
function-mesh-pulsar-node-exporter-5w42f         1/1     Running     0          5m53s
function-mesh-pulsar-node-exporter-64whq         1/1     Running     0          5m53s
function-mesh-pulsar-node-exporter-fsmv5         1/1     Running     0          5m53s
function-mesh-pulsar-prometheus-0                2/2     Running     0          5m52s
function-mesh-pulsar-proxy-0                     0/1     Init:1/2    0          5m51s
function-mesh-pulsar-proxy-1                     0/1     Init:1/2    0          5m51s
function-mesh-pulsar-proxy-2                     0/1     Init:1/2    0          5m51s
function-mesh-pulsar-pulsar-init-xzdfq           0/1     Completed   0          5m51s
function-mesh-pulsar-pulsar-manager-0            0/1     Init:0/1    0          5m52s
function-mesh-pulsar-pulsar-manager-init-s5sch   0/1     Init:0/1    0          5m51s
function-mesh-pulsar-recovery-0                  1/1     Running     0          5m52s
function-mesh-pulsar-toolset-0                   1/1     Running     0          5m52s
function-mesh-pulsar-zookeeper-0                 1/1     Running     0          5m52s
function-mesh-pulsar-zookeeper-1                 1/1     Running     0          5m3s
function-mesh-pulsar-zookeeper-2                 1/1     Running     0          4m8s

And the bk pods are always pending

[sn-platform]: kafka producer cannot connect to KoP in sn-platform charts

Background

I followed the platform-quickstart to deploy the platform in Kind K8s environment with the values_cluster.yaml. Then i created a Kafka client pod to connect the KoP by the kafka-console-producer.sh but get connection error.

Kafka client command

In the Kafka client pod, i run the below command to connect KoP:

kafka-console-producer.sh \
--producer-property security.protocol=SASL_PLAINTEXT \
--producer-property sasl.mechanism=PLAIN \
--producer-property 'sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="public/default" password="token:M2ZjMTZlMmEtODVkNi02ZTQ4LTZhY2EtMTljMmE1ZWIyY2FhOjMxYTUyZGI3LTJmMWMtZjAwMC00OTY3LTM1YjE4ZDhjMDIyYw==";' \
--broker-list sn-platform-broker:9092 --topic test-kop-1

sn-platform-broker is the broker service by ClusterIP type:

$ kc get svc -n sn
NAME                                        TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                               AGE
sn-platform-broker                          ClusterIP      10.96.219.184   <none>        6650/TCP,8080/TCP,9092/TCP            45h
sn-platform-broker-headless                 ClusterIP      None            <none>        6650/TCP,8080/TCP,9092/TCP            45h

Error msg

After execute the kafka-console-producer.sh command, the connection to KoP should be successful. But after running the message in the console, i will get the connection error message.

root@sn-platform-toolset-0:/kafka_2.13-2.6.0/bin# ./kafka-console-producer.sh \
> --producer-property security.protocol=SASL_PLAINTEXT \
> --producer-property sasl.mechanism=PLAIN \
> --producer-property 'sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="public/default" password="token:M2ZjMTZlMmEtODVkNi02ZTQ4LTZhY2EtMTljMmE1ZWIyY2FhOjMxYTUyZGI3LTJmMWMtZjAwMC00OTY3LTM1YjE4ZDhjMDIyYw==";' \
> --broker-list sn-platform-broker:9092 --topic test-kop-1
>
root@sn-platform-toolset-0:/kafka_2.13-2.6.0/bin# ./kafka-console-producer.sh \
> --producer-property security.protocol=SASL_PLAINTEXT \
> --producer-property sasl.mechanism=PLAIN \
> --producer-property 'sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="public/default" password="token:M2ZjMTZlMmEtODVkNi02ZTQ4LTZhY2EtMTljMmE1ZWIyY2FhOjMxYTUyZGI3LTJmMWMtZjAwMC00OTY3LTM1YjE4ZDhjMDIyYw==";' \
> --broker-list sn-platform-broker:9092 --topic test-kop-1
>test
[2021-08-25 03:05:50,391] WARN [Producer clientId=console-producer] Error connecting to node sn-platform-broker-0.sn-platform-broker-headless..svc.cluster.local:9092 (id: 2015490984 rack: null) (org.apache.kafka.clients.NetworkClient)
java.net.UnknownHostException: sn-platform-broker-0.sn-platform-broker-headless..svc.cluster.local: Name or service not known
        at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
        at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:929)
        at java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1519)
        at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:848)
        at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1509)
        at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1368)
        at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1302)
        at org.apache.kafka.clients.ClientUtils.resolve(ClientUtils.java:110)
        at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.currentAddress(ClusterConnectionStates.java:403)
        at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.access$200(ClusterConnectionStates.java:363)
        at org.apache.kafka.clients.ClusterConnectionStates.currentAddress(ClusterConnectionStates.java:151)
        at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:958)
        at org.apache.kafka.clients.NetworkClient.access$600(NetworkClient.java:74)
        at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:1131)
        at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:1019)
        at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:542)
        at org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:325)
        at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:240)
        at java.base/java.lang.Thread.run(Thread.java:829)
[2021-08-25 03:05:50,489] WARN [Producer clientId=console-producer] Error connecting to node sn-platform-broker-0.sn-platform-broker-headless..svc.cluster.local:9092 (id: 2015490984 rack: null) (org.apache.kafka.clients.NetworkClient)
java.net.UnknownHostException: sn-platform-broker-0.sn-platform-broker-headless..svc.cluster.local
        at java.base/java.net.InetAddress$CachedAddresses.get(InetAddress.java:797)
        at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1509)
        at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1368)
        at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1302)
        at org.apache.kafka.clients.ClientUtils.resolve(ClientUtils.java:110)
        at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.currentAddress(ClusterConnectionStates.java:403)
        at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.access$200(ClusterConnectionStates.java:363)
        at org.apache.kafka.clients.ClusterConnectionStates.currentAddress(ClusterConnectionStates.java:151)
        at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:958)
        at org.apache.kafka.clients.NetworkClient.access$600(NetworkClient.java:74)
        at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:1131)
        at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:1019)
        at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:542)
        at org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:325)
        at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:240)
        at java.base/java.lang.Thread.run(Thread.java:829)
[2021-08-25 03:05:50,589] WARN [Producer clientId=console-producer] Error connecting to node sn-platform-broker-1.sn-platform-broker-headless..svc.cluster.local:9092 (id: 688476253 rack: null) (org.apache.kafka.clients.NetworkClient)
java.net.UnknownHostException: sn-platform-broker-1.sn-platform-broker-headless..svc.cluster.local: Name or service not known
        at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
        at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:929)
        at java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1519)
        at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:848)
        at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1509)
        at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1368)
        at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1302)
        at org.apache.kafka.clients.ClientUtils.resolve(ClientUtils.java:110)
        at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.currentAddress(ClusterConnectionStates.java:403)

Version info

sn-platform version: streamnative/sn-platform:2.8.0.5
kafka client version: kafka_2.13-2.6.0

Some feature recommendations

Is your feature request related to a problem? Please describe.

  1. PVC adapts to cloud vendors in China.
  2. Add the pod of the management log to increase the operation and maintenance.
  3. Add automatic alarm threshold based on environmental information.

Describe the solution you'd like

  1. https://help.aliyun.com/document_detail/132709.html
  2. https://kubernetes.io/docs/concepts/cluster-administration/logging/
  3. https://grafana.com/docs/grafana/latest/alerting/create-alerts/

Describe alternatives you've considered
No clear alternatives.

Additional context

  1. https://www.alibabacloud.com/blog/alibaba-named-by-gartner-as-third-biggest-global-provider-for-iaas-and-first-in-asia-pacific_596191
  2. Support more log processing methods
  3. grafana as code

Presto Deployment on K8s

To deploy presto, I have this:

bin/apply-config-from-env.py conf/presto/config.properties
                    bin/apply-config-from-env.py conf/presto/catalog/pulsar.properties
                    bin/pulsar sql-worker run

I get this error:

File "bin/apply-config-from-env.py", line 50, in <module>
    k,v = line.split('=', 1)
ValueError: need more than 1 value to unpack

JWT authentication not working with Pulsar manager

I enabled JWT Authentication in values.YAML then upgraded the chart and somehow Pulsar manager stops working.
Error In pulsar manager after enabling JWT auth:-503 Service Temporarily Unavailable

I followed the official doc of stream native (how-to-enable-authentication-and-authorization.md)

I am also facing the issue that how we can configure our pulsar-admin cli to do some operations.
Tried different method of auth with pulsar-admin cli but didn't work

Screenshot 2020-07-15 at 3 05 07 PM

Screenshot 2020-07-15 at 3 07 01 PM

Screenshot 2020-07-15 at 3 22 42 PM

Add Grafana Loki to the charts

There are two components in the Loki, Loki server and log agent named Promtail. All of these components support Helm installation. Here are tutorials for Loki and Promtail, https://github.com/grafana/loki/blob/v1.4.1/docs/installation/helm.md#installing-loki-with-helm. https://github.com/grafana/loki/blob/v1.4.1/docs/clients/promtail/installation.md#installing-promtail.

Loki also have a docker log driver. https://github.com/grafana/loki/tree/master/cmd/docker-driver#overview. This one is easier to use and looks don't need to install Promtail.

Creating a bookkeeper cluster block in initialization.

I use helm to install a bookkeeper cluster and set up a metadataPrefix by default value "/configuration-store".

My config file

metadataPrefix: "/configuration-store"

components:
  # zookeeper
  zookeeper: true
  # bookkeeper
  bookkeeper: true
  # bookkeeper - autorecovery
  autorecovery: true
  # broker
  broker: false
  # proxy
  proxy: false
  # toolset
  toolset: false
  # pulsar manager
  pulsar_manager: false

monitoring:
  # monitoring - prometheus
  prometheus: false
  # monitoring - grafana
  grafana: false

I find that pulsar-bookie-init job still running but not terminate, I found it was blocking in the process that command below

{{- if not (eq .Values.metadataPrefix "") }}
                bin/bookkeeper org.apache.zookeeper.ZooKeeperMain -server {{ template "pulsar.fullname" . }}-{{ .Values.zookeeper.component }} create {{ .Values.metadataPrefix }} 'created for pulsar cluster "{{ template "pulsar.fullname" . }}"' || yes &&
                {{- end }}

When I replace the metadataPrefix value to "" and the job skip that process and completed normally.

I can't certain whether it is a bug or I need some extra configuration.

[pulsar-operator] CRDs invalid and deprecated

When trying to apply the CRDs of pulsar-operator (either through a helm chart create or manual via kubectl apply) the CRD spec does not pass validation.

This is on kubernetes cluster v1.21.5

Bookkeeper CRD

Warning: apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
The CustomResourceDefinition "bookkeeperclusters.bookkeeper.streamnative.io" is invalid: 
* spec.validation.openAPIV3Schema.properties[spec].properties[autoRecovery].properties[pod].properties[initContainers].items.properties[ports].items.properties[protocol].default: Required value: this property is in x-kubernetes-list-map-keys, so it must have a default or be a required property
* spec.validation.openAPIV3Schema.properties[spec].properties[pod].properties[initContainers].items.properties[ports].items.properties[protocol].default: Required value: this property is in x-kubernetes-list-map-keys, so it must have a default or be a required property

Zookeeper CRD

Warning: apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
The CustomResourceDefinition "zookeeperclusters.zookeeper.streamnative.io" is invalid: 
* spec.validation.openAPIV3Schema.properties[spec].properties[pod].properties[sidecars].items.properties[ports].items.properties[protocol].default: Required value: this property is in x-kubernetes-list-map-keys, so it must have a default or be a required property
* spec.validation.openAPIV3Schema.properties[spec].properties[pod].properties[initContainers].items.properties[ports].items.properties[protocol].default: Required value: this property is in x-kubernetes-list-map-keys, so it must have a default or be a required property

Pulsar broker

Warning: apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
The CustomResourceDefinition "pulsarbrokers.pulsar.streamnative.io" is invalid: 
* spec.validation.openAPIV3Schema.properties[spec].properties[initJobPod].properties[initContainers].items.properties[ports].items.properties[protocol].default: Required value: this property is in x-kubernetes-list-map-keys, so it must have a default or be a required property
* spec.validation.openAPIV3Schema.properties[spec].properties[initJobPod].properties[sidecars].items.properties[ports].items.properties[protocol].default: Required value: this property is in x-kubernetes-list-map-keys, so it must have a default or be a required property
* spec.validation.openAPIV3Schema.properties[spec].properties[pod].properties[initContainers].items.properties[ports].items.properties[protocol].default: Required value: this property is in x-kubernetes-list-map-keys, so it must have a default or be a required property
* spec.validation.openAPIV3Schema.properties[spec].properties[pod].properties[sidecars].items.properties[ports].items.properties[protocol].default: Required value: this property is in x-kubernetes-list-map-keys, so it must have a default or be a required property

Setting adding the protocol to a required property lets you install the CRD, defaulting it is only enabled in the v1 CRD API. I tried converting it but this leads to numerous other issues and I'm not familiar with CRD API.

Are there plans on updating the CRDs soon and can these CRDs be rolled back to a working version?

pulsar-manager.configmap has invalid/empty redirect.host value

With chart version 1.2.1 the pulsar-manager-configmap has no value for redirect.host resulting in pulsar-manager failing to start with illegal argument syntax.

Seems like a regression bug. In 1.2.0 it was --redirect.host=admin.pulsar.pulsar.example.local

Errors deploying on EKS

Hello,

We've used this chart to deploy Pulsar locally without issue, in a kind k8s cluster (version 0.8.1) with persistence. However, when we deploy the same configuration to EKS, we run into issues, specifically with PVCs. We are using Kubernetes version 1.15, and Helm 2.14.0.

We're correctly seeing the volumes being created (e.g. pulsar-bookie-{journal,ledgers}-pulsar-bookie-{0..2} ). However, several pods are having issues with messages such as this being repeated, and the bookies never being ready:

pod didn't trigger scale-up (it wouldn't fit if a new node is added): 1 node(s) had taints that the pod didn't tolerate, 1 node(s) had no available volume zone

Our EKS cluster currently operates in 2 availability zones. We tried disabling anti-affinity, but it had no impact.

Any advice would be greatly appreciated!

Chart and docker images license

Hi,

At https://pulsar.apache.org/docs/en/helm-overview/ I've found that official apache pulsar helm chart is based on this chart. I find streamnative chart superior to official one, as it contains required fixes.
We've found that all or most of streamnative repositories are licensed under Apache2. But what about distributions published into https://charts.streamnative.io repository and docker images published on dockerhub (streamnative/platform, streamnative/apache-pulsar-grafana-dashboard-k8s, streamnative/pulsar-manager, streamnative/sn-pulsar).

Failing Helm upgrade 1.2.2 to 1.3.1

Trying to upgrade to latest chart version but apparently there are changes to the statefulset of bookkeeper

'''
Error: UPGRADE FAILED: cannot patch "pulsar-bookie" with kind StatefulSet: StatefulSet.apps "pulsar-bookie" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', and 'updateStrategy' are forbidden
'''

These are the only values for bookie that I override/set:

bookkeeper:
  component: bookie
  replicaCount: 4
  volumes:
    # use a persistent volume or emptyDir
    persistence: true
    journal:
      name: journal
      size: 10Gi
      local_storage: false
      ## If the storage class is left undefined when using persistence
      ## the default storage class for the cluster will be used.
      ##
    ledgers:
      name: ledgers
      size: 5Gi
      local_storage: false

Upgrading from Chart version 1.2.2 to 1.3.1

What would be the best approach to perform the upgrade here? Some settings I need to set or will I have to remove the statefulset entirely?

bug report

pulsar chart 里面 pulsar-manager image版本0.6.0,应该是0.2.0

The grafana canot login

Version: master

Reproduce:

  1. pull master code
  2. kubectl create namespace pulsar
  3. ./scripts/pulsar/prepare_helm_release.sh -n pulsar -k sn-platform-pulsar -c --control-center-admin admin --control-center-password adminmin
  4. cd charts && helm install sn-platform-pulsar --values pulsar/values.yaml ./pulsar
  5. kubectl expose service sn-platform-pulsar-grafana --type=LoadBalancer --name=pulsar-grafana-1 --port=3000 -n pulsar
  6. access grafana servie EXTERNAL-IP:3000

the error as follows:

image

Helm charts are managing k8s namespace

Describe the bug
Helm charts are managing namespace.

helm does not position it self as a namespace manager, as namespaces in kubernetes are considered as a higher control structure that is not part of the application.

To Reproduce
Use helm for installation without prior syncing namespaces in chart values and installation cmd:

kubectl create ns pulsartest
helm upgrade --install pulsar -n pulsartest streamnative/pulsar
Error: namespaces "pulsar" not found

even with namespaceCreate: false

Expected behavior
Do not manage kubernetes namespaces in helm charts.

  • in case I failed to convince you, at least use consistent variables to refer to a proper namespace e.g. { .Release.Namespace }

Desktop (please complete the following information):

  • Linux

Setting various metadataPrefix fails due to missing seperator

In various parts of the chart templates there is a seperator '/' missing for Zook URIs.

e.g.
zookeeperServers: "{{ template "pulsar.zookeeper.connect" . }}{{ .Values.metadataPrefix }}"

should be

zookeeperServers: "{{ template "pulsar.zookeeper.connect" . }}/{{ .Values.metadataPrefix }}"

so that the port doesn't combine with the metadata prefix.

With a custom template file with metadata prefix specified, the bad template snippet renders as,

#> helm template -f dev-values.yaml dev streamnative/pulsar | grep -n 2181pulsar-prd
831:  zookeeperServers: "dev-pulsar-zookeeper:2181pulsar-prd"
832:  configurationStoreServers: "dev-pulsar-zookeeper:2181pulsar-prd"
1717:  zookeeperServers: "dev-pulsar-zookeeper:2181pulsar-prd"
1718:  configurationStoreServers: "dev-pulsar-zookeeper:2181pulsar-prd"
5165:              --zookeeper dev-pulsar-zookeeper:2181pulsar-prd \
5166:              --configuration-store dev-pulsar-zookeeper:2181pulsar-prd \

Affected template files,

pulsar/templates/broker/broker-configmap.yaml
pulsar/templates/proxy/websocket-configmap.yaml
pulsar/templates/pulsar-cluster-initialize.yaml

Some documents are outdated

1. No pulsar dependency of loki

See the 3rd section of https://github.com/streamnative/charts#deploy-pulsar-to-kubernetes.

When I run helm dependency update pulsar, it failed with following error:

Error: could not find pulsar: stat pulsar: no such file or directory

2. The link of detailed guideline is outdated

See https://github.com/streamnative/charts#customize-the-deployment.

The link of detailed guideline is https://streamnative.io/docs/v1.0.0/install-and-upgrade/helm/install/deployment. However, now it will be redirected to https://docs.streamnative.io/.


I hope we can process these issues ASAP.

`-c` param did not work

Following the README.md, the -c means A k8s namespace for installing the Pulsar release, when the -c is specified, the out as follows:

$ ./scripts/pulsar/prepare_helm_release.sh -n pulsar -k sn-platform-pulsar -c --control-center-admin admin --control-center-password admin

Output:

create the credentials for the admin user of control center (grafana & pulsar-manager)
Error from server (NotFound): namespaces "pulsar" not found
generate the token keys for the pulsar cluster
The private key and public key are generated to /var/folders/qz/g2fh76dx5rj4q_fbkfh1q3th0000gn/T/tmp.1Ia65DaF and /var/folders/qz/g2fh76dx5rj4q_fbkfh1q3th0000gn/T/tmp.qzeh7zvU successfully.
Error from server (NotFound): namespaces "pulsar" not found
generate the tokens for the super-users: proxy-admin,broker-admin,admin
generate the token for proxy-admin
Error from server (NotFound): namespaces "pulsar" not found
generate the token for broker-admin
Error from server (NotFound): namespaces "pulsar" not found
generate the token for admin
^C

So i used the following command to create namespace:

$ kubectl create namespace pulsar

Output:

namespace/pulsar created

And then run the command, everything is ok:

$ ./scripts/pulsar/prepare_helm_release.sh -n pulsar -k sn-platform-pulsar -c --control-center-admin admin --control-center-password admin
create the credentials for the admin user of control center (grafana & pulsar-manager)
secret/sn-platform-pulsar-admin-secret created
generate the token keys for the pulsar cluster
The private key and public key are generated to /var/folders/qz/g2fh76dx5rj4q_fbkfh1q3th0000gn/T/tmp.R9eO84Aa and /var/folders/qz/g2fh76dx5rj4q_fbkfh1q3th0000gn/T/tmp.xbc7OHke successfully.
secret/sn-platform-pulsar-token-asymmetric-key created
generate the tokens for the super-users: proxy-admin,broker-admin,admin
generate the token for proxy-admin
secret/sn-platform-pulsar-token-proxy-admin created
generate the token for broker-admin
secret/sn-platform-pulsar-token-broker-admin created
generate the token for admin
secret/sn-platform-pulsar-token-admin created
-------------------------------------

The jwt token secret keys are generated under:
    - 'sn-platform-pulsar-token-asymmetric-key'

The jwt tokens for superusers are generated and stored as below:
    - 'proxy-admin':secret('sn-platform-pulsar-token-proxy-admin')
    - 'broker-admin':secret('sn-platform-pulsar-token-broker-admin')
    - 'admin':secret('sn-platform-pulsar-token-admin')

The credentials of the administrator of Control Center (Grafana & Pulsar Manager)
is stored at secret 'sn-platform-pulsar-admin-secret

grafana overview cluster list is missing clusters

We have three pulsar clusters in a simple helm release. In the grafana overview page, the drop down menu only show two and one of the cluster name is wrong. In the broker view however, the clusters show up correctly. See attached screenshot.
Screen Shot 2021-04-15 at 9 28 40 AM

Broker view:
Screen Shot 2021-04-15 at 9 32 45 AM

Bump chart version

I've ran against an issue that got resolved in #108 but the chart did not get bumped. Is there anything i can do to help this getting released?

It contains a fix for the offloading that i am looking to introduce in our stack.

Thanks in advance!

Helm chart support for clusters that don't have DNS

Hi
Currently, the helm charts are referring to the pods by the hostnames at various config locations. In clusters where there is no support for DNS, all the various components are registering themselves with hostnames instead of IP addresses.

As DNS is not present in the cluster, the clients and the other components in the clusters are not able to resolve the hostnames to IP address and they are not able to connect.

I have tried to follow this

{{- if .Values.broker.advertisedPodIP }}
for changing the advertised address for the pod to contain IP instead of hostname, but there are other locations where the hostname is used.

Some places where we need this to be changed is

bin/pulsar zookeeper-shell -server {{ template "pulsar.zookeeper.connect" . }} get {{ template "pulsar.broker.znode" . }};

--web-service-url http://{{ template "pulsar.fullname" . }}-{{ .Values.broker.component }}.{{ template "pulsar.namespace" . }}.svc.cluster.local:8080/ \

Pulsar manager failed to run in 1.2.1

Hi, i am trying to enable pulsar-manager in the 1.2.1 version of the chart. When doing this, i am running into an issue where --redirect.host flag is failing.

08:33:07.878 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
java.lang.IllegalArgumentException: Invalid argument syntax: --redirect.host=
	at org.springframework.core.env.SimpleCommandLineArgsParser.parse(SimpleCommandLineArgsParser.java:75)
	at org.springframework.core.env.SimpleCommandLinePropertySource.<init>(SimpleCommandLinePropertySource.java:90)
	at org.springframework.boot.DefaultApplicationArguments$Source.<init>(DefaultApplicationArguments.java:76)
	at org.springframework.boot.DefaultApplicationArguments.<init>(DefaultApplicationArguments.java:42)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243)
	at org.apache.pulsar.manager.PulsarManagerApplication.main(PulsarManagerApplication.java:27)

I am not using tls, and just enabling the pulsar manager so i think the issue lies on this line: https://github.com/streamnative/charts/blob/master/charts/pulsar/templates/pulsar-manager/pulsar-manager-configmap.yaml#L85

Update
current config in my values file:

pulsar_manager:
  component: pulsar-manager
  ports:
    frontend: 9527
    backend: 7750
  replicaCount: 1
  superuser:
    user: "zyx"
    password: "xyz"
    description: "Pulsar Manager Admin"
    email: [email protected]
  redirect:
    host: localhost
  scripts:
    backend_entrypoint:
      command: /pulsar-manager/pulsar-manager/bin/pulsar-manager

But if i check my configmap i see the following:

apiVersion: v1
data:
  backend_entrypoint.sh: |
    /pulsar-manager/pulsar-manager/bin/pulsar-manager \
      --spring.datasource.initialization-mode=never \
      --spring.datasource.driver-class-name=org.postgresql.Driver \
      --spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/pulsar_manager \
      --spring.datasource.username=pulsar \
      --spring.datasource.password=pulsar \
      --pagehelper.helperDialect=postgresql \
      --backend.jwt.token="$(cat /pulsar/tokens/pulsar_manager/token)" \
      --jwt.broker.token.mode=PRIVATE \
      --jwt.broker.public.key=file:///pulsar/keys/token/public.key \
      --jwt.broker.private.key=file:///pulsar/keys/token/private.key \
      --bookie.host="http://pulsar-bookie:8000" \
      --bookie.enable=true \
      --redirect.scheme=http \
      --redirect.port=80 \
      --redirect.host= \
...

For some reason, the redirect.host is not filled in correctly.

Allow for allow for templating of configData values

When reusing the pulsar chart, some of the values can be dependent on values used elsewhere (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) or the name of the release (s3ManagedLedgerOffladServiceEndpoint).

I propose that we use helm's tmpl function to allow references to other values from within values supplied to the chart.

Helm namespace support cont.

We've found a few missed instances of the old way of setting the namespace in some of the .tpl files:

{{- define "pulsar.zookeeper.hostname" -}}
${HOSTNAME}.{{ template "pulsar.zookeeper.service" . }}.{{ .Values.namespace }}.svc.cluster.local
{{- end -}}

I've found reference to the direct .namespace value in the following directories' _{dir}.tpl

  • autorecovery
  • bookkeeper
  • broker
  • pulsar_manager
  • toolset
  • zookeeper

Originally posted by @austince in #101 (comment)

Pulsar Helm Chart vs Pulsar-Operator Helm Chart

I found charts for:

and I'm curious the differences, is there a good reason to use the operator? Typically I think of using Operators to add some kind of business operations to the chart. Things that don't fit eventual consistency. Right now we've been evaluating the public chart https://pulsar.apache.org/docs/en/helm-overview/ but want to make sure I'm using the best helm chart for Pulsar.

Simplicity is a key factor since this will be deployed to lots of clients/k8s clusters

Provide a way to use the --namespace from helm

Currently pulsar chart provides a way to specify the namespace using .Values.namepsace. I would propose that when the .Values.namespace is not defined, the chart falls back to using .Release.Namespace.

I think this would make the chart easier to reuse in other charts while still allowing the namespace to be set explicitly.

There is some discussion around best practices for helm namespaces here

helm 3.5.0 creating camel case

This is an odd issue. Taking a naive values.yaml and simply enabling kop

# kop
  kop: true

results in helm camelCasing the sevice name in,

pulsar/templates/broker/broker-service-ingress.yaml
pulsar/templates/broker/broker-service.yaml
pulsar/templates/broker/broker-statefulset.yaml

#> helm version
version.BuildInfo{Version:"v3.5.0", GitCommit:"32c22239423b3b4ba6706d450bd044baffdcf9e6", GitTreeState:"clean", GoVersion:"go1.15.6"}

Helm chart dependencies do not follow best practices

Is your feature request related to a problem? Please describe.
Charts do not follow common guideline: chart templates bring dependencies into the main chart instead of using Helm dependency

Describe the solution you'd like
Move services like prometheus, alert-manager, zookeeper to a chart dependencies, That would simplified helm chart support and usage.

Describe alternatives you've considered
Do not see other options, cause the issue is that Chart structure is inconsistent and does not follow best practices

Additional context
As a chart reference with a lot of dependencies GitLab helm chart could be taken..

Service IP address

Hi @sijie
I tried this out and it worked great!

Is there a way to pass the IP address of the Broker, Zookeeper and Bookkeeper services when installing?

I have tried out Helm's lookup function and encountered issues using it!
May be you can help in figuring it out!

I would not mind for a presto deployment example using charts!

add connector volumes & volumeMounts to support custom connector built-in

Currently it is hard for helm charts users to install custom connectors as built-in connector, mostly user needs to build custom image with connector, and it is painful. (please correct me if I have missed something)

I came up with a solution to ease the process is to customize the connectors using initContainers, but need to add a new volume & volumeMounts to /pulsar/connectors or connectorsDirectory, then we can have initContainers to download or customize connectors to connectorsDirectory.

If the solution is okay, I can help to create a pr for it.

Grafana has different secret name with generated secret

Events:
  Type     Reason     Age                   From                                              Message
  ----     ------     ----                  ----                                              -------
  Normal   Scheduled  2m57s                 default-scheduler                                 Successfully assigned pulsar/yong-test-pulsar-grafana-7b7974cfb8-vxbjx to gke-yong-dev-default-pool-2b931959-68dm
  Normal   Pulling    2m55s                 kubelet, gke-yong-dev-default-pool-2b931959-68dm  Pulling image "streamnative/apache-pulsar-grafana-dashboard-k8s:0.0.4"
  Normal   Pulled     2m33s                 kubelet, gke-yong-dev-default-pool-2b931959-68dm  Successfully pulled image "streamnative/apache-pulsar-grafana-dashboard-k8s:0.0.4"
  Warning  Failed     24s (x12 over 2m33s)  kubelet, gke-yong-dev-default-pool-2b931959-68dm  Error: secret "yong-test-pulsar-admin-secret" not found
  Normal   Pulled     24s (x11 over 2m33s)  kubelet, gke-yong-dev-default-pool-2b931959-68dm  Container image "streamnative/apache-pulsar-grafana-dashboard-k8s:0.0.4" already present on machine
➜  streamnative-ci git:(master) kubectl get secrets -n pulsar
NAME                                           TYPE                                  DATA   AGE
default-token-z4qbs                            kubernetes.io/service-account-token   3      7m48s
yong-test-admin-secret                         Opaque                                2      7m47s
yong-test-pulsar-broker-acct-token-t77q2       kubernetes.io/service-account-token   3      3m17s
yong-test-pulsar-pulsar-operator-token-t5gwt   kubernetes.io/service-account-token   3      3m17s
yong-test-token-admin                          Opaque                                2      7m32s
yong-test-token-asymmetric-key                 Opaque                                2      7m45s
yong-test-token-broker-admin                   Opaque                                2      7m37s
yong-test-token-proxy-admin                    Opaque                                2      7m41s

Using prepare_helm_release.sh generate a secret and the secret name is yong-test-admin-secret, but the grafana need a secret named yong-test-pulsar-admin-secret.

question: Support for functions & function state?

We are using chart v1.2.0 in production and are hesitating to upgrade to v1.3.0 because when we tried function workers did not work out of the box.

From looking at

it looks like functions should work out of the box with the default values

Also we would love try out the function state although still in developer preview. In production we currently use an external cache (etcd, redis) for aggregating & caching.

Do you know of any examples on how to enable the function state and how to make it play well with the function workers using the k8s-runtime?

Probably off-topic but somehow related:

  • We love the functions concept yet find the k8s-runtime to be quite resource intensive. Any tips/material available on tuning/optimization?
  • Any tips on using dependency/constructor injection for functions? Does the function-classloader support some variant of DI? We currently work around this using a dagger.dev-builder with method-injecting the function context to build dependencies.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.