1.環境準備
1.1 集群規劃
本次安裝環境為:3臺k8s+現有的postgreSql
數據庫+zookeeper
服務
1.2 下載及介紹
DolphinScheduler-3.2.2官網:https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2
官網安裝文檔:https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2/guide/installation/kubernetes
2.前置工作
默認k8s集群已經安裝完成,本次以
kubesphere
為例介紹
參考kubesphere
官方文檔:https://kubesphere.io/zh/
2.1 Helm配置
下載 Helm 客戶端
下載地址:https://github.com/helm/helm/releases
# 下載
wget https://get.helm.sh/helm-v3.14.3-linux-amd64.tar.gz# 解壓
tar -zxvf helm-v3.14.3-linux-amd64.tar.gz# 移動到可執行目錄
mv linux-amd64/helm /usr/local/bin/helm# 查看 helm 版本(確保可正常運行)
helm version
#version.BuildInfo{Version:"v3.14.3", GitCommit:"f03cc04caaa8f6d7c3e67cf918929150cf6f3f12", GitTreeState:"clean", GoVersion:"go1.21.7"}
helm常用命令舉例
#helm 刪除 官方倉庫
helm repo remove stable
#倉庫管理)查看添加的chart倉庫,可在這些chart倉庫中拉取chart
helm repo list#將chart包發布到k8s集群中安裝部署
helm install releaseName chartName
#列出所有已發布的版本
helm list
helm list -n test
helm list -A
2.2 下載dolphinscheduler鏡像
dolphinscheduler鏡像
# 拉取鏡像
docker pull hub.rat.dev/apache/dolphinscheduler-tools:latest
docker pull hub.rat.dev/apache/dolphinscheduler-api:latest
docker pull hub.rat.dev/apache/dolphinscheduler-alter-server:latest
docker pull hub.rat.dev/apache/dolphinscheduler-master:latest
docker pull hub.rat.dev/apache/dolphinscheduler-worker:latest
# 導出鏡像
docker save -o api.tar hub.rat.dev/apache/dolphinscheduler-api:latest
docker save -o tools.tar hub.rat.dev/apache/dolphinscheduler-tools:latest
docker save -o alter-server.tar hub.rat.dev/apache/dolphinscheduler-alter-server:latest
docker save -o master.tar hub.rat.dev/apache/dolphinscheduler-master:latest
docker save -o worker.tar hub.rat.dev/apache/dolphinscheduler-worker:latest
其他鏡像
如果沒有
zookeeper
與postgreSql
需要用這下面的鏡像進行安裝
docker pull hub.rat.dev/bitnami/zookeeper:3.7.1docker pull hub.rat.dev/bitnami/postgresql:15.2.0
2.3 導入dolphinscheduler鏡像
以dolphinscheduler-api
為例,其他鏡像請參照api
的例子
# 導入鏡像
docker load --input api.tar
# 重新打標簽
docker tag hub.rat.dev/apache/dolphinscheduler-api:latest registry.flow.cn/apache/dolphinscheduler-api:latest
# 推送鏡像
docker push registry.flow.cn/apache/dolphinscheduler-api:latest
3.dolphinscheduler集群安裝
集群使用會單獨啟動一個
psql
以及zookeeper
請下載源碼包 https://github.com/apache/dolphinscheduler/archive/refs/tags/3.2.2.zip,下載
發布一個名為 dolphinscheduler 的版本(release),請執行以下命令:
因為是單獨啟動的psql
和zookeeper
則需要把Chat.yaml
的dependencies
注釋掉
cd apache-dolphinscheduler-3.2.2-src/deploy/kubernetes/dolphinscheduler
vim Chart.yaml
修改鏡像倉庫地址
vim values.yaml
將名為 dolphinscheduler 的版本(release) 發布到 test 的命名空間中:
helm install dolphinscheduler . -n test
提示: 如果名為
test
的命名空間被使用, 選項參數-n test
需要添加到helm
和kubectl
命令中
提示: 列出所有已發布的版本,使用 helm list,PostgreSQL (用戶 root, 密碼 root, 數據庫 dolphinscheduler) 和 ZooKeeper 服務將會默認啟動
查看運行狀態
創建服務外部訪問端口
名稱隨便填然后點擊下一步
端口配置12345
外部訪問選擇nodePort
,然后點擊創建
訪問前端頁面:http://k8s節點ip:32312/dolphinscheduler/ui
,如果有需要請修改成對應的 IP 地址(k8s節點ip)
默認的用戶是admin
,默認的密碼是dolphinscheduler123
請參考用戶手冊章節的 快速上手 查看如何使用 DolphinScheduler
4. 問題解決
4.1 數據褲初始化報錯
因為沒有修改zookeeper、postgreSql地址
kind: Job
apiVersion: batch/v1
metadata:name: dolphinscheduler-db-init-jobnamespace: testlabels:app.kubernetes.io/instance: dolphinschedulerapp.kubernetes.io/managed-by: Helmannotations:helm.sh/hook: 'post-install,post-upgrade,post-rollback'helm.sh/hook-weight: '1'revisions: >-{"1":{"status":"running","desire":1,"uid":"cd3b4532-7abd-470e-885f-e42dc4c6dea0","start-time":"2024-12-19T14:43:47+08:00","completion-time":"0001-01-01T00:00:00Z"}}
spec:parallelism: 1completions: 1backoffLimit: 6selector:matchLabels:#batch.kubernetes.io/controller-uid: cd3b4532-7abd-470e-885f-e42dc4c6dea0template:metadata:creationTimestamp: nulllabels:app.kubernetes.io/instance: dolphinschedulerapp.kubernetes.io/managed-by: Helm#batch.kubernetes.io/controller-uid: cd3b4532-7abd-470e-885f-e42dc4c6dea0batch.kubernetes.io/job-name: dolphinscheduler-db-init-job#controller-uid: cd3b4532-7abd-470e-885f-e42dc4c6dea0job-name: dolphinscheduler-db-init-jobspec:initContainers:- name: wait-for-databaseimage: 'registry.flow.cn/library/busybox:latest'command:- sh- '-xc'- >-for i in $(seq 1 180); do nc -z -w3 dolphinscheduler-postgresql-f68v.data-center.svc.cluster.local5432 && exit 0 || sleep 5; done; exit 1resources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FileimagePullPolicy: IfNotPresentcontainers:- name: dolphinscheduler-db-init-jobimage: 'registry.flow.cn/apache/dolphinscheduler-tools:latest'args:- tools/bin/upgrade-schema.shenvFrom:- configMapRef:name: dolphinscheduler-commonenv:- name: TZvalue: Asia/Shanghai- name: SPRING_JACKSON_TIME_ZONEvalue: Asia/Shanghai- name: DATABASEvalue: postgresql- name: SPRING_DATASOURCE_URLvalue: >-jdbc:postgresql://dolphinscheduler-postgresql-f68v.data-center.svc.cluster.local:5432/dolphinscheduler?characterEncoding=utf8- name: SPRING_DATASOURCE_USERNAMEvalue: postgres- name: SPRING_DATASOURCE_PASSWORDvalue: postgres- name: SPRING_DATASOURCE_DRIVER-CLASS-NAMEvalue: org.postgresql.Driver- name: REGISTRY_TYPEvalue: zookeeper- name: REGISTRY_ZOOKEEPER_CONNECT_STRINGvalue: 'dolphinscheduler-zookeepe-headless.data-center.svc.cluster.local:2181'- name: DATABASE_TYPEvalue: postgresql- name: JAVA_OPTSvalue: -server -Duser.timezone=${SPRING_JACKSON_TIME_ZONE} -Dspring.profiles.active=postgresql -Xms1g -Xmx1g -Xmn512m -XX:+PrintGCDetails -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump.hprofresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FileimagePullPolicy: IfNotPresentrestartPolicy: NeverterminationGracePeriodSeconds: 30dnsPolicy: ClusterFirstsecurityContext: {}imagePullSecrets:- name: registry-configschedulerName: default-schedulercompletionMode: NonIndexedsuspend: false
需要修改REGISTRY_ZOOKEEPER_CONNECT_STRING
和SPRING_DATASOURCE_URL
的值,然后重新創建任務。
數據庫初始完成之后會創建表
4.2 Caused by: java.net.UnknownHostException: s3
修改common.properties
,加上下面3行
aws.s3.endpoint=<minio地址>
aws.s3.access.key.id=<your id>
aws.s3.access.key.secret=<your secret>
然后重啟
4.3 zookeeper和psql報錯
需要修改pod
環境的變量,修改為正確的地址
4.4 worker節點 No qualifying bean of type 'org.apache.dolphinscheduler.meter.metrics.MetricsProvider' available
錯誤信息:
2024-12-21T22:50:53.537397234+08:00 Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'workerRegistryClient': Unsatisfied dependency expressed through field 'metricsProvider'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.apache.dolphinscheduler.meter.metrics.MetricsProvider' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}2024-12-21T22:50:53.537401243+08:00 at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:659)2024-12-21T22:50:53.537408792+08:00 at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639)2024-12-21T22:50:53.537412721+08:00 at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)2024-12-21T22:50:53.537416353+08:00 at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)2024-12-21T22:50:53.537418799+08:00 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)2024-12-21T22:50:53.537421259+08:00 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)2024-12-21T22:50:53.537428244+08:00 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)2024-12-21T22:50:53.537430992+08:00 at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)2024-12-21T22:50:53.537433562+08:00 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)2024-12-21T22:50:53.537436073+08:00 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)2024-12-21T22:50:53.537438469+08:00 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)2024-12-21T22:50:53.537441051+08:00 at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)2024-12-21T22:50:53.537443569+08:00 at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)2024-12-21T22:50:53.537446141+08:00 at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)2024-12-21T22:50:53.537448881+08:00 at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656)2024-12-21T22:50:53.537451540+08:00 ... 20 common frames omitted2024-12-21T22:50:53.537454771+08:00 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.apache.dolphinscheduler.meter.metrics.MetricsProvider' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}2024-12-21T22:50:53.537457334+08:00 at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1801)2024-12-21T22:50:53.537459878+08:00 at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1357)2024-12-21T22:50:53.537462469+08:00 at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)2024-12-21T22:50:53.537465066+08:00 at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656)2024-12-21T22:50:53.537467531+08:00 ... 34 common frames omitted
進入到worker節點源碼目錄
把resources
下面的文件全部掛載在到/opt/dolphinscheduler/conf
目錄下面
新增worker配置,然后把resources
目錄下面的文件內容復制進來
掛載到/opt/dolphinscheduler/conf
路徑
掛載了之后點擊確定即可。
注意:
需要把其他dolphinscheduler-master
、dolphinscheduler-api
、dolphinscheduler-alter-server
三個節點也進行掛載