使用 kubectl
进行部署
要使用 kubectl
进行安装,您需要获取 Kubernetes 配置文件。
它们包含部署的不同应用程序和服务所需的服务发现所需的元数据。要查看代码,请输入以下命令
git clone https://github.com/spring-cloud/spring-cloud-dataflow
cd spring-cloud-dataflow
git checkout main
如果您使用 Minikube,请参阅设置 Minikube 资源,了解有关 CPU 和 RAM 资源需求的详细信息。
通过 install-scdf.sh
脚本安装 Spring Cloud Data Flow。
Spring Cloud Data Flow 提供了 install-scdf.sh
脚本,该脚本将执行 kubectl
命令,以便在 Kubernetes 上安装用于开发目的的 SCDF。如果您无法运行 shell 脚本,则可以按照下方所示的手动说明进行操作。该脚本当前支持以下 Kubernetes 平台:kind
、minikube
、gke
和 tmc
。
配置 Spring Cloud Data Flow 创建 Grafana 仪表板
如果您希望在 Grafana 中查看由 SCDF 启动的应用程序的指标,请在执行 install-scdf.sh
脚本之前,编辑 src/deploy/k8s/yaml/server-config.yaml
并将 management.defaults.metrics.export.enabled
设置为 true
。
配置 install-scdf.sh
并安装 Spring Cloud Data Flow
环境设置
该脚本提供以下环境变量来确定您希望如何安装 SCDF
- NS - 确定将安装数据流实例的命名空间。
- K8S_DRIVER - 根据您的 Kubernetes 部署配置 Kubernetes 环境。目前支持
kind
、docker
(minikube)、tmc
。默认为kind
。 - DOCKER_SERVER - 您环境中支持的 Docker 注册表。
- DOCKER_USER - Docker 服务器的用户。
- DOCKER_PASSWORD - Docker 服务器的密码。
- DOCKER_EMAIL - Docker 服务器的电子邮件。
- DATABASE - 要由 Spring Cloud Data Flow 和任务应用程序设置和使用的数据库。目前支持
mariadb
或postgresql
。默认为postgresql
。 - BROKER - 要由 Spring Cloud Data Flow 及其流应用程序设置和使用的消息代理。目前支持
rabbitmq
和kafka
。默认为rabbitmq
。 - PROMETHEUS - 如果设置为
true
,则设置 prometheus、prometheus-proxy 和 grafana 实例。默认为false
。
在执行 install-scdf.sh
之前,您可以使用 use-*.sh
脚本之一配置本地环境
cd <home directory of spring cloud data flow>/src/deploy/k8s/
source ./use-kind.sh --namespace test-ns mariadb kafka
这将导出 NS=test-ns, K8S_DRIVER=kind, DATABASE=mariadb, BROKER=kafka
并使用 kind 创建 Kubernetes 环境。
用于设置在本地机器上运行的 Kubernetes 环境的可用 use-*
脚本如下
- use-kind.sh - 设置环境变量以在您的 Kind 实例上部署 SCDF 应用程序。
- use-mk-docker.sh - 设置环境变量以在 Docker 上的 Minikube 实例上部署 SCDF 应用程序。
- use-mk-kvm2.sh - 设置环境变量以使用 KVM2 在您的 Minikube 实例上部署 SCDF 应用程序。
- use-tmc.sh - 建立使用 Tanzu Mission Control 部署 SCDF 应用程序的环境变量。
- use-gke.sh - 建立在 Google Kubernetes Engine 上部署 SCDF 应用程序的环境变量。
可选地,SCDF 提供了 configure-k8s.sh
脚本,用于在运行 use-*
脚本后,根据 Kubernetes 实例类型验证或设置您的集群和命名空间。
- Kind - 创建集群和命名空间。
- Minikube 使用适合 SCDF 的大小启动 minikube 实例。
- TMC 或 GKE - 验证是否已设置环境变量。
可以按如下方式启动
cd <home directory of spring cloud data flow>/src/deploy/k8s/
./configure-k8s.sh
要启动 install-scdf.sh
以便在 Minikube 的 default
命名空间中部署 Spring Cloud Data Flow,使用 Dockerhub 作为您的注册表,Mariadb 作为您的数据库,Rabbitmq 作为您的代理,以及 Prometheus 作为您的指标,您可以按如下方式设置和启动脚本
cd <home directory of spring cloud data flow>/src/deploy/k8s/
source ./use-mk-docker.sh --namespace mariadb rabbitmq
export DOCKER_SERVER=registry.hub.docker.com
export DOCKER_USER=<your user name>
export DOCKER_PASSWORD=<your password>
export DOCKER_EMAIL=<your email>
export PROMETHEUS=true
./install-scdf.sh
要从您的本地机器访问上述示例的 SCDF 和 Grafana 端口,请运行以下命令
kubectl port-forward <scdf-podname> 9393:9393
kubectl port-forward <grafana-podname> 3000:3000
在某些机器上,Spring Cloud Data Flow 或 Skipper 的启动时间可能比当前配置要长。如果是这样,您可能需要更新 src/deploy/k8s/yaml/server-deployment.yaml
和 src/deploy/k8s/yaml/skipper-deployment.yaml
文件中的 spec.template.spec.containers.startupProbe.initialDelaySeconds
。
通过 delete-scdf.sh
脚本卸载 Spring Cloud Data Flow。
如果要删除由 install-scdf.sh
创建的 SCDF 部署,请设置以下环境变量
- NS - 建立部署数据流实例的命名空间。
- K8S_DRIVER - 部署 SCDF 的 Kubernetes 环境。目前支持
kind
、docker
(minikube)、tmc
。默认为kind
。 - DOCKER_SERVER - 您的环境支持的 Docker 注册表
- DATABASE - 要删除的由 Spring Cloud Data Flow 和 Task 应用程序使用的数据库。目前支持
mariadb
或postgresql
。默认为postgresql
。 - BROKER - 要删除的由 Spring Cloud Data Flow 及其流应用程序使用的消息代理。目前支持
rabbitmq
和kafka
。默认为rabbitmq
。 - PROMETHEUS - 如果设置为
true
,则删除 prometheus、prometheus-proxy 和 grafana 实例。默认为false
。
例如,如果要删除部署在 Minikube 的 default
命名空间中的 Spring Cloud Data Flow,使用 Mariadb 作为数据库,Rabbitmq 作为代理,以及 Prometheus,您可以按如下方式设置和启动脚本
cd <home directory of spring cloud data flow>/src/deploy/k8s/
export NS=default
export K8S_DRIVER=docker
export DATABASE=mariadb
export PROMETHEUS=true
./delete-scdf.sh
Kubectl 安装说明
如果 install-scdf.sh
脚本对您不起作用,或者您希望以其他方式安装 SCDF,则可以使用以下说明
选择消息代理
为了使已部署的应用程序能够相互通信,您需要选择一个消息代理。示例部署和服务 YAML 文件提供了 RabbitMQ 和 Kafka 的配置。您只需要配置一个消息代理。
RabbitMQ
运行以下命令以启动 RabbitMQ 服务
kubectl create -f src/kubernetes/rabbitmq/
您可以使用 kubectl get all -l app=rabbitmq
来验证部署、Pod 和服务资源是否正在运行。
Kafka
运行以下命令以启动 Kafka 服务
kubectl create -f src/kubernetes/kafka/
您可以使用 kubectl get all -l app=kafka
来验证部署、Pod 和服务资源是否正在运行。
部署服务、Skipper 和数据流
您必须部署许多服务和数据流服务器。以下小节介绍了如何执行此操作
部署 MariaDB
我们在本指南中使用 MariaDB,但您也可以使用 Postgres 或 H2 数据库。我们包含了这三种数据库的 JDBC 驱动程序。要使用 MariaDB 以外的数据库,您必须调整数据库 URL 和驱动程序类名设置。
密码管理
如果您希望更加安全,可以修改 src/kubernetes/mariadb/mariadb-deployment.yaml
文件中的密码。如果修改了密码,则还必须在 src/kubernetes/mariadb/mariadb-secrets.yaml
文件中以 base64 编码字符串的形式提供它。
运行以下命令以启动 MariaDB 服务
kubectl create -f src/kubernetes/mariadb/
您可以使用 kubectl get all -l app=mariadb
来验证部署、Pod 和服务资源是否正在运行。您可以使用
启用监控
如何启用监控因监控平台而异
Prometheus 和 Grafana
Prometheus RSocket 实现允许您在所有流和任务应用程序与一个或多个 Prometheus RSocket 代理
实例之间建立持久的双向 RSocket
连接。Prometheus 配置为抓取每个代理实例。代理进而使用该连接从每个应用程序中拉取指标。抓取的指标可通过 Grafana 仪表板查看。开箱即用,Grafana 仪表板预先配置了 Prometheus 数据源连接以及特定于数据流的仪表板,以监控数据管道中的流和任务应用程序。
内存资源
如果您使用 Minikube,请参阅设置 Minikube 资源,了解有关 CPU 和 RAM 资源需求的详细信息。
要运行 Prometheus 和 Grafana,您至少需要额外的 2GB 到 3GB 内存。
设置 Prometheus 角色、角色绑定和服务帐户
运行以下命令以创建集群角色、绑定和服务帐户
kubectl create -f src/kubernetes/prometheus/prometheus-clusterroles.yaml
kubectl create -f src/kubernetes/prometheus/prometheus-clusterrolebinding.yaml
kubectl create -f src/kubernetes/prometheus/prometheus-serviceaccount.yaml
部署 Prometheus 代理
运行以下命令以部署 Prometheus RSocket 代理
kubectl create -f src/kubernetes/prometheus-proxy/
您可以使用 kubectl get all -l app=prometheus-proxy
来验证部署、Pod 和服务资源是否正在运行。
部署 Prometheus
运行以下命令以部署 Prometheus
kubectl create -f src/kubernetes/prometheus/prometheus-configmap.yaml
kubectl create -f src/kubernetes/prometheus/prometheus-deployment.yaml
kubectl create -f src/kubernetes/prometheus/prometheus-service.yaml
您可以使用 kubectl get all -l app=prometheus
来验证部署、Pod 和服务资源是否正在运行。
部署 Grafana
运行以下命令以部署 Grafana
kubectl create -f src/kubernetes/grafana/
您可以使用 kubectl get all -l app=grafana
来验证部署、Pod 和服务资源是否正在运行。
您应该替换以下示例中显示的 url
属性值(来自 src/kubernetes/server/server-config.yaml
),以反映 Grafana 运行的地址和端口。在 Minikube 上,您可以通过运行 minikube service --url grafana
获取该值。
如果您看到以下消息
❗ Because you are using a Docker driver on darwin, the terminal needs to be open to run it.
请改用以下命令:kubectl port-forward <grafana pod name> 3000:3000
并将 server-config.yaml
中的 url
设置为 http://localhost:3000
。
spring:
cloud:
dataflow:
metrics.dashboard:
url: 'https://grafana:3000'
默认的 Grafana 仪表板凭据是用户名 admin
和密码 password
。您可以通过修改 src/kubernetes/grafana/grafana-secret.yaml
文件来更改这些默认值。
要为 Spring Cloud Skipper Server 启用 Prometheus,请将 Data Flow 配置镜像到 Skipper 的配置文件(src/kubernetes/skipper/skipper-config-{kafka|rabbit}.yaml
)
management:
metrics:
export:
prometheus:
enabled: true
rsocket:
enabled: true
host: prometheus-proxy
port: 7001
如果您不想部署 Prometheus 和 Grafana 来进行指标收集和监控,则应删除 src/kubernetes/server/server-config.yaml
的以下部分
management:
metrics:
export:
prometheus:
enabled: true
rsocket:
enabled: true
host: prometheus-proxy
port: 7001
spring:
cloud:
dataflow:
metrics.dashboard:
url: 'https://grafana:3000'
Wavefront
Spring Cloud Data Flow 服务器以及已部署的流和任务的指标可以发送到 Wavefront 服务。在启用 Wavefront 之前,请确保您拥有 Wavefront URL 和 API 令牌。
首先,在一个名为 wavefront-secret.yaml
的文件中创建一个密钥(用于编码您的 API 令牌)
apiVersion: v1
kind: Secret
metadata:
name: wavefront-api
labels:
app: wavefront
data:
wavefront-api-token: bXl0b2tlbg==
wavefront-api-token
的值是一个 base64 编码的字符串,表示您的 API 令牌。有关密钥的更多信息,请参阅 Kubernetes 文档。
创建密钥
kubectl create -f wavefront-secret.yaml
要挂载密钥并使其可用于 Spring Cloud Data Flow,请修改 src/kubernetes/server/server-deployment.yaml
文件,进行以下添加
密钥 mountPath 应该与 SPRING_CLOUD_KUBERNETES_SECRETS_PATHS
位于同一路径下。
spec:
containers:
- name: scdf-server
volumeMounts:
- name: wavefront-api
mountPath: /etc/secrets/wavefront-api
readOnly: true
volumes:
- name: wavefront-api
secret:
secretName: wavefront-api
您可以根据需要为 Spring Cloud Data Flow 服务器、流或任务启用 Wavefront。每个组件都是独立配置的,可以单独配置一个或全部配置。
要为 Spring Cloud Data Flow 服务器启用 Wavefront,请修改 src/kubernetes/server/server-config.yaml
文件,进行以下添加
data:
application.yaml: |-
management:
metrics:
export:
wavefront:
enabled: true
api-token: ${wavefront-api-token}
uri: https://yourwfuri.wavefront.com
source: yoursourcename
将 uri
和 source
的值更改为与您的设置相匹配的值。api-token
值会自动从密钥中解析。
默认情况下,上述配置也会自动应用于已部署的流和任务,并且来自它们的指标会发送到 Wavefront。使用 applicationProperties.stream.*
和 applicationProperties.task.*
可以更改默认值。
要为 Spring Cloud Skipper 服务器启用 Wavefront,请将 Data Flow 配置镜像到 Skipper 的配置文件(src/kubernetes/skipper/skipper-config-{kafka|rabbit}.yaml
),并将 wavefront-api
卷添加到 src/kubernetes/skipper/skipper-deployment.yaml
文件中。
您应该替换 src/kubernetes/server/server-config.yaml
中以下示例中的 url
属性值,以反映 Wavefront 仪表板运行的地址和端口。当从 Web 浏览器访问仪表板时,需要此配置才能访问 Wavefront 链接。
spring:
cloud:
dataflow:
metrics.dashboard:
url: 'https://yourwfuri.wavefront.com'
type: 'WAVEFRONT'
创建数据流角色绑定和服务帐户
要创建角色绑定和服务帐户,请运行以下命令
kubectl create -f src/kubernetes/server/server-roles.yaml
kubectl create -f src/kubernetes/server/server-rolebinding.yaml
kubectl create -f src/kubernetes/server/service-account.yaml
您可以使用 kubectl get roles
和 kubectl get sa
列出可用的角色和服务帐户。
部署 Skipper
Data Flow 将流生命周期管理委托给 Skipper。您需要部署 Skipper 才能启用流管理功能。
部署定义在 src/kubernetes/skipper/skipper-deployment.yaml
文件中。要控制部署哪个版本的 Skipper,您可以修改容器规范中 Docker 镜像使用的标签,如下所示
spec:
containers:
- name: skipper
image: springcloud/spring-cloud-skipper-server:2.11.3 #
- 您可以根据需要更改版本。
多平台支持
Skipper 包含平台的概念,因此根据项目偏好定义“帐户”非常重要。
要使用 RabbitMQ 作为消息中间件,请运行以下命令
kubectl create -f src/kubernetes/skipper/skipper-config-rabbit.yaml
要使用 Apache Kafka 作为消息中间件,请运行以下命令
kubectl create -f src/kubernetes/skipper/skipper-config-kafka.yaml
此外,要使用Apache Kafka Streams Binder,请更新 environmentVariables
属性以在 src/kubernetes/skipper/skipper-config-kafka.yaml
中包含 Kafka Streams Binder 配置,如下所示
environmentVariables: 'SPRING_CLOUD_STREAM_KAFKA_BINDER_BROKERS=kafka-broker:9092,SPRING_CLOUD_STREAM_KAFKA_BINDER_ZK_NODES=${KAFKA_ZK_SERVICE_HOST}:${KAFKA_ZK_SERVICE_PORT}, SPRING_CLOUD_STREAM_KAFKA_STREAMS_BINDER_BROKERS=kafka-broker:9092,SPRING_CLOUD_STREAM_KAFKA_STREAMS_BINDER_ZK_NODES=${KAFKA_ZK_SERVICE_HOST}:${KAFKA_ZK_SERVICE_PORT}'
运行以下命令以启动 Skipper 作为 Spring Cloud Data Flow 的伴随服务器
kubectl create -f src/kubernetes/skipper/skipper-deployment.yaml
kubectl create -f src/kubernetes/skipper/skipper-svc.yaml
您可以使用 kubectl get all -l app=skipper
来验证部署、Pod 和服务资源是否正在运行。
部署 Data Flow 服务器
部署定义在 src/kubernetes/server/server-deployment.yaml
文件中。要控制部署哪个版本的 Spring Cloud Data Flow 服务器,请修改容器规范中 Docker 镜像使用的标签,如下所示
spec:
containers:
- name: scdf-server
image: springcloud/spring-cloud-dataflow-server:2.11.3
您必须指定要部署的 Spring Cloud Data Flow 服务器版本。为此,请根据需要更改版本。本文档基于 2.11.3
版本。您可以将 docker latest
标签用于 BUILD-SNAPSHOT
版本。Skipper 服务应该正在运行,并且 src/kubernetes/server/server-deployment.yaml
中的 SPRING_CLOUD_SKIPPER_CLIENT_SERVER_URI
属性应该指向它。
Data Flow 服务器使用 Fabric8 Java 客户端库连接到 Kubernetes 集群。有多种方法可以配置客户端以连接集群。我们在将 Data Flow 服务器部署到 Kubernetes 时,使用环境变量来设置所需的值。我们还使用Spring Cloud Kubernetes 库来访问 Kubernetes ConfigMap
和 Secrets
设置。
RabbitMQ 的 ConfigMap
设置在 src/kubernetes/skipper/skipper-config-rabbit.yaml
文件中指定,Kafka 的设置在 src/kubernetes/skipper/skipper-config-kafka.yaml
文件中指定。
MariaDB 密钥位于 src/kubernetes/mariadb/mariadb-secrets.yaml
文件中。如果您修改了 MariaDB 的密码,则应在 src/kubernetes/maria/mariadb-secrets.yaml
文件中进行更改。任何密钥都必须以 base64 编码提供。
要使用默认设置创建配置映射,请运行以下命令
kubectl create -f src/kubernetes/server/server-config.yaml
现在您需要创建服务器部署,方法是运行以下命令
kubectl create -f src/kubernetes/server/server-svc.yaml
kubectl create -f src/kubernetes/server/server-deployment.yaml
您可以使用 kubectl get all -l app=scdf-server
来验证部署、Pod 和服务资源是否正在运行。
您可以使用 kubectl get svc scdf-server
命令找到分配给 scdf-server
的 EXTERNAL_IP
地址。您可以在稍后使用该地址从 shell 进行连接。以下示例(包含输出)展示了如何执行此操作
kubectl get svc scdf-server
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
scdf-server 10.103.246.82 130.211.203.246 80/TCP 4m
在这种情况下,您需要使用的 URL 是 https://130.211.203.246
。
如果您使用 Minikube,则没有外部负载均衡器,并且 EXTERNAL_IP
显示为 <pending>
。您需要使用为 scdf-server
服务分配的 NodePort
。您可以使用以下命令(显示了其输出)来查找要使用的 URL
minikube service --url scdf-server
https://192.168.99.100:31991
如果您看到以下消息:❗ 因为您在 darwin 上使用 Docker 驱动程序,所以需要打开终端才能运行它。
,请改用以下命令
kubectl port-forward <scdf-server pod name> 9393:80
关闭并清理数据流
停止并清理 RabbitMQ
使用 RabbitMQ 时,请使用 kubectl delete all -l app=rabbitmq
清理 RabbitMQ。
停止并清理 Kafka
使用 Kafka 时,请使用 kubectl delete all -l app=kafka
清理 Kafka。
停止并清理 MariaDB
使用 kubectl delete all,pvc,secrets -l app=mariadb
清理 Mariadb。
停止和清理 Prometheus 代理
您可以使用 kubectl delete all,cm,svc -l app=prometheus-proxy
来清理 Prometheus 代理。要清理 Prometheus 代理的角色、绑定和服务帐户,请运行以下命令
kubectl delete clusterrole,clusterrolebinding,sa -l app=prometheus-proxy
停止和清理 Prometheus
使用 kubectl delete all,cm,svc -l app=prometheus
来清理 Prometheus。
在需要清理 Prometheus 的集群角色和角色绑定时,请使用以下命令
kubectl delete clusterrole,clusterrolebinding,sa -l app=prometheus
停止和清理 Grafana
您可以使用 kubectl delete all,cm,svc,secrets -l app=grafana
来清理 Grafana。
停止和清理 Skipper
您可以使用 kubectl delete all,cm -l app=skipper
来清理 Skipper。
停止和清理数据流服务器
清理数据流的角色和绑定
要清理角色、绑定和服务帐户,请使用以下命令
kubectl delete role scdf-role
kubectl delete rolebinding scdf-rb
kubectl delete serviceaccount scdf-sa
停止并清理数据流服务器应用程序
您可以使用 kubectl delete all,cm -l app=scdf-server
来清理数据流服务器。