rancher kafka helm 安装
Kafka是用于构建实时数据管道和流应用程序的分布式流平台。它具有水平可伸缩性,容错性,快速快速性,可在数千家公司中投入生产。
TL; DR;
$ helm install <helm-repo>/kafka
介绍
该图表使用Helm软件包管理器在Kubernetes集群上引导了Kafka部署。
Bitnami图表可与Kubeapps一起用于在群集中部署和管理Helm Charts。该Helm图表已在Bitnami Kubernetes生产运行时(BKPR)之上进行了测试。部署BKPR以获取自动化TLS证书,对应用程序进行日志记录和监视。
先决条件
- 总督1.12+
- Helm 2.11+或Helm 3.0-beta3 +
- 基础架构中的PV供应商支持
安装图表
要使用发布名称安装图表my-release
:
$ helm install --name my-release <helm-repo>/kafka
这些命令以默认配置在Kubernetes集群上部署Kafka。“参数”部分列出了可以在安装过程中配置的参数。
提示:列出所有使用的版本
helm list
卸载图表
要卸载/删除my-release
部署:
$ helm delete my-release
该命令将删除与图表关联的所有Kubernetes组件并删除发行版。
参量
下表列出了Kafka图表的可配置参数及其默认值。
参数 | 描述 | 默认 |
---|---|---|
global.imageRegistry | 全局Docker映像注册表 | nil |
global.imagePullSecrets | 全局Docker注册表机密名称作为数组 | [] (不向已部署的吊舱添加图像拉取秘密) |
global.storageClass | 用于动态配置的全局存储类 | nil |
image.registry | 卡夫卡图像注册表 | docker.io |
image.repository | Kafka图片名称 | bitnami/kafka |
image.tag | Kafka图片标签 | {VERSION} |
image.pullPolicy | Kafka图片拉取政策 | IfNotPresent |
image.pullSecrets | 将docker-registry秘密名称指定为数组 | [] (不向已部署的吊舱添加图像拉取秘密) |
image.debug | 指定是否应设置调试值 | false |
nameOverride | 使用字符串部分覆盖kafka.fullname模板的字符串(将附加发行版本名称) | nil |
fullnameOverride | 使用字符串完全覆盖kafka.fullname模板的字符串 | nil |
volumePermissions.enabled | 启用用于更改数据目录中的卷许可权的初始化容器(对于默认的k8runAsUser 和fsUser 值不起作用的情况) | false |
volumePermissions.image.registry | 初始化容器容量许可映像注册表 | docker.io |
volumePermissions.image.repository | 初始化容器容量许可映像名称 | bitnami/minideb |
volumePermissions.image.tag | 初始化容器体积许可图像标签 | stretch |
volumePermissions.image.pullPolicy | 初始化容器容量许可映像拉取策略 | Always |
volumePermissions.resources | 初始化容器资源请求/限制 | nil |
updateStrategy | 有状态集的更新策略 | RollingUpdate |
rollingUpdatePartition | 分区更新策略 | nil |
podDisruptionBudget.maxUnavailable | 同时下降的豆荚数量上限 | 1 |
replicaCount | Kafka节点数 | 1 |
config | Kafka的配置文件 | nil |
allowPlaintextListener | 允许使用PLAINTEXT侦听器 | true |
listeners | 套接字服务器侦听的地址。 | nil |
advertisedListeners | 代理将向生产者和消费者通告的主机名和端口。 | nil |
listenerSecurityProtocolMap | 协议->侦听器映射。 | nil |
interBrokerListenerName | 经纪人应进行通信的侦听器。 | nil |
brokerId | Kafka节点的ID | -1 |
deleteTopicEnable | 切换是否启用主题删除。 | false |
heapOpts | Kafka的Java堆大小。 | -Xmx1024m -Xms1024m |
logFlushIntervalMessages | 强制将数据刷新到磁盘之前要接受的消息数。 | 10000 |
logFlushIntervalMs | 在我们强制刷新之前,消息可以在日志中停留的最长时间。 | 1000 |
logRetentionBytes | 基于大小的日志保留策略。 | _1073741824 |
logRetentionCheckIntervalMs | 检查日志段以查看是否可以删除的时间间隔。 | 300000 |
logRetentionHours | 日志文件的最小年龄(可以根据年龄进行删除)。 | 168 |
logSegmentBytes | 日志段文件的最大大小。达到此大小后,将创建一个新的日志段。 | _1073741824 |
logMessageFormatVersion | 记录消息格式版本。 | `` |
logsDirs | 以逗号分隔的目录列表,用于存储日志文件。 | /bitnami/kafka/data |
maxMessageBytes | Kafka允许的最大记录批量。 | 1000012 |
defaultReplicationFactor | 自动创建主题的默认复制因子 | 1 |
offsetsTopicReplicationFactor | 偏移量主题的复制因子 | 1 |
transactionStateLogReplicationFactor | 交易主题的复制因子 | 1 |
transactionStateLogMinIsr | 覆盖交易主题的min.insync.replicas配置 | 1 |
numIoThreads | 执行磁盘I / O的线程数。 | 8 |
numNetworkThreads | 处理网络请求的线程数。 | 3 |
numPartitions | 每个主题的默认日志分区数。 | 1 |
numRecoveryThreadsPerDataDir | 每个数据目录在启动时用于日志恢复以及在关闭时用于刷新的线程数。 | 1 |
socketReceiveBufferBytes | 套接字服务器使用的接收缓冲区(SO_RCVBUF)。 | 102400 |
socketRequestMaxBytes | 套接字服务器将接受的请求的最大大小(防止OOM保护)。 | _104857600 |
socketSendBufferBytes | 套接字服务器使用的发送缓冲区(SO_SNDBUF)。 | 102400 |
zookeeperConnectionTimeoutMs | 连接到Zookeeper的超时时间(以毫秒为单位)。 | 6000 |
extraEnvVars | 要添加到Kafka Pod的额外环境变量 | nil |
sslEndpointIdentificationAlgorithm | 使用服务器证书验证服务器主机名的端点标识算法。 | https |
auth.enabled | 切换以启用kafka身份验证。 | false |
auth.existingSecret | 现有机密的名称,其中包含brokerUser,interBrokerUser和zookeeperUser的凭据。 | nil |
auth.certificatesSecret | 现有密钥的名称,其中包含将由Kafka使用的证书文件。 | nil |
auth.certificatesPassword | 上述证书的密码(如果受密码保护)。 | nil |
auth.brokerUser | Kafka客户端用户。 | user |
auth.brokerPassword | Kafka客户端密码。 | nil |
auth.interBrokerUser | Kafka经纪人间通讯用户 | admin |
auth.interBrokerPassword | Kafka Inter Broker通信密码。 | nil |
auth.zookeeperUser | Kafka Zookeeper用户。 | nil |
auth.zookeeperPassword | Kafka Zookeeper密码。 | nil |
securityContext.enabled | 启用安全上下文 | true |
securityContext.fsGroup | 容器的组ID | 1001 |
securityContext.runAsUser | 容器的用户标识 | 1001 |
clusterDomain | Kubernetes集群域 | cluster.local |
service.type | Kubernetes服务类型 | ClusterIP |
service.port | 卡夫卡港 | 9092 |
service.nodePort | Kubernetes服务nodePort | nil |
service.loadBalancerIP | 用于Kafka服务的loadBalancerIP | nil |
service.annotations | 服务注释 | `` |
externalAccess.enabled | 启用Kubernetes外部集群对Kafka代理的访问 | false |
externalAccess.service.type | Kubernetes Servive类型,用于外部访问。它可以是NodePort或LoadBalancer | LoadBalancer |
externalAccess.service.port | 当服务类型为LoadBalancer时,用于外部访问的Kafka端口 | 19092 |
externalAccess.service.loadBalancerIP | Kafka代理的负载均衡器IP数组。 | [] |
externalAccess.service.domain | 服务类型为NodePort时用于配置Kafka外部侦听器的域或外部ip | nil |
externalAccess.service.nodePort | 服务类型为NodePort时用于配置Kafka外部侦听器的节点端口阵列 | [] |
serviceAccount.create | 启用为kafka pod创建ServiceAccount | false |
serviceAccount.name | 创建的服务帐号名称 | 使用kafka.fullname 模板生成 |
persistence.enabled | 使用PVC启用Kafka持久性,请注意Zookeeper持久性不受影响 | true |
persistence.existingClaim | 提供一个现有的PersistentVolumeClaim ,该值作为模板进行评估。 | nil |
persistence.storageClass | 卡夫卡卷的PVC存储等级 | nil |
persistence.accessMode | 卡夫卡卷的PVC访问模式 | ReadWriteOnce |
persistence.size | 卡夫卡量的PVC储存要求 | 8Gi |
persistence.annotations | PVC的注释 | {} |
nodeSelector | 吊舱分配的节点标签 | {} |
tolerations | 吊舱分配的公差标签 | [] |
affinity | 节点/吊舱亲和度地图 | {} |
resources | CPU /内存资源请求/限制 | 内存:256Mi ,CPU:250m |
livenessProbe.enabled | 你想启用一个lifesProbed吗 | true |
livenessProbe.initialDelaySeconds | 启动活力探测之前的延迟 | 30 |
livenessProbe.periodSeconds | 多久执行一次探测 | 10 |
livenessProbe.timeoutSeconds | 探测超时时 | 5 |
livenessProbe.failureThreshold | 成功后将被视为探针的最小连续失败数。 | 6 |
livenessProbe.successThreshold | 探测失败后被认为成功的最小连续成功次数 | 1 |
readinessProbe.enabled | 您是否希望准备就绪,启用探针 | true |
readinessProbe.initialDelaySeconds | 启动活力探测之前的延迟 | 5 |
readinessProbe.periodSeconds | 多久执行一次探测 | 10 |
readinessProbe.timeoutSeconds | 探测超时时 | 5 |
readinessProbe.failureThreshold | 成功后将被视为探针的最小连续失败数。 | 6 |
readinessProbe.successThreshold | 探测失败后被认为成功的最小连续成功次数 | 1 |
metrics.kafka.enabled | 是否创建独立的Kafka导出程序以公开Kafka指标 | false |
metrics.kafka.image.registry | Kafka导出程序映像注册表 | docker.io |
metrics.kafka.image.repository | Kafka导出程序映像名称 | bitnami/kafka-exporter |
metrics.kafka.image.tag | Kafka出口商图片标签 | {TAG_NAME} |
metrics.kafka.image.pullPolicy | 卡夫卡出口商形象拉动政策 | IfNotPresent |
metrics.kafka.image.pullSecrets | 将docker-registry秘密名称指定为数组 | [] (不向已部署的吊舱添加图像拉取秘密) |
metrics.kafka.interval | 使用Prometheus Operator时Prometheus抓取Kafka指标的时间间隔 | 10s |
metrics.kafka.port | Kafka Exporter Port以Prometheus格式公开指标以供抓取 | 9308 |
metrics.kafka.resources | 允许设置kafka-exporter pod的资源限制 | {} |
metrics.kafka.service.type | Kubernetes服务类型(ClusterIP ,NodePort 或LoadBalancer 用于导出卡夫卡) | ClusterIP |
metrics.kafka.service.port | 卡夫卡出口商普罗米修斯港口 | 9308 |
metrics.kafka.service.nodePort | Kubernetes HTTP节点端口 | "" |
metrics.kafka.service.annotations | Prometheus指标服务的注释 | Check values.yaml file |
metrics.kafka.service.loadBalancerIP | 如果服务类型为loadBalancerIP LoadBalancer | nil |
metrics.kafka.service.clusterIP | 静态clusterIP或无无头服务 | nil |
metrics.jmx.enabled | 是否向Prometheus公开JMX指标 | false |
metrics.jmx.image.registry | JMX导出器映像注册表 | docker.io |
metrics.jmx.image.repository | JMX导出器映像名称 | bitnami/jmx-exporter |
metrics.jmx.image.tag | JMX导出器图像标签 | {TAG_NAME} |
metrics.jmx.image.pullPolicy | JMX导出器映像拉取策略 | IfNotPresent |
metrics.jmx.image.pullSecrets | 将docker-registry秘密名称指定为数组 | [] (不向已部署的吊舱添加图像拉取秘密) |
metrics.jmx.interval | 使用Prometheus Operator时Prometheus抓取JMX指标的时间间隔 | 10s |
metrics.jmx.exporterPort | JMX导出器端口,它以Prometheus格式公开指标以进行抓取 | 5556 |
metrics.jmx.resources | 允许设置jmx边车容器的资源限制 | {} |
metrics.jmx.service.type | Kubernetes服务类型(ClusterIP ,NodePort 或LoadBalancer 用于JMX导出) | ClusterIP |
metrics.jmx.service.port | JMX Exporter Prometheus端口 | 5556 |
metrics.jmx.service.nodePort | Kubernetes HTTP节点端口 | "" |
metrics.jmx.service.annotations | Prometheus指标服务的注释 | Check values.yaml file |
metrics.jmx.service.loadBalancerIP | 如果服务类型为loadBalancerIP LoadBalancer | nil |
metrics.jmx.service.clusterIP | 静态clusterIP或无无头服务 | nil |
metrics.jmx.configMap.enabled | 为JMX启用默认的ConfigMap | true |
metrics.jmx.configMap.overrideConfig | 允许通过将值传递给ConfigMap来生成配置文件 | {} |
metrics.jmx.configMap.overrideName | 允许设置要使用的ConfigMap的名称 | "" |
metrics.jmx.jmxPort | 公开JMX样式指标的jmx端口(请注意:这些不能被Prometheus抓取) | 5555 |
metrics.jmx.whitelistObjectNames | 允许设置要通过JMX统计信息公开给JMX Exporter的JMX对象 | (请参阅values.yaml ) |
metrics.serviceMonitor.enabled | 如果true ,则创建一个Prometheus Operator ServiceMonitor(也需要metrics.kafka.enabled 或metrics.jmx.enabled 必须是true ) | false |
metrics.serviceMonitor.namespace | Prometheus在其中运行的命名空间 | monitoring |
metrics.serviceMonitor.interval | 刮取指标的频率(默认使用,回溯至Prometheus的默认设置) | nil |
metrics.serviceMonitor.selector | 默认为kube-prometheus安装(建议使用CoreOS),但应根据Prometheus安装进行设置 | { prometheus: kube-prometheus } |
zookeeper.enabled | 切换为启用或禁用Zookeeper舵图 | true |
zookeeper.persistence.enabled | 使用PVC启用Zookeeper持久性 | true |
externalZookeeper.servers | 要使用的服务器或外部Zookeeper服务器列表。 | nil |
使用的--set key=value[,key=value]
参数指定每个参数helm install
。例如,
$ helm install --name my-release \
--set kafkaPassword=secretpassword,kafkaDatabase=my-database \
<helm-repo>/kafka
上面的命令将Kafkakafka
帐户密码设置为secretpassword
。此外,它还会创建一个名为的数据库my-database
。
或者,可以在安装图表时提供指定参数值的YAML文件。例如,
$ helm install --name my-release -f values.yaml <helm-repo>/kafka
提示:您可以使用默认值。
配置和安装详细信息
滚动式VS不可变标签
强烈建议在生产环境中使用不可变标签。这样可以确保如果使用不同的映像更新相同的标记,则部署不会自动更改。
如果存在主容器的新版本,重大更改或严重漏洞,Bitnami将发布新图表以更新其容器。
生产配置和水平缩放
该图表包括一个values-production.yaml
文件,您可以在其中找到一些与常规配置相比面向生产配置的参数values.yaml
。您可以使用此文件而不是默认文件。
-
Kafka节点数:
```diff -
复制数:1
-
copyCount:3
-
允许使用PLAINTEXT侦听器:
```diff -
allowPlaintextListener:是
-
allowPlaintextListener:false
-
自动创建的主题的默认复制因子:
```diff -
defaultReplicationFactor:1
-
defaultReplicationFactor:3
-
偏移量主题的复制因子:
```diff -
offsetsTopicReplicationFactor:1
-
offsetsTopicReplicationFactor:3
-
事务主题的复制因子:
```diff -
transactionStateLogReplicationFactor:1
-
transactionStateLogReplicationFactor:3
-
事务主题的覆盖的min.insync.replicas配置:
```diff -
transactionStateLogMinIsr:1
-
transactionStateLogMinIsr:3
-
切换到启用kafka身份验证:
```diff -
启用身份验证:false
-
启用身份验证:true
-
是否创建一个单独的Kafka导出器:
```diff -
metrics.kafka.enabled:false
-
metrics.kafka.enabled:true
-
是否将JMX指标公开给Prometheus:
```diff -
metrics.jmx.enabled:false
-
metrics.jmx.enabled:true
-
Zookeeper图表指标配置:
```diff -
zookeeper.metrics.enabled:true
要在部署此图表后对其进行水平缩放,可以使用该replicaCount
参数的新值来升级部署。
设置自定义参数
以开头的任何环境变量KAFKA_CFG_
都将映射到其相应的Kafka键。例如,使用KAFKA_CFG_BACKGROUND_THREADS
来设置background.threads
。
为了传递自定义环境变量,请使用extraEnvVars
属性。
为Kafka和Zookeeper启用安全性
如果为Kafka启用了身份验证,则将使用您提供的输入来配置SASL_SSL侦听器。特别是,您可以设置以下一对凭据:
- brokerUser / brokerPassword:针对kafka经纪人对kafka客户端进行身份验证
- interBrokerUser / interBrokerPassword:在它们之间验证kafka代理。
- zookeeperUser / zookeeperPassword:如果在启用SASL身份验证的情况下部署Zookeeper图表。
为了配置身份验证,您必须创建包含kafka.keystore.jks和kafka.trustore.jks证书的密钥,并--auth.certificatesSecret
在部署图表时将密钥名称和选项一起传递。
您可以使用以下参数创建密码并通过身份验证部署图表:
auth.enabled=true
auth.brokerUser=brokerUser
auth.brokerPassword=brokerPassword
auth.interBrokerUser=interBrokerUser
auth.interBrokerPassword=interBrokerPassword
auth.zookeeperUser=zookeeperUser
auth.zookeeperPassword=zookeeperPassword
zookeeper.auth.enabled=true
zookeeper.auth.serverUsers=zookeeperUser
zookeeper.auth.serverPasswords=zookeeperPassword
zookeeper.auth.clientUser=zookeeperUser
zookeeper.auth.clientPassword=zookeeperPassword
auth.certificatesSecret=kafka-certificates
注意:如果JKS文件受密码保护(推荐),则需要提供密码才能访问密钥库。为此,请使用该
auth.certificatesPassword
选项来提供您的密码。
从集群外部访问Kafka经纪人
为了从群集外部访问Kafka Broker,必须配置其他侦听器和公告的侦听器。此外,将为每个kafka pod创建一个特定的服务。
有两种配置外部访问的方法。使用LoadBalancer服务或NodePort服务。
使用LoadBalancer服务
externalAccess.enabled=true
externalAccess.service.type=LoadBalancer
externalAccess.service.port=19092
externalAccess.service.loadBalancerIP={'external-ip-1', 'external-ip-2'}
您需要事先知道负载均衡器IP,以便为每个Kafka Broker通告的侦听器配置它。
使用NodePort服务
externalAccess.enabled=true
externalAccess.service.type=NodePort
externalAccess.service.nodePort={'node-port-1', 'node-port-2'}
您需要提前知道将为每个Kafka代理公开的NodePort。它将用于配置每个代理的公告侦听器。
curl -s https://ipinfo.io/ip
除非externalAccess.service.domain
提供,否则pod会尝试使用该节点获取外部ip 。
坚持不懈
所述Bitnami卡夫卡图像在存储卡夫卡数据/bitnami/kafka
容器的路径。
持久卷声明用于保留跨部署的数据。众所周知,这可以在GCE,AWS和minikube中使用。
请参阅“参数”部分以配置PVC或禁用持久性。
调整永久卷安装点的权限
由于映像默认情况下以非根用户身份运行,因此有必要调整持久卷的所有权,以便容器可以向其中写入数据。
默认情况下,该图表配置为使用Kubernetes安全上下文自动更改卷的所有权。但是,此功能不适用于所有Kubernetes发行版。
作为替代方案,此图表支持使用initContainer更改卷的所有权,然后再将其装入最终目标。
您可以通过设置volumePermissions.enabled
为启用此initContainer true
。
升级中
至7.0.0
启用Kafka指标时,不能保证向后兼容性,除非您修改导出器部署上使用的标签。
使用下面的解决方法,可以从7.0.0之前的版本升级。以下示例假定发行版名称为kafka:
$ helm upgrade kafka bitnami/kafka --version 6.1.8 --set metrics.kafka.enabled=false
$ helm upgrade kafka bitnami/kafka --version 7.0.0 --set metrics.kafka.enabled=true
到2.0.0
除非您修改图表部署中使用的标签,否则不能保证向后兼容性。
使用下面的解决方法,从2.0.0之前的版本升级。以下示例假定发行版名称为kafka:
$ kubectl delete statefulset kafka-kafka --cascade=false
$ kubectl delete statefulset kafka-zookeeper --cascade=false
到1.0.0
除非您修改图表部署中使用的标签,否则不能保证向后兼容性。
使用下面的解决方法,从1.0.0之前的版本升级。以下示例假定发行版名称为kafka:
$ kubectl delete statefulset kafka-kafka --cascade=false
$ kubectl delete statefulset kafka-zookeeper --cascade=false