charts/pulsar/values.yaml (932 lines of code) (raw):
#
# 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.
#
###
### K8S Settings
###
### Namespace to deploy Pulsar
### Note: Prefer using helm's --namespace flag with --create-namespace instead
## The namespace to use to deploy the Pulsar components. If left empty,
## it will default to .Release.Namespace (aka helm --namespace).
## Please note that victoria-metrics-k8s-stack might not be able to scrape Pulsar component metrics by default unless
## it is deployed in the same namespace as Pulsar.
namespace: ""
namespaceCreate: false
## clusterDomain as defined for your k8s cluster
clusterDomain: cluster.local
###
### Global Settings
###
## Set to true on install
## There's no need to set this value unless you're using a system that doesn't track .Release.IsInstall or .Release.IsUpgrade (like argocd)
initialize: false
## Set useReleaseStatus to false if you're deploying this chart using a system that doesn't track .Release.IsInstall or .Release.IsUpgrade (like argocd)
useReleaseStatus: true
## Set cluster name
# clusterName:
## add custom labels to components of cluster
# labels:
# environment: dev
# customer: apache
## Pulsar Metadata Prefix
##
## By default, pulsar stores all the metadata at root path.
## You can configure to have a prefix (e.g. "/my-pulsar-cluster").
## If you do so, all the pulsar and bookkeeper metadata will
## be stored under the provided path
metadataPrefix: ""
## Port name prefix
##
## Used for Istio support which depends on a standard naming of ports
## See https://istio.io/latest/docs/ops/configuration/traffic-management/protocol-selection/#explicit-protocol-selection
## Prefixes are disabled by default
tcpPrefix: "" # For Istio this will be "tcp-"
tlsPrefix: "" # For Istio this will be "tls-"
## Persistence
##
## If persistence is enabled, components that have state will
## be deployed with PersistentVolumeClaims, otherwise, for test
## purposes, they will be deployed with emptyDir
##
## This is a global setting that is applied to all components.
## If you need to disable persistence for a component,
## you can set the `volume.persistence` setting to `false` for
## that component.
##
## Deprecated in favor of using `volumes.persistence`
persistence: true
## Volume settings
volumes:
persistence: true
# configure the components to use local persistent volume
# the local provisioner should be installed prior to enable local persistent volume
local_storage: false
## RBAC
##
## Configure settings related to RBAC such as limiting broker access to single
## namespece or enabling PSP
rbac:
enabled: false
limit_to_namespace: true
## AntiAffinity
##
## Flag to enable and disable `AntiAffinity` for all components.
## This is a global setting that is applied to all components.
## If you need to disable AntiAffinity for a component, you can set
## the `affinity.anti_affinity` settings to `false` for that component.
affinity:
## When set to true, the scheduler will try to spread pods across different nodes.
## It is necessary to set this to false if you're using a Kubernetes cluster with less than 3 nodes, such as local development environments.
anti_affinity: true
# Set the anti affinity type. Valid values:
# requiredDuringSchedulingIgnoredDuringExecution - rules must be met for pod to be scheduled (hard) requires at least one node per replica
# preferredDuringSchedulingIgnoredDuringExecution - scheduler will try to enforce but not guranentee
type: requiredDuringSchedulingIgnoredDuringExecution
## Components
##
## Control what components of Apache Pulsar to deploy for the cluster
components:
# zookeeper
zookeeper: true
# oxia
oxia: false
# bookkeeper
bookkeeper: true
# bookkeeper - autorecovery
autorecovery: true
# broker
broker: true
# functions
# WARNING! Before enabling functions, make sure that all of your users are trusted since functions run user code
# and the current security sandbox is not sufficient to protect against malicious code.
functions: false
# proxy
proxy: true
# toolset
toolset: true
# pulsar manager
pulsar_manager: false
# default image repository for pulsar images
defaultPulsarImageRepository: apachepulsar/pulsar-all
# default image tag for pulsar images
# uses chart's appVersion when unspecified
defaultPulsarImageTag:
# default pull policy for all images
defaultPullPolicy: IfNotPresent
## Images
##
## Control what images to use for each component
images:
# set imagePullSecrets
# imagePullSecrets:
# - secretName
zookeeper:
# uses defaultPulsarImageRepository when unspecified
repository:
# uses defaultPulsarImageTag when unspecified
tag:
# uses defaultPullPolicy when unspecified
pullPolicy:
bookie:
# uses defaultPulsarImageRepository when unspecified
repository:
# uses defaultPulsarImageTag when unspecified
tag:
# uses defaultPullPolicy when unspecified
pullPolicy:
autorecovery:
# uses defaultPulsarImageRepository when unspecified
repository:
# uses defaultPulsarImageTag when unspecified
tag:
# uses defaultPullPolicy when unspecified
pullPolicy:
broker:
# uses defaultPulsarImageRepository when unspecified
repository:
# uses defaultPulsarImageTag when unspecified
tag:
# uses defaultPullPolicy when unspecified
pullPolicy:
toolset:
# uses defaultPulsarImageRepository when unspecified
repository:
# uses defaultPulsarImageTag when unspecified
tag:
# uses defaultPullPolicy when unspecified
pullPolicy:
proxy:
# uses defaultPulsarImageRepository when unspecified
repository:
# uses defaultPulsarImageTag when unspecified
tag:
# uses defaultPullPolicy when unspecified
pullPolicy:
functions:
# uses defaultPulsarImageRepository when unspecified
repository:
# uses defaultPulsarImageTag when unspecified
tag:
# uses defaultPullPolicy when unspecified
pullPolicy:
pulsar_manager:
repository: apachepulsar/pulsar-manager
tag: v0.4.0
# uses defaultPullPolicy when unspecified
pullPolicy:
hasCommand: false
oxia:
repository: streamnative/oxia
tag: 0.11.15
pullPolicy:
## TLS
## templates/tls-certs.yaml
##
## The chart is using cert-manager for provisioning TLS certs for
## brokers and proxies.
tls:
enabled: false
ca_suffix: ca-tls
# common settings for generating certs
common:
# 90d
duration: 2160h
# 15d
renewBefore: 360h
organization:
- pulsar
keySize: 4096
keyAlgorithm: RSA
keyEncoding: PKCS8
# settings for generating certs for proxy
proxy:
enabled: false
cert_name: tls-proxy
# set to false if you want to use an existing certificate
createCert: true
# The dnsNames field specifies a list of Subject Alternative Names to be associated with the certificate.
dnsNames:
# - example.com
# settings for generating certs for broker
broker:
enabled: false
cert_name: tls-broker
# The dnsNames field specifies a list of Subject Alternative Names to be associated with the certificate.
dnsNames:
# - example.com
# settings for generating certs for bookies
bookie:
enabled: false
cert_name: tls-bookie
# settings for generating certs for zookeeper
zookeeper:
enabled: false
cert_name: tls-zookeeper
# settings for generating certs for recovery
autorecovery:
cert_name: tls-recovery
# settings for generating certs for toolset
toolset:
cert_name: tls-toolset
# TLS setting for function runtime instance
function_instance:
# controls the use of TLS for function runtime connections towards brokers
enabled: false
oxia:
enabled: false
# Enable or disable broker authentication and authorization.
auth:
authentication:
enabled: false
provider: "jwt"
jwt:
# Enable JWT authentication
# If the token is generated by a secret key, set the usingSecretKey as true.
# If the token is generated by a private key, set the usingSecretKey as false.
usingSecretKey: false
authorization:
enabled: false
superUsers:
# broker to broker communication
broker: "broker-admin"
# proxy to broker communication
proxy: "proxy-admin"
# pulsar-admin client to broker/proxy communication
client: "admin"
# pulsar-manager to broker communication. If left empty, no jwt setup will be performed in the manager
manager: ""
# omits the above proxy role from superusers on the proxy
# and configures it as a proxy role on the broker in addition to the superusers
useProxyRoles: true
######################################################################
# External dependencies
######################################################################
## cert-manager
## templates/tls-cert-issuer.yaml
##
## Cert manager is used for automatically provisioning TLS certificates
## for components within a Pulsar cluster
certs:
internal_issuer:
apiVersion: cert-manager.io/v1
enabled: false
component: internal-cert-issuer
# The type of issuer, supports selfsigning and ca
type: selfsigning
# 90d
duration: 2160h
# 15d
renewBefore: 360h
issuers:
# Used for certs.type as selfsigning, the selfsigned issuer has no dependency on any other resource.
selfsigning:
# used for certs.type as ca, the CA issuer needs to reference a Secret which contains your CA certificate and signing private key.
ca:
secretName:
######################################################################
# Below are settings for each component
######################################################################
## Pulsar: Zookeeper cluster
## templates/zookeeper-statefulset.yaml
##
zookeeper:
# use a component name that matches your grafana configuration
# so the metrics are correctly rendered in grafana dashboard
component: zookeeper
# the number of zookeeper servers to run. it should be an odd number larger than or equal to 3.
replicaCount: 3
updateStrategy:
type: RollingUpdate
podManagementPolicy: Parallel
initContainers: []
# This is how Victoria Metrics or Prometheus discovers this component
podMonitor:
enabled: true
interval: 60s
scrapeTimeout: 60s
metricRelabelings:
# - action: labeldrop
# regex: cluster
# True includes annotation for statefulset that contains hash of corresponding configmap, which will cause pods to restart on configmap change
restartPodsOnConfigMapChange: false
ports:
http: 8000
client: 2181
clientTls: 2281
follower: 2888
leaderElection: 3888
# admin: 9990
# nodeSelector:
# cloud.google.com/gke-nodepool: default-pool
probe:
liveness:
enabled: true
failureThreshold: 10
initialDelaySeconds: 20
periodSeconds: 30
timeoutSeconds: 30
readiness:
enabled: true
failureThreshold: 10
initialDelaySeconds: 20
periodSeconds: 30
timeoutSeconds: 30
startup:
enabled: false
failureThreshold: 30
initialDelaySeconds: 20
periodSeconds: 30
timeoutSeconds: 30
affinity:
anti_affinity: true
anti_affinity_topology_key: kubernetes.io/hostname
# Set the anti affinity type. Valid values:
# requiredDuringSchedulingIgnoredDuringExecution - rules must be met for pod to be scheduled (hard) requires at least one node per replica
# preferredDuringSchedulingIgnoredDuringExecution - scheduler will try to enforce but not guranentee
type: requiredDuringSchedulingIgnoredDuringExecution
# set topologySpreadConstraint to deploy pods across different zones
topologySpreadConstraints: []
# annotations for the app (statefulset/deployment)
appAnnotations: {}
annotations: {}
tolerations: []
gracePeriod: 30
resources:
requests:
memory: 256Mi
cpu: 0.1
# extraVolumes and extraVolumeMounts allows you to mount other volumes
# Example Use Case: mount ssl certificates
# extraVolumes:
# - name: ca-certs
# secret:
# defaultMode: 420
# secretName: ca-certs
# extraVolumeMounts:
# - name: ca-certs
# mountPath: /certs
# readOnly: true
extraVolumes: []
extraVolumeMounts: []
# Ensures 2.10.0 non-root docker image works correctly.
securityContext:
fsGroup: 0
fsGroupChangePolicy: "OnRootMismatch"
volumes:
useSeparateDiskForTxlog: false
# use a persistent volume or emptyDir
persistence: true
data:
name: data
size: 20Gi
local_storage: true
## If you already have an existent storage class and want to reuse it, you can specify its name with the option below
##
# storageClassName: existent-storage-class
#
## Instead if you want to create a new storage class define it below
## If left undefined no storage class will be defined along with PVC
##
# storageClass:
# type: pd-ssd
# fsType: xfs
# provisioner: kubernetes.io/gce-pd
## If you want to bind static persistent volumes via selectors, e.g.:
# selector:
# matchLabels:
# app: pulsar-zookeeper
selector: {}
## If you set useSeparateDiskForTxlog to true, this section configures the extra volume for the zookeeper transaction log.
datalog:
name: datalog
size: 20Gi
local_storage: true
## If you already have an existent storage class and want to reuse it, you can specify its name with the option below
##
# storageClassName: existent-storage-class
#
## Instead if you want to create a new storage class define it below
## If left undefined no storage class will be defined along with PVC
##
# storageClass:
# type: pd-ssd
# fsType: xfs
# provisioner: kubernetes.io/gce-pd
## If you want to bind static persistent volumes via selectors, e.g.:
# selector:
# matchLabels:
# app: pulsar-zookeeper
selector: {}
# External zookeeper server list in case of global-zk list to create zk cluster across zk deployed on different clusters/namespaces
# Example value: "us-east1-pulsar-zookeeper-0.us-east1-pulsar-zookeeper.us-east1.svc.cluster.local:2888:3888,us-east1-pulsar-zookeeper-1.us-east1-pulsar-zookeeper.us-east1.svc.cluster.local:2888:3888,us-east1-pulsar-zookeeper-2.us-east1-pulsar-zookeeper.us-east1.svc.cluster.local:2888:3888,us-west1-pulsar-zookeeper-0.us-west1-pulsar-zookeeper.us-west1.svc.cluster.local:2888:3888,us-west1-pulsar-zookeeper-1.us-west1-pulsar-zookeeper.us-west1.svc.cluster.local:2888:3888,us-west1-pulsar-zookeeper-2.us-west1-pulsar-zookeeper.us-west1.svc.cluster.local:2888:3888"
externalZookeeperServerList: ""
## Zookeeper service account
## templates/zookeeper-service-account.yaml
service_account:
annotations: {}
## Zookeeper configmap
## templates/zookeeper-configmap.yaml
##
configData:
PULSAR_MEM: >
-Xms64m -Xmx128m
PULSAR_GC: >
-XX:+UseG1GC
-XX:MaxGCPauseMillis=10
-Dcom.sun.management.jmxremote
-Djute.maxbuffer=10485760
-XX:+ParallelRefProcEnabled
-XX:+UnlockExperimentalVMOptions
-XX:+DoEscapeAnalysis
-XX:+DisableExplicitGC
-XX:+ExitOnOutOfMemoryError
-XX:+PerfDisableSharedMem
## Add a custom command to the start up process of the zookeeper pods (e.g. update-ca-certificates, jvm commands, etc)
additionalCommand:
## Zookeeper service
## templates/zookeeper-service.yaml
##
service:
annotations: {}
## Zookeeper PodDisruptionBudget
## templates/zookeeper-pdb.yaml
##
pdb:
usePolicy: true
maxUnavailable: 1
## Pulsar: Oxia cluster
oxia:
component: oxia
initialShardCount: 3
replicationFactor: 3
## templates/coordinator-deployment.yaml
coordinator:
# annotations for the app (statefulset/deployment)
appAnnotations: {}
# This is how Victoria Metrics or Prometheus discovers this component
podMonitor:
enabled: true
interval: 60s
scrapeTimeout: 60s
metricRelabelings:
# - action: labeldrop
# regex: cluster
cpuLimit: 100m
memoryLimit: 128Mi
ports:
internal: 6649
metrics: 8080
service:
annotations: {}
service_account:
annotations: {}
tolerations: []
# nodeSelector:
# cloud.google.com/gke-nodepool: default-pool
## templates/server-statefulset.yaml
server:
# annotations for the app (statefulset/deployment)
appAnnotations: {}
# This is how Victoria Metrics or Prometheus discovers this component
podMonitor:
enabled: true
interval: 60s
scrapeTimeout: 60s
metricRelabelings:
# - action: labeldrop
# regex: cluster
replicas: 3
# CPU limit for the server pod
cpuLimit: 1
# Memory limit for the server pod
memoryLimit: 1Gi
# Oxia database cache size in MB
dbCacheSizeMb: 512
# Storage size for the PVC of the server pod
storageSize: 8Gi
# Storage class name for the PVC of the server pod
# storageClassName: existent-storage-class
ports:
public: 6648
internal: 6649
metrics: 8080
service:
public:
annotations: {}
internal:
annotations: {}
service_account:
annotations: {}
securityContext:
fsGroup: 0
fsGroupChangePolicy: "OnRootMismatch"
affinity:
anti_affinity: true
anti_affinity_topology_key: kubernetes.io/hostname
# Set the anti affinity type. Valid values:
# requiredDuringSchedulingIgnoredDuringExecution - rules must be met for pod to be scheduled (hard) requires at least one node per replica
# preferredDuringSchedulingIgnoredDuringExecution - scheduler will try to enforce but not guranentee
type: requiredDuringSchedulingIgnoredDuringExecution
# set topologySpreadConstraint to deploy pods across different zones
topologySpreadConstraints: []
tolerations: []
# nodeSelector:
# cloud.google.com/gke-nodepool: default-pool
pprofEnabled: false
## Pulsar: Bookkeeper cluster
## templates/bookkeeper-statefulset.yaml
##
bookkeeper:
# use a component name that matches your grafana configuration
# so the metrics are correctly rendered in grafana dashboard
component: bookie
## BookKeeper Cluster Initialize
## templates/bookkeeper-cluster-initialize.yaml
metadata:
## Timeout for waiting for zookeeper to become available before running metadata initialization
waitZookeeperTimeout: 600
## Timeout for running metadata initialization
initTimeout: 60
## Timeout for waiting for oxia to be available before running metadata initialization. This setting applies only when oxia is enabled.
waitOxiaTimeout: 600
## Set the resources used for running `bin/bookkeeper shell initnewcluster`
##
resources:
# requests:
# memory: 4Gi
# cpu: 2
replicaCount: 4
updateStrategy:
type: RollingUpdate
podManagementPolicy: Parallel
initContainers: []
# This is how Victoria Metrics or Prometheus discovers this component
podMonitor:
enabled: true
interval: 60s
scrapeTimeout: 60s
metricRelabelings:
# - action: labeldrop
# regex: cluster
# True includes annotation for statefulset that contains hash of corresponding configmap, which will cause pods to restart on configmap change
restartPodsOnConfigMapChange: false
ports:
http: 8000
bookie: 3181
statestore: 4181
# nodeSelector:
# cloud.google.com/gke-nodepool: default-pool
probe:
liveness:
enabled: true
failureThreshold: 60
initialDelaySeconds: 10
periodSeconds: 30
timeoutSeconds: 5
readiness:
enabled: true
failureThreshold: 60
initialDelaySeconds: 10
periodSeconds: 30
timeoutSeconds: 5
startup:
enabled: false
failureThreshold: 30
initialDelaySeconds: 60
periodSeconds: 30
timeoutSeconds: 5
affinity:
anti_affinity: true
anti_affinity_topology_key: kubernetes.io/hostname
# Set the anti affinity type. Valid values:
# requiredDuringSchedulingIgnoredDuringExecution - rules must be met for pod to be scheduled (hard) requires at least one node per replica
# preferredDuringSchedulingIgnoredDuringExecution - scheduler will try to enforce but not guranentee
type: requiredDuringSchedulingIgnoredDuringExecution
# set topologySpreadConstraint to deploy pods across different zones
topologySpreadConstraints: []
# annotations for the app (statefulset/deployment)
appAnnotations: {}
annotations: {}
tolerations: []
gracePeriod: 30
## Timeout for waiting for bookkeeper cluster metadata to be initialized before starting a bookie
waitMetadataTimeout: 600
resources:
requests:
memory: 512Mi
cpu: 0.2
# extraVolumes and extraVolumeMounts allows you to mount other volumes
# Example Use Case: mount ssl certificates
# extraVolumes:
# - name: ca-certs
# secret:
# defaultMode: 420
# secretName: ca-certs
# extraVolumeMounts:
# - name: ca-certs
# mountPath: /certs
# readOnly: true
extraVolumes: []
extraVolumeMounts: []
# Ensures 2.10.0 non-root docker image works correctly.
securityContext:
fsGroup: 0
fsGroupChangePolicy: "OnRootMismatch"
volumes:
# use a persistent volume or emptyDir
persistence: true
journal:
name: journal
size: 10Gi
local_storage: true
## If you already have an existent storage class and want to reuse it, you can specify its name with the option below
##
# storageClassName: existent-storage-class
#
## Instead if you want to create a new storage class define it below
## If left undefined no storage class will be defined along with PVC
##
# storageClass:
# type: pd-ssd
# fsType: xfs
# provisioner: kubernetes.io/gce-pd
## If you want to bind static persistent volumes via selectors, e.g.:
# selector:
# matchLabels:
# app: pulsar-bookkeeper-journal
selector: {}
useMultiVolumes: false
multiVolumes:
- name: journal0
size: 10Gi
# storageClassName: existent-storage-class
mountPath: /pulsar/data/bookkeeper/journal0
- name: journal1
size: 10Gi
# storageClassName: existent-storage-class
mountPath: /pulsar/data/bookkeeper/journal1
ledgers:
name: ledgers
size: 50Gi
local_storage: true
# storageClassName:
# storageClass:
# ...
# selector:
# ...
useMultiVolumes: false
multiVolumes:
- name: ledgers0
size: 10Gi
# storageClassName: existent-storage-class
mountPath: /pulsar/data/bookkeeper/ledgers0
- name: ledgers1
size: 10Gi
# storageClassName: existent-storage-class
mountPath: /pulsar/data/bookkeeper/ledgers1
## use a single common volume for both journal and ledgers
useSingleCommonVolume: false
common:
name: common
size: 60Gi
local_storage: true
# storageClassName:
# storageClass: ## this is common too
# ...
# selector:
# ...
## Bookkeeper service account
## templates/bookkeeper-service-account.yaml
service_account:
annotations: {}
## Bookkeeper configmap
## templates/bookkeeper-configmap.yaml
##
configData:
# we use `bin/pulsar` for starting bookie daemons
PULSAR_MEM: >
-Xms128m
-Xmx256m
-XX:MaxDirectMemorySize=256m
PULSAR_GC: >
-XX:+UseG1GC
-XX:MaxGCPauseMillis=10
-XX:+ParallelRefProcEnabled
-XX:+UnlockExperimentalVMOptions
-XX:+DoEscapeAnalysis
-XX:ParallelGCThreads=4
-XX:ConcGCThreads=4
-XX:G1NewSizePercent=50
-XX:+DisableExplicitGC
-XX:-ResizePLAB
-XX:+ExitOnOutOfMemoryError
-XX:+PerfDisableSharedMem
#
# Bookkeeper configuration reference: https://bookkeeper.apache.org/docs/reference/config
#
# https://bookkeeper.apache.org/docs/reference/config#db-ledger-storage-settings
# You could use the below example settings for a minimal configuration
# dbStorage_writeCacheMaxSizeMb: "32"
# dbStorage_readAheadCacheMaxSizeMb: "32"
# dbStorage_rocksDB_writeBufferSizeMB: "8"
# dbStorage_rocksDB_blockCacheSize: "8388608"
#
# configure the data compaction (bookie entry log compaction and gc) settings
# https://bookkeeper.apache.org/docs/reference/config#garbage-collection-settings
# https://bookkeeper.apache.org/docs/reference/config#entry-log-compaction-settings
minorCompactionThreshold: "0.2" # default 0.2 (use default)
minorCompactionInterval: "360" # default 3600 seconds (6 minutes vs default 1 hour)
majorCompactionThreshold: "0.8" # default 0.5
majorCompactionInterval: "10800" # default 86400 seconds (3 hours vs default 1 day)
gcWaitTime: "300000" # default 900000 milli-seconds (5 minutes vs default 15 minutes)
isForceGCAllowWhenNoSpace: "true" # default false
# disk utilization configuration
# https://bookkeeper.apache.org/docs/reference/config#disk-utilization
# Make sure that diskUsageLwmThreshold <= diskUsageWarnThreshold <= diskUsageThreshold
diskUsageLwmThreshold: "0.85" # default 0.90
diskUsageWarnThreshold: "0.9" # default 0.95
diskUsageThreshold: "0.95" # default 0.95 (use default)
diskCheckInterval: "1800" # default 10000
## Add a custom command to the start up process of the bookie pods (e.g. update-ca-certificates, jvm commands, etc)
additionalCommand:
## Bookkeeper Service
## templates/bookkeeper-service.yaml
##
service:
spec:
publishNotReadyAddresses: true
## Bookkeeper PodDisruptionBudget
## templates/bookkeeper-pdb.yaml
##
pdb:
usePolicy: true
maxUnavailable: 1
## Pulsar: Bookkeeper AutoRecovery
## templates/autorecovery-statefulset.yaml
##
autorecovery:
# use a component name that matches your grafana configuration
# so the metrics are correctly rendered in grafana dashboard
component: recovery
replicaCount: 1
initContainers: []
# This is how Victoria Metrics or Prometheus discovers this component
podMonitor:
enabled: true
interval: 60s
scrapeTimeout: 60s
metricRelabelings:
# - action: labeldrop
# regex: cluster
# True includes annotation for statefulset that contains hash of corresponding configmap, which will cause pods to restart on configmap change
restartPodsOnConfigMapChange: false
ports:
http: 8000
# nodeSelector:
# cloud.google.com/gke-nodepool: default-pool
affinity:
anti_affinity: true
anti_affinity_topology_key: kubernetes.io/hostname
# Set the anti affinity type. Valid values:
# requiredDuringSchedulingIgnoredDuringExecution - rules must be met for pod to be scheduled (hard) requires at least one node per replica
# preferredDuringSchedulingIgnoredDuringExecution - scheduler will try to enforce but not guranentee
type: requiredDuringSchedulingIgnoredDuringExecution
# set topologySpreadConstraint to deploy pods across different zones
topologySpreadConstraints: []
# annotations for the app (statefulset/deployment)
appAnnotations: {}
annotations: {}
# tolerations: []
gracePeriod: 30
## Timeout for waiting for bookkeeper to become available before starting a broker
waitBookkeeperTimeout: 120
resources:
requests:
memory: 64Mi
cpu: 0.05
## Bookkeeper auto-recovery service
## templates/autorecovery-service.yaml
service:
annotations: {}
## Bookkeeper auto-recovery service account
## templates/autorecovery-service-account.yaml
service_account:
annotations: {}
## Bookkeeper auto-recovery configmap
## templates/autorecovery-configmap.yaml
##
configData:
BOOKIE_MEM: >
-Xms64m -Xmx64m
PULSAR_PREFIX_useV2WireProtocol: "true"
extraVolumes: []
extraVolumeMounts: []
## Pulsar Zookeeper metadata. The metadata will be deployed as
## soon as the last zookeeper node is reachable. The deployment
## of other components that depends on zookeeper, such as the
## bookkeeper nodes, broker nodes, etc will only start to be
## deployed when the zookeeper cluster is ready and with the
## metadata deployed
pulsar_metadata:
component: pulsar-init
image:
# the image used for running `pulsar-cluster-initialize` job
# uses defaultPulsarImageRepository when unspecified
repository:
# uses defaultPulsarImageTag when unspecified
tag:
# uses defaultPullPolicy when unspecified
pullPolicy:
## set an existing configuration store. This setting applies only when zookeeper is enabled.
# configurationStore:
# the prefix for the configuration store metadata. This setting applies only when zookeeper is enabled.
configurationStoreMetadataPrefix: ""
# the configuration store port. This setting applies only when zookeeper is enabled.
configurationStorePort: 2181
# the zookeeper timeout. This setting applies only when zookeeper is enabled.
waitZookeeperTimeout: 600
## Timeout for waiting for oxia to be available before running metadata initialization. This setting applies only when oxia is enabled.
waitOxiaTimeout: 600
## Timeout for waiting for bookkeeper to be initialized before running metadata initialization
waitBookkeeperTimeout: 120
## Timeout for running metadata initialization
initTimeout: 60
## Allow read-only operations on the metadata store when the metadata store is not available.
## This is useful when you want to continue serving requests even if the metadata store is not fully available with quorum.
metadataStoreAllowReadOnlyOperations: false
## The session timeout for the metadata store in milliseconds.
metadataStoreSessionTimeoutMillis: 30000
## Metadata store operation timeout in seconds.
metadataStoreOperationTimeoutSeconds: 30
## The expiry time for the metadata store cache in seconds.
metadataStoreCacheExpirySeconds: 300
## Whether we should enable metadata operations batching
metadataStoreBatchingEnabled: true
## Maximum delay to impose on batching grouping (in milliseconds)
metadataStoreBatchingMaxDelayMillis: 5
## Maximum number of operations to include in a singular batch
metadataStoreBatchingMaxOperations: 1000
## Maximum size of a batch (in KB)
metadataStoreBatchingMaxSizeKb: 128
## BookKeeper client and BookKeeper metadata configuration settings with Pulsar Helm Chart deployments
bookkeeper:
## Controls whether to use the PIP-45 metadata driver (PulsarMetadataClientDriver) for BookKeeper client
## in the Pulsar Broker when using ZooKeeper as a metadata store.
## This is setting applies to Pulsar Broker's BookKeeper client.
## When set to true, Pulsar Broker's BookKeeper client will use the PIP-45 metadata driver (PulsarMetadataBookieDriver).
## When set to false, Pulsar Broker's BookKeeper client will use BookKeeper's default ZooKeeper connection implementation.
usePulsarMetadataClientDriver: false
## Controls whether to use the PIP-45 metadata driver (PulsarMetadataBookieDriver) for BookKeeper components
## when using ZooKeeper as a metadata store.
## This is a global setting that applies to all BookKeeper components.
## When set to true, BookKeeper components will use the PIP-45 metadata driver (PulsarMetadataBookieDriver).
## When set to false, BookKeeper components will use BookKeeper's default ZooKeeper connection implementation.
## Warning: Do not enable this feature unless you are aware of the risks and have tested it in non-production environments.
usePulsarMetadataBookieDriver: false
## The session timeout for the metadata store in milliseconds. This setting is mapped to `zkTimeout` in `bookkeeper.conf`.
## due to implementation details in the PulsarMetadataBookieDriver, it also applies when Oxia metadata store is enabled.
metadataStoreSessionTimeoutMillis: 30000
# resources for bin/pulsar initialize-cluster-metadata
resources:
# requests:
# memory: 512Mi
# cpu: 1
## optional you can specify tolerations and nodeSelectors for all init jobs (pulsar-init & bookkeeper-init)
# tolerations: []
# - key: "someKey"
# operator: "Equal"
# value: "someValue"
# effect: "NoSchedule"
# nodeSelector: {}
# cloud.google.com/gke-nodepool: default-pool
## optional, you can provide your own zookeeper metadata store for other components
# to use this, you should explicit set components.zookeeper to false
#
# userProvidedZookeepers: "zk01.example.com:2181,zk02.example.com:2181"
# Can be used to run extra commands in the initialization jobs e.g. to quit istio sidecars etc.
extraInitCommand: ""
## Pulsar: Broker cluster
## templates/broker-statefulset.yaml
##
broker:
# use a component name that matches your grafana configuration
# so the metrics are correctly rendered in grafana dashboard
component: broker
replicaCount: 3
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 3
metrics: ~
behavior: ~
# The podManagementPolicy cannot be modified for an existing deployment. If you need to change this value, you will need to manually delete the existing broker StatefulSet and then redeploy the chart.
podManagementPolicy:
initContainers: []
# This is how Victoria Metrics or Prometheus discovers this component
podMonitor:
enabled: true
interval: 60s
scrapeTimeout: 60s
# Removes metrics that end with _created suffix
# These metrics are automatically generated by the Prometheus client library to comply with OpenMetrics format
# and aren't currently used. Disable this if you need to use these metrics or add an exclusion pattern when
# a specific metric is needed.
dropUnderscoreCreatedMetrics:
enabled: true
# Optional regex pattern to exclude specific metrics from being dropped
# excludePatterns:
# - pulsar_topic_load_times_created
# Custom metric relabelings to apply to all metrics
metricRelabelings:
# - action: labeldrop
# regex: cluster
# True includes annotation for statefulset that contains hash of corresponding configmap, which will cause pods to restart on configmap change
restartPodsOnConfigMapChange: false
ports:
http: 8080
https: 8443
pulsar: 6650
pulsarssl: 6651
# nodeSelector:
# cloud.google.com/gke-nodepool: default-pool
probe:
liveness:
enabled: true
failureThreshold: 10
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
readiness:
enabled: true
failureThreshold: 10
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
startup:
enabled: false
failureThreshold: 30
initialDelaySeconds: 60
periodSeconds: 10
timeoutSeconds: 5
affinity:
anti_affinity: true
anti_affinity_topology_key: kubernetes.io/hostname
# Set the anti affinity type. Valid values:
# requiredDuringSchedulingIgnoredDuringExecution - rules must be met for pod to be scheduled (hard) requires at least one node per replica
# preferredDuringSchedulingIgnoredDuringExecution - scheduler will try to enforce but not guranentee
type: preferredDuringSchedulingIgnoredDuringExecution
# set topologySpreadConstraint to deploy pods across different zones
topologySpreadConstraints: []
# annotations for the app (statefulset/deployment)
appAnnotations: {}
annotations: {}
tolerations: []
gracePeriod: 30
## Timeout for waiting for zookeeper to become available before starting a broker
waitZookeeperTimeout: 600
## Timeout for waiting for oxia to be available before starting a broker. This setting applies only when oxia is enabled.
waitOxiaTimeout: 600
## Timeout for waiting for bookkeeper to become available before starting a broker
waitBookkeeperTimeout: 120
resources:
requests:
memory: 512Mi
cpu: 0.2
# extraVolumes and extraVolumeMounts allows you to mount other volumes
# Example Use Case: mount ssl certificates
# extraVolumes:
# - name: ca-certs
# secret:
# defaultMode: 420
# secretName: ca-certs
# extraVolumeMounts:
# - name: ca-certs
# mountPath: /certs
# readOnly: true
extraVolumes: []
extraVolumeMounts: []
extraEnvs: []
# - name: POD_NAME
# valueFrom:
# fieldRef:
# apiVersion: v1
# fieldPath: metadata.name
## Broker configmap
## templates/broker-configmap.yaml
## Keys in broker.conf can be overridden here. Use PULSAR_PREFIX_ to add keys to broker.conf.
## In addition, keys in function_worker.yml can be overridden using the PF_ prefix, with _ serving as the key path separator.
##
configData:
PULSAR_MEM: >
-Xms128m -Xmx256m -XX:MaxDirectMemorySize=256m
PULSAR_GC: >
-XX:+UseG1GC
-XX:MaxGCPauseMillis=10
-Dio.netty.leakDetectionLevel=disabled
-Dio.netty.recycler.linkCapacity=1024
-XX:+ParallelRefProcEnabled
-XX:+UnlockExperimentalVMOptions
-XX:+DoEscapeAnalysis
-XX:ParallelGCThreads=4
-XX:ConcGCThreads=4
-XX:G1NewSizePercent=50
-XX:+DisableExplicitGC
-XX:-ResizePLAB
-XX:+ExitOnOutOfMemoryError
-XX:+PerfDisableSharedMem
managedLedgerDefaultEnsembleSize: "2"
managedLedgerDefaultWriteQuorum: "2"
managedLedgerDefaultAckQuorum: "2"
## Add a custom command to the start up process of the broker pods (e.g. update-ca-certificates, jvm commands, etc)
additionalCommand:
## Broker service
## templates/broker-service.yaml
##
service:
# clusterIP can be one of the three, which determines the type of k8s service deployed for broker
# 1. a valid IPv4 address -> non-headless service, let you select the IPv4 address
# 2. '' -> non-headless service, k8s picks an IPv4 address
# 3. 'None' -> headless
# Ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-clusterip
clusterIP: "None"
annotations: {}
## Broker PodDisruptionBudget
## templates/broker-pdb.yaml
##
pdb:
usePolicy: true
maxUnavailable: 1
### Broker service account
## templates/broker-service-account.yaml
service_account:
annotations: {}
## You may use the following annotation in order to use EKS IAM Roles for Service Accounts (IRSA)
# eks.amazonaws.com/role-arn: arn:aws:iam::66666:role/my-iam-role-with-s3-access
## Tiered Storage
##
storageOffload: {}
## General
## =======
# maxBlockSizeInBytes: "64000000"
# readBufferSizeInBytes: "1000000"
## The following are default values for the cluster. They can be changed
## on each namespace.
# managedLedgerOffloadDeletionLagMs: "14400000"
# managedLedgerOffloadAutoTriggerSizeThresholdBytes: "-1" # disabled
## For AWS S3
## ======
## Either you must create an IAM account with access to the bucket and
## generate keys for that account, or use IAM Roles for Service Accounts (IRSA)
## (example on `.Value.broker.service_account.annotations` section above)
##
# driver: aws-s3
# bucket: <bucket>
# region: <region>
## Secret that stores AWS credentials, using the following command:
## ```
## kubectl -n pulsar create secret generic \
## --from-literal=AWS_ACCESS_KEY_ID=<AWS ACCESS KEY> \
## --from-literal=AWS_SECRET_ACCESS_KEY=<AWS SECRET KEY> \
## <secret name>
## ```
# secret: <secret name> # [k8s secret name that stores AWS credentials]
## For S3 Compatible
## =================
## Need to create access and secret key for S3 compatible service
#
# driver: aws-s3
# bucket: <bucket>
# region: <region>
# serviceEndpoint: host:port
## Secret that stores AWS credentials, using the following command:
## ```
## kubectl -n pulsar create secret generic \
## --from-literal=AWS_ACCESS_KEY_ID=<AWS ACCESS KEY> \
## --from-literal=AWS_SECRET_ACCESS_KEY=<AWS SECRET KEY> \
## <aws secret name>
## ```
# secret: <aws secret name> # [k8s secret name that stores AWS credentials]
## For Azure Blob
## =================
## Need to create an Azure storage account and a blob containter (bucket)
## To retrieve key, see https://docs.microsoft.com/en-us/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#code-try-1
#
# driver: azureblob
# bucket: <bucket>
# region: <region>
## Secret that stores AZURE credentials, using the following command:
## ```
## kubectl -n pulsar create secret generic \
## --from-literal=AZURE_STORAGE_ACCOUNT=<AZURE STORAGE ACCOUNT> \
## --from-literal=AZURE_STORAGE_ACCESS_KEY=<AZURE STORAGE ACCESS KEY> \
## <azure secret name>
## ```
# secret: <azure secret name> # [k8s secret name that stores AZURE credentials]
## For Google Cloud Storage
## ====================
## You must create a service account that has access to the objects in GCP buckets
## and upload its key as a JSON file to a secret.
##
## 1. Go to https://console.cloud.google.com/iam-admin/serviceaccounts
## 2. Select your project.
## 3. Create a new service account.
## 4. Give the service account permission to access the bucket. For example,
## the "Storage Object Admin" role.
## 5. Create a key for the service account and save it as a JSON file.
## 6. Save the JSON file in a secret:
## kubectl create secret generic pulsar-gcp-sa-secret \
## --from-file=google-service-account-key.json \
## --namespace pulsar
##
# driver: google-cloud-storage
# bucket: <bucket>
# region: <region>
# gcsServiceAccountSecret: pulsar-gcp-sa-secret # pragma: allowlist secret
# gcsServiceAccountJsonFile: google-service-account-key.json
## Pulsar: Functions Worker
## The Function Worker component runs embedded with the broker
## Configuration for the function worker is set in the broker configmap with keys prefixed by `PF_`.
functions:
component: functions-worker
useBookieAsStateStore: false
## Pulsar: Functions Worker ClusterRole or Role
## templates/broker-rbac.yaml
# Default is false which deploys functions with ClusterRole and ClusterRoleBinding at the cluster level
# Set to true to deploy functions with Role and RoleBinding inside the specified namespace
rbac:
limit_to_namespace: true
### Functions Worker service account
## templates/broker-service-account.yaml
service_account:
annotations: {}
## Pulsar: Proxy Cluster
## templates/proxy-statefulset.yaml
##
proxy:
# use a component name that matches your grafana configuration
# so the metrics are correctly rendered in grafana dashboard
component: proxy
replicaCount: 3
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 3
metrics: ~
behavior: ~
initContainers: []
# This is how Victoria Metrics or Prometheus discovers this component
podMonitor:
enabled: true
interval: 60s
scrapeTimeout: 60s
# Removes metrics that end with _created suffix
# These metrics are automatically generated by the Prometheus client library to comply with OpenMetrics format
# and aren't currently used. Disable this if you need to use these metrics or add an exclusion pattern when
# a specific metric is needed.
dropUnderscoreCreatedMetrics:
enabled: true
# Optional regex pattern to exclude specific metrics from being dropped
# excludePatterns:
# - pulsar_proxy_new_connections_created
# Custom metric relabelings to apply to all metrics
metricRelabelings:
# - action: labeldrop
# regex: cluster
# True includes annotation for statefulset that contains hash of corresponding configmap, which will cause pods to restart on configmap change
restartPodsOnConfigMapChange: false
# nodeSelector:
# cloud.google.com/gke-nodepool: default-pool
probe:
liveness:
enabled: true
failureThreshold: 10
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
readiness:
enabled: true
failureThreshold: 10
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
startup:
enabled: false
failureThreshold: 30
initialDelaySeconds: 60
periodSeconds: 10
timeoutSeconds: 5
affinity:
anti_affinity: true
anti_affinity_topology_key: kubernetes.io/hostname
# Set the anti affinity type. Valid values:
# requiredDuringSchedulingIgnoredDuringExecution - rules must be met for pod to be scheduled (hard) requires at least one node per replica
# preferredDuringSchedulingIgnoredDuringExecution - scheduler will try to enforce but not guranentee
type: requiredDuringSchedulingIgnoredDuringExecution
# set topologySpreadConstraint to deploy pods across different zones
topologySpreadConstraints: []
# annotations for the app (statefulset/deployment)
appAnnotations: {}
annotations: {}
tolerations: []
gracePeriod: 30
## Timeout for waiting for zookeeper to become available before starting a proxy
waitZookeeperTimeout: 600
## Timeout for waiting for oxia to be available before starting a proxy. This setting applies only when oxia is enabled.
waitOxiaTimeout: 600
## Timeout for waiting for brokers to become available before starting a proxy
waitBrokerTimeout: 120
resources:
requests:
memory: 128Mi
cpu: 0.2
# extraVolumes and extraVolumeMounts allows you to mount other volumes
# Example Use Case: mount ssl certificates
# extraVolumes:
# - name: ca-certs
# secret:
# defaultMode: 420
# secretName: ca-certs
# extraVolumeMounts:
# - name: ca-certs
# mountPath: /certs
# readOnly: true
extraVolumes: []
extraVolumeMounts: []
extraEnvs: []
# - name: POD_IP
# valueFrom:
# fieldRef:
# apiVersion: v1
# fieldPath: status.podIP
## Proxy service account
## templates/proxy-service-account.yaml
service_account:
annotations: {}
## Proxy configmap
## templates/proxy-configmap.yaml
##
configData:
PULSAR_MEM: >
-Xms64m -Xmx64m -XX:MaxDirectMemorySize=64m
PULSAR_GC: >
-XX:+UseG1GC
-XX:MaxGCPauseMillis=10
-Dio.netty.leakDetectionLevel=disabled
-Dio.netty.recycler.linkCapacity=1024
-XX:+ParallelRefProcEnabled
-XX:+UnlockExperimentalVMOptions
-XX:+DoEscapeAnalysis
-XX:ParallelGCThreads=4
-XX:ConcGCThreads=4
-XX:G1NewSizePercent=50
-XX:+DisableExplicitGC
-XX:-ResizePLAB
-XX:+ExitOnOutOfMemoryError
-XX:+PerfDisableSharedMem
httpNumThreads: "8"
## Add a custom command to the start up process of the proxy pods (e.g. update-ca-certificates, jvm commands, etc)
additionalCommand:
## Proxy service
## templates/proxy-service.yaml
##
ports:
http: 80
https: 443
pulsar: 6650
pulsarssl: 6651
containerPorts:
http: 8080
https: 8443
service:
# Service type defaults to ClusterIP for security reasons.
#
# SECURITY NOTICE: The Pulsar proxy is not designed for direct public internet exposure
# (see https://pulsar.apache.org/docs/4.0.x/administration-proxy/).
#
# If you need to expose the proxy outside of the cluster using a LoadBalancer service type:
# 1. Set type to LoadBalancer only in secured environments with proper network controls.
# In cloud managed Kubernetes clusters, make sure to add annotations to the service to create an
# internal load balancer so that the load balancer is not exposed to the public internet.
# You must also ensure that the configuration is correct so that the load balancer is not exposed to the public internet.
# 2. Configure authentication and authorization
# 3. Use TLS for all connections
# 4. If you are exposing to unsecure networks, implement additional security measures like
# IP restrictions (loadBalancerSourceRanges)
#
# Please notice that the the Apache Pulsar project takes no responsibility for any security issues
# for your deployment. Exposing the cluster using Pulsar Proxy to unsecure networks is not supported.
#
# Previous chart versions defaulted to LoadBalancer which could create security risks.
type: ClusterIP
# When using a LoadBalancer service type, add internal load balancer annotations to the service to create an internal load balancer.
annotations: {
## Set internal load balancer annotations when using a LoadBalancer service type because of security reasons.
## You must also ensure that the configuration is correct so that the load balancer is not exposed to the public internet.
## This information below is for reference only and may not be applicable to your cloud provider.
## Please refer to the cloud provider's documentation for the correct annotations.
## Kubernetes documentation about internal load balancers
## https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer
## AWS / EKS
## Ensure that you have recent AWS Load Balancer Controller installed.
## Docs: https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/service/annotations/
# service.beta.kubernetes.io/aws-load-balancer-scheme: "internal"
## Azure / AKS
## Docs: https://learn.microsoft.com/en-us/azure/aks/internal-lb
# service.beta.kubernetes.io/azure-load-balancer-internal: "true"
## GCP / GKE
## Docs: https://cloud.google.com/kubernetes-engine/docs/concepts/service-load-balancer-parameters
# networking.gke.io/load-balancer-type: "Internal"
## Allow global access to the internal load balancer when needed.
# networking.gke.io/internal-load-balancer-allow-global-access: "true"
}
## Optional. Leave it blank to get next available random IP.
loadBalancerIP: ""
## Set external traffic policy to: "Local" to preserve source IP on providers supporting it.
## Ref: https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typeloadbalancer
# externalTrafficPolicy: Local
## Restrict traffic through the load balancer to specified IPs on providers supporting it.
# loadBalancerSourceRanges:
# - 10.0.0.0/8
# Set a loadBalancerClass for loadbalancer service. (example: loadBalancerClass is needed by metallb)
# loadBalancerClass: ""
# Optional. When setting proxy.service.type is set to NodePort, nodePorts allows to choose the port that will be open on each node to proxy requests to each destination proxy service.
# Ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
nodePorts:
http: ""
https: ""
pulsar: ""
pulsarssl: ""
## Proxy ingress
## templates/proxy-ingress.yaml
##
ingress:
enabled: false
annotations: {}
ingressClassName: ""
tls:
enabled: false
## Optional. Leave it blank if your Ingress Controller can provide a default certificate.
secretName: ""
hostname: ""
path: "/"
pathType: ImplementationSpecific
## Proxy PodDisruptionBudget
## templates/proxy-pdb.yaml
##
pdb:
usePolicy: true
maxUnavailable: 1
## Pulsar ToolSet
## templates/toolset-statefulset.yaml
##
toolset:
component: toolset
useProxy: true
replicaCount: 1
initContainers: []
# True includes annotation for statefulset that contains hash of corresponding configmap, which will cause pods to restart on configmap change
restartPodsOnConfigMapChange: false
# nodeSelector:
# cloud.google.com/gke-nodepool: default-pool
# set topologySpreadConstraint to deploy pods across different zones
topologySpreadConstraints: []
# annotations for the app (statefulset/deployment)
appAnnotations: {}
annotations: {}
tolerations: []
gracePeriod: 30
resources:
requests:
memory: 256Mi
cpu: 0.1
# extraVolumes and extraVolumeMounts allows you to mount other volumes
# Example Use Case: mount ssl certificates
# extraVolumes:
# - name: ca-certs
# secret:
# defaultMode: 420
# secretName: ca-certs
# extraVolumeMounts:
# - name: ca-certs
# mountPath: /certs
# readOnly: true
extraVolumes: []
extraVolumeMounts: []
## Toolset service account
## templates/toolset-service-account.yaml
service_account:
annotations: {}
## Toolset configmap
## templates/toolset-configmap.yaml
##
configData:
PULSAR_MEM: >
-Xms64M
-Xmx128M
-XX:MaxDirectMemorySize=128M
## Add a custom command to the start up process of the toolset pods (e.g. update-ca-certificates, jvm commands, etc)
additionalCommand:
#############################################################
### Monitoring Stack : victoria-metrics-k8s-stack chart
#############################################################
## Victoria Metrics, Grafana, and the rest of the monitoring stack are managed by the dependent chart here:
## https://github.com/VictoriaMetrics/helm-charts/blob/master/charts/victoria-metrics-k8s-stack
## For sample values, please see: https://github.com/VictoriaMetrics/helm-charts/blob/master/charts/victoria-metrics-k8s-stack/values.yaml
victoria-metrics-k8s-stack:
## Enable the victoria-metrics-k8s-stack chart
enabled: true
## VictoriaMetrics Operator dependency chart configuration
victoria-metrics-operator:
enabled: true
# Install CRDs for VictoriaMetrics Operator
crds:
plain: true
operator:
## By default, operator is configured to not convert Prometheus Operator monitoring.coreos.com/v1 objects
## to Victoria Metrics operator operator.victoriametrics.com/v1beta1 objects.
# Enable this if you want to use Prometheus Operator objects for other purposes.
disable_prometheus_converter: true
## Single-node VM instance
vmsingle:
enabled: true
## -- Full spec for VMSingle CRD. Allowed values describe [here](https://docs.victoriametrics.com/operator/api#vmsinglespec)
spec:
retentionPeriod: "10d"
storage:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
## VM Agent for scraping metrics
vmagent:
enabled: true
## Minikube specific settings - uncomment when using minikube
# spec:
# volumes:
# - hostPath:
# path: /var/lib/minikube/certs/etcd
# type: DirectoryOrCreate
# name: etcd-certs
# volumeMounts:
# - mountPath: /var/lib/minikube/certs/etcd
# name: etcd-certs
## VM Alert for alerting rules - disabled by default
vmalert:
enabled: false
## Alertmanager component - disabled by default
alertmanager:
enabled: false
## Grafana component
## Refer to https://github.com/grafana/helm-charts/blob/main/charts/grafana/values.yaml
grafana:
enabled: true
# Use random password at installation time for Grafana by default by setting empty value to `adminPassword`.
# You can find out the actual password by running the following command:
# kubectl get secret -l app.kubernetes.io/name=grafana -o=jsonpath="{.items[0].data.admin-password}" | base64 --decode
adminPassword:
persistence:
enabled: true
size: 5Gi
## Disable Grafana sidecar dashboards
## since this cannot be enabled in the same time as dashboards are enabled
sidecar:
dashboards:
enabled: false
# grafana.ini settings
grafana.ini:
analytics:
check_for_updates: false
dashboards:
default_home_dashboard_path: /var/lib/grafana/dashboards/pulsar/overview.json
## Configure Pulsar dashboards for Grafana
dashboardProviders:
dashboardproviders.yaml:
apiVersion: 1
providers:
- name: 'default'
orgId: 1
folder: ''
type: file
disableDeletion: true
editable: true
allowUiUpdates: true
options:
path: /var/lib/grafana/dashboards/default
- name: oxia
orgId: 1
folder: Oxia
type: file
disableDeletion: true
editable: true
allowUiUpdates: true
options:
path: /var/lib/grafana/dashboards/oxia
- name: pulsar
orgId: 1
folder: Pulsar
type: file
disableDeletion: true
editable: true
allowUiUpdates: true
options:
path: /var/lib/grafana/dashboards/pulsar
dashboards:
default:
victoriametrics:
gnetId: 10229
revision: 38
datasource: VictoriaMetrics
kubernetes:
gnetId: 14205
datasource: VictoriaMetrics
oxia:
oxia-containers:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/oxia/oxia-containers.json
oxia-coordinator:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/oxia/oxia-coordinator.json
oxia-golang:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/oxia/oxia-golang.json
oxia-grpc:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/oxia/oxia-grpc.json
oxia-nodes:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/oxia/oxia-nodes.json
oxia-overview:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/oxia/oxia-overview.json
oxia-shards:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/oxia/oxia-shards.json
pulsar:
bookkeeper-compaction:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/bookkeeper-compaction.json
bookkeeper:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/bookkeeper.json
broker-cache-by-broker:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/broker-cache-by-broker.json
broker-cache:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/broker-cache.json
connector-sink:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/connector-sink.json
connector-source:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/connector-source.json
functions:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/functions.json
jvm:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/jvm.json
load-balancing:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/load-balancing.json
messaging:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/messaging.json
namespace:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/namespace.json
node:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/node.json
offloader:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/offloader.json
overview-by-broker:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/overview-by-broker.json
overview:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/overview.json
proxy:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/proxy.json
sockets:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/sockets.json
topic:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/topic.json
zookeeper:
url: https://raw.githubusercontent.com/lhotari/pulsar-grafana-dashboards/master/pulsar/zookeeper.json
## Node exporter component
prometheus-node-exporter:
enabled: true
hostRootFsMount:
enabled: false
## Kube state metrics component
kube-state-metrics:
enabled: true
## Components scraping Kubernetes services
kubelet:
enabled: true
kubeApiServer:
enabled: true
kubeControllerManager:
enabled: true
## Additional settings for minikube environments
vmScrape:
spec:
endpoints:
- bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
port: http-metrics
scheme: https
tlsConfig:
caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecureSkipVerify: true # For development environments like minikube
coreDns:
enabled: true
kubeEtcd:
enabled: true
## Minikube specific settings - uncomment or adjust when using minikube
# service:
# port: 2381
# targetPort: 2381
# vmScrape:
# spec:
# endpoints:
# - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
# port: http-metrics
# scheme: http # Minikube often uses http instead of https for etcd
kubeScheduler:
enabled: true
## Additional settings for minikube environments
vmScrape:
spec:
endpoints:
- bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
port: http-metrics
scheme: https
tlsConfig:
caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecureSkipVerify: true # For development environments like minikube
## Components Stack: pulsar_manager
## templates/pulsar-manager.yaml
##
pulsar_manager:
component: pulsar-manager
replicaCount: 1
initContainers: []
# True includes annotation for statefulset that contains hash of corresponding configmap, which will cause pods to restart on configmap change
restartPodsOnConfigMapChange: false
# nodeSelector:
# cloud.google.com/gke-nodepool: default-pool
# set topologySpreadConstraint to deploy pods across different zones
topologySpreadConstraints: []
# annotations for the app (statefulset/deployment)
appAnnotations: {}
annotations: {}
tolerations: []
extraVolumes: []
extraVolumeMounts: []
gracePeriod: 30
resources:
requests:
memory: 250Mi
cpu: 0.1
configData:
REDIRECT_HOST: "http://127.0.0.1"
REDIRECT_PORT: "9527"
LOG_LEVEL: "INFO"
# DB
URL: "jdbc:postgresql://127.0.0.1:5432/pulsar_manager"
DRIVER_CLASS_NAME: "org.postgresql.Driver"
# enables the "message peeking" feature
PULSAR_PEEK_MESSAGE: "true"
volumes:
# use a persistent volume or emptyDir
persistence: true
data:
name: data
size: 128Mi
local_storage: true
## If you already have an existent storage class and want to reuse it, you can specify its name with the option below
##
# storageClassName: existent-storage-class,
## If you want to bind static persistent volumes via selectors, e.g.:
# selector:
# matchLabels:
# app: pulsar-bookkeeper-journal
selector: {}
## Pulsar manager service
## templates/pulsar-manager-service.yaml
##
service:
type: ClusterIP
port: 9527
targetPort: 9527
annotations: {}
## Set external traffic policy to: "Local" to preserve source IP on providers supporting it.
## Ref: https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typeloadbalancer
# externalTrafficPolicy: Local
## Restrict traffic through the load balancer to specified IPs on providers supporting it.
# loadBalancerSourceRanges:
# - 10.0.0.0/8
# Set a loadBalancerClass for loadbalancer service. (example: loadBalancerClass is needed by metallb)
# loadBalancerClass: ""
adminService:
type: ClusterIP
port: 7750
targetPort: 7750
annotations: {}
## Pulsar manager ingress
## templates/pulsar-manager-ingress.yaml
##
ingress:
enabled: false
annotations: {}
ingressClassName: ""
tls:
enabled: false
## Optional. Leave it blank if your Ingress Controller can provide a default certificate.
secretName: ""
hostname: ""
path: "/"
pathType: ImplementationSpecific
## On first install, the helm chart tries to reuse an existing secret with matching name by default
## if this should fail it uses the given username and password to create a new secret
## if either are missing the default value of "pulsar" is used for the username or a random password is generated
## And decode any key by using:
## kubectl get secret -l component=pulsar-manager -o=jsonpath="{.items[0].data.UI_PASSWORD}" | base64 --decode
admin:
## Setting a value at existingSecret disables automatic creation of the secret for pulsar_manager admin credentials and instead uses an existing secret to initialize pulsar-manager
## The existing secret should have the following keys:
## DB_PASSWORD: <database password>
## DB_USERNAME: <database username>
## UI_PASSWORD: <UI password>
## UI_USERNAME: <UI username>
existingSecret: ""
ui_username: "pulsar"
ui_password: "" # leave empty for random password
db_username: "pulsar"
db_password: "" # leave empty for random password
# These are jobs where job ttl configuration is used
# pulsar-helm-chart/charts/pulsar/templates/pulsar-cluster-initialize.yaml
# pulsar-helm-chart/charts/pulsar/templates/bookkeeper-cluster-initialize.yaml
# pulsar-helm-chart/charts/pulsar/templates/pulsar-manager-cluster-initialize.yaml
job:
ttl:
enabled: false
secondsAfterFinished: 3600
# This section is intended for cluster providers where all containers, including init containers,
# need to provide the number of resources they are going to use.
initContainer:
resources:
requests:
memory: 256Mi
cpu: 0.1