Helm 安装

Spring Cloud Data Flow 提供了一个 Helm Chart,用于将 Spring Cloud Data Flow 服务器及其所需服务部署到 Kubernetes 集群。

以下部分介绍如何初始化 Helm 并在 Kubernetes 集群上安装 Spring Cloud Data Flow。

如果您使用 Minikube,请参阅设置 Minikube 资源,了解有关 CPU 和 RAM 资源需求的详细信息。

安装 Spring Cloud Data Flow 服务器和所需服务

您应该查看以下文档,并调整已为您的环境进行的任何参数自定义,或者它们与传统的官方 Helm 图表有何不同。在 Bitnami 图表迁移过程中,值名称、默认值等可能已更改。您可以在参数表和升级重要更改部分中找到更多信息。

适用于 Spring Cloud Data Flow 的 Bitnami 软件包

Spring Cloud Data Flow 是一个基于微服务的工具包,用于在 Cloud Foundry 和 Kubernetes 中构建流式和批处理数据处理管道。

Spring Cloud Data Flow 概述

太长不看版

helm install my-release oci://registry-1.docker.io/bitnamicharts/spring-cloud-dataflow

希望在生产环境中使用 Spring Cloud Data Flow?试试 VMware Tanzu 应用目录,Bitnami 应用目录的企业版。

简介

此图表使用 Helm 包管理器在 Kubernetes 集群上引导 Spring Cloud Data Flow 部署。

Bitnami 图表可以与 Kubeapps 一起使用,以便在集群中部署和管理 Helm 图表。

先决条件

  • Kubernetes 1.23+
  • Helm 3.8.0+
  • 底层基础架构中的 PV 配置器支持

安装图表

要使用发行版名称 my-release 安装图表

helm install my-release oci://REGISTRY_NAME/REPOSITORY_NAME/spring-cloud-dataflow

注意:您需要将占位符 REGISTRY_NAMEREPOSITORY_NAME 替换为对您的 Helm 图表注册表和存储库的引用。例如,在 Bitnami 的情况下,您需要使用 REGISTRY_NAME=registry-1.docker.ioREPOSITORY_NAME=bitnamicharts

这些命令使用默认配置在 Kubernetes 集群上部署 Spring Cloud Data Flow。参数 部分列出了可以在安装过程中配置的参数。

提示:使用 helm list 列出所有发行版

配置和安装细节

资源请求和限制

Bitnami 图表允许为图表部署内的所有容器设置资源请求和限制。这些都在 resources 值内(请查看参数表)。设置请求对于生产工作负载至关重要,并且应根据您的特定用例进行调整。

为了简化此过程,图表包含 resourcesPreset 值,该值会根据不同的预设自动设置 resources 部分。在 bitnami/common 图表 中查看这些预设。但是,在生产工作负载中,不建议使用 resourcePreset,因为它可能无法完全适应您的特定需求。在 Kubernetes 官方文档 中查找有关容器资源管理的更多信息。

滚动标签与不可变标签

强烈建议在生产环境中使用不可变标签。这可以确保如果使用不同的镜像更新了相同的标签,您的部署不会自动更改。

如果存在主要容器的新版本、重大更改或严重漏洞,Bitnami 将发布更新其容器的新图表。

特性

如果只需要部署任务和计划,则可以禁用流式传输和 Skipper

server.configuration.batchEnabled=true
server.configuration.streamingEnabled=false
skipper.enabled=false
rabbitmq.enabled=false

如果只需要部署流,则可以禁用任务和计划

server.configuration.batchEnabled=false
server.configuration.streamingEnabled=true
skipper.enabled=true
rabbitmq.enabled=true

注意:server.configuration.batchEnabledserver.configuration.streamingEnabled 不应同时设置为 false

消息传递解决方案

此图表中支持两种消息传递解决方案

  • RabbitMQ(默认)
  • Kafka

要将消息传递层更改为 Kafka,请使用以下参数

rabbitmq.enabled=false
kafka.enabled=true

在给定时间只能使用一个消息传递层。

使用外部数据库

有时,您可能希望 Spring Cloud 组件连接到外部数据库,而不是在集群内部安装数据库,例如使用托管数据库服务,或者对所有应用程序使用单个数据库服务器。为此,该图表允许您在 externalDatabase 参数 下指定外部数据库的凭据。您还应该使用 mariadb.enabled 选项禁用 MariaDB 安装。例如,使用以下参数

mariadb.enabled=false
externalDatabase.scheme=mariadb
externalDatabase.host=myexternalhost
externalDatabase.port=3306
externalDatabase.password=mypassword
externalDatabase.dataflow.user=mydataflowuser
externalDatabase.dataflow.database=mydataflowdatabase
externalDatabase.skipper.user=myskipperuser
externalDatabase.skipper.database=myskipperdatabase

注意:当使用各个属性(方案、主机、端口、数据库、可选的 jdbcParameters)时,此图表将 JDBC URL 格式化为 jdbc:{scheme}://{host}:{port}/{database}{jdbcParameters}。URL 格式遵循 MariaDB 数据库驱动的格式,但可能不适用于其他数据库供应商。

要使用备用数据库供应商(MariaDB 除外),您可以使用 externalDatabase.dataflow.urlexternalDatabase.skipper.url 属性分别为数据流服务器和 skipper 提供 JDBC URL。如果定义了这些属性,则它们将优先于各个属性。例如配置外部 MS SQL Server 数据库

mariadb.enabled=false
externalDatabase.password=mypassword
externalDatabase.dataflow.url=jdbc:sqlserver://mssql-server:1433
externalDatabase.dataflow.user=mydataflowuser
externalDatabase.skipper.url=jdbc:sqlserver://mssql-server:1433
externalDatabase.skipper.user=myskipperuser
externalDatabase.hibernateDialect=org.hibernate.dialect.SQLServer2012Dialect

注意:如果您按上述方式禁用 MariaDB,则必须为 externalDatabase 连接提供值。

添加额外的标志

如果您想向任何 Spring Cloud 组件添加额外的环境变量,可以使用 XXX.extraEnvs 参数,其中 XXX 是您需要替换为实际组件的占位符。例如,要向 Spring Cloud Data Flow 添加额外的标志,请使用

server:
  extraEnvs:
    - name: FOO
      value: BAR

使用自定义 Dataflow 配置

此 Helm 图表支持对 Dataflow 服务器使用自定义配置。

您可以通过将 server.existingConfigmap 参数设置为包含配置文件的外部 ConfigMap 来指定 Dataflow 服务器的配置。

使用自定义 Skipper 配置

此 Helm chart 支持为 Skipper 服务器使用自定义配置。

您可以通过将 skipper.existingConfigmap 参数设置为包含配置文件的外部 ConfigMap 来指定 Skipper 服务器的配置。

边车和初始化容器

如果您需要在与 Dataflow 或 Skipper 组件相同的 pod 中运行其他容器(例如,额外的指标或日志导出器),您可以通过 XXX.sidecars 参数来实现,其中 XXX 是您需要替换为实际组件的占位符。您只需根据 Kubernetes 容器规范定义您的容器即可。

server:
  sidecars:
    - name: your-image-name
      image: your-image
      imagePullPolicy: Always
      ports:
        - name: portname
          containerPort: 1234

类似地,您可以使用 XXX.initContainers 参数添加额外的初始化容器。

server:
  initContainers:
    - name: your-image-name
      image: your-image
      imagePullPolicy: Always
      ports:
        - name: portname
          containerPort: 1234

入口

此 chart 支持 Ingress 资源。如果您的集群上安装了 ingress 控制器,例如 nginx-ingress-controllercontour,则可以使用 ingress 控制器来为您的应用程序提供服务。

要启用 ingress 集成,请将 server.ingress.enabled 设置为 true

主机

您很可能只希望有一个主机名映射到此 Spring Cloud Data Flow 安装。如果是这种情况,则可以使用属性 server.ingress.hostname 进行设置。但是,也可以有多个主机。为了方便起见,可以将 server.ingress.extraHosts 对象指定为数组。您还可以使用 server.ingress.extraTLS 为额外主机添加 TLS 配置。

对于 server.ingress.extraHosts 中指示的每个主机,请指明 namepath 以及您希望 ingress 控制器了解的任何 annotations

有关注释,请参阅本文档。并非所有 ingress 控制器都支持所有注释,但本文档很好地指出了哪些注释受许多流行的 ingress 控制器支持。

TLS

此图表将有助于创建用于 ingress 控制器的 TLS 密钥,但这并非必需的。有四种常见用例

  • Helm 根据参数生成/管理证书密钥。
  • 用户单独生成/管理证书。
  • Helm 创建自签名证书并生成/管理证书密钥。
  • 一个额外的工具(如 cert-manager)管理应用程序的密钥。在前两种情况下,需要证书和密钥。我们希望它们看起来像这样
  • 证书文件应该看起来像(如果存在证书链,则可以有多个证书)

    -----BEGIN CERTIFICATE-----
    MIID6TCCAtGgAwIBAgIJAIaCwivkeB5EMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV
    ...
    jScrvkiBO65F46KioCL9h5tDvomdU1aqpI/CBzhvZn1c0ZTf87tGQR8NK7v7
    -----END CERTIFICATE-----
  • 密钥应该看起来像

    -----BEGIN RSA PRIVATE KEY-----
    MIIEogIBAAKCAQEAvLYcyu8f3skuRyUgeeNpeDvYBCDcgq+LsWap6zbX5f8oLqp4
    ...
    wrj2wDbCDCFmfqnSJ+dKI3vFLlEz44sAV8jX/kd4Y6ZTQhlLbYc=
    -----END RSA PRIVATE KEY-----
  • 如果您打算使用 Helm 根据参数管理证书,请将这些值复制到给定 server.ingress.secrets 条目的 certificatekey 值中。
  • 如果您打算单独管理 TLS 密钥,请使用名称 INGRESS_HOSTNAME-tls 创建一个 TLS 密钥(其中 INGRESS_HOSTNAME 是一个占位符,将替换为您使用 server.ingress.hostname 参数设置的主机名),并在 server.ingress.secrets 中仅提供其名称,而无需 certificatekey 条目。
  • 要使用 Helm 创建的自签名证书,请将 server.ingress.tls 设置为 true,并将 server.ingress.certManager 设置为 false
  • 如果您的集群具有 cert-manager 附加组件来自动管理和颁发 TLS 证书,请将 server.ingress.certManager 布尔值设置为 true 以启用 cert-manager 的相应注释。

设置 Pod 的亲和性

此图表允许您使用 XXX.affinity 参数设置自定义亲和性。在 kubernetes 文档 中查找有关 Pod 亲和性的更多信息。

或者,您可以使用 bitnami/common 图表中提供的 Pod 亲和性、Pod 反亲和性和节点亲和性的预设配置。为此,请设置 XXX.podAffinityPresetXXX.podAntiAffinityPresetXXX.nodeAffinityPreset 参数。

参数

全局参数

名称 描述
global.imageRegistry 全局 Docker 镜像仓库 ""
global.imagePullSecrets 全局 Docker 镜像仓库密钥名称数组 []
global.storageClass 持久卷的全局存储类 ""
global.compatibility.openshift.adaptSecurityContext 调整部署的 securityContext 部分,使其与 Openshift restricted-v2 SCC 兼容:删除 runAsUser、runAsGroup 和 fsGroup,并让平台使用其允许的默认 ID。可能的值:auto(如果检测到的运行集群是 Openshift 则应用)、force(始终执行调整)、disabled(不执行调整) auto

通用参数

名称 描述
nameOverride 用于部分覆盖 common.names.fullname 模板的字符串(将保留版本名称)。 ""
fullnameOverride 用于完全覆盖 common.names.fullname 模板的字符串。 ""
commonAnnotations 要添加到所有已部署对象的注释 {}
commonLabels 要添加到所有已部署对象的标签 {}
kubeVersion 强制目标 Kubernetes 版本(如果未设置,则使用 Helm 功能) ""
clusterDomain 默认 Kubernetes 集群域名 cluster.local
extraDeploy 要与版本一起部署的额外对象数组 []

Dataflow 服务器参数

名称 描述
server.image.registry Spring Cloud Dataflow 镜像仓库 REGISTRY_NAME
server.image.repository Spring Cloud Dataflow 镜像仓库 REPOSITORY_NAME/spring-cloud-dataflow
server.image.digest Spring Cloud Dataflow 镜像摘要,格式为 sha256:aa.... 请注意,如果设置此参数,将覆盖标签 ""
server.image.pullPolicy Spring Cloud Dataflow 镜像拉取策略 IfNotPresent
server.image.pullSecrets 以数组形式指定 docker-registry 密钥名称 []
server.image.debug 启用镜像调试模式 false
server.automountServiceAccountToken 在 Pod 中挂载服务帐户令牌 true
server.hostAliases 部署 Pod 主机别名 []
server.composedTaskRunner.image.registry Spring Cloud Dataflow Composed Task Runner 镜像仓库地址 REGISTRY_NAME
server.composedTaskRunner.image.repository Spring Cloud Dataflow Composed Task Runner 镜像仓库名称 REPOSITORY_NAME/spring-cloud-dataflow-composed-task-runner
server.composedTaskRunner.image.digest Spring Cloud Dataflow Composed Task Runner 镜像摘要,格式为 sha256:aa.... 请注意,如果设置此参数,将覆盖标签 ""
server.configuration.streamingEnabled 启用或禁用流数据处理 true
server.configuration.batchEnabled 启用或禁用批处理数据(任务和计划)处理 true
server.configuration.accountName 要为 Kubernetes 平台配置的帐户名称 default
server.configuration.trustK8sCerts 在查询 Kubernetes API 时信任 K8s 证书 false
server.configuration.containerRegistries 容器仓库配置 {}
server.configuration.grafanaInfo Grafana 实例的端点(已弃用:请改用 metricsDashboard) ""
server.configuration.metricsDashboard 指标仪表板实例的端点 ""
server.configuration.defaultSpringApplicationJSON 为环境变量 SPRING_APPLICATION_JSON 注入默认值 true
server.existingConfigmap 包含 Spring Cloud Dataflow 服务器配置的 ConfigMap ""
server.containerPorts.http 容器 HTTP 端口 8080
server.containerPorts.jdwp 容器 JDWP 端口 5005
server.command 覆盖默认容器命令(在使用自定义镜像时很有用) []
server.args 覆盖默认容器参数(在使用自定义镜像时很有用) []
server.lifecycleHooks 用于 Dataflow 服务器容器,以便在启动之前或之后自动执行配置 {}
server.extraEnvVars 要在 Dataflow 服务器容器上设置的额外环境变量 []
server.extraEnvVarsCM 包含额外环境变量的 ConfigMap ""
server.extraEnvVarsSecret 包含额外环境变量的 Secret ""
server.replicaCount 要部署的 Dataflow 服务器副本数 1
server.podAffinityPreset Dataflow 服务器 Pod 亲和性预设。如果设置了 server.affinity,则忽略此项。允许的值:softhard ""
server.podAntiAffinityPreset Dataflow 服务器 Pod 反亲和性预设。如果设置了 server.affinity,则忽略此项。允许的值:softhard soft
server.nodeAffinityPreset.type Dataflow 服务器节点亲和性预设类型。如果设置了 server.affinity,则忽略此项。允许的值:softhard ""
server.nodeAffinityPreset.key 要匹配的 Dataflow 服务器节点标签键。如果设置了 server.affinity,则忽略此项。 ""
server.nodeAffinityPreset.values 要匹配的 Dataflow 服务器节点标签值。如果设置了 server.affinity,则忽略此项。 []
server.affinity 用于 Pod 分配的 Dataflow 服务器亲和性 {}
server.nodeSelector 用于 Pod 分配的 Dataflow 服务器节点标签 {}
server.tolerations 用于 Pod 分配的 Dataflow 服务器容忍度 []
server.podAnnotations Dataflow 服务器 Pod 的注释 {}
server.updateStrategy.type Dataflow 服务器 Pod 的部署策略类型。 RollingUpdate
server.podLabels Dataflow 服务器 Pod 的额外标签 {}
server.priorityClassName Dataflow 服务器 Pod 的优先级 ""
server.schedulerName k8s 调度程序的名称(默认值以外) ""
server.topologySpreadConstraints 用于 Pod 分配的拓扑分布约束 []
server.podSecurityContext.enabled 启用 Dataflow 服务器 Pod 的安全上下文 true
server.podSecurityContext.fsGroupChangePolicy 设置文件系统组更改策略 始终
server.podSecurityContext.sysctls 使用 sysctl 接口设置内核设置 []
server.podSecurityContext.supplementalGroups 设置文件系统额外组 []
server.podSecurityContext.fsGroup Pod 卷的组 ID 1001
server.containerSecurityContext.enabled 启用容器的安全上下文 true
server.containerSecurityContext.seLinuxOptions 在容器中设置 SELinux 选项 {}
server.containerSecurityContext.runAsUser 设置容器的安全上下文 runAsUser 1001
server.containerSecurityContext.runAsGroup 设置容器的安全上下文 runAsGroup 1001
server.containerSecurityContext.runAsNonRoot 设置容器的安全上下文 runAsNonRoot true
server.containerSecurityContext.privileged 设置容器的安全上下文 privileged false
server.containerSecurityContext.readOnlyRootFilesystem 设置容器的安全上下文 readOnlyRootFilesystem true
server.containerSecurityContext.allowPrivilegeEscalation 设置容器的安全上下文 allowPrivilegeEscalation false
server.containerSecurityContext.capabilities.drop 要删除的功能列表 ["ALL"]
server.containerSecurityContext.seccompProfile.type 设置容器的安全上下文 seccomp 配置文件 RuntimeDefault
server.resourcesPreset 根据一个常见预设设置容器资源(允许值:none、nano、micro、small、medium、large、xlarge、2xlarge)。如果设置了 server.resources,则忽略此项(建议在生产环境中使用 server.resources)。 small
server.resources 为 CPU 或内存等不同资源设置容器请求和限制(对于生产工作负载至关重要) {}
server.startupProbe.enabled 启用启动探针 false
server.startupProbe.initialDelaySeconds 启动探针的初始延迟秒数 120
server.startupProbe.periodSeconds 启动探针的周期秒数 20
server.startupProbe.timeoutSeconds 启动探针的超时秒数 1
server.startupProbe.failureThreshold 启动探针的失败阈值 6
server.startupProbe.successThreshold 启动探针的成功阈值 1
server.livenessProbe.enabled 启用活跃性探针 true
server.livenessProbe.initialDelaySeconds 活跃性探针的初始延迟秒数 120
server.livenessProbe.periodSeconds 活跃性探针的周期秒数 20
server.livenessProbe.timeoutSeconds 活跃性探针的超时秒数 1
server.livenessProbe.failureThreshold 活跃性探针的失败阈值 6
server.livenessProbe.successThreshold 活跃性探针的成功阈值 1
server.readinessProbe.enabled 启用就绪性探针 true
server.readinessProbe.initialDelaySeconds 就绪性探针的初始延迟秒数 120
server.readinessProbe.periodSeconds 就绪性探针的周期秒数 20
server.readinessProbe.timeoutSeconds 就绪性探针的超时秒数 1
server.readinessProbe.failureThreshold 就绪性探针的失败阈值 6
server.readinessProbe.successThreshold 就绪性探针的成功阈值 1
server.customStartupProbe 覆盖默认启动探针 {}
server.customLivenessProbe 覆盖默认活跃性探针 {}
server.customReadinessProbe 覆盖默认就绪性探针 {}
server.networkPolicy.enabled 指定是否应创建网络策略 true
server.networkPolicy.allowExternal 不需要客户端标签即可连接 true
server.networkPolicy.allowExternalEgress 允许 Pod 访问任何端口范围和所有目标。 true
server.networkPolicy.kubeAPIServerPorts kube-apiserver 可能的端点列表(限制到您的集群设置以提高安全性) []
server.networkPolicy.extraIngress 向 NetworkPolicy 添加额外的入口规则 []
server.networkPolicy.extraEgress 向 NetworkPolicy 添加额外的入口规则 []
server.networkPolicy.ingressNSMatchLabels 要匹配的标签以允许来自其他命名空间的流量 {}
server.networkPolicy.ingressNSPodMatchLabels 要匹配的 Pod 标签以允许来自其他命名空间的流量 {}
server.service.type Kubernetes 服务类型 ClusterIP
server.service.ports.http 服务器 HTTP 端口 8080
server.service.nodePort 为 LoadBalancer 和 NodePort 服务类型指定 nodePort 值 ""
server.service.clusterIP Dataflow 服务器服务集群 IP ""
server.service.externalTrafficPolicy 启用客户端源 IP 保留 集群
server.service.loadBalancerIP 如果服务类型为 LoadBalancer,则为负载均衡器 IP ""
server.service.loadBalancerSourceRanges 服务为 LoadBalancer 时允许的地址 []
server.service.extraPorts 要暴露的额外端口(通常与 sidecar 值一起使用) []
server.service.annotations 提供任何可能需要的额外注释。作为模板进行评估。 {}
server.service.sessionAffinity Kubernetes 服务的会话关联,可以是“None”或“ClientIP”
server.service.sessionAffinityConfig sessionAffinity 的其他设置 {}
server.ingress.enabled 启用入口控制器资源 false
server.ingress.path Spring Cloud Dataflow 的路径。您可能需要将其设置为“/*”才能将其与 ALB 入口控制器一起使用。 /
server.ingress.apiVersion 强制使用 Ingress API 版本(如果未设置,则自动检测) ""
server.ingress.pathType Ingress 路径类型 ImplementationSpecific
server.ingress.hostname 入口资源的默认主机 dataflow.local
server.ingress.annotations Ingress 资源的附加注释。要启用证书自动生成,请在此处放置您的 cert-manager 注释。 {}
server.ingress.tls 为 ingress.hostname 参数定义的主机名启用 TLS 配置 false
server.ingress.certManager 添加 cert-manager 集成的相应注释 false
server.ingress.extraHosts 要由此入口记录覆盖的其他主机名列表。 []
server.ingress.extraPaths 包含可能需要在主主机下添加到入口的额外任意路径的数组 []
server.ingress.extraTls 要由此入口记录覆盖的其他主机名的 tls 配置。 []
server.ingress.secrets 如果您要提供自己的证书,请使用此选项将证书添加为密钥 []
server.ingress.ingressClassName 将用于实现 Ingress 的 IngressClass(Kubernetes 1.18+) ""
server.ingress.extraRules 要由此入口记录覆盖的附加规则 []
server.initContainers 将初始化容器添加到 Dataflow Server Pod []
server.sidecars 将边车添加到 Dataflow Server Pod []
server.pdb.create 启用/禁用 Pod Disruption Budget 创建 false
server.pdb.minAvailable 应保持调度的 Pod 的最小数量/百分比 1
server.pdb.maxUnavailable 可能不可用的 Pod 的最大数量/百分比 ""
server.autoscaling.enabled 为 Dataflow 服务器启用自动缩放 false
server.autoscaling.minReplicas Dataflow 服务器副本的最小数量 ""
server.autoscaling.maxReplicas Dataflow 服务器副本的最大数量 ""
server.autoscaling.targetCPU 目标 CPU 利用率百分比 ""
server.autoscaling.targetMemory 目标内存利用率百分比 ""
server.extraVolumes 要设置在 Dataflow 服务器 Pod 上的额外卷 []
server.extraVolumeMounts 要设置在 Dataflow 容器上的额外卷挂载 []
server.jdwp.enabled 设置为 true 以启用 Java 调试器 false
server.jdwp.port 指定远程调试端口 5005
server.proxy 为 SCDF 服务器添加代理配置 {}
server.applicationProperties 指定由 SCDF 服务器添加到流和/或任务的通用应用程序属性 {}
server.security.authorization 授权自定义 {}
server.security.oauth2 OAuth 2.0 身份验证配置 {}

Dataflow Skipper 参数

名称 描述
skipper.enabled 启用 Spring Cloud Skipper 组件 true
skipper.automountServiceAccountToken 在 Pod 中挂载服务帐户令牌 true
skipper.hostAliases 部署 Pod 主机别名 []
skipper.image.registry Spring Cloud Skipper 镜像仓库 REGISTRY_NAME
skipper.image.repository Spring Cloud Skipper 镜像库 REPOSITORY_NAME/spring-cloud-skipper
skipper.image.digest Spring Cloud Skipper 镜像摘要,格式为 sha256:aa.... 请注意,如果设置了此参数,它将覆盖标签 ""
skipper.image.pullPolicy Spring Cloud Skipper 镜像拉取策略 IfNotPresent
skipper.image.pullSecrets 以数组形式指定 docker-registry 密钥名称 []
skipper.image.debug 启用镜像调试模式 false
skipper.configuration.accountName 要为 Kubernetes 平台配置的帐户名称 default
skipper.configuration.trustK8sCerts 在查询 Kubernetes API 时信任 K8s 证书 false
skipper.existingConfigmap 包含 Skipper 服务器配置的现有 ConfigMap 的名称 ""
skipper.containerPorts.http 容器 HTTP 端口 7577
skipper.containerPorts.jdwp 容器 JDWP 端口 5005
skipper.command 覆盖默认容器命令(在使用自定义镜像时很有用) []
skipper.args 覆盖默认容器参数(在使用自定义镜像时很有用) []
skipper.lifecycleHooks 用于 Skipper 容器在启动之前或之后自动执行配置 {}
skipper.extraEnvVars 要设置在 Skipper 服务器容器上的额外环境变量 []
skipper.extraEnvVarsCM 包含额外环境变量的现有 ConfigMap 的名称 ""
skipper.extraEnvVarsSecret 包含额外环境变量的现有 Secret 的名称 ""
skipper.replicaCount 要部署的 Skipper 服务器副本数 1
skipper.podAffinityPreset Skipper Pod 亲和性预设。如果设置了 skipper.affinity,则忽略此项。允许的值:softhard ""
skipper.podAntiAffinityPreset Skipper Pod 反亲和性预设。如果设置了 skipper.affinity,则忽略此项。允许的值:softhard soft
skipper.nodeAffinityPreset.type Skipper 节点亲和性预设类型。如果设置了 skipper.affinity,则忽略此项。允许的值:softhard ""
skipper.nodeAffinityPreset.key 要匹配的 Skipper 节点标签键。如果设置了 skipper.affinity,则忽略此项。 ""
skipper.nodeAffinityPreset.values 要匹配的 Skipper 节点标签值。如果设置了 skipper.affinity,则忽略此项。 []
skipper.affinity 用于 Pod 分配的 Skipper 亲和性 {}
skipper.nodeSelector 用于 Pod 分配的 Skipper 节点标签 {}
skipper.tolerations 用于 Pod 分配的 Skipper 容忍度 []
skipper.podAnnotations Skipper 服务器 Pod 的注释 {}
skipper.updateStrategy.type Skipper 服务器 Pod 的部署策略类型。 RollingUpdate
skipper.podLabels Skipper Pod 的额外标签 {}
skipper.priorityClassName 控制器的优先级类名 ""
skipper.schedulerName k8s 调度程序的名称(默认值以外) ""
调度器名称 用于 Pod 分配的拓扑分布约束 []
skipper.topologySpreadConstraints 拓扑分布约束 true
skipper.podSecurityContext.enabled 设置文件系统组更改策略 始终
启用 Skipper Pod 的安全上下文 使用 sysctl 接口设置内核设置 []
skipper.podSecurityContext.fsGroupChangePolicy 设置文件系统额外组 []
文件系统组更改策略 Pod 卷的组 ID 1001
skipper.podSecurityContext.sysctls 启用容器的安全上下文 true
系统调用 在容器中设置 SELinux 选项 {}
skipper.podSecurityContext.supplementalGroups 设置容器的安全上下文 runAsUser 1001
补充组 设置容器的安全上下文 runAsGroup 1001
skipper.podSecurityContext.fsGroup 设置容器的安全上下文 runAsNonRoot true
文件系统组 设置容器的安全上下文 privileged false
skipper.containerSecurityContext.enabled 设置容器的安全上下文 readOnlyRootFilesystem true
启用 Skipper 容器的安全上下文 设置容器的安全上下文 allowPrivilegeEscalation false
skipper.containerSecurityContext.seLinuxOptions 要删除的功能列表 ["ALL"]
SELinux 选项 设置容器的安全上下文 seccomp 配置文件 RuntimeDefault
skipper.containerSecurityContext.runAsUser 以用户身份运行 small
skipper.containerSecurityContext.runAsGroup 为 CPU 或内存等不同资源设置容器请求和限制(对于生产工作负载至关重要) {}
以组身份运行 启用启动探针 false
skipper.containerSecurityContext.runAsNonRoot 启动探针的初始延迟秒数 120
以非 root 用户身份运行 启动探针的周期秒数 20
skipper.containerSecurityContext.privileged 启动探针的超时秒数 1
特权模式 启动探针的失败阈值 6
skipper.containerSecurityContext.readOnlyRootFilesystem 启动探针的成功阈值 1
只读根文件系统 启用活跃性探针 true
skipper.containerSecurityContext.allowPrivilegeEscalation 活跃性探针的初始延迟秒数 120
允许权限提升 活跃性探针的周期秒数 20
skipper.containerSecurityContext.capabilities.drop 活跃性探针的超时秒数 1
要删除的功能 活跃性探针的失败阈值 6
skipper.containerSecurityContext.seccompProfile.type 活跃性探针的成功阈值 1
Seccomp 配置文件类型 启用就绪性探针 true
skipper.resourcesPreset 就绪性探针的初始延迟秒数 120
根据一个通用预设设置容器资源(允许的值:none、nano、micro、small、medium、large、xlarge、2xlarge)。如果设置了 skipper.resources,则忽略此项(建议在生产环境中使用 skipper.resources)。 就绪性探针的周期秒数 20
skipper.resources 就绪性探针的超时秒数 1
容器资源请求和限制 就绪性探针的失败阈值 6
skipper.startupProbe.enabled 就绪性探针的成功阈值 1
启用启动探针 覆盖默认启动探针 {}
skipper.startupProbe.initialDelaySeconds 覆盖默认活跃性探针 {}
启动探针的初始延迟时间(秒) 覆盖默认就绪性探针 {}
skipper.startupProbe.periodSeconds 指定是否应创建网络策略 true
启动探针的检查间隔时间(秒) 不需要客户端标签即可连接 true
skipper.startupProbe.timeoutSeconds 允许 Pod 访问任何端口范围和所有目标。 true
启动探针的超时时间(秒) kube-apiserver 可能的端点列表(限制到您的集群设置以提高安全性) []
skipper.startupProbe.failureThreshold 向 NetworkPolicy 添加额外的入口规则 []
启动探针的失败阈值 向 NetworkPolicy 添加额外的入口规则 []
skipper.startupProbe.successThreshold 要匹配的标签以允许来自其他命名空间的流量 {}
启动探针的成功阈值 要匹配的 Pod 标签以允许来自其他命名空间的流量 {}
skipper.livenessProbe.enabled Kubernetes 服务类型 ClusterIP
启用活跃性探针 skipper.livenessProbe.initialDelaySeconds 80
活跃性探针的初始延迟时间(秒) skipper.livenessProbe.periodSeconds ""
活跃性探针的检查间隔时间(秒) skipper.livenessProbe.timeoutSeconds ""
活跃性探针的超时时间(秒) 启用客户端源 IP 保留 集群
skipper.livenessProbe.failureThreshold 如果服务类型为 LoadBalancer,则为负载均衡器 IP ""
活跃性探针的失败阈值 skipper.livenessProbe.successThreshold []
活跃性探针的成功阈值 要暴露的额外端口(通常与 sidecar 值一起使用) []
skipper.readinessProbe.enabled 启用就绪性探针 {}
skipper.readinessProbe.initialDelaySeconds Kubernetes 服务的会话关联,可以是“None”或“ClientIP”
就绪性探针的初始延迟时间(秒) sessionAffinity 的其他设置 {}
skipper.readinessProbe.periodSeconds 就绪性探针的检查间隔时间(秒) []
skipper.readinessProbe.timeoutSeconds 就绪性探针的超时时间(秒) []
skipper.readinessProbe.failureThreshold 启用/禁用 Pod Disruption Budget 创建 false
就绪性探针的失败阈值 应保持调度的 Pod 的最小数量/百分比 1
skipper.readinessProbe.successThreshold 可能不可用的 Pod 的最大数量/百分比 ""
就绪性探针的成功阈值 skipper.customStartupProbe false
自定义启动探针 skipper.customLivenessProbe ""
自定义活跃性探针 skipper.customReadinessProbe ""
自定义就绪性探针 目标 CPU 利用率百分比 ""
skipper.networkPolicy.enabled 目标内存利用率百分比 ""
启用网络策略 skipper.networkPolicy.allowExternal []
允许外部流量 skipper.networkPolicy.allowExternalEgress []
允许外部出口流量 skipper.networkPolicy.kubeAPIServerPorts false
Kubernetes API 服务器端口 skipper.networkPolicy.extraIngress 5005
额外的入口规则 skipper.networkPolicy.extraEgress 额外的出口规则
skipper.networkPolicy.ingressNSMatchLabels 入口流量的命名空间匹配标签 7577

部署器参数

名称 描述
deployer.resourcesPreset 根据一个通用预设设置容器资源(允许值:none、nano、micro、small、medium、large、xlarge、2xlarge)。如果设置了 deployer.resources,则忽略此项(建议在生产环境中使用 deployer.resources)。 small
deployer.resources 为 CPU 或内存等不同资源设置容器请求和限制(对于生产工作负载至关重要) {}
deployer.readinessProbe.initialDelaySeconds 就绪性探针的初始延迟秒数 120
deployer.livenessProbe.initialDelaySeconds 活跃性探针的初始延迟秒数 90
deployer.nodeSelector 要应用于流式应用程序部署的节点选择器,格式为“键:值” ""
deployer.tolerations 流式应用程序容忍度 []
deployer.volumeMounts 流式应用程序额外卷挂载 []
deployer.volumes 流式应用程序额外卷 []
deployer.environmentVariables 流式应用程序环境变量 []
deployer.podSecurityContext.enabled 启用已部署的 Pod 批处理或流式 Pod 的 Pod 安全上下文 true
deployer.podSecurityContext.runAsUser 设置数据流流容器的安全上下文 runAsUser 1001
deployer.podSecurityContext.fsGroup 设置数据流流容器的安全上下文 fsGroup 1001
deployer.imagePullSecrets 流式应用程序 imagePullSecrets []
deployer.secretRefs 流式应用程序 secretRefs []
deployer.entryPointStyle 入口点样式会影响应用程序属性如何传递到要部署的容器。允许值:exec(默认)、shell、boot exec
deployer.imagePullPolicy 镜像拉取策略定义了何时应将 Docker 镜像拉取到本地注册表。允许值:IfNotPresent(默认)、Always、Never IfNotPresent

RBAC 参数

名称 描述
serviceAccount.create 为数据流服务器和 Skipper 服务器 Pod 启用 ServiceAccount 的创建 true
serviceAccount.name 创建的 serviceAccount 的名称。如果未设置且 create 为 true,则使用 common.names.fullname 模板生成名称 ""
serviceAccount.automountServiceAccountToken 为服务器服务帐户自动挂载服务帐户令牌 false
serviceAccount.annotations 服务帐户的注释。作为模板进行评估。仅在 createtrue 时使用。 {}
rbac.create 是否创建和使用 RBAC 资源 true

指标参数

名称 描述
metrics.enabled 启用 Prometheus 指标 false
metrics.image.registry Prometheus Rsocket 代理镜像仓库 REGISTRY_NAME
metrics.image.repository Prometheus Rsocket 代理镜像仓库地址 REPOSITORY_NAME/prometheus-rsocket-proxy
metrics.image.digest Prometheus Rsocket 代理镜像摘要,格式为 sha256:aa.... 请注意,如果设置此参数,将覆盖标签 ""
metrics.image.pullPolicy Prometheus Rsocket 代理镜像拉取策略 IfNotPresent
metrics.image.pullSecrets 以数组形式指定 docker-registry 密钥名称 []
metrics.resourcesPreset 根据一个通用预设设置容器资源(允许的值:none、nano、micro、small、medium、large、xlarge、2xlarge)。如果设置了 metrics.resources,则忽略此项(建议在生产环境中使用 metrics.resources)。 nano
metrics.resources 为 CPU 或内存等不同资源设置容器请求和限制(对于生产工作负载至关重要) {}
metrics.replicaCount 要部署的 Prometheus Rsocket 代理副本数 1
metrics.podAffinityPreset Prometheus Rsocket 代理 Pod 亲和性预设。如果设置了 metrics.affinity,则忽略此项。允许的值:softhard ""
metrics.podAntiAffinityPreset Prometheus Rsocket 代理 Pod 反亲和性预设。如果设置了 metrics.affinity,则忽略此项。允许的值:softhard soft
metrics.nodeAffinityPreset.type Prometheus Rsocket 代理节点亲和性预设类型。如果设置了 metrics.affinity,则忽略此项。允许的值:softhard ""
metrics.nodeAffinityPreset.key 要匹配的 Prometheus Rsocket 代理节点标签键。如果设置了 metrics.affinity,则忽略此项。 ""
metrics.nodeAffinityPreset.values 要匹配的 Prometheus Rsocket 代理节点标签值。如果设置了 metrics.affinity,则忽略此项。 []
metrics.affinity 用于 Pod 分配的 Prometheus Rsocket 代理亲和性 {}
metrics.nodeSelector 用于 Pod 分配的 Prometheus Rsocket 代理节点标签 {}
metrics.automountServiceAccountToken 在 Pod 中挂载服务帐户令牌 true
metrics.hostAliases Prometheus 代理 Pod 主机别名 []
metrics.tolerations 用于 Pod 分配的 Prometheus Rsocket 代理容忍度 []
metrics.podAnnotations Prometheus Rsocket 代理 Pod 的注释 {}
metrics.podLabels Prometheus 代理 Pod 的额外标签 {}
metrics.podSecurityContext.enabled 启用 Prometheus 代理 Pod 的安全上下文 true
metrics.podSecurityContext.fsGroupChangePolicy 设置文件系统组更改策略 始终
metrics.podSecurityContext.sysctls 使用 sysctl 接口设置内核设置 []
metrics.podSecurityContext.supplementalGroups 设置文件系统额外组 []
metrics.podSecurityContext.fsGroup 设置 Prometheus 代理 Pod 的安全上下文 fsGroup 1001
metrics.containerSecurityContext.enabled 启用容器的安全上下文 true
metrics.containerSecurityContext.seLinuxOptions 在容器中设置 SELinux 选项 {}
metrics.containerSecurityContext.runAsUser 设置容器的安全上下文 runAsUser 1001
metrics.containerSecurityContext.runAsGroup 设置容器的安全上下文 runAsGroup 1001
metrics.containerSecurityContext.runAsNonRoot 设置容器的安全上下文 runAsNonRoot true
metrics.containerSecurityContext.privileged 设置容器的安全上下文 privileged false
metrics.containerSecurityContext.readOnlyRootFilesystem 设置容器的安全上下文 readOnlyRootFilesystem true
metrics.containerSecurityContext.allowPrivilegeEscalation 设置容器的安全上下文 allowPrivilegeEscalation false
metrics.containerSecurityContext.capabilities.drop 要删除的功能列表 ["ALL"]
metrics.containerSecurityContext.seccompProfile.type 设置容器的安全上下文 seccomp 配置文件 RuntimeDefault
metrics.command 覆盖默认容器命令(在使用自定义镜像时很有用) []
metrics.args 覆盖默认容器参数(在使用自定义镜像时很有用) []
metrics.lifecycleHooks 用于 Prometheus 代理容器,在启动之前或之后自动执行配置 {}
metrics.extraEnvVars 包含要添加到 Prometheus 代理节点的额外环境变量的数组 []
metrics.extraEnvVarsCM 包含 Prometheus 代理节点额外环境变量的现有 ConfigMap 的名称 ""
metrics.extraEnvVarsSecret 包含 Prometheus 代理节点额外环境变量的现有 Secret 的名称 ""
metrics.extraVolumes (可选)为 Prometheus 代理 Pod 指定额外的卷列表 []
metrics.extraVolumeMounts (可选)为 Prometheus 代理容器指定额外的卷挂载列表 []
metrics.containerPorts.http Prometheus 代理 HTTP 容器端口 8080
metrics.containerPorts.rsocket Prometheus 代理 Rsocket 容器端口 7001
metrics.startupProbe.enabled 在 Prometheus 代理节点上启用启动探针 false
metrics.startupProbe.initialDelaySeconds 启动探针的初始延迟秒数 10
metrics.startupProbe.periodSeconds 启动探针的周期秒数 10
metrics.startupProbe.timeoutSeconds 启动探针的超时秒数 1
metrics.startupProbe.failureThreshold 启动探针的失败阈值 3
metrics.startupProbe.successThreshold 启动探针的成功阈值 1
metrics.livenessProbe.enabled 在 Prometheus 代理节点上启用活跃性探针 true
metrics.livenessProbe.initialDelaySeconds 活跃性探针的初始延迟秒数 10
metrics.livenessProbe.periodSeconds 活跃性探针的周期秒数 10
metrics.livenessProbe.timeoutSeconds 活跃性探针的超时秒数 1
metrics.livenessProbe.failureThreshold 活跃性探针的失败阈值 3
metrics.livenessProbe.successThreshold 活跃性探针的成功阈值 1
metrics.readinessProbe.enabled 在 Prometheus 代理节点上启用就绪性探针 true
metrics.readinessProbe.initialDelaySeconds 就绪性探针的初始延迟秒数 10
metrics.readinessProbe.periodSeconds 就绪性探针的周期秒数 10
metrics.readinessProbe.timeoutSeconds 就绪性探针的超时秒数 1
metrics.readinessProbe.failureThreshold 就绪性探针的失败阈值 3
metrics.readinessProbe.successThreshold 就绪性探针的成功阈值 1
metrics.customStartupProbe 自定义启动探针,用于覆盖默认探针 {}
metrics.customLivenessProbe 自定义活跃性探针,用于覆盖默认探针 {}
metrics.customReadinessProbe 自定义就绪性探针,用于覆盖默认探针 {}
metrics.sidecars 向 Prometheus 代理 Pod 添加额外的边车容器 []
metrics.initContainers 向 Prometheus 代理 Pod 添加额外的初始化容器 []
metrics.updateStrategy.type Prometheus 代理部署策略类型。 RollingUpdate
metrics.priorityClassName Prometheus Rsocket 代理 Pod 的优先级。 ""
metrics.schedulerName k8s 调度程序的名称(默认值以外) ""
metrics.topologySpreadConstraints 用于 Pod 分配的拓扑分布约束 []
metrics.networkPolicy.enabled 指定是否应创建网络策略 true
metrics.networkPolicy.allowExternal 不需要客户端标签即可连接 true
metrics.networkPolicy.allowExternalEgress 允许 Pod 访问任何端口范围和所有目标。 true
metrics.networkPolicy.extraIngress 向 NetworkPolicy 添加额外的入口规则 []
metrics.networkPolicy.extraEgress 向 NetworkPolicy 添加额外的入口规则 []
metrics.networkPolicy.ingressNSMatchLabels 要匹配的标签以允许来自其他命名空间的流量 {}
metrics.networkPolicy.ingressNSPodMatchLabels 要匹配的 Pod 标签以允许来自其他命名空间的流量 {}
metrics.service.type Prometheus 代理服务类型 ClusterIP
metrics.service.ports.http Prometheus Rsocket 代理 HTTP 端口 8080
metrics.service.ports.rsocket Prometheus Rsocket 代理 Rsocket 端口 7001
metrics.service.nodePorts.http HTTP 的节点端口 ""
metrics.service.nodePorts.rsocket Rsocket 的节点端口 ""
metrics.service.clusterIP Prometheus 代理服务的集群 IP ""
metrics.service.loadBalancerIP Prometheus 代理服务的负载均衡器 IP ""
metrics.service.loadBalancerSourceRanges Prometheus 代理服务的负载均衡器来源 []
metrics.service.externalTrafficPolicy Prometheus 代理服务的外部流量策略 集群
metrics.service.extraPorts 要暴露的额外端口(通常与 sidecar 值一起使用) []
metrics.service.annotations Prometheus Rsocket 代理服务的注释 {}
metrics.service.sessionAffinity Kubernetes 服务的会话关联,可以是“None”或“ClientIP”
metrics.service.sessionAffinityConfig sessionAffinity 的其他设置 {}
metrics.serviceMonitor.enabled 如果为 true,则创建 Prometheus Operator ServiceMonitor(还需要将 metrics.enabled 设置为 true false
metrics.serviceMonitor.namespace 如果与发布的命名空间不同,则在该命名空间中创建 ServiceMonitor ""
metrics.serviceMonitor.jobLabel 目标服务上标签的名称,用作 Prometheus 中的作业名称。 ""
metrics.serviceMonitor.interval 抓取指标的时间间隔。 ""
metrics.serviceMonitor.scrapeTimeout 抓取结束后的超时时间 ""
metrics.serviceMonitor.relabelings 在抓取之前应用于样本的 RelabelConfigs []
metrics.serviceMonitor.metricRelabelings 在摄取之前应用于样本的 MetricRelabelConfigs []
metrics.serviceMonitor.selector ServiceMonitor 选择器标签 {}
metrics.serviceMonitor.labels ServiceMonitor 的额外标签 {}
metrics.serviceMonitor.honorLabels honorLabels 在与目标标签冲突时选择指标的标签 false
metrics.pdb.create 启用/禁用 Pod Disruption Budget 创建 false
metrics.pdb.minAvailable 应保持调度的 Pod 的最小数量/百分比 1
metrics.pdb.maxUnavailable 可能不可用的 Pod 的最大数量/百分比 ""
metrics.autoscaling.enabled 为 Prometheus Rsocket 代理启用自动缩放 false
metrics.autoscaling.minReplicas Prometheus Rsocket 代理副本的最小数量 ""
metrics.autoscaling.maxReplicas Prometheus Rsocket 代理副本的最大数量 ""
metrics.autoscaling.targetCPU 目标 CPU 利用率百分比 ""
metrics.autoscaling.targetMemory 目标内存利用率百分比 ""

初始化容器参数

名称 描述
waitForBackends.enabled 在启用流式传输时等待数据库和其他服务(例如 Kafka 或 RabbitMQ) true
waitForBackends.image.registry 初始化容器 wait-for-backend 镜像仓库 REGISTRY_NAME
waitForBackends.image.repository 初始化容器 wait-for-backend 镜像名称 REPOSITORY_NAME/kubectl
waitForBackends.image.digest 初始化容器 wait-for-backend 镜像摘要,格式为 sha256:aa.... 请注意,如果设置此参数,将覆盖标签 ""
waitForBackends.image.pullPolicy 初始化容器 wait-for-backend 镜像拉取策略 IfNotPresent
waitForBackends.image.pullSecrets 以数组形式指定 docker-registry 密钥名称 []
waitForBackends.containerSecurityContext.enabled 启用容器的安全上下文 true
waitForBackends.containerSecurityContext.seLinuxOptions 在容器中设置 SELinux 选项 {}
waitForBackends.containerSecurityContext.runAsUser 设置容器的安全上下文 runAsUser 1001
waitForBackends.containerSecurityContext.runAsGroup 设置容器的安全上下文 runAsGroup 1001
waitForBackends.containerSecurityContext.runAsNonRoot 设置容器的安全上下文 runAsNonRoot true
waitForBackends.containerSecurityContext.privileged 设置容器的安全上下文 privileged false
waitForBackends.containerSecurityContext.readOnlyRootFilesystem 设置容器的安全上下文 readOnlyRootFilesystem true
waitForBackends.containerSecurityContext.allowPrivilegeEscalation 设置容器的安全上下文 allowPrivilegeEscalation false
waitForBackends.containerSecurityContext.capabilities.drop 要删除的功能列表 ["ALL"]
waitForBackends.containerSecurityContext.seccompProfile.type 设置容器的安全上下文 seccomp 配置文件 RuntimeDefault
waitForBackends.resourcesPreset 根据一个常见的预设设置容器资源(允许的值:none、nano、micro、small、medium、large、xlarge、2xlarge)。如果设置了 waitForBackends.resources,则忽略此项(建议在生产环境中使用 waitForBackends.resources)。 nano
waitForBackends.resources 为 CPU 或内存等不同资源设置容器请求和限制(对于生产工作负载至关重要) {}

数据库参数

名称 描述
mariadb.enabled 启用/禁用 MariaDB 图表安装 true
mariadb.jdbcParameter.useMysqlMetadata 使用 MariaDB useMysqlMetadata 参数。 true
mariadb.image.registry MariaDB 镜像仓库 REGISTRY_NAME
mariadb.image.repository MariaDB 镜像仓库 REPOSITORY_NAME/mariadb
mariadb.image.digest MariaDB 镜像摘要,格式为 sha256:aa.... 请注意,如果设置此参数,将覆盖标签 ""
mariadb.architecture MariaDB 架构。允许的值:standalonereplication standalone
mariadb.auth.rootPassword MariaDB root 用户的密码 ""
mariadb.auth.username 要创建的新用户的用户名 dataflow
mariadb.auth.password 新用户的密码 change-me
mariadb.auth.database 要创建的数据库名称 dataflow
mariadb.auth.forcePassword 强制用户在数据库中指定所需的密码 false
mariadb.auth.usePasswordFiles 将凭据作为文件挂载,而不是使用环境变量 false
mariadb.initdbScripts 指定在首次启动时要运行的脚本字典 {}
mariadb.primary.resourcesPreset 根据一个常见的预设设置容器资源(允许的值:none、nano、small、medium、large、xlarge、2xlarge)。如果设置了 primary.resources,则忽略此项(建议在生产环境中使用 primary.resources)。 micro
mariadb.primary.resources 为 CPU 或内存等不同资源设置容器请求和限制(对于生产工作负载至关重要) {}
flyway.enabled 启用/禁用在启动时运行 Dataflow 和 Skipper 数据库创建脚本的 flyway true
externalDatabase.host 外部数据库的主机 额外的出口规则
externalDatabase.port 外部数据库端口号 3306
externalDatabase.driver JDBC 驱动程序类的完全限定名称 ""
externalDatabase.scheme 方案是特定于供应商或共享的协议字符串,位于 URL 的“jdbc:”之后 ""
externalDatabase.hibernateDialect Dataflow/Skipper 服务器使用的 Hibernate 方言 ""
externalDatabase.password 外部数据库密码(已弃用:请改用 dataflow.password 和 skipper.password) ""
externalDatabase.existingPasswordSecret 包含数据库密码的现有密钥(已弃用:请改用 dataflow.existingSecret 和 skipper.existingSecret) ""
externalDatabase.existingPasswordKey 包含数据库密码的现有密钥的键(已弃用:请改用 dataflow.existingSecretPasswordKey 和 skipper.existingSecretPasswordKey) ""
externalDatabase.dataflow.url dataflow 服务器的 JDBC URL。覆盖外部方案、主机、端口、密码和 dataflow.database 参数。 ""
externalDatabase.dataflow.database Dataflow 服务器要使用的现有数据库的名称。如果提供了 url,则忽略此项 dataflow
externalDatabase.dataflow.username Dataflow 服务器要使用的外部数据库中的现有用户名 dataflow
externalDatabase.dataflow.password 上述用户名的密码。如果提供了现有密钥,则忽略此项 ""
externalDatabase.dataflow.existingSecret 包含 Dataflow 服务器数据库凭据的现有密钥的名称 ""
externalDatabase.dataflow.existingSecretPasswordKey 包含数据库密码的上述现有密钥的键,默认为 datasource-password ""
externalDatabase.skipper.url skipper 的 JDBC URL。覆盖外部方案、主机、端口、数据库和 skipper.database 参数。 ""
externalDatabase.skipper.database Skipper 服务器要使用的现有数据库的名称。如果提供了 url,则忽略此项 skipper
externalDatabase.skipper.username Skipper 服务器要使用的外部数据库中的现有用户名 skipper
externalDatabase.skipper.password 上述用户名的密码。如果提供了现有密钥,则忽略此项 ""
externalDatabase.skipper.existingSecret 包含 Skipper 服务器数据库凭据的现有密钥的名称 ""
externalDatabase.skipper.existingSecretPasswordKey 包含数据库密码的上述现有密钥的键,默认为 datasource-password ""

RabbitMQ 图表参数

名称 描述
rabbitmq.enabled 启用/禁用 RabbitMQ 图表安装 true
rabbitmq.auth.username RabbitMQ 用户名 user
rabbitmq.resourcesPreset 根据一个常见预设设置容器资源(允许的值:none、nano、small、medium、large、xlarge、2xlarge)。如果设置了 resources,则忽略此项(建议在生产环境中使用 resources)。 micro
rabbitmq.resources 为 CPU 或内存等不同资源设置容器请求和限制(对于生产工作负载至关重要) {}
externalRabbitmq.enabled 启用/禁用外部 RabbitMQ false
externalRabbitmq.host 外部 RabbitMQ 的主机 额外的出口规则
externalRabbitmq.port 外部 RabbitMQ 端口号 5672
externalRabbitmq.username 外部 RabbitMQ 用户名 guest
externalRabbitmq.password 外部 RabbitMQ 密码。它将保存在 Kubernetes 密钥中 guest
externalRabbitmq.vhost 外部 RabbitMQ 虚拟主机。它将保存在 Kubernetes 密钥中 ""
externalRabbitmq.existingPasswordSecret 包含 RabbitMQ 密码的现有密钥(已弃用:请改用 externalRabbitmq.existingSecret) ""
externalRabbitmq.existingSecret 包含 RabbitMQ 凭据的现有密钥的名称 ""
externalRabbitmq.existingSecretPasswordKey 上述包含 RabbitMQ 密码的现有密钥的键,默认为 password ""

Kafka 图表参数

名称 描述
kafka.enabled 启用/禁用 Kafka 图表安装 false
kafka.controller.replicaCount Kafka 控制器+代理节点的数量 1
kafka.controller.resourcesPreset 根据一个常见预设设置容器资源(允许的值:none、nano、small、medium、large、xlarge、2xlarge)。如果设置了 controller.resources,则忽略此项(建议在生产环境中使用 controller.resources)。 small
kafka.controller.resources 为 CPU 或内存等不同资源设置容器请求和限制(对于生产工作负载至关重要) {}
kafka.extraConfig 要附加到动态设置的 Kafka 额外配置 offsets.topic.replication.factor=1
externalKafka.enabled 启用/禁用外部 Kafka false
externalKafka.brokers 外部 Kafka 代理 localhost:9092
externalKafka.zkNodes 外部 Zookeeper 节点 localhost:2181

使用 --set key=value[,key=value] 参数为 helm install 指定每个参数。例如,

helm install my-release --set server.replicaCount=2 oci://REGISTRY_NAME/REPOSITORY_NAME/spring-cloud-dataflow

注意:您需要将占位符 REGISTRY_NAMEREPOSITORY_NAME 替换为对您的 Helm 图表注册表和存储库的引用。例如,在 Bitnami 的情况下,您需要使用 REGISTRY_NAME=registry-1.docker.ioREPOSITORY_NAME=bitnamicharts

上述命令安装了具有 2 个 Dataflow 服务器副本的 Spring Cloud Data Flow 图表。

或者,可以在安装图表时提供一个 YAML 文件,其中指定了参数的值。例如,

helm install my-release -f values.yaml oci://REGISTRY_NAME/REPOSITORY_NAME/spring-cloud-dataflow

注意:您需要将占位符 REGISTRY_NAMEREPOSITORY_NAME 替换为对您的 Helm 图表注册表和存储库的引用。例如,在 Bitnami 的情况下,您需要使用 REGISTRY_NAME=registry-1.docker.ioREPOSITORY_NAME=bitnamicharts提示:您可以使用默认的 values.yaml

故障排除

本故障排除指南中查找有关如何处理与 Bitnami Helm 图表相关的常见错误的更多信息。

升级

如果您启用了 RabbitMQ 图表作为 Skipper 用于管理流内容的消息传递解决方案,则在升级时需要设置 rabbitmq.auth.passwordrabbitmq.auth.erlangCookie 参数,以便准备/活动探测正常工作。检查 RabbitMQ 密钥以获取密码和 Erlang Cookie,然后您可以使用以下命令升级图表

到 28.0.0

此主要版本将 RabbitMQ 子图表更新到其最新主要版本 14.0.0。此处您可以找到有关该版本中引入的更改的更多信息。

到 27.0.0

此主要版本更改了以下安全默认值

  • runAsGroup0 更改为 1001
  • readOnlyRootFilesystem 设置为 true
  • resourcesPresetnone 更改为在我们的测试套件中工作的最小大小(注意:resourcesPreset 不适用于生产环境,而应使用适合您的用例的 resources)。
  • global.compatibility.openshift.adaptSecurityContextdisabled 更改为 auto

这可能会破坏部署中使用的任何自定义或初始化脚本。如果是这种情况,请将默认值更改为以前的值。

此外,此主要版本将 MariaDB 图表版本提升至 18.x.x;升级过程中预计不会出现重大问题。

到 25.0.0

此主要版本将 Kafka 子图表更新到其最新主要版本 26.0.0。有关此子图表主要版本的更多信息,请参阅Kafka 升级说明

到 24.0.0

此主要版本将 MariaDB 版本提升至 11.1。升级过程中预计不会出现重大问题。

到 23.0.0

此主要版本将 Kafka 子图表更新到其最新主要版本 25.0.0。有关此子图表主要版本的更多信息,请参阅Kafka 升级说明

到 22.0.0

此主要更新将 Kafka 子图表更新到其最新主要版本 24.0.0。此新版本重构了 Kafka 图表架构,并且在升级过程中需要手动操作。有关此子图表主要版本的更多信息,请参阅Kafka 升级说明

影响 spring-cloud-dataflow 图表默认值的最显着变化是

  • kafka.replicaCount 已重命名为 kafka.controller.replicaCount
  • 默认值为 1 的值 kafka.offsetsTopicReplicationFactor 现在使用新值 kafka.extraConfig 进行配置。

到 18.0.0

此主要更新将 Kafka 子图表更新到其最新主要版本 22.0.0。此新版本的 Kafka 默认使用 Kraft。有关此子图表主要版本的更多信息,请参阅Kafka 升级说明

到 17.0.0

此主要版本将 MariaDB 版本提升至 10.11。请按照上游说明从 MariaDB 10.6 升级到 10.11。升级过程中预计不会出现重大问题。

到 16.0.0

此主要更新将 Kafka 子图表更新到其最新主要版本 21.0.0。此处您可以找到有关该版本中引入的更改的更多信息。

到 15.0.0

此主要更新将 Kafka 子图表更新到其最新主要版本 20.0.0。此处您可以找到有关该版本中引入的更改的更多信息。

到 14.0.0

此主要更新将 RabbitMQ 子图表更新到其最新主要版本 11.0.0。此处您可以找到有关该版本中引入的更改的更多信息。

到 13.0.0

此主要更新将 Kafka 子图表更新到其最新主要版本 19.0.0。有关此子图表主要版本的更多信息,请参阅Kafka 升级说明

到 12.0.0

此主要更新将 Kafka 子图表更新到其最新主要版本 18.0.0。升级过程中预计不会出现重大问题。

到 11.0.0

此图表将 RabbitMQ 版本提升至 3.10.x。升级过程中预计不会出现问题。

到 10.0.0

此主要更新将 Kafka 子图表更新到其最新主要版本 17.0.0。升级过程中预计不会出现重大问题。

到 9.0.0

此主要更新将 RabbitMQ 子图表更新到其最新主要版本 9.0.0。此处您可以找到有关该版本中引入的更改的更多信息。

到 8.0.0

此主要版本将 MariaDB 版本提升至 10.6。请遵循上游说明从 MariaDB 10.5 升级到 10.6。升级过程中预计不会出现重大问题。

到 7.0.0

此主要版本将 Kafka 子图表更新到其最新主要版本 16.0.0。此处您可以找到有关该版本中引入的更改的更多信息。

到 6.0.0

此主要版本将 Kafka 子图表更新到其最新主要版本 15.x.x,其中包含对支持值的若干更改,并将 Kafka 主要版本提升到 3.x 系列(查看升级说明以获取更多信息)。

要使用 Kafka 作为消息传递解决方案从 5.x 升级到 6.0.0,应通过维护 Kafka 2.x 系列来完成。为此,请按照以下说明操作(以下示例假设版本名称为 scdf,版本命名空间为 default

  1. 获取当前版本中的凭据

    export MARIADB_ROOT_PASSWORD=$(kubectl get secret --namespace default scdf-mariadb -o jsonpath="{.data.mariadb-root-password}" | base64 -d)
    export MARIADB_PASSWORD=$(kubectl get secret --namespace default scdf-mariadb -o jsonpath="{.data.mariadb-password}" | base64 -d)
  2. 使用相同的 Kafka 版本升级您的版本

    $ export CURRENT_KAFKA_VERSION=$(kubectl exec scdf-kafka-0 -- bash -c 'echo $BITNAMI_IMAGE_VERSION')
    helm upgrade scdf oci://REGISTRY_NAME/REPOSITORY_NAME/spring-cloud-dataflow \
      --set rabbitmq.enabled=false \
      --set kafka.enabled=true \
      --set kafka.image.tag=$CURRENT_KAFKA_VERSION \
      --set mariadb.auth.password=$MARIADB_PASSWORD \
      --set mariadb.auth.rootPassword=$MARIADB_ROOT_PASSWORD

    注意:您需要将占位符 REGISTRY_NAMEREPOSITORY_NAME 替换为对您的 Helm 图表注册表和存储库的引用。例如,在 Bitnami 的情况下,您需要使用 REGISTRY_NAME=registry-1.docker.ioREPOSITORY_NAME=bitnamicharts

到 5.0.0

此主要版本重命名了此图表中的多个值并添加了缺少的功能,以便与 Bitnami 图表存储库中的其余资产保持一致。

受影响的值

  • serviceMonitor.extraLabels 重命名为 serviceMonitor.labels
  • server.strategyTypeskikker.strategyType 已分别替换为 server.updateStrategyskikker.updateStrategy。虽然 strategyType 被解释为字符串,但 updateStrategy 被解释为对象。
  • 服务帐户令牌现在默认设置为自动挂载 false。要更改此设置,请将值 serviceAccount.automountServiceAccountToken 设置为 true

此外,MariaDB 子图表也更新到了最新的主要版本 10.0.0,其中包含类似的更改。您可以在此处找到有关此版本中引入的更改的更多信息。

到 4.0.0

此主要版本将 Kafka 子图表更新为其最新的主要版本 14.0.0。您可以在此处找到有关此版本中引入的更改的更多信息。

到 3.0.0

此主要版本将 Kafka 子图表更新为其最新的主要版本 13.0.0。有关此子图表主要版本的更多信息,请参阅kafka 升级说明

到 2.0.0

2020 年 11 月 13 日,Helm v2 支持正式结束,此主要版本是对 Helm Chart 应用必要更改的结果,以便能够合并 Helm v3 中添加的不同功能,并与 Helm 项目本身保持一致,关于 Helm v2 EOL。

此主要版本中引入了哪些更改?

  • 此 Helm Chart 的先前版本使用 apiVersion: v1(可由 Helm 2 和 3 安装),此 Helm Chart 已更新为 apiVersion: v2(仅可由 Helm 3 安装)。您可以在此处找到有关 apiVersion 字段的更多信息。
  • 将依赖项信息从 requirements.yaml 移动到 Chart.yaml
  • 运行 helm dependency update 后,将生成一个 Chart.lock 文件,其中包含与先前 requirements.lock 中使用的结构相同的结构
  • Chart.yaml 文件中存在的不同字段已按字母顺序以统一的方式为所有 Bitnami Helm Charts 排序

升级到此版本时的注意事项

  • 如果您想从使用 Helm v3 安装的先前版本升级到此版本,则应该不会遇到任何问题。
  • 如果您想使用 Helm v2 升级到此版本,则不支持此方案,因为此版本不再支持 Helm v2。
  • 如果您使用 Helm v2 安装了先前版本,并且想使用 Helm v3 升级到此版本,请参阅有关从 Helm v2 迁移到 v3 的官方 Helm 文档

v0.x.x

helm upgrade my-release oci://REGISTRY_NAME/REPOSITORY_NAME/spring-cloud-dataflow --set mariadb.rootUser.password=[MARIADB_ROOT_PASSWORD] --set rabbitmq.auth.password=[RABBITMQ_PASSWORD] --set rabbitmq.auth.erlangCookie=[RABBITMQ_ERLANG_COOKIE]

注意:您需要将占位符 REGISTRY_NAMEREPOSITORY_NAME 替换为对您的 Helm 图表注册表和存储库的引用。例如,在 Bitnami 的情况下,您需要使用 REGISTRY_NAME=registry-1.docker.ioREPOSITORY_NAME=bitnamicharts

v1.x.x

helm upgrade my-release oci://REGISTRY_NAME/REPOSITORY_NAME/spring-cloud-dataflow --set mariadb.auth.rootPassword=[MARIADB_ROOT_PASSWORD] --set rabbitmq.auth.password=[RABBITMQ_PASSWORD] --set rabbitmq.auth.erlangCookie=[RABBITMQ_ERLANG_COOKIE]

注意:您需要将占位符 REGISTRY_NAMEREPOSITORY_NAME 替换为对您的 Helm 图表注册表和存储库的引用。例如,在 Bitnami 的情况下,您需要使用 REGISTRY_NAME=registry-1.docker.ioREPOSITORY_NAME=bitnamicharts

到 1.0.0

MariaDB 依赖项版本已升级到引入多个不兼容性的新主版本。因此,除非使用外部数据库,否则不保证向后兼容性。查看MariaDB 升级说明了解更多信息。

要升级到1.0.0,您需要重用用于保存先前版本中 MariaDB 数据的 PVC。为此,请按照以下说明操作(以下示例假设版本名称为dataflow

注意:在执行任何这些操作之前,请创建数据库备份。

获取凭据以及用于在当前版本上保存 MariaDB 数据的 PVC 的名称

export MARIADB_ROOT_PASSWORD=$(kubectl get secret --namespace default dataflow-mariadb -o jsonpath="{.data.mariadb-root-password}" | base64 -d)
export MARIADB_PASSWORD=$(kubectl get secret --namespace default dataflow-mariadb -o jsonpath="{.data.mariadb-password}" | base64 -d)
export MARIADB_PVC=$(kubectl get pvc -l app=mariadb,component=master,release=dataflow -o jsonpath="{.items[0].metadata.name}")
export RABBITMQ_PASSWORD=$(kubectl get secret --namespace default dataflow-rabbitmq -o jsonpath="{.data.rabbitmq-password}" | base64 -d)
export RABBITMQ_ERLANG_COOKIE=$(kubectl get secret --namespace default dataflow-rabbitmq -o jsonpath="{.data.rabbitmq-erlang-cookie}" | base64 -d)

升级您的版本(保持版本不变),禁用 MariaDB 并将数据流副本缩减为 0

helm upgrade dataflow oci://REGISTRY_NAME/REPOSITORY_NAME/spring-cloud-dataflow --version 0.7.4 \
  --set server.replicaCount=0 \
  --set skipper.replicaCount=0 \
  --set mariadb.enabled=false \
  --set rabbitmq.auth.password=$RABBITMQ_PASSWORD \
  --set rabbitmq.auth.erlangCookie=$RABBITMQ_ERLANG_COOKIE

注意:您需要将占位符 REGISTRY_NAMEREPOSITORY_NAME 替换为对您的 Helm 图表注册表和存储库的引用。例如,在 Bitnami 的情况下,您需要使用 REGISTRY_NAME=registry-1.docker.ioREPOSITORY_NAME=bitnamicharts

最后,将您的版本升级到 1.0.0,重复使用现有的 PVC,并重新启用 MariaDB

helm upgrade dataflow oci://REGISTRY_NAME/REPOSITORY_NAME/spring-cloud-dataflow \
  --set mariadb.primary.persistence.existingClaim=$MARIADB_PVC \
  --set mariadb.auth.rootPassword=$MARIADB_ROOT_PASSWORD \
  --set mariadb.auth.password=$MARIADB_PASSWORD \
  --set rabbitmq.auth.password=$RABBITMQ_PASSWORD \
  --set rabbitmq.auth.erlangCookie=$RABBITMQ_ERLANG_COOKIE

注意:您需要将占位符 REGISTRY_NAMEREPOSITORY_NAME 替换为对您的 Helm 图表注册表和存储库的引用。例如,在 Bitnami 的情况下,您需要使用 REGISTRY_NAME=registry-1.docker.ioREPOSITORY_NAME=bitnamicharts

您应该会在 MariaDB 容器日志中看到以下几行

$ kubectl logs $(kubectl get pods -l app.kubernetes.io/instance=dataflow,app.kubernetes.io/name=mariadb,app.kubernetes.io/component=primary -o jsonpath="{.items[0].metadata.name}")
...
mariadb 12:13:24.98 INFO  ==> Using persisted data
mariadb 12:13:25.01 INFO  ==> Running mysql_upgrade
...

许可证

版权所有 © 2024 Broadcom。“Broadcom”一词指的是 Broadcom Inc. 和/或其子公司。

根据 Apache 许可证 2.0 版(“许可证”)获得许可;除非符合许可证,否则您不得使用此文件。您可以在以下网址获取许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则根据许可证分发的软件按“原样”分发,不提供任何明示或暗示的保证或条件。有关许可证下许可和限制的特定语言,请参阅许可证。

预期输出

发出 helm install 命令后,您应该会看到类似于以下内容的输出

NAME: my-release
LAST DEPLOYED: Sun Nov 22 21:12:29 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
** Please be patient while the chart is being deployed **

Spring Cloud Data Flow 图表是使用以下组件部署的

  • Spring Cloud Data Flow 服务器
  • Spring Cloud Skipper 服务器

您可以通过集群内的以下 DNS 名称访问 Spring Cloud Data Flow

my-release-spring-cloud-dataflow-server.default.svc.cluster.local (port 8080)

要从集群外部访问 Spring Cloud Data Flow 仪表板,请运行以下命令

  1. 通过运行以下命令获取 Data Flow 仪表板 URL

    export SERVICEPORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].port}" services my-release-spring-cloud-dataflow-server) kubectl port-forward --namespace default svc/my-release-spring-cloud-dataflow-server ${SERVICEPORT}:${SERVICEPORT} & echo "http://127.0.0.1:${SERVICEPORT}/dashboard"

  2. 打开浏览器并使用获取的 URL 访问 Data Flow 仪表板。

如果您愿意,可以通过将以下 set 参数传递给 helm install 来更改 Spring Cloud Data Flow 服务类型

--set server.service.type=ServiceType

其中 ServiceType 将是一个有效的服务名称(例如 LoadBalancerNodePort 等)。

LoadBalancer IP 可能需要几分钟才能可用。您可以通过运行 kubectl get svc -w my-release-spring-cloud-dataflow-server 来观察服务器的状态

如果您使用不支持负载均衡器的 Minikube,则可以使用以下命令获取服务器的 URL

minikube service --url my-release-spring-cloud-dataflow-server

您现在已经在 Kubernetes 集群的默认命名空间中创建了一个新版本。应用程序及其所需服务需要几分钟才能启动。您可以通过发出 kubectl get pod -w 命令来检查状态。您需要等待 READY 列为所有 pod 显示 1/1

当所有 pod 都准备就绪后,您可以通过访问 http://<SERVICE_ADDRESS>/dashboard 来访问 Spring Cloud Data Flow 仪表板,其中 <SERVICE_ADDRESS> 是之前显示的 kubectlminikube 命令返回的地址。

版本兼容性

以下列表显示了 Spring Cloud Data Flow 与相应 Helm Chart 版本的版本兼容性

官方 Helm 存储库中已弃用的图表映射

SCDF 版本 图表版本
SCDF-K8S-Server 1.7.x 1.0.x
SCDF-K8S-Server 2.0.x 2.2.x
SCDF-K8S-Server 2.1.x 2.3.x
SCDF-K8S-Server 2.2.x 2.4.x
SCDF-K8S-Server 2.3.x 2.5.x
SCDF-K8S-Server 2.4.x 2.6.x
SCDF-K8S-Server 2.5.x 2.7.x
SCDF-K8S-Server 2.6.x 2.8.x

Bitnami 图表映射

SCDF 版本 图表版本
SCDF-K8S-Server 2.6.x 1.1.x
SCDF-K8S-Server 2.7.x 2.0.x

注册预构建应用程序

所有预构建的流应用程序

  • 都可作为 Apache Maven 工件或 Docker 镜像使用。
  • 使用 RabbitMQ 或 Apache Kafka。
  • 支持通过 Prometheus 和 InfluxDB 进行监控。
  • 包含用于 UI 中的应用程序属性的元数据以及 shell 中的代码补全。

您可以使用 app register 功能单独注册应用程序,也可以使用 app import 功能批量注册应用程序。还有一些 dataflow.spring.io 链接,它们代表特定版本的预构建应用程序组,这对于入门很有用。

您可以使用 UI 或 shell 注册应用程序。即使我们只使用两个预构建的应用程序,我们也会注册全套的预构建应用程序。

在 Kubernetes 上安装 Data Flow 的最简单方法是使用 Helm 图表,该图表使用 RabbitMQ 作为默认的消息中间件。导入 RabbitMQ 版本应用程序的命令如下

dataflow:>app import --uri https://dataflow.springframework.org.cn/rabbitmq-docker-latest

如果您在 Helm 图表中设置了 kafka.enabled=true,或者按照基于手动 kubectl 的安装说明在 Kubernetes 上安装 Data Flow 并选择使用 Kafka 作为消息中间件,请将上述 URL 中的 rabbitmq 更改为 kafka

Kubernetes 的 Data Flow 服务器仅支持使用指向 Docker 资源的 --uri 属性注册的应用程序。但是,我们支持 --metadata-uri 属性的 Maven 资源,该属性用于列出每个应用程序支持的属性。例如,以下应用程序注册是有效的

app register --type source --name time --uri docker://springcloudstream/time-source-rabbit:{docker-time-source-rabbit-version} --metadata-uri maven://org.springframework.cloud.stream.app:time-source-rabbit:jar:metadata:{docker-time-source-rabbit-version}

使用 Maven、HTTP 或文件资源或可执行 jar(通过使用以 maven://http://file:// 为前缀的 --uri 属性)注册的任何应用程序都**_不受支持_**。

应用程序和服务器属性

本节介绍如何自定义应用程序的部署。您可以使用许多属性来影响已部署应用程序的设置。属性可以按每个应用程序应用,也可以在所有已部署应用程序的相应服务器配置中应用。

按每个应用程序设置的属性始终优先于设置为服务器配置的属性。这种安排允许您按每个应用程序覆盖全局服务器级属性。

所有已部署任务的属性定义在 src/kubernetes/server/server-config.yaml 文件中,Streams 的属性定义在 src/kubernetes/skipper/skipper-config-(binder).yaml 文件中。将 (binder) 替换为您正在使用的消息中间件,例如 rabbitkafka

内存和 CPU 设置

应用程序使用默认的内存和 CPU 设置进行部署。如果需要,可以调整这些值。以下示例显示如何将 Limits 设置为 CPU1000m 和内存的 1024Mi,并将 Requests 设置为 CPU800m 和内存的 640Mi

deployer.<app>.kubernetes.limits.cpu=1000m
deployer.<app>.kubernetes.limits.memory=1024Mi
deployer.<app>.kubernetes.requests.cpu=800m
deployer.<app>.kubernetes.requests.memory=640Mi

这些值将导致使用以下容器设置

Limits:
cpu: 1
memory: 1Gi
Requests:
cpu: 800m
memory: 640Mi

您还可以控制全局设置 cpumemory 的默认值。

以下示例显示如何设置 Streams 和 Tasks 的 CPU 和内存

data:
  application.yaml: |-
    spring:
      cloud:
        skipper:
          server:
            platform:
              kubernetes:
                accounts:
                  default:
                    limits:
                      memory: 640mi
                      cpu: 500m
data:
  application.yaml: |-
    spring:
      cloud:
        dataflow:
          task:
            platform:
              kubernetes:
                accounts:
                  default:
                    limits:
                      memory: 640mi
                      cpu: 500m

到目前为止,我们使用的设置仅影响容器的设置。它们不会影响容器中 JVM 进程的内存设置。如果要设置 JVM 内存设置,可以提供一个环境变量来实现。有关详细信息,请参阅下一节。

环境变量

要影响给定应用程序的环境设置,可以使用 spring.cloud.deployer.kubernetes.environmentVariables 部署器属性。例如,生产环境中的一个常见需求是影响 JVM 内存参数。您可以使用 JAVA_TOOL_OPTIONS 环境变量来实现,如下所示

deployer.<app>.kubernetes.environmentVariables=JAVA_TOOL_OPTIONS=-Xmx1024m

environmentVariables 属性接受逗号分隔的字符串。如果环境变量包含的值也是逗号分隔的字符串,则必须将其括在单引号中,例如

spring.cloud.deployer.kubernetes.environmentVariables=spring.cloud.stream.kafka.binder.brokers='somehost:9092, anotherhost:9093'

这样做会覆盖所需 <app> 的 JVM 内存设置(将 <app> 替换为应用程序的名称)。

活跃性和就绪性探针

livenessreadiness 探针分别使用名为 /health/info 的路径。它们都使用 10delay,以及分别使用 6010period。您可以在部署流时使用部署器属性更改这些默认值。活跃性和就绪性探针仅适用于 Streams。

以下示例通过设置部署程序属性来更改 liveness 探针(将 <app> 替换为您的应用程序名称)

deployer.<app>.kubernetes.livenessProbePath=/health
deployer.<app>.kubernetes.livenessProbeDelay=120
deployer.<app>.kubernetes.livenessProbePeriod=20

您可以按如下方式将相同内容声明为流的服务器全局配置的一部分

data:
  application.yaml: |-
    spring:
      cloud:
        skipper:
          server:
            platform:
              kubernetes:
                accounts:
                  default:
                    livenessProbePath: /health
                    livenessProbeDelay: 120
                    livenessProbePeriod: 20

同样,您可以将 liveness 替换为 readiness 以覆盖默认的 readiness 设置。

默认情况下,端口 8080 用作探测端口。您可以通过设置部署程序属性来更改 livenessreadiness 探测端口的默认值,如下所示

deployer.<app>.kubernetes.readinessProbePort=7000
deployer.<app>.kubernetes.livenessProbePort=7000

您可以按如下方式将相同内容声明为流的全局配置的一部分

data:
  application.yaml: |-
    spring:
      cloud:
        skipper:
          server:
            platform:
              kubernetes:
                accounts:
                  default:
                    readinessProbePort: 7000
                    livenessProbePort: 7000

默认情况下,livenessreadiness 探测路径使用 Spring Boot 2.x+ 执行器端点。要使用 Spring Boot 1.x 执行器端点路径,您必须调整 livenessreadiness 值,如下所示(将 <app> 替换为您的应用程序名称)

deployer.<app>.kubernetes.livenessProbePath=/health
deployer.<app>.kubernetes.readinessProbePath=/info

要针对每个应用程序自动将 livenessreadiness 端点设置为默认的 Spring Boot 1.x 路径,您可以设置以下属性

deployer.<app>.kubernetes.bootMajorVersion=1

您可以使用存储在 Kubernetes 密钥 中的凭据来访问受保护的探测端点。您可以使用现有密钥,前提是凭据包含在密钥 data 块的 credentials 密钥名称下。您可以在每个应用程序的基础上配置探测身份验证。启用后,它将使用相同的凭据和身份验证类型应用于 livenessreadiness 探测端点。目前,仅支持 Basic 身份验证。

要创建新密钥,请执行以下操作

  1. 使用用于访问受保护探测端点的凭据生成 base64 字符串。

    基本身份验证以 username:password 格式将用户名和密码编码为 base64 字符串。

    以下示例(包括输出,您应该将 userpass 替换为您的值)显示了如何生成 base64 字符串

    echo -n "user:pass" | base64
    dXNlcjpwYXNz
  2. 使用编码后的凭据,创建一个文件(例如,myprobesecret.yml),其中包含以下内容

    apiVersion: v1
    kind: Secret
    metadata:
    name:
    myprobesecret type:
    Opaque data:
    credentials: GENERATED_BASE64_STRING
  3. GENERATED_BASE64_STRING 替换为之前生成的 base64 编码值。
  4. 使用 kubectl 创建密钥,如下所示

    kubectl create -f ./myprobesecret.yml
    secret "myprobesecret" created
  5. 设置以下部署程序属性以在访问探测端点时使用身份验证,如下所示

    deployer.<app>.kubernetes.probeCredentialsSecret=myprobesecret

    <app> 替换为要应用身份验证的应用程序的名称。

使用 SPRING_APPLICATION_JSON

您可以使用 SPRING_APPLICATION_JSON 环境变量来设置 Data Flow 服务器属性(包括 Maven 存储库设置的配置),这些属性在所有 Data Flow 服务器实现中都是通用的。这些设置位于部署 YAML 的容器 env 部分的服务器级别。以下示例显示了如何执行此操作

env:
  - name: SPRING_APPLICATION_JSON
    value: |-
    {
      "maven": {
        "local-repository": null,
        "remote-repositories": {
          "repo1": {
            "url": "https://repo.spring.io/libs-snapshot"
          }
        }
      }
    }

私有 Docker 镜像仓库

您可以针对每个应用程序从私有镜像仓库中提取 Docker 镜像。首先,您必须在集群中创建一个密钥。请按照 从私有镜像仓库中提取镜像 指南创建密钥。

创建密钥后,您可以使用 imagePullSecret 属性设置要使用的密钥,如下所示

deployer.<app>.kubernetes.imagePullSecret=mysecret

<app> 替换为您的应用程序名称,并将 mysecret 替换为您之前创建的密钥名称。

您还可以在全局服务器级别配置镜像拉取密钥。

以下示例展示了如何为流和任务执行此操作

data:
  application.yaml: |-
    spring:
      cloud:
        skipper:
          server:
            platform:
              kubernetes:
                accounts:
                  default:
                    imagePullSecret: mysecret
data:
  application.yaml: |-
    spring:
      cloud:
        dataflow:
          task:
            platform:
              kubernetes:
                accounts:
                  default:
                    imagePullSecret: mysecret

mysecret 替换为您之前创建的密钥名称。

卷挂载密钥

Data Flow 使用存储在容器镜像标签中的应用程序元数据。要访问私有注册表中的元数据标签,您必须扩展 Data Flow 部署配置并将注册表密钥挂载为密钥属性源

    spec:
      containers:
      - name: scdf-server
        ...
        volumeMounts:
          - name: mysecret
            mountPath: /etc/secrets/mysecret
            readOnly: true
        ...
      volumes:
        - name: mysecret
          secret:
            secretName: mysecret

注解

您可以为每个应用程序添加 Kubernetes 对象的注解。支持的对象类型为 pod DeploymentServiceJob。注解以 key:value 格式定义,允许多个注解之间用逗号分隔。有关注解的更多信息和用例,请参阅注解

以下示例展示了如何配置应用程序以使用注解

deployer.<app>.kubernetes.podAnnotations=annotationName:annotationValue
deployer.<app>.kubernetes.serviceAnnotations=annotationName:annotationValue,annotationName2:annotationValue2
deployer.<app>.kubernetes.jobAnnotations=annotationName:annotationValue

<app> 替换为您的应用程序名称和注解的值。

入口点样式

入口点样式会影响应用程序属性传递到要部署的容器的方式。当前支持三种样式

  • exec(默认):在部署请求中将所有应用程序属性和命令行参数作为容器参数传递。应用程序属性将转换为 --key=value 的格式。
  • shell:将所有应用程序属性和命令行参数作为环境变量传递。每个应用程序和命令行参数属性都将转换为大写字符串,并将 . 字符替换为 _
  • boot:创建一个名为 SPRING_APPLICATION_JSON 的环境变量,其中包含所有应用程序属性的 JSON 表示形式。部署请求中的命令行参数将设置为容器参数。

在容器上使用 docker shell 入口点时,请注意其对应用程序 SIGTERM 的影响,如 Docker 文档 中的摘录所述。

在所有情况下,在服务器级别配置和每个应用程序基础上定义的环境变量都将按原样设置到容器上。

您可以按如下方式配置应用程序

deployer.<app>.kubernetes.entryPointStyle=<Entry Point Style>

<app> 替换为您的应用程序名称,并将 <Entry Point Style> 替换为您所需的入口点样式。

您还可以在全局服务器级别配置入口点样式。

以下示例显示了如何对流执行此操作

data:
  application.yaml: |-
    spring:
      cloud:
        skipper:
          server:
            platform:
              kubernetes:
                accounts:
                  default:
                    entryPointStyle: entryPointStyle

以下示例显示了如何对任务执行此操作

data:
  application.yaml: |-
    spring:
      cloud:
        dataflow:
          task:
            platform:
              kubernetes:
                accounts:
                  default:
                    entryPointStyle: entryPointStyle

entryPointStyle 替换为所需的入口点样式。

您应该选择 execshell 作为入口点样式,以对应于容器 DockerfileENTRYPOINT 语法的定义方式。有关 execshell 的更多信息和用例,请参阅 Docker 文档的 ENTRYPOINT 部分。

使用 boot 入口点样式对应于使用 exec 样式的 ENTRYPOINT。部署请求中的命令行参数将传递到容器,并将应用程序属性映射到 SPRING_APPLICATION_JSON 环境变量而不是命令行参数。

建议您在启动 Spring Batch/Boot 应用程序时使用 exec 入口点样式,或在应用程序中实现您自己的设置作业参数的方法。这是因为 shell 入口点样式会将命令行参数转换为环境变量,这会阻止 Spring Boot 从命令行参数创建作业参数。这可以 在此处 看到。

当您使用 boot 入口点样式时,deployer.<app>.kubernetes.environmentVariables 属性不得包含 SPRING_APPLICATION_JSON

部署服务帐户

您可以通过属性为应用程序部署配置自定义服务帐户。您可以使用现有服务帐户或创建新服务帐户。创建服务帐户的一种方法是使用 kubectl,如下所示

kubectl create serviceaccount myserviceaccountname
serviceaccount "myserviceaccountname" created

然后,您可以配置单个应用程序,如下所示

deployer.<app>.kubernetes.deploymentServiceAccountName=myserviceaccountname

<app> 替换为您的应用程序名称,并将 myserviceaccountname 替换为您的服务帐户名称。

您还可以在全局服务器级别配置服务帐户名称。

以下示例显示了如何对流执行此操作

data:
  application.yaml: |-
    spring:
      cloud:
        skipper:
          server:
            platform:
              kubernetes:
                accounts:
                  default:
                    deploymentServiceAccountName: myserviceaccountname

以下示例显示了如何对任务执行此操作

data:
  application.yaml: |-
    spring:
      cloud:
        dataflow:
          task:
            platform:
              kubernetes:
                accounts:
                  default:
                    deploymentServiceAccountName: myserviceaccountname

myserviceaccountname 替换为要应用于所有部署的服务帐户名称。

镜像拉取策略

镜像拉取策略定义了何时应将 Docker 镜像拉取到本地注册表。目前,支持三种策略

  • IfNotPresent(默认):如果镜像已存在,则不拉取。
  • Always:始终拉取镜像,无论它是否已存在。
  • Never:从不拉取镜像。仅使用已存在的镜像。

以下示例显示了如何单独配置应用程序

deployer.<app>.kubernetes.imagePullPolicy=Always

<app> 替换为您的应用程序名称,并将 Always 替换为您所需的镜像拉取策略。

您可以在全局服务器级别配置镜像拉取策略。

以下示例显示了如何对流执行此操作

data:
  application.yaml: |-
    spring:
      cloud:
        skipper:
          server:
            platform:
              kubernetes:
                accounts:
                  default:
                    imagePullPolicy: Always

以下示例显示了如何对任务执行此操作

data:
  application.yaml: |-
    spring:
      cloud:
        dataflow:
          task:
            platform:
              kubernetes:
                accounts:
                  default:
                    imagePullPolicy: Always

Always 替换为您所需的镜像拉取策略。

部署标签

您可以在与 Deployment 相关的对象上设置自定义标签。有关标签的更多信息,请参阅 标签。标签以 键:值 格式指定。

以下示例显示了如何单独配置应用程序

deployer.<app>.kubernetes.deploymentLabels=myLabelName:myLabelValue

<app> 替换为您的应用程序名称,将 myLabelName 替换为您的标签名称,并将 myLabelValue 替换为您的标签值。

此外,您还可以应用多个标签,如下所示

deployer.<app>.kubernetes.deploymentLabels=myLabelName:myLabelValue,myLabelName2:myLabelValue2

NodePort

应用程序使用 Service 类型 ClusterIP 进行部署,这是默认的 Kubernetes Service 类型(除非另有定义)。ClusterIP 服务只能从集群内部访问。

要将已部署的应用程序公开到外部,一种选择是使用 NodePort。有关更多信息,请参阅 NodePort 文档。

以下示例展示了如何使用 Kubernetes 分配的端口单独配置应用程序

deployer.<app>.kubernetes.createNodePort=true

<app> 替换为您的应用程序名称。

此外,您可以定义用于 NodePort Service 的端口,如下所示

deployer.<app>.kubernetes.createNodePort=31101

<app> 替换为您的应用程序名称,并将 31101 的值替换为您想要的端口。

手动定义端口时,该端口必须尚未被使用,并且必须在定义的 NodePort 范围内。根据 NodePort,默认端口范围为 30000-32767。

监控

要详细了解在 Kubernetes 上运行 Prometheus 的数据流中的监控体验,请参阅流监控任务监控指南。