DolphinScheduler部署中的一些坑(Docker & Kubernetes)

最近在跟着官方文档搭建docker和k8s模式的dolphinscheduler,遇到了一些问题记录下来。

English version

最新的版本是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的命名空间。

按着文档给的方式操作,会遇到一个错误。

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.

  1. 修改values.yaml 文件中 postgresql 的 enabledfalse

  2. 修改values.yaml 文件中的 externalDatabase 配置 (尤其修改 host, usernamepassword):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    externalDatabase:
    type: "postgresql"
    driver: "org.postgresql.Driver"
    host: ""
    port: ""
    username: ""
    password: ""
    database: "dolphinscheduler"
    params: "characterEncoding=utf8"
  3. 修改values.yaml 文件中 zookeeper 的 enabledfalse

  4. 修改values.yaml 文件中 zookeeper 信息:

    1
    2
    3
    externalZookeeper:
    zookeeperQuorum: "xx.xx.xx.xx:2181"
    zookeeperRoot: "/dolphinscheduler"
  5. values.yaml 文件中新增registry信息:

    1
    2
    3
    externalRegistry:
    registryPluginName: "zookeeper"
    registryServers: "xx.xx.xx.xx:2181"

2、 在_helpers.tpl文件中新增dolphinscheduler.zookeeper.env_vars

  1. _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的镜像,按照官方文档来就可以。


评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×