- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章如何把Spring Cloud Data Flow部署在Kubernetes上由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1 前言 。
Spring Cloud Data Flow在本地跑得好好的,为什么要部署在Kubernetes上呢?主要是因为Kubernetes能提供更灵活的微服务管理;在集群上跑,会更安全稳定、更合理利用物理资源.
Spring Cloud Data Flow入门简介请参考:Spring Cloud Data Flow初体验,以Local模式运行 。
2 部署Data Flow到Kubernetes 。
以简单为原则,我们依然是基于Batch任务,不部署与Stream相关的组件.
2.1 下载GitHub代码 。
我们要基于官方提供的部署代码进行修改,先把官方代码clone下来:
1
|
$ git clone https:
//github
.com
/spring-cloud/spring-cloud-dataflow
.git
|
我们切换到最新稳定版本的代码版本:
1
|
$ git checkout v2.5.3.RELEASE
|
2.2 创建权限账号 。
为了让Data Flow Server有权限来跑任务,能在Kubernetes管理资源,如新建Pod等,所以要创建对应的权限账号。这部分代码与源码一致,不需要修改:
(1)server-roles.yaml 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: scdf-role
rules:
- apiGroups: [
""
]
resources: [
"services"
,
"pods"
,
"replicationcontrollers"
,
"persistentvolumeclaims"
]
verbs: [
"get"
,
"list"
,
"watch"
,
"create"
,
"delete"
,
"update"
]
- apiGroups: [
""
]
resources: [
"configmaps"
,
"secrets"
,
"pods/log"
]
verbs: [
"get"
,
"list"
,
"watch"
]
- apiGroups: [
"apps"
]
resources: [
"statefulsets"
,
"deployments"
,
"replicasets"
]
verbs: [
"get"
,
"list"
,
"watch"
,
"create"
,
"delete"
,
"update"
,
"patch"
]
- apiGroups: [
"extensions"
]
resources: [
"deployments"
,
"replicasets"
]
verbs: [
"get"
,
"list"
,
"watch"
,
"create"
,
"delete"
,
"update"
,
"patch"
]
- apiGroups: [
"batch"
]
resources: [
"cronjobs"
,
"jobs"
]
verbs: [
"create"
,
"delete"
,
"get"
,
"list"
,
"watch"
,
"update"
,
"patch"
]
|
(2)server-rolebinding.yaml 。
1
2
3
4
5
6
7
8
9
10
11
|
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: scdf-rb
subjects:
- kind: ServiceAccount
name: scdf-sa
roleRef:
kind: Role
name: scdf-role
apiGroup: rbac.authorization.k8s.io
|
(3)service-account.yaml 。
1
2
3
4
|
apiVersion: v1
kind: ServiceAccount
metadata:
name: scdf-sa
|
执行以下命令,创建对应账号:
1
2
3
|
$ 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
|
执行完成后,可以检查一下:
1
2
3
4
5
6
7
8
9
10
11
12
|
$ kubectl get role
NAME AGE
scdf-role 119m
$ kubectl get rolebinding
NAME AGE
scdf-rb 117m
$ kubectl get serviceAccount
NAME SECRETS AGE
default
1
27d
scdf-sa
1
117m
|
2.3 部署MySQL 。
可以选择其它数据库,如果本来就有数据库,可以不用部署,在部署Server的时候改一下配置就好了。这里跟着官方的Guide来。为了保证部署不会因为镜像下载问题而失败,我提前下载了镜像:
1
|
$ docker pull mysql:5.7.25
|
MySQL的yaml文件也不需要修改,直接执行以下命令即可:
1
|
$ kubectl create -f src
/kubernetes/mysql/
|
执行完后检查一下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
$ kubectl get Secret
NAME TYPE DATA AGE
default-token-jhgfp kubernetes.io
/service-account-token
3 27d
mysql Opaque 2 98m
scdf-sa-token-wmgk6 kubernetes.io
/service-account-token
3 123m
$ kubectl get PersistentVolumeClaim
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql Bound pvc-e95b495a-bea5-40ee-9606-dab8d9b0d65c 8Gi RWO hostpath 98m
$ kubectl get Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
mysql 1
/1
1 1 98m
$ kubectl get Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql ClusterIP 10.98.243.130 <none> 3306
/TCP
98m
|
2.4 部署Data Flow Server 。
2.4.1 修改配置文件server-config.yaml 。
删除掉不用的配置,主要是Prometheus和Grafana的配置,结果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
apiVersion: v1
kind: ConfigMap
metadata:
name: scdf-server
labels:
app: scdf-server
data:
application.yaml: |-
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default
:
limits:
memory: 1024Mi
datasource:
url: jdbc:mysql:
//${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT}/mysql
username: root
password: ${mysql-root-password}
driverClassName: org.mariadb.jdbc.Driver
testOnBorrow:
true
validationQuery:
"SELECT 1"
|
2.4.2 修改server-svc.yaml 。
因为我是本地运行的Kubernetes,所以把Service类型从LoadBalancer改为NodePort,并配置端口为30093.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
kind: Service
apiVersion: v1
metadata:
name: scdf-server
labels:
app: scdf-server
spring-deployment-id: scdf
spec:
# If you are running k8s on a local dev box or using minikube, you can use type NodePort instead
type: NodePort
ports:
- port:
80
name: scdf-server
nodePort:
30093
selector:
app: scdf-server
|
2.4.3 修改server-deployment.yaml 。
主要把Stream相关的去掉,如SPRING_CLOUD_SKIPPER_CLIENT_SERVER_URI配置项:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
apiVersion: apps/v1
kind: Deployment
metadata:
name: scdf-server
labels:
app: scdf-server
spec:
selector:
matchLabels:
app: scdf-server
replicas:
1
template:
metadata:
labels:
app: scdf-server
spec:
containers:
- name: scdf-server
image: springcloud/spring-cloud-dataflow-server:
2.5
.
3
.RELEASE
imagePullPolicy: IfNotPresent
volumeMounts:
- name: database
mountPath: /etc/secrets/database
readOnly:
true
ports:
- containerPort:
80
livenessProbe:
httpGet:
path: /management/health
port:
80
initialDelaySeconds:
45
readinessProbe:
httpGet:
path: /management/info
port:
80
initialDelaySeconds:
45
resources:
limits:
cpu:
1.0
memory: 2048Mi
requests:
cpu:
0.5
memory: 1024Mi
env:
- name: KUBERNETES_NAMESPACE
valueFrom:
fieldRef:
fieldPath:
"metadata.namespace"
- name: SERVER_PORT
value:
'80'
- name: SPRING_CLOUD_CONFIG_ENABLED
value:
'false'
- name: SPRING_CLOUD_DATAFLOW_FEATURES_ANALYTICS_ENABLED
value:
'true'
- name: SPRING_CLOUD_DATAFLOW_FEATURES_SCHEDULES_ENABLED
value:
'true'
- name: SPRING_CLOUD_KUBERNETES_SECRETS_ENABLE_API
value:
'true'
- name: SPRING_CLOUD_KUBERNETES_SECRETS_PATHS
value: /etc/secrets
- name: SPRING_CLOUD_KUBERNETES_CONFIG_NAME
value: scdf-server
- name: SPRING_CLOUD_DATAFLOW_SERVER_URI
value:
'http://${SCDF_SERVER_SERVICE_HOST}:${SCDF_SERVER_SERVICE_PORT}'
# Add Maven repo
for
metadata artifact resolution
for
all stream apps
- name: SPRING_APPLICATION_JSON
value:
"{ \"maven\": { \"local-repository\": null, \"remote-repositories\": { \"repo1\": { \"url\": \"https://repo.spring.io/libs-snapshot\"} } } }"
initContainers:
- name: init-mysql-wait
image: busybox
command: [
'sh'
,
'-c'
,
'until nc -w3 -z mysql 3306; do echo waiting for mysql; sleep 3; done;'
]
serviceAccountName: scdf-sa
volumes:
- name: database
secret:
secretName: mysql
|
2.4.4 部署Server 。
完成文件修改后,就可以执行以下命令部署了:
1
2
3
4
5
6
7
|
# 提前下载镜像
$ docker pull springcloud
/spring-cloud-dataflow-server
:2.5.3.RELEASE
# 部署Data Flow Server
$ 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
|
执行完成,没有错误就可以访问:http://localhost:30093/dashboard/ 。
3 运行一个Task 。
检验是否部署成功最简单的方式就是跑一个任务试试。还是按以前的步骤,先注册应用,再定义Task,然后执行.
我们依旧使用官方已经准备好的应用,但要注意这次我们选择是的Docker格式,而不是jar包了.
成功执行后,查看Kubernetes的Dashboard,能看到一个刚创建的Pod:
4 总结 。
本文通过一步步讲解,把Spring Cloud Data Flow成功部署在了Kubernetes上,并成功在Kubenetes上跑了一个任务,再也不再是Local本地单机模式了.
到此这篇关于把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试的文章就介绍到这了,更多相关把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://www.cnblogs.com/larrydpk/archive/2020/08/03/13424280.html 。
最后此篇关于如何把Spring Cloud Data Flow部署在Kubernetes上的文章就讲到这里了,如果你想了解更多关于如何把Spring Cloud Data Flow部署在Kubernetes上的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在 *.sql 文件中得到了我的数据库转储(表、函数、触发器等)。此时我正在通过 jenkins 部署它们,通过传递执行 shell 命令: sudo -u postgres psql -d my_
我正在使用网络部署 API 来部署网络包(.zip 文件,由 MSDeploy.exe 创建)以编程方式将包发布到服务器(在发布包之前我们需要做一些其他事情这就是为什么我们不使用 MSDeploy.e
我们正在使用 Web Deploy 3 的(几乎完全未记录的)“公共(public) API”来创建我们网站的 .zip 包,然后将其同步到服务器: DeploymentBaseOptions des
将 clojure 应用程序制作成可执行文件的最简单方法是什么,例如 http://rawr.rubyforge.org/ ruby 吗? (exe 和 app 文件也是) 最佳答案 使用 leini
是否可以下载 Android 源代码并针对任何设备进行编译? 我想做的是尝试 GSM 代码部分并编译操作系统并将其部署到我的摩托罗拉手机上。 谢谢! 最佳答案 是的,但这很难,因为大多数手机不共享驱动
我正在考虑用 c/c++ 编写需要在大多数个人计算机上运行的 nbody 样式模拟。本质上是一个 O(n^2) 粒子模拟器。 因为这需要相当用户友好,所以我希望有 1 个不需要用户安装任何东西的 Wi
需要了解 kubernetes 部署中 kube_deployment_status_replicas 和 kube_deployment_spec_replicas 指标的区别 最佳答案 简而言之,
我正在尝试使用分类器部署 Maven Artifact 。由于我需要源代码和 JAR(我从 GWT 使用它),我想获得 artifact-version-classifier.jar 和 artifa
我设置部署以将我的项目代码与存储我的网站的 FTP 服务器上的项目同步。 但是,每次尝试同步时,我总是必须登录。 我什至检查了记住,但它不起作用! 我正在使用最新的 PhpStorm 2017.1.4
我在 Visual Studio 2008 中开发了一个 ASP.NET 网站。现在我想在其他机器上部署它。我怎样才能做到这一点??就像我们为 Windows 应用程序制作安装包一样,我们可以为 AS
将 QT 框架添加到我的 .app 包中 我正在关注 Qt 站点上关于部署的文档。 我创建了一个名为 HTTPClient.app 的应用程序 我在 Contents 下创建了 Framework 文
这个问题不太可能对任何 future 的访客有帮助;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于互联网的全局受众。如需帮助使这个问题更广泛适用,visit the h
我正在研究改变我目前创建营销网站的策略。目前,我完全用 PHP 从头开始构建网站,使用一个简单的包含系统。所有代码(以及内容)都存储在文件(而不是数据库)中,允许我使用 Subversion 进行
我有一个长期运行的服务(在 while 1 循环中)并通过 GCloud pub/sub 处理有效负载,之后它将结果写入数据库。 该服务不需要监听任何端口。 Kind=Deployment 的声明性
似乎部署已停滞不前。我该如何进一步诊断? kubectl rollout status deployment/wordpress Waiting for rollout to finish: 2 ou
我正在Dart中使用前端的Angular和后端的Shelf构建一个客户端/服务器应用程序。当我执行pub build时,它会按预期生成Dart文件的javascript,但不会替换HTML文件中的Da
我在 Azure 部署中心的下拉列表中看不到我的所有 Github 组织存储库。 Azure 很久以前就已经被授权了,下拉列表正确地显示了所有的存储库,直到上周我在 DevOps 中玩游戏时,不得不再
我认为标题几乎说明了一切...对于 Deployd 来说是全新的,所以任何关于如何最好地实现这一点的指示都值得赞赏。 最佳答案 要获取用户创建的集合中的对象(我假设您使用的是 javascript 库
我有一个试图用于CD服务器的部署脚本,但是在编写bash脚本以完成一些所需的步骤(例如运行npm和迁移命令)时遇到了问题。 我将如何从该脚本进入容器bash,运行下面的命令,然后退出以完成对更改的提取
我想在使用 kubectl 时将参数传递给 Kubernetes 部署命令应用部署文件。 示例:在我的部署 .yaml 中,我有如下参数,我想在使用 kubectl apply - f .yaml 运
我是一名优秀的程序员,十分优秀!