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下来:
$ git clone https://github.com/spring-cloud/spring-cloud-datafl<strong style="color:transparent">本文来源gaodai#ma#com搞@@代~&码网^</strong>ow.git
我们切换到最新稳定版本的代码版本:
$ git checkout v2.5.3.RELEASE
2.2 创建权限账号
为了让Data Flow Server
有权限来跑任务,能在Kubernetes
管理资源,如新建Pod
等,所以要创建对应的权限账号。这部分代码与源码一致,不需要修改:
(1)server-roles.yaml
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
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
apiVersion: v1 kind: ServiceAccount metadata: name: scdf-sa
执行以下命令,创建对应账号:
$ 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 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来。为了保证部署不会因为镜像下载问题而失败,我提前下载了镜像:
$ docker pull mysql:5.7.25
MySQL
的yaml
文件也不需要修改,直接执行以下命令即可:
$ kubectl create -f src/kubernetes/mysql/