最近在跟着官方文档搭建docker和k8s模式的dolphinscheduler,遇到了一些问题记录下来。
最新的版本是2.0.1,有一些跟2.0.0版本有一些区别,下方会详细说明。
一、Docker
我们使用第二种:通过指定已存在的 PostgreSQL 和 ZooKeeper 服务来启动。
我们已经搭建好PostgreSQL & ZooKeeper服务了。由于商业许可证的原因,官方不能直接使用 MySQL 的驱动包。所以我们先通过官方教程跑起来,然后再去搭建一个Mysql的镜像。这块需要自己手动搭建服务。并将xx.xx.xx.xx换成自己的服务ip。
PostgreSQL xx.xx.xx.xx:5432 user: user password: password
ZooKeeper xx.xx.xx.xx:2181
第一步
docker pull dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler:2.0.1
第二步
docker run -d –name dolphinscheduler
-e DATABASE_HOST=”xx.xx.xx.xx” -e DATABASE_PORT=”5432” -e DATABASE_DATABASE=”dolphinscheduler”
-e DATABASE_USERNAME=”user” -e DATABASE_PASSWORD=”password”
-e ZOOKEEPER_QUORUM=”xx.xx.xx.xx:2181”
-e REGISTRY_SERVERS=”xx.xx.xx.xx:2181”
-p 12345:12345
apache/dolphinscheduler:2.0.1 all
Docker 就可以正常运行了。
请注意!
docker启动命令需要添加:
-e REGISTRY_SERVERS="xx.xx.xx.xx:2181" \
因为ZOOKEEPER_QUORUM这个配置项仅是为了测试连通性的,REGISTRY_SERVERS这个配置项才是去修改zookeeper的服务器信息。这应该是个bug,感觉是注册中心的名称从zookeeper修改为了registry但是有一些配置项的名称没有修改。
如果启动命令不添加这行,docker容器里的配置文件: /opt/dolphinscheduler/conf/registry.properties会一直是默认配置127.0.0.1:2181。2.0.0也有这个bug。
2.0.0版本有另一个bug。在构建dolphinscheduler docker镜像的过程中丢失了datasource.properties.tpl和一些其他的配置文件。导致了容器里面的datasource conf无法修改,会一直是默认值。
二、Kubernetes
Kubernetes模式是基于docker基础上的。只是多了一步。将配置信息保存在values.yaml中。然后在helm install的时候,使用_hepler.tpl来注入配置信息,然后使用templates下面的yaml文件去部署k8s pod、onfigmap、pvc等等。然后会启动pod,其实就是docker容器了,就会执行上面docker的那些步骤。
我们已经新建了一个叫dolphinscheduler的命名空间。
第一步:
wget https://dlcdn.apache.org/dolphinscheduler/2.0.1/apache-dolphinscheduler-2.0.1-src.tar.gz
第二步:
tar -zxvf apache-dolphinscheduler-2.0.1-src.tar.gz
第三步:
cd apache-dolphinscheduler-2.0.1-src/docker/kubernetes/dolphinscheduler
第四步:
helm repo add bitnami https://charts.bitnami.com/bitnami
第五步:
helm dependency update .
第六步:
helm install dolphinscheduler . -n dolphinscheduler
按着文档给的方式操作,会遇到一个错误。
Error: INSTALLATION FAILED: template: dolphinscheduler/templates/statefulset-dolphinscheduler-worker.yaml:72:16: executing “dolphinscheduler/templates/statefulset-dolphinscheduler-worker.yaml” at <include “dolphinscheduler.zookeeper.env_vars” .>: error calling include: template: no template “dolphinscheduler.zookeeper.env_vars” associated with template “gotpl”
2.0.0和2.0.1都有这个问题,将会在2.0.2会修复。
k8s模式还有一些其他bug,下面是解决方法:
1、 修改 values.yaml
PostgreSQL (用户 root
, 密码 root
, 数据库 dolphinscheduler
) 和 ZooKeeper 服务将会默认启动。所以第一步我们需要修改datasource & zookeeper配置信息,配置文件是 values.yaml
.
修改
values.yaml
文件中 postgresql 的enabled
为false
修改
values.yaml
文件中的 externalDatabase 配置 (尤其修改host
,username
和password
):1
2
3
4
5
6
7
8
9externalDatabase:
type: "postgresql"
driver: "org.postgresql.Driver"
host: ""
port: ""
username: ""
password: ""
database: "dolphinscheduler"
params: "characterEncoding=utf8"修改
values.yaml
文件中 zookeeper 的enabled
为false
修改
values.yaml
文件中 zookeeper 信息:1
2
3externalZookeeper:
zookeeperQuorum: "xx.xx.xx.xx:2181"
zookeeperRoot: "/dolphinscheduler"在
values.yaml
文件中新增registry信息:1
2
3externalRegistry:
registryPluginName: "zookeeper"
registryServers: "xx.xx.xx.xx:2181"
2、 在_helpers.tpl文件中新增dolphinscheduler.zookeeper.env_vars
在
_helpers.tpl
文件中新增zookeeper.env_vars 配置信息:1
2
3
4
5
6
7
8
9
10
11
12
13
14{{- define "dolphinscheduler.zookeeper.env_vars" -}}
- name: REGISTRY_PLUGIN_NAME
{{- if .Values.zookeeper.enabled }}
value: "zookeeper"
{{- else }}
value: {{ .Values.externalRegistry.registryPluginName }}
{{- end }}
- name: REGISTRY_SERVERS
{{- if .Values.zookeeper.enabled }}
value: {{ template "dolphinscheduler.zookeeper.quorum" . }}
{{- else }}
value: {{ .Values.externalRegistry.registryServers }}
{{- end }}
{{- end -}}
3. 将zookeeper.env_vars 修改为 registry.env_vars
按照这个commit 修改k8s yaml文件。这个作用跟步骤二是一样的。步骤二和步骤三任挑选一个执行就行。
然后就可以正常运行了。
构建Mysql driver的镜像,按照官方文档来就可以。