首页 文章 精选 留言 我的

精选列表

搜索[ATH事业群],共10000篇文章
优秀的个人博客,低调大师

K8s集群+Rancher Server:部署DolphinScheduler 3.2.2集群

本文手把手演示了如何在 K8s + Rancher 环境中快速拉起一套生产可用的 Apache DolphinScheduler 3.2.2 集群。全文围绕“镜像加速、依赖本地化、存储持久化”三大痛点展开,附有详细的代码解析,收藏细看吧! 环境准备 1、软件准备 2、环境规划 部署 1、官网下载apache-dolphinscheduler源码 [root@master ~]# mkdir /opt/dolphinscheduler # [root@master ~]# cd /opt/dolphinscheduler [root@master dolphinscheduler]# curl -Lo https://dlcdn.apache.org/dolphinscheduler/3.2.2/apache-dolphinscheduler-3.2.2-src.tar.gz [root@master dolphinscheduler]# tar -xzvf ./apache-dolphinscheduler-3.2.2-src.tar.gz 2、修改Chart的镜像地址配置 (1)、修改Chart.yaml配置文件 将repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami改为repository: https://raw.gitmirror.com/bitnami/charts/archive-full-index/bitnami [root@master dolphinscheduler]# cd /opt/dolphinscheduler/apache-dolphinscheduler-3.2.2-src/deploy/kubernetes/dolphinscheduler [root@master dolphinscheduler]# vim Chart.yaml # Application charts are a collection of templates that can be packaged into versioned archives # to be deployed. # # Library charts provide useful utilities or functions for the chart developer. They're included as # a dependency of application charts to inject those utilities and functions into the rendering # pipeline. Library charts do not define any templates and therefore cannot be deployed. type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. version: 3.3.0-alpha # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. appVersion: 3.3.0-alpha dependencies: - name: postgresql version: 10.3.18 # Due to a change in the Bitnami repo, https://charts.bitnami.com/bitnami was truncated only # containing entries for the latest 6 months (from January 2022 on). # This URL: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami # contains the full 'index.yaml'. # See detail here: https://github.com/bitnami/charts/issues/10833 #repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami repository: https://raw.gitmirror.com/bitnami/charts/archive-full-index/bitnami condition: postgresql.enabled - name: zookeeper version: 6.5.3 # Same as above. #repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami repository: https://raw.gitmirror.com/bitnami/charts/archive-full-index/bitnami condition: zookeeper.enabled - name: mysql version: 9.4.1 #repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami repository: https://raw.gitmirror.com/bitnami/charts/archive-full-index/bitnami condition: mysql.enabled - name: minio version: 11.10.13 #repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami repository: https://raw.gitmirror.com/bitnami/charts/archive-full-index/bitnami condition: minio.enabled (2)、执行helm更新 Chart.yaml配置文件修改完成后执行下面的命令: [root@master dolphinscheduler]# helm repo add bitnami-full-index https://raw.gitmirror.com/bitnami/charts/archive-full-index/bitnami [root@master dolphinscheduler]# helm repo add bitnami https://charts.bitnami.com/bitnami [root@master dolphinscheduler]# helm dependency update . (3)、解压依赖文件 helm更新完成后,在当前目录会新生成【charts】目录,该目录下就是过helm更新下载到本地的依赖文件,如下图所示: 解压依赖包文件,因为本次安装除了Mysql都需要同步安装,所以要解压minio-11.10.13.tgz,postgresql-10.3.18.tgz,zookeeper-6.5.3.tgz这几个压缩包 [root@master dolphinscheduler]# tar -zxvf minio-11.10.13.tgz [root@master dolphinscheduler]# tar -zxvf postgresql-10.3.18.tgz [root@master dolphinscheduler]# tar -zxvf zookeeper-6.5.3.tgz 3、修改Dolphinscheduler的Helm配置文件 cd /opt/dolphinscheduler/apache-dolphinscheduler-3.2.2-src/deploy/kubernetes/dolphinscheduler vim values.yaml (1)、修改初始镜像 需要修改busybox和dolphinscheduler各个组件的镜像地址,修改后如下: # -- World time and date for cities in all time zones timezone: "Asia/Shanghai" # -- Used to detect whether dolphinscheduler dependent services such as database are ready initImage: # -- Image pull policy. Options: Always, Never, IfNotPresent pullPolicy: "IfNotPresent" # -- Specify initImage repository #busybox: "busybox:1.30.1" busybox: "registry.cn-hangzhou.aliyuncs.com/docker_image-ljx/busybox:1.30.1" image: # -- Docker image repository for the DolphinScheduler registry: registry.cn-hangzhou.aliyuncs.com/docker_image-ljx # -- Docker image version for the DolphinScheduler tag: 3.2.2 # -- Image pull policy. Options: Always, Never, IfNotPresent pullPolicy: "IfNotPresent" # -- Specify a imagePullSecrets pullSecret: "" # -- master image master: dolphinscheduler-master # -- worker image worker: dolphinscheduler-worker # -- api-server image api: dolphinscheduler-api # -- alert-server image alert: dolphinscheduler-alert-server # -- tools image tools: dolphinscheduler-tools (2)、修改postgresql配置 本文安装依赖的数据库配置了默认的数据库postgresql,参见配置datasource.profile: postgresql,但是values.yaml的默认配置中并没有配置postgresql镜像,会导致postgresql镜像拉取失败。 本文dolphinscheduler依赖于bitnami postgresql的Chart,且已经在上一步 解压了。获取镜像地址的方式只需进入解压目录(/opt/dolphinscheduler/apache-dolphinscheduler-3.2.2-src/deploy/kubernetes/dolphinscheduler/charts/postgresql)。 查看postgresql的values.yaml(/opt/dolphinscheduler/apache-dolphinscheduler-3.2.2-src/deploy/kubernetes/dolphinscheduler/charts/postgresql/values.yaml)找到镜像地址: image: registry: docker.io repository: bitnami/postgresql tag: 11.11.0-debian-10-r71 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images ## pullPolicy: IfNotPresent ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ ## # pullSecrets: # - myRegistryKeySecretName ## Set to true if you would like to see extra information on logs ## It turns BASH and/or NAMI debugging in the image ## debug: false 复制上述配置文件中的image配置信息,如下图所示: 将上步复制到image粘贴至/opt/dolphinscheduler/apache-dolphinscheduler-3.2.2-src/deploy/kubernetes/dolphinscheduler/values.yaml配置文件中postgresql配置项下,如下所示: datasource: # -- The profile of datasource profile: postgresql postgresql: image: registry: docker.io repository: bitnami/postgresql tag: 11.11.0-debian-10-r71 # -- If not exists external PostgreSQL, by default, the DolphinScheduler will use a internal PostgreSQL enabled: true # -- The username for internal PostgreSQL postgresqlUsername: "root" # -- The password for internal PostgreSQL postgresqlPassword: "root" # -- The database for internal PostgreSQL postgresqlDatabase: "dolphinscheduler" # -- The driverClassName for internal PostgreSQL driverClassName: "org.postgresql.Driver" # -- The params for internal PostgreSQL params: "characterEncoding=utf8" persistence: # -- Set postgresql.persistence.enabled to true to mount a new volume for internal PostgreSQL enabled: false # -- `PersistentVolumeClaim` size size: "20Gi" # -- PostgreSQL data persistent volume storage class. If set to "-", storageClassName: "", which disables dynamic provisioning storageClass: "-" (3)、修改minio配置 查看minio的values.yaml(/opt/dolphinscheduler/apache-dolphinscheduler-3.2.2-src/deploy/kubernetes/dolphinscheduler/charts/minio/values.yaml)找到镜像地址: image: registry: docker.io repository: bitnami/minio tag: 2022.10.29-debian-11-r0 digest: "" ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: https://kubernetes.io/docs/user-guide/images/#pre-pulling-images ## pullPolicy: IfNotPresent ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ ## e.g: ## pullSecrets: ## - myRegistryKeySecretName ## pullSecrets: [] ## Set to true if you would like to see extra information on logs ## debug: false 复制上述配置文件中的image配置信息,如下图所示: 将上步复制到image粘贴至/opt/dolphinscheduler/apache-dolphinscheduler-3.2.2-src/deploy/kubernetes/dolphinscheduler/values.yaml配置文件中minio配置项下,如下所示: minio: image: registry: docker.io repository: bitnami/minio tag: 2022.10.29-debian-11-r0 # -- Deploy minio and configure it as the default storage for DolphinScheduler, note this is for demo only, not for production. enabled: true auth: # -- minio username rootUser: minioadmin # -- minio password rootPassword: minioadmin persistence: # -- Set minio.persistence.enabled to true to mount a new volume for internal minio enabled: false # -- minio default buckets defaultBuckets: "dolphinscheduler" (4)、修改zookeeper配置 查看zookeeper的values.yaml(/opt/dolphinscheduler/apache-dolphinscheduler-3.2.2-src/deploy/kubernetes/dolphinscheduler/charts/zookeeper/values.yaml)找到镜像地址: image: registry: docker.io repository: bitnami/zookeeper tag: 3.6.2-debian-10-r185 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images ## pullPolicy: IfNotPresent ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ ## # pullSecrets: # - myRegistryKeySecretName ## Set to true if you would like to see extra information on logs ## It turns BASH and/or NAMI debugging in the image ## debug: false 复制上述配置文件中的image配置信息,如下图所示: 将上步复制到image粘贴至/opt/dolphinscheduler/apache-dolphinscheduler-3.2.2-src/deploy/kubernetes/dolphinscheduler/values.yaml配置文件中zookeeper配置项下,如下所示: zookeeper: image: registry: docker.io repository: bitnami/zookeeper tag: 3.6.2-debian-10-r185 # -- If not exists external registry, the zookeeper registry will be used by default. enabled: true service: # -- The port of zookeeper port: 2181 # -- A list of comma separated Four Letter Words commands to use fourlwCommandsWhitelist: "srvr,ruok,wchs,cons" persistence: # -- Set `zookeeper.persistence.enabled` to true to mount a new volume for internal ZooKeeper enabled: false # -- PersistentVolumeClaim size size: "20Gi" # -- ZooKeeper data persistent volume storage class. If set to "-", storageClassName: "", which disables dynamic provisioning storageClass: "-" (5)、修改master配置 master: # -- Enable or disable the Master component enabled: true replicas: "1" resources: limits: memory: "4Gi" cpu: "4" requests: memory: "2Gi" cpu: "500m" persistentVolumeClaim: # -- Set `worker.persistentVolumeClaim.enabled` to `true` to enable `persistentVolumeClaim` for `worker` enabled: true ## dolphinscheduler data volume dataPersistentVolume: # -- Set `worker.persistentVolumeClaim.dataPersistentVolume.enabled` to `true` to mount a data volume for `worker` enabled: true # -- `PersistentVolumeClaim` access modes accessModes: - "ReadWriteOnce" # -- `Worker` data persistent volume storage class. If set to "-", storageClassName: "", which disables dynamic provisioning storageClassName: "-" # -- `PersistentVolumeClaim` size storage: "20Gi" env: # -- The jvm options for master server JAVA_OPTS: "-Xms1g -Xmx1g -Xmn512m" (6)、修改worker配置 nfs-storage存储卷的创建 sc.yaml配置文件如下: ## 创建了一个存储类 apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-storage annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: k8s-sigs.io/nfs-subdir-external-provisioner parameters: archiveOnDelete: "true" ## 删除pv的时候,pv的内容是否要备份 --- apiVersion: apps/v1 kind: Deployment metadata: name: nfs-client labels: app: nfs-client # replace with namespace where provisioner is deployed namespace: default spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: nfs-client template: metadata: labels: app: nfs-client spec: serviceAccountName: nfs-client containers: - name: nfs-client image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/nfs-subdir-external-provisioner:v4.0.2 # resources: # limits: # cpu: 10m # requests: # cpu: 10m volumeMounts: - name: nfs-client-root mountPath: /persistentvolumes env: - name: PROVISIONER_NAME value: k8s-sigs.io/nfs-subdir-external-provisioner - name: NFS_SERVER value: 192.168.255.140 ## 指定自己nfs服务器地址 - name: NFS_PATH value: /data/nfsdata ## nfs服务器共享的目录 volumes: - name: nfs-client-root nfs: server: 192.168.255.140 path: /data/nfsdata --- apiVersion: v1 kind: ServiceAccount metadata: name: nfs-client # replace with namespace where provisioner is deployed namespace: default --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: nfs-client-runner rules: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["persistentvolumes"] verbs: ["get", "list", "watch", "create", "delete"] - apiGroups: [""] resources: ["persistentvolumeclaims"] verbs: ["get", "list", "watch", "update"] - apiGroups: ["storage.k8s.io"] resources: ["storageclasses"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["events"] verbs: ["create", "update", "patch"] --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: run-nfs-client subjects: - kind: ServiceAccount name: nfs-client # replace with namespace where provisioner is deployed namespace: default roleRef: kind: ClusterRole name: nfs-client-runner apiGroup: rbac.authorization.k8s.io --- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: leader-locking-nfs-client # replace with namespace where provisioner is deployed namespace: default rules: - apiGroups: [""] resources: ["endpoints"] verbs: ["get", "list", "watch", "create", "update", "patch"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: leader-locking-nfs-client # replace with namespace where provisioner is deployed namespace: default subjects: - kind: ServiceAccount name: nfs-client # replace with namespace where provisioner is deployed namespace: default roleRef: kind: Role name: leader-locking-nfs-client apiGroup: rbac.authorization.k8s.io 执行命令: # 执行发布安装 kubectl apply -f sc.yaml # 查看nfs-client-provisioner pod 是否安装成功 kubectl get pod -A Worker节点配置如下: worker: # -- Enable or disable the Worker component enabled: true replicas: "1" resources: limits: memory: "4Gi" cpu: "2" requests: memory: "2Gi" cpu: "500m" persistentVolumeClaim: # -- Set `worker.persistentVolumeClaim.enabled` to `true` to enable `persistentVolumeClaim` for `worker` enabled: true ## dolphinscheduler data volume dataPersistentVolume: # -- Set `worker.persistentVolumeClaim.dataPersistentVolume.enabled` to `true` to mount a data volume for `worker` enabled: true # -- `PersistentVolumeClaim` access modes accessModes: - "ReadWriteOnce" # -- `Worker` data persistent volume storage class. If set to "-", storageClassName: "", which disables dynamic provisioning storageClassName: "nfs-storage" # -- `PersistentVolumeClaim` size storage: "20Gi" env: # -- The jvm options for master server JAVA_OPTS: "-Xms1g -Xmx1g -Xmn512m" (6)、修改alter配置 alert: # -- Enable or disable the Worker component enabled: true replicas: "1" resources: limits: memory: "2Gi" cpu: "1" requests: memory: "1Gi" cpu: "500m" persistentVolumeClaim: # -- Set `worker.persistentVolumeClaim.enabled` to `true` to enable `persistentVolumeClaim` for `worker` enabled: true ## dolphinscheduler data volume dataPersistentVolume: # -- Set `worker.persistentVolumeClaim.dataPersistentVolume.enabled` to `true` to mount a data volume for `worker` enabled: true # -- `PersistentVolumeClaim` access modes accessModes: - "ReadWriteOnce" # -- `Worker` data persistent volume storage class. If set to "-", storageClassName: "", which disables dynamic provisioning storageClassName: "-" # -- `PersistentVolumeClaim` size storage: "20Gi" env: # -- The jvm options for master server JAVA_OPTS: "-Xms1g -Xmx1g -Xmn512m" 完整的values.yaml配置文件如下: # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Default values for dolphinscheduler-chart. # This is a YAML-formatted file. # Declare variables to be passed into your templates. # -- World time and date for cities in all time zones timezone: "Asia/Shanghai" # -- Used to detect whether dolphinscheduler dependent services such as database are ready initImage: # -- Image pull policy. Options: Always, Never, IfNotPresent pullPolicy: "IfNotPresent" # -- Specify initImage repository busybox: "registry.cn-hangzhou.aliyuncs.com/docker_image-ljx/busybox:1.30.1" image: # -- Docker image repository for the DolphinScheduler registry: registry.cn-hangzhou.aliyuncs.com/docker_image-ljx # -- Docker image version for the DolphinScheduler tag: 3.2.2 # -- Image pull policy. Options: Always, Never, IfNotPresent pullPolicy: "IfNotPresent" # -- Specify a imagePullSecrets pullSecret: "" # -- master image master: dolphinscheduler-master # -- worker image worker: dolphinscheduler-worker # -- api-server image api: dolphinscheduler-api # -- alert-server image alert: dolphinscheduler-alert-server # -- tools image tools: dolphinscheduler-tools datasource: # -- The profile of datasource profile: postgresql postgresql: image: registry: docker.io repository: bitnami/postgresql tag: 11.11.0-debian-10-r71 # -- If not exists external PostgreSQL, by default, the DolphinScheduler will use a internal PostgreSQL enabled: true # -- The username for internal PostgreSQL postgresqlUsername: "root" # -- The password for internal PostgreSQL postgresqlPassword: "root" # -- The database for internal PostgreSQL postgresqlDatabase: "dolphinscheduler" # -- The driverClassName for internal PostgreSQL driverClassName: "org.postgresql.Driver" # -- The params for internal PostgreSQL params: "characterEncoding=utf8" persistence: # -- Set postgresql.persistence.enabled to true to mount a new volume for internal PostgreSQL enabled: false # -- `PersistentVolumeClaim` size size: "20Gi" # -- PostgreSQL data persistent volume storage class. If set to "-", storageClassName: "", which disables dynamic provisioning storageClass: "-" mysql: image: registry: docker.io repository: bitnami/mysql tag: 8.0.31-debian-11-r0 # -- If not exists external MySQL, by default, the DolphinScheduler will use a internal MySQL enabled: false # -- mysql driverClassName driverClassName: "com.mysql.cj.jdbc.Driver" auth: # -- mysql username username: "ds" # -- mysql password password: "ds" # -- mysql database database: "dolphinscheduler" # -- mysql params params: "characterEncoding=utf8" primary: persistence: # -- Set mysql.primary.persistence.enabled to true to mount a new volume for internal MySQL enabled: false # -- `PersistentVolumeClaim` size size: "20Gi" # -- MySQL data persistent volume storage class. If set to "-", storageClassName: "", which disables dynamic provisioning storageClass: "-" minio: image: registry: docker.io repository: bitnami/minio tag: 2022.10.29-debian-11-r0 # -- Deploy minio and configure it as the default storage for DolphinScheduler, note this is for demo only, not for production. enabled: true auth: # -- minio username rootUser: minioadmin # -- minio password rootPassword: minioadmin persistence: # -- Set minio.persistence.enabled to true to mount a new volume for internal minio enabled: false # -- minio default buckets defaultBuckets: "dolphinscheduler" externalDatabase: # -- If exists external database, and set postgresql.enable value to false. # external database will be used, otherwise Dolphinscheduler's internal database will be used. enabled: false # -- The type of external database, supported types: postgresql, mysql type: "postgresql" # -- The host of external database host: "localhost" # -- The port of external database port: "5432" # -- The username of external database username: "root" # -- The password of external database password: "root" # -- The database of external database database: "dolphinscheduler" # -- The params of external database params: "characterEncoding=utf8" # -- The driverClassName of external database driverClassName: "org.postgresql.Driver" zookeeper: image: registry: docker.io repository: bitnami/zookeeper tag: 3.6.2-debian-10-r185 # -- If not exists external registry, the zookeeper registry will be used by default. enabled: true service: # -- The port of zookeeper port: 2181 # -- A list of comma separated Four Letter Words commands to use fourlwCommandsWhitelist: "srvr,ruok,wchs,cons" persistence: # -- Set `zookeeper.persistence.enabled` to true to mount a new volume for internal ZooKeeper enabled: false # -- PersistentVolumeClaim size size: "20Gi" # -- ZooKeeper data persistent volume storage class. If set to "-", storageClassName: "", which disables dynamic provisioning storageClass: "-" registryEtcd: # -- If you want to use Etcd for your registry center, change this value to true. And set zookeeper.enabled to false enabled: false # -- Etcd endpoints endpoints: "" # -- Etcd namespace namespace: "dolphinscheduler" # -- Etcd user user: "" # -- Etcd passWord passWord: "" # -- Etcd authority authority: "" # Please create a new folder: deploy/kubernetes/dolphinscheduler/etcd-certs ssl: # -- If your Etcd server has configured with ssl, change this value to true. About certification files you can see [here](https://github.com/etcd-io/jetcd/blob/main/docs/SslConfig.md) for how to convert. enabled: false # -- CertFile file path certFile: "etcd-certs/ca.crt" # -- keyCertChainFile file path keyCertChainFile: "etcd-certs/client.crt" # -- keyFile file path keyFile: "etcd-certs/client.pem" registryJdbc: # -- If you want to use JDbc for your registry center, change this value to true. And set zookeeper.enabled and registryEtcd.enabled to false enabled: false # -- Used to schedule refresh the ephemeral data/ lock termRefreshInterval: 2s # -- Used to calculate the expire time termExpireTimes: 3 hikariConfig: # -- Default use same Dolphinscheduler's database, if you want to use other database please change `enabled` to `true` and change other configs enabled: false # -- Default use same Dolphinscheduler's database if you don't change this value. If you set this value, Registry jdbc's database type will use it driverClassName: com.mysql.cj.jdbc.Driver # -- Default use same Dolphinscheduler's database if you don't change this value. If you set this value, Registry jdbc's database type will use it jdbcurl: jdbc:mysql:// # -- Default use same Dolphinscheduler's database if you don't change this value. If you set this value, Registry jdbc's database type will use it username: "" # -- Default use same Dolphinscheduler's database if you don't change this value. If you set this value, Registry jdbc's database type will use it password: "" ## If exists external registry and set zookeeper.enable value to false, the external registry will be used. externalRegistry: # -- If exists external registry and set `zookeeper.enable` && `registryEtcd.enabled` && `registryJdbc.enabled` to false, specify the external registry plugin name registryPluginName: "zookeeper" # -- If exists external registry and set `zookeeper.enable` && `registryEtcd.enabled` && `registryJdbc.enabled` to false, specify the external registry servers registryServers: "127.0.0.1:2181" security: authentication: # -- Authentication types (supported types: PASSWORD,LDAP,CASDOOR_SSO) type: PASSWORD # IF you set type `LDAP`, below config will be effective ldap: # -- LDAP urls urls: ldap://ldap.forumsys.com:389/ # -- LDAP base dn basedn: dc=example,dc=com # -- LDAP username username: cn=read-only-admin,dc=example,dc=com # -- LDAP password password: password user: # -- Admin user account when you log-in with LDAP admin: read-only-admin # -- LDAP user identity attribute identityattribute: uid # -- LDAP user email attribute emailattribute: mail # -- action when ldap user is not exist,default value: CREATE. Optional values include(CREATE,DENY) notexistaction: CREATE ssl: # -- LDAP ssl switch enable: false # -- LDAP jks file absolute path, do not change this value truststore: "/opt/ldapkeystore.jks" # -- LDAP jks file base64 content. # If you use macOS, please run `base64 -b 0 -i /path/to/your.jks`. # If you use Linux, please run `base64 -w 0 /path/to/your.jks`. # If you use Windows, please run `certutil -f -encode /path/to/your.jks`. # Then copy the base64 content to below field in one line jksbase64content: "" # -- LDAP jks password truststorepassword: "" conf: # -- auto restart, if true, all components will be restarted automatically after the common configuration is updated. if false, you need to restart the components manually. default is false auto: false # common configuration common: # -- user data local directory path, please make sure the directory exists and have read write permissions data.basedir.path: /tmp/dolphinscheduler # -- resource storage type: HDFS, S3, OSS, GCS, ABS, NONE resource.storage.type: S3 # -- resource store on HDFS/S3 path, resource file will store to this base path, self configuration, please make sure the directory exists on hdfs and have read write permissions. "/dolphinscheduler" is recommended resource.storage.upload.base.path: /dolphinscheduler # -- The AWS access key. if resource.storage.type=S3 or use EMR-Task, This configuration is required resource.aws.access.key.id: minioadmin # -- The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This configuration is required resource.aws.secret.access.key: minioadmin # -- The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, This configuration is required resource.aws.region: ca-central-1 # -- The name of the bucket. You need to create them by yourself. Otherwise, the system cannot start. All buckets in Amazon S3 share a single namespace; ensure the bucket is given a unique name. resource.aws.s3.bucket.name: dolphinscheduler # -- You need to set this parameter when private cloud s3. If S3 uses public cloud, you only need to set resource.aws.region or set to the endpoint of a public cloud such as S3.cn-north-1.amazonaws.com.cn resource.aws.s3.endpoint: http://minio:9000 # -- alibaba cloud access key id, required if you set resource.storage.type=OSS resource.alibaba.cloud.access.key.id: <your-access-key-id> # -- alibaba cloud access key secret, required if you set resource.storage.type=OSS resource.alibaba.cloud.access.key.secret: <your-access-key-secret> # -- alibaba cloud region, required if you set resource.storage.type=OSS resource.alibaba.cloud.region: cn-hangzhou # -- oss bucket name, required if you set resource.storage.type=OSS resource.alibaba.cloud.oss.bucket.name: dolphinscheduler # -- oss bucket endpoint, required if you set resource.storage.type=OSS resource.alibaba.cloud.oss.endpoint: https://oss-cn-hangzhou.aliyuncs.com # -- azure storage account name, required if you set resource.storage.type=ABS resource.azure.client.id: minioadmin # -- azure storage account key, required if you set resource.storage.type=ABS resource.azure.client.secret: minioadmin # -- azure storage subId, required if you set resource.storage.type=ABS resource.azure.subId: minioadmin # -- azure storage tenantId, required if you set resource.storage.type=ABS resource.azure.tenant.id: minioadmin # -- if resource.storage.type=HDFS, the user must have the permission to create directories under the HDFS root path resource.hdfs.root.user: hdfs # -- if resource.storage.type=S3, the value like: s3a://dolphinscheduler; if resource.storage.type=HDFS and namenode HA is enabled, you need to copy core-site.xml and hdfs-site.xml to conf dir resource.hdfs.fs.defaultFS: hdfs://mycluster:8020 # -- whether to startup kerberos hadoop.security.authentication.startup.state: false # -- java.security.krb5.conf path java.security.krb5.conf.path: /opt/krb5.conf # -- login user from keytab username login.user.keytab.username: hdfs-mycluster@ESZ.COM # -- login user from keytab path login.user.keytab.path: /opt/hdfs.headless.keytab # -- kerberos expire time, the unit is hour kerberos.expire.time: 2 # -- resourcemanager port, the default value is 8088 if not specified resource.manager.httpaddress.port: 8088 # -- if resourcemanager HA is enabled, please set the HA IPs; if resourcemanager is single, keep this value empty yarn.resourcemanager.ha.rm.ids: 192.168.xx.xx,192.168.xx.xx # -- if resourcemanager HA is enabled or not use resourcemanager, please keep the default value; If resourcemanager is single, you only need to replace ds1 to actual resourcemanager hostname yarn.application.status.address: http://ds1:%s/ws/v1/cluster/apps/%s # -- job history status url when application number threshold is reached(default 10000, maybe it was set to 1000) yarn.job.history.status.address: http://ds1:19888/ws/v1/history/mapreduce/jobs/%s # -- datasource encryption enable datasource.encryption.enable: false # -- datasource encryption salt datasource.encryption.salt: '!@#$%^&*' # -- data quality option data-quality.jar.dir: # -- Whether hive SQL is executed in the same session support.hive.oneSession: false # -- use sudo or not, if set true, executing user is tenant user and deploy user needs sudo permissions; if set false, executing user is the deploy user and doesn't need sudo permissions sudo.enable: true # -- development state development.state: false # -- rpc port alert.rpc.port: 50052 # -- set path of conda.sh conda.path: /opt/anaconda3/etc/profile.d/conda.sh # -- Task resource limit state task.resource.limit.state: false # -- mlflow task plugin preset repository ml.mlflow.preset_repository: https://github.com/apache/dolphinscheduler-mlflow # -- mlflow task plugin preset repository version ml.mlflow.preset_repository_version: "main" # -- way to collect applicationId: log, aop appId.collect: log common: ## Configmap configmap: # -- The jvm options for dolphinscheduler, suitable for all servers DOLPHINSCHEDULER_OPTS: "" # -- User data directory path, self configuration, please make sure the directory exists and have read write permissions DATA_BASEDIR_PATH: "/tmp/dolphinscheduler" # -- Resource store on HDFS/S3 path, please make sure the directory exists on hdfs and have read write permissions RESOURCE_UPLOAD_PATH: "/dolphinscheduler" # dolphinscheduler env # -- Set `HADOOP_HOME` for DolphinScheduler's task environment HADOOP_HOME: "/opt/soft/hadoop" # -- Set `HADOOP_CONF_DIR` for DolphinScheduler's task environment HADOOP_CONF_DIR: "/opt/soft/hadoop/etc/hadoop" # -- Set `SPARK_HOME` for DolphinScheduler's task environment SPARK_HOME: "/opt/soft/spark" # -- Set `PYTHON_LAUNCHER` for DolphinScheduler's task environment PYTHON_LAUNCHER: "/usr/bin/python/bin/python3" # -- Set `JAVA_HOME` for DolphinScheduler's task environment JAVA_HOME: "/opt/java/openjdk" # -- Set `HIVE_HOME` for DolphinScheduler's task environment HIVE_HOME: "/opt/soft/hive" # -- Set `FLINK_HOME` for DolphinScheduler's task environment FLINK_HOME: "/opt/soft/flink" # -- Set `DATAX_LAUNCHER` for DolphinScheduler's task environment DATAX_LAUNCHER: "/opt/soft/datax/bin/datax.py" ## Shared storage persistence mounted into api, master and worker, such as Hadoop, Spark, Flink and DataX binary package sharedStoragePersistence: # -- Set `common.sharedStoragePersistence.enabled` to `true` to mount a shared storage volume for Hadoop, Spark binary and etc enabled: false # -- The mount path for the shared storage volume mountPath: "/opt/soft" # -- `PersistentVolumeClaim` access modes, must be `ReadWriteMany` accessModes: - "ReadWriteMany" # -- Shared Storage persistent volume storage class, must support the access mode: ReadWriteMany storageClassName: "-" # -- `PersistentVolumeClaim` size storage: "20Gi" ## If RESOURCE_STORAGE_TYPE is HDFS and FS_DEFAULT_FS is file:///, fsFileResourcePersistence should be enabled for resource storage fsFileResourcePersistence: # -- Set `common.fsFileResourcePersistence.enabled` to `true` to mount a new file resource volume for `api` and `worker` enabled: false # -- `PersistentVolumeClaim` access modes, must be `ReadWriteMany` accessModes: - "ReadWriteMany" # -- Resource persistent volume storage class, must support the access mode: `ReadWriteMany` storageClassName: "-" # -- `PersistentVolumeClaim` size storage: "20Gi" master: # -- Enable or disable the Master component enabled: true # -- PodManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. podManagementPolicy: "Parallel" # -- Replicas is the desired number of replicas of the given Template. replicas: "1" # -- You can use annotations to attach arbitrary non-identifying metadata to objects. # Clients such as tools and libraries can retrieve this metadata. annotations: {} # -- Affinity is a group of affinity scheduling rules. If specified, the pod's scheduling constraints. # More info: [node-affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) affinity: {} # -- NodeSelector is a selector which must be true for the pod to fit on a node. # Selector which must match a node's labels for the pod to be scheduled on that node. # More info: [assign-pod-node](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/) nodeSelector: {} # -- Tolerations are appended (excluding duplicates) to pods running with this RuntimeClass during admission, # effectively unioning the set of nodes tolerated by the pod and the RuntimeClass. tolerations: [] # -- Compute Resources required by this container. # More info: [manage-resources-containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) #resources: {} resources: limits: memory: "4Gi" cpu: "4" requests: memory: "2Gi" cpu: "500m" # -- enable configure custom config enableCustomizedConfig: false # -- configure aligned with https://github.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-master/src/main/resources/application.yaml customizedConfig: { } # customizedConfig: # application.yaml: | # profiles: # active: postgresql # banner: # charset: UTF-8 # jackson: # time-zone: UTC # date-format: "yyyy-MM-dd HH:mm:ss" # -- Periodic probe of container liveness. Container will be restarted if the probe fails. # More info: [container-probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes) livenessProbe: # -- Turn on and off liveness probe enabled: true # -- Delay before liveness probe is initiated initialDelaySeconds: "30" # -- How often to perform the probe periodSeconds: "30" # -- When the probe times out timeoutSeconds: "5" # -- Minimum consecutive failures for the probe failureThreshold: "3" # -- Minimum consecutive successes for the probe successThreshold: "1" # -- Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. # More info: [container-probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes) readinessProbe: # -- Turn on and off readiness probe enabled: true # -- Delay before readiness probe is initiated initialDelaySeconds: "30" # -- How often to perform the probe periodSeconds: "30" # -- When the probe times out timeoutSeconds: "5" # -- Minimum consecutive failures for the probe failureThreshold: "3" # -- Minimum consecutive successes for the probe successThreshold: "1" # -- PersistentVolumeClaim represents a reference to a PersistentVolumeClaim in the same namespace. # The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. # Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. # A claim in this list takes precedence over any volumes in the template, with the same name. persistentVolumeClaim: # -- Set `master.persistentVolumeClaim.enabled` to `true` to mount a new volume for `master` enabled: false # -- `PersistentVolumeClaim` access modes accessModes: - "ReadWriteOnce" # -- `Master` logs data persistent volume storage class. If set to "-", storageClassName: "", which disables dynamic provisioning storageClassName: "-" # -- `PersistentVolumeClaim` size storage: "20Gi" env: # -- The jvm options for master server JAVA_OPTS: "-Xms1g -Xmx1g -Xmn512m" # -- Master execute thread number to limit process instances MASTER_EXEC_THREADS: "100" # -- Master execute task number in parallel per process instance MASTER_EXEC_TASK_NUM: "20" # -- Master dispatch task number per batch MASTER_DISPATCH_TASK_NUM: "3" # -- Master host selector to select a suitable worker, optional values include Random, RoundRobin, LowerWeight MASTER_HOST_SELECTOR: "LowerWeight" # -- Master max heartbeat interval MASTER_MAX_HEARTBEAT_INTERVAL: "10s" # -- Master heartbeat error threshold MASTER_HEARTBEAT_ERROR_THRESHOLD: "5" # -- Master commit task retry times MASTER_TASK_COMMIT_RETRYTIMES: "5" # -- master commit task interval, the unit is second MASTER_TASK_COMMIT_INTERVAL: "1s" # -- master state wheel interval, the unit is second MASTER_STATE_WHEEL_INTERVAL: "5s" # -- If set true, will open master overload protection MASTER_SERVER_LOAD_PROTECTION_ENABLED: false # -- Master max system cpu usage, when the master's system cpu usage is smaller then this value, master server can execute workflow. MASTER_SERVER_LOAD_PROTECTION_MAX_SYSTEM_CPU_USAGE_PERCENTAGE_THRESHOLDS: 0.7 # -- Master max jvm cpu usage, when the master's jvm cpu usage is smaller then this value, master server can execute workflow. MASTER_SERVER_LOAD_PROTECTION_MAX_JVM_CPU_USAGE_PERCENTAGE_THRESHOLDS: 0.7 # -- Master max System memory usage , when the master's system memory usage is smaller then this value, master server can execute workflow. MASTER_SERVER_LOAD_PROTECTION_MAX_SYSTEM_MEMORY_USAGE_PERCENTAGE_THRESHOLDS: 0.7 # -- Master max disk usage , when the master's disk usage is smaller then this value, master server can execute workflow. MASTER_SERVER_LOAD_PROTECTION_MAX_DISK_USAGE_PERCENTAGE_THRESHOLDS: 0.7 # -- Master failover interval, the unit is minute MASTER_FAILOVER_INTERVAL: "10m" # -- Master kill application when handle failover MASTER_KILL_APPLICATION_WHEN_HANDLE_FAILOVER: "true" service: # -- annotations may need to be set when want to scrapy metrics by prometheus but not install prometheus operator annotations: {} # -- serviceMonitor for prometheus operator serviceMonitor: # -- Enable or disable master serviceMonitor enabled: false # -- serviceMonitor.interval interval at which metrics should be scraped interval: 15s # -- serviceMonitor.path path of the metrics endpoint path: /actuator/prometheus # -- serviceMonitor.labels ServiceMonitor extra labels labels: {} # -- serviceMonitor.annotations ServiceMonitor annotations annotations: {} worker: # -- Enable or disable the Worker component enabled: true # -- PodManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. podManagementPolicy: "Parallel" # -- Replicas is the desired number of replicas of the given Template. replicas: "3" # -- You can use annotations to attach arbitrary non-identifying metadata to objects. # Clients such as tools and libraries can retrieve this metadata. annotations: {} # -- Affinity is a group of affinity scheduling rules. If specified, the pod's scheduling constraints. # More info: [node-affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) affinity: {} # -- NodeSelector is a selector which must be true for the pod to fit on a node. # Selector which must match a node's labels for the pod to be scheduled on that node. # More info: [assign-pod-node](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/) nodeSelector: {} # -- Tolerations are appended (excluding duplicates) to pods running with this RuntimeClass during admission, # effectively unioning the set of nodes tolerated by the pod and the RuntimeClass. tolerations: [ ] # -- Compute Resources required by this container. # More info: [manage-resources-containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) #resources: {} resources: limits: memory: "4Gi" cpu: "2" requests: memory: "2Gi" cpu: "500m" # -- Periodic probe of container liveness. Container will be restarted if the probe fails. # More info: [container-probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes) # -- enable configure custom config enableCustomizedConfig: false # -- configure aligned with https://github.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-worker/src/main/resources/application.yaml customizedConfig: { } # customizedConfig: # application.yaml: | # banner: # charset: UTF-8 # jackson: # time-zone: UTC # date-format: "yyyy-MM-dd HH:mm:ss" livenessProbe: # -- Turn on and off liveness probe enabled: true # -- Delay before liveness probe is initiated initialDelaySeconds: "30" # -- How often to perform the probe periodSeconds: "30" # -- When the probe times out timeoutSeconds: "5" # -- Minimum consecutive failures for the probe failureThreshold: "3" # -- Minimum consecutive successes for the probe successThreshold: "1" # -- Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. # More info: [container-probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes) readinessProbe: # -- Turn on and off readiness probe enabled: true # -- Delay before readiness probe is initiated initialDelaySeconds: "30" # -- How often to perform the probe periodSeconds: "30" # -- When the probe times out timeoutSeconds: "5" # -- Minimum consecutive failures for the probe failureThreshold: "3" # -- Minimum consecutive successes for the probe successThreshold: "1" # -- PersistentVolumeClaim represents a reference to a PersistentVolumeClaim in the same namespace. # The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. # Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. # A claim in this list takes precedence over any volumes in the template, with the same name. persistentVolumeClaim: # -- Set `worker.persistentVolumeClaim.enabled` to `true` to enable `persistentVolumeClaim` for `worker` enabled: false ## dolphinscheduler data volume dataPersistentVolume: # -- Set `worker.persistentVolumeClaim.dataPersistentVolume.enabled` to `true` to mount a data volume for `worker` enabled: false # -- `PersistentVolumeClaim` access modes accessModes: - "ReadWriteOnce" # -- `Worker` data persistent volume storage class. If set to "-", storageClassName: "", which disables dynamic provisioning storageClassName: "nfs-storage" # -- `PersistentVolumeClaim` size storage: "20Gi" ## dolphinscheduler logs volume logsPersistentVolume: # -- Set `worker.persistentVolumeClaim.logsPersistentVolume.enabled` to `true` to mount a logs volume for `worker` enabled: false # -- `PersistentVolumeClaim` access modes accessModes: - "ReadWriteOnce" # -- `Worker` logs data persistent volume storage class. If set to "-", storageClassName: "", which disables dynamic provisioning storageClassName: "-" # -- `PersistentVolumeClaim` size storage: "20Gi" env: # -- If set true, will open worker overload protection WORKER_SERVER_LOAD_PROTECTION_ENABLED: false # -- Worker max system cpu usage, when the worker's system cpu usage is smaller then this value, worker server can be dispatched tasks. WORKER_SERVER_LOAD_PROTECTION_MAX_SYSTEM_CPU_USAGE_PERCENTAGE_THRESHOLDS: 0.7 # -- Worker max jvm cpu usage, when the worker's jvm cpu usage is smaller then this value, worker server can be dispatched tasks. WORKER_SERVER_LOAD_PROTECTION_MAX_JVM_CPU_USAGE_PERCENTAGE_THRESHOLDS: 0.7 # -- Worker max memory usage , when the worker's memory usage is smaller then this value, worker server can be dispatched tasks. WORKER_SERVER_LOAD_PROTECTION_MAX_SYSTEM_MEMORY_USAGE_PERCENTAGE_THRESHOLDS: 0.7 # -- Worker max disk usage , when the worker's disk usage is smaller then this value, worker server can be dispatched tasks. WORKER_SERVER_LOAD_PROTECTION_MAX_DISK_USAGE_PERCENTAGE_THRESHOLDS: 0.7 # -- Worker execute thread number to limit task instances WORKER_EXEC_THREADS: "100" # -- Worker heartbeat interval WORKER_MAX_HEARTBEAT_INTERVAL: "10s" # -- Worker host weight to dispatch tasks WORKER_HOST_WEIGHT: "100" # -- tenant corresponds to the user of the system, which is used by the worker to submit the job. If system does not have this user, it will be automatically created after the parameter worker.tenant.auto.create is true. WORKER_TENANT_CONFIG_AUTO_CREATE_TENANT_ENABLED: true # -- Scenes to be used for distributed users. For example, users created by FreeIpa are stored in LDAP. This parameter only applies to Linux, When this parameter is true, worker.tenant.auto.create has no effect and will not automatically create tenants. WORKER_TENANT_CONFIG_DISTRIBUTED_TENANT: false # -- If set true, will use worker bootstrap user as the tenant to execute task when the tenant is `default`; DEFAULT_TENANT_ENABLED: false keda: # -- Enable or disable the Keda component enabled: false # -- Keda namespace labels namespaceLabels: { } # -- How often KEDA polls the DolphinScheduler DB to report new scale requests to the HPA pollingInterval: 5 # -- How many seconds KEDA will wait before scaling to zero. # Note that HPA has a separate cooldown period for scale-downs cooldownPeriod: 30 # -- Minimum number of workers created by keda minReplicaCount: 0 # -- Maximum number of workers created by keda maxReplicaCount: 3 # -- Specify HPA related options advanced: { } # horizontalPodAutoscalerConfig: # behavior: # scaleDown: # stabilizationWindowSeconds: 300 # policies: # - type: Percent # value: 100 # periodSeconds: 15 service: # -- annotations may need to be set when want to scrapy metrics by prometheus but not install prometheus operator annotations: {} # -- serviceMonitor for prometheus operator serviceMonitor: # -- Enable or disable worker serviceMonitor enabled: false # -- serviceMonitor.interval interval at which metrics should be scraped interval: 15s # -- serviceMonitor.path path of the metrics endpoint path: /actuator/prometheus # -- serviceMonitor.labels ServiceMonitor extra labels labels: {} # -- serviceMonitor.annotations ServiceMonitor annotations annotations: {} alert: # -- Enable or disable the Alert-Server component enabled: true # -- Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1. replicas: 1 # -- The deployment strategy to use to replace existing pods with new ones. strategy: # -- Type of deployment. Can be "Recreate" or "RollingUpdate" type: "RollingUpdate" rollingUpdate: # -- The maximum number of pods that can be scheduled above the desired number of pods maxSurge: "25%" # -- The maximum number of pods that can be unavailable during the update maxUnavailable: "25%" # -- You can use annotations to attach arbitrary non-identifying metadata to objects. # Clients such as tools and libraries can retrieve this metadata. annotations: {} # -- Affinity is a group of affinity scheduling rules. If specified, the pod's scheduling constraints. # More info: [node-affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) affinity: {} # -- NodeSelector is a selector which must be true for the pod to fit on a node. # Selector which must match a node's labels for the pod to be scheduled on that node. # More info: [assign-pod-node](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/) nodeSelector: {} # -- Tolerations are appended (excluding duplicates) to pods running with this RuntimeClass during admission, # effectively unioning the set of nodes tolerated by the pod and the RuntimeClass. tolerations: [] # -- Compute Resources required by this container. # More info: [manage-resources-containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) #resources: {} resources: limits: memory: "2Gi" cpu: "1" requests: memory: "1Gi" cpu: "500m" # -- enable configure custom config enableCustomizedConfig: false # -- configure aligned with https://github.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/resources/application.yaml customizedConfig: { } # customizedConfig: # application.yaml: | # profiles: # active: postgresql # banner: # charset: UTF-8 # jackson: # time-zone: UTC # date-format: "yyyy-MM-dd HH:mm:ss" # -- Periodic probe of container liveness. Container will be restarted if the probe fails. # More info: [container-probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes) livenessProbe: # -- Turn on and off liveness probe enabled: true # -- Delay before liveness probe is initiated initialDelaySeconds: "30" # -- How often to perform the probe periodSeconds: "30" # -- When the probe times out timeoutSeconds: "5" # -- Minimum consecutive failures for the probe failureThreshold: "3" # -- Minimum consecutive successes for the probe successThreshold: "1" # -- Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. # More info: [container-probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes) readinessProbe: # -- Turn on and off readiness probe enabled: true # -- Delay before readiness probe is initiated initialDelaySeconds: "30" # -- How often to perform the probe periodSeconds: "30" # -- When the probe times out timeoutSeconds: "5" # -- Minimum consecutive failures for the probe failureThreshold: "3" # -- Minimum consecutive successes for the probe successThreshold: "1" # -- PersistentVolumeClaim represents a reference to a PersistentVolumeClaim in the same namespace. # More info: [persistentvolumeclaims](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims) persistentVolumeClaim: # -- Set `alert.persistentVolumeClaim.enabled` to `true` to mount a new volume for `alert` enabled: false # -- `PersistentVolumeClaim` access modes accessModes: - "ReadWriteOnce" # -- `Alert` logs data persistent volume storage class. If set to "-", storageClassName: "", which disables dynamic provisioning storageClassName: "-" # -- `PersistentVolumeClaim` size storage: "20Gi" env: # -- The jvm options for alert server JAVA_OPTS: "-Xms512m -Xmx512m -Xmn256m" service: # -- annotations may need to be set when want to scrapy metrics by prometheus but not install prometheus operator annotations: {} # -- serviceMonitor for prometheus operator serviceMonitor: # -- Enable or disable alert-server serviceMonitor enabled: false # -- serviceMonitor.interval interval at which metrics should be scraped interval: 15s # -- serviceMonitor.path path of the metrics endpoint path: /actuator/prometheus # -- serviceMonitor.labels ServiceMonitor extra labels labels: {} # -- serviceMonitor.annotations ServiceMonitor annotations annotations: {} api: # -- Enable or disable the API-Server component enabled: true # -- Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1. replicas: "1" # -- The deployment strategy to use to replace existing pods with new ones. strategy: # -- Type of deployment. Can be "Recreate" or "RollingUpdate" type: "RollingUpdate" rollingUpdate: # -- The maximum number of pods that can be scheduled above the desired number of pods maxSurge: "25%" # -- The maximum number of pods that can be unavailable during the update maxUnavailable: "25%" # -- You can use annotations to attach arbitrary non-identifying metadata to objects. # Clients such as tools and libraries can retrieve this metadata. annotations: {} # -- Affinity is a group of affinity scheduling rules. If specified, the pod's scheduling constraints. # More info: [node-affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) affinity: { } # -- NodeSelector is a selector which must be true for the pod to fit on a node. # Selector which must match a node's labels for the pod to be scheduled on that node. # More info: [assign-pod-node](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/) nodeSelector: { } # -- Tolerations are appended (excluding duplicates) to pods running with this RuntimeClass during admission, # effectively unioning the set of nodes tolerated by the pod and the RuntimeClass. tolerations: [ ] # -- Compute Resources required by this container. # More info: [manage-resources-containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) #resources: {} resources: limits: memory: "2Gi" cpu: "4" requests: memory: "1Gi" cpu: "500m" # -- enable configure custom config enableCustomizedConfig: false # -- configure aligned with https://github.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-api/src/main/resources/application.yaml customizedConfig: { } # customizedConfig: # application.yaml: | # profiles: # active: postgresql # banner: # charset: UTF-8 # jackson: # time-zone: UTC # date-format: "yyyy-MM-dd HH:mm:ss" # -- Periodic probe of container liveness. Container will be restarted if the probe fails. # More info: [container-probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes) livenessProbe: # -- Turn on and off liveness probe enabled: true # -- Delay before liveness probe is initiated initialDelaySeconds: "30" # -- How often to perform the probe periodSeconds: "30" # -- When the probe times out timeoutSeconds: "5" # -- Minimum consecutive failures for the probe failureThreshold: "3" # -- Minimum consecutive successes for the probe successThreshold: "1" # -- Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. # More info: [container-probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes) readinessProbe: # -- Turn on and off readiness probe enabled: true # -- Delay before readiness probe is initiated initialDelaySeconds: "30" # -- How often to perform the probe periodSeconds: "30" # -- When the probe times out timeoutSeconds: "5" # -- Minimum consecutive failures for the probe failureThreshold: "3" # -- Minimum consecutive successes for the probe successThreshold: "1" # -- PersistentVolumeClaim represents a reference to a PersistentVolumeClaim in the same namespace. # More info: [persistentvolumeclaims](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims) persistentVolumeClaim: # -- Set `api.persistentVolumeClaim.enabled` to `true` to mount a new volume for `api` enabled: false # -- `PersistentVolumeClaim` access modes accessModes: - "ReadWriteOnce" # -- `api` logs data persistent volume storage class. If set to "-", storageClassName: "", which disables dynamic provisioning storageClassName: "-" # -- `PersistentVolumeClaim` size storage: "20Gi" service: # -- type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer type: "ClusterIP" # -- clusterIP is the IP address of the service and is usually assigned randomly by the master clusterIP: "" # -- nodePort is the port on each node on which this api service is exposed when type=NodePort nodePort: "" # -- pythonNodePort is the port on each node on which this python api service is exposed when type=NodePort pythonNodePort: "" # -- externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service externalIPs: [] # -- externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service, requires Type to be ExternalName externalName: "" # -- loadBalancerIP when service.type is LoadBalancer. LoadBalancer will get created with the IP specified in this field loadBalancerIP: "" # -- annotations may need to be set when service.type is LoadBalancer # service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-east-1:EXAMPLE_CERT annotations: {} # -- serviceMonitor for prometheus operator serviceMonitor: # -- Enable or disable api-server serviceMonitor enabled: false # -- serviceMonitor.interval interval at which metrics should be scraped interval: 15s # -- serviceMonitor.path path of the metrics endpoint path: /dolphinscheduler/actuator/prometheus # -- serviceMonitor.labels ServiceMonitor extra labels labels: {} # -- serviceMonitor.annotations ServiceMonitor annotations annotations: {} env: # -- The jvm options for api server JAVA_OPTS: "-Xms512m -Xmx512m -Xmn256m" taskTypeFilter: # -- Enable or disable the task type filter. # If set to true, the API-Server will return tasks of a specific type set in api.taskTypeFilter.task # Note: This feature only filters tasks to return a specific type on the WebUI. However, you can still create any task that DolphinScheduler supports via the API. enabled: false # -- taskTypeFilter.taskType task type # -- ref: [task-type-config.yaml](https://github.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-api/src/main/resources/task-type-config.yaml) task: {} # example task sets # universal: # - 'SQL' # cloud: [] # logic: [] # dataIntegration: [] # dataQuality: [] # machineLearning: [] # other: [] ingress: # -- Enable ingress enabled: true # -- Ingress host host: "dolphinscheduler.tyzwkj.cn" # -- Ingress path path: "/dolphinscheduler" # -- Ingress annotations annotations: {} tls: # -- Enable ingress tls enabled: false # -- Ingress tls secret name secretName: "dolphinscheduler-tls" 3、执行安装 (1)、安装前检查 [root@master dolphinscheduler]# helm template dolphinscheduler -f values.yaml ./ (2)、安装 [root@master dolphinscheduler]# kubectl create namespace dolphinscheduler [root@master dolphinscheduler]# helm -n dolphinscheduler install dolphinscheduler -f values.yaml ./ (3)、查看安装进度 [root@master dolphinscheduler]# kubectl get all -n dolphinscheduler (4)、添加ingress配置实现访问ui 【重点】 配置完成后,Dolphinscheduler管理端的UI访问地址为: http://dolphinscheduler.tyzwkj.cn/dolphinscheduler/ui/, 但是此时由于dolphinscheduler.tyzwkj.cn自定义域名还不能自动解析,需要在本地hosts文件中添加路由后才可以访问。 4、登录 配置完hosts后在浏览器中输入http://dolphinscheduler.tyzwkj.cn/dolphinscheduler/ui/ 用户名:admin 密码:dolphinscheduler123 结束,以上就是通过k8s部署Apache Dolphinscheduler集群的全部内容。 原文链接:https://blog.csdn.net/dyj095/article/details/150106792

优秀的个人博客,低调大师

CentOS7下安装配置Spark-2.0.1集群

Spark是一个快速、通用的计算集群框架,它的内核使用Scala语言编写,它提供了Scala、Java和Python编程语言high-level API,使用这些API能够非常容易地开发并行处理的应用程序。 下面,我们通过搭建Spark集群计算环境,并进行简单地验证,来体验一下使用Spark计算的特点。无论从安装运行环境还是从编写处理程序(用Scala,Spark默认提供的Shell环境可以直接输入Scala代码进行数据处理),我们都会觉得比Hadoop MapReduce计算框架要简单得多,而且,Spark可以很好地与HDFS进行交互(从HDFS读取数据,以及写数据到HDFS中)。 安装配置 下载安装配置Scala 1 2 3 wgethttp: //www .scala-lang.org /files/archive/scala-2 .10.3.tgz tar xvzfscala-2.10.3.tgz 在~/.bashrc中增加环境变量SCALA_HOME,并使之生效: 1 2 3 export SCALA_HOME= /usr/scala/scala-2 .10.3 export PATH=$PATH:$SCALA_HOME /bin 下载安装配置Spark 我们首先在主节点m1上配置Spark程序,然后将配置好的程序文件复制分发到集群的各个从结点上。下载解压缩: 1 2 3 wgethttp: //d3kbcqa49mib13 .cloudfront.net /spark-0 .9.0-incubating-bin-hadoop1.tgz tar xvzfspark-0.9.0-incubating-bin-hadoop1.tgz 在~/.bashrc中增加环境变量SPARK_HOME,并使之生效: 1 2 3 export SPARK_HOME= /home/shirdrn/cloud/programs/spark-0 .9.0-incubating-bin-hadoop1 export PATH=$PATH:$SPARK_HOME /bin 在m1上配置Spark,修改spark-env.sh配置文件: 1 2 3 cd /home/shirdrn/cloud/programs/spark-0 .9.0-incubating-bin-hadoop1 /conf cp spark- env .sh.templatespark- env .sh 在该脚本文件中,同时将SCALA_HOME配置为Unix环境下实际指向路径,例如: 1 export SCALA_HOME= /usr/scala/scala-2 .10.3 修改conf/slaves文件,将计算节点的主机名添加到该文件,一行一个,例如: 1 2 3 4 5 s1 s2 s3 最后,将Spark的程序文件和配置文件拷贝分发到从节点机器上: 1 2 3 4 5 scp -r~ /cloud/programs/spark-0 .9.0-incubating-bin-hadoop1shirdrn@s1:~ /cloud/programs/ scp -r~ /cloud/programs/spark-0 .9.0-incubating-bin-hadoop1shirdrn@s2:~ /cloud/programs/ scp -r~ /cloud/programs/spark-0 .9.0-incubating-bin-hadoop1shirdrn@s3:~ /cloud/programs/ 启动Spark集群 我们会使用HDFS集群上存储的数据作为计算的输入,所以首先要把Hadoop集群安装配置好,并成功启动,我这里使用的是Hadoop 1.2.1版本。启动Spark计算集群非常简单,执行如下命令即可: 1 2 cd /home/shirdrn/cloud/programs/spark-0 .9.0-incubating-bin-hadoop1/ sbin /start-all .sh 可以看到,在m1上启动了一个名称为Master的进程,在s1上启动了一个名称为Worker的进程,如下所示,我这里也启动了Hadoop集群: 主节点m1上: 1 2 3 4 5 6 54968SecondaryNameNode 55651Master 54814NameNode 从节点s1上: 1 2 3 4 5 33592Worker 33442TaskTracker 33336DataNode 各个进程是否启动成功,也可以查看日志来诊断,例如: 主节点上: 1 tail -100f$SPARK_HOME /logs/spark-shirdrn-org .apache.spark.deploy.master.Master-1-m1.out 从节点上: 1 tail -100f$SPARK_HOME /logs/spark-shirdrn-org .apache.spark.deploy.worker.Worker-1-s1.out Spark集群计算验证 我们使用我的网站的访问日志文件来演示,示例如下: 1 2 3 27.159.254.192--[21 /Feb/2014 :11:40:46+0800] "GET/archives/526.htmlHTTP/1.1" 20012080 "http://shiyanjun.cn/archives/526.html" "Mozilla/5.0(WindowsNT5.1;rv:11.0)Gecko/20100101Firefox/11.0" 120.43.4.206--[21 /Feb/2014 :10:37:37+0800] "GET/archives/417.htmlHTTP/1.1" 20011464 "http://shiyanjun.cn/archives/417.html/" "Mozilla/5.0(WindowsNT5.1;rv:11.0)Gecko/20100101Firefox/11.0" 统计该文件里面IP地址出现频率,来验证Spark集群能够正常计算。另外,我们需要从HDFS中读取这个日志文件,然后统计IP地址频率,最后将结果再保存到HDFS中的指定目录。 首先,需要启动用来提交计算任务的Spark Shell: 1 bin /spark-shell 在Spark Shell上只能使用Scala语言写代码来运行。 然后,执行统计IP地址频率,在Spark Shell中执行如下代码来实现: 1 2 3 val file =sc.textFile( "hdfs://m1:9000/user/shirdrn/wwwlog20140222.log" ) valresult= file .flatMap(line=>line. split ( "\\s+.*" )).map(word=>(word,1)).reduceByKey((a,b)=>a+b) 上述的文件hdfs://m1:9000/user/shirdrn/wwwlog20140222.log是输入日志文件。处理过程的日志信息,示例如下所示: 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 14 /03/06 21:59:23INFOExecutor:RunningtaskID20 36 14 /03/06 21:59:23INFOBlockManager:Foundblockbroadcast_11locally 37 14 /03/06 21:59:23INFOBlockFetcherIterator$BasicBlockFetcherIterator:Getting1non-zero-bytesblocksoutof1blocks 38 14 /03/06 21:59:23INFOBlockFetcherIterator$BasicBlockFetcherIterator:Started0remotegets in 1ms 39 14 /03/06 21:59:23INFOExecutor:Serializedsizeofresult for 20is19423 40 14 /03/06 21:59:23INFOExecutor:Sendingresult for 20directlytodriver 41 14 /03/06 21:59:23INFOTaskSetManager:FinishedTID20 in 17msonlocalhost(progress:0 /1 ) 42 14 /03/06 21:59:23INFOTaskSchedulerImpl:RemoveTaskSet20.0frompool 43 14 /03/06 21:59:23INFODAGScheduler:CompletedResultTask(20,0) 44 14 /03/06 21:59:23INFODAGScheduler:Stage20(collectat<console>:13)finished in 0.016s 45 14 /03/06 21:59:23INFOSparkContext:Jobfinished:collectat<console>:13,took0.242136929s 46 14 /03/06 21:59:23INFOExecutor:FinishedtaskID20 47 res14:Array[(String,Int)]=Array((27.159.254.192,28),(120.43.9.81,40),(120.43.4.206,16),(120.37.242.176,56),(64.31.25.60,2),(27.153.161.9,32),(202.43.145.163,24),(61.187.102.6,1),(117.26.195.116,12),(27.153.186.194,64),(123.125.71.91,1),(110.85.106.105,64),(110.86.184.182,36),(27.150.247.36,52),(110.86.166.52,60),(175.98.162.2,20),(61.136.166.16,1),(46.105.105.217,1),(27.150.223.49,52),(112.5.252.6,20),(121.205.242.4,76),(183.61.174.211,3),(27.153.230.35,36),(112.111.172.96,40),(112.5.234.157,3),(144.76.95.232,7),(31.204.154.144,28),(123.125.71.22,1),(80.82.64.118,3),(27.153.248.188,160),(112.5.252.187,40),(221.219.105.71,4),(74.82.169.79,19),(117.26.253.195,32),(120.33.244.205,152),(110.86.165.8,84),(117.26.86.172,136),(27.153.233.101,8),(123.12... 可以看到,输出了经过map和reduce计算后的部分结果。 最后,我们想要将结果保存到HDFS中,只要输入如下代码: result.saveAsTextFile("hdfs://m1:9000/user/shirdrn/wwwlog20140222.log.result") 查看HDFS上的结果数据: 1 2 3 4 5 6 7 [shirdrn@m1~]$hadoopfs- cat /user/shirdrn/wwwlog20140222 .log.result /part-00000 | head -5 (27.159.254.192,28) (120.43.9.81,40) (120.43.4.206,16) (120.37.242.176,56) (64.31.25.60,2) 本文转自crazy_charles 51CTO博客,原文链接:http://blog.51cto.com/douya/1863288,如需转载请自行联系原作者

优秀的个人博客,低调大师

互联网进入垂暮之年,这群产品经理该何去何从?

前几天卡Q在网上搜喽大数据的课程,偶遇了厦门大学林子雨教授的大数据公开课,吓得卡Q一身冷汗,为什么呢? 这不,卡Q刚给自己的人生定了个小目标,比如,进入互联网公司当个产品经理。因为在卡Q的眼里,互联网是个朝气蓬勃的圈子,里面的人都很牛掰,和聪明人共事,运气总不会太差,所以,卡Q决定削尖了脑袋也要和聪明的大脑共处一室。 可是林教授一席话把卡Q的屌丝梦打回了原形。那林教授说了些啥呢?曰:第三次信息化浪潮的傲娇来袭! 人类第三次科技革命是信息革命,从信息的存储,信息的传输,到信息的处理,三次信息化浪潮一浪更比一浪强。 1980年个人计算机的诞生迎来了信息革命的第一波浪潮——信息储存,计算机第一次打败人脑,成为信息储存的翘楚。而在这一波浪潮中,也孕育了一批伟大的公司:Intel ,惠普,联想,苹果,微软。 1995年前后,互联网走出军事壁垒迈向

优秀的个人博客,低调大师

陆首群评 DeepSeek 英文版在 Hugging Face 上发表了

“陆主席评DeepSeek”(英文版)在Hugging Face上发表了! 链接:https://huggingface.co/blog/COPU2004/lu-shouquns-view-of-deepseek 以下为英文版全文: Honorary Chairman of China OSS (Open Source Software) Promotion Union (COPU) Abstract DeepSeek can be seen as a representative work of China's current AI, exploring a new path for the development of AI, which may change the development pattern of AI in the world and trigger a fierce competition in global AI. DeepSeek insists on open source innovation. At present, it is also a generative autoregressive language model, which inevitably has negative defects such as limitations and hallucinations of common language models. The author of this article proposes that DeepSeek should make corrections and transition towards the development of AI. DeepSeek’s greatest success is that Liang Wenfeng’s team has developed a new path for developing AI with an innovative attitude: “low investment, low cost, limited resources, high efficiency, and high cost performance (output)”. DeepSeek can be regarded as a representative work of China's current AI and is changing the development pattern of AI in the world. It lowered the bar for the public and enterprises globally to use AI. Open up a smooth road for emerging forces to develop AI. Negating the old path to develop AI with "huge investment, high cost, massive resources, low efficiency, and low cost performance (output)". It is not an exaggeration to call Liang Wenfeng’s team a group of wizards or geniuses who have achieved “national destiny” innovation! Liang Wenfeng's team insists on open source innovation. Open source helps the iterative innovation, stability and upgrade of AI, and the development of the ecosystem. DeepSeek integrates the full open source of the C-end of the large model and the implementation of an open source business model on the B-end. It not only implements open source innovation, but also supports the development of the open source industry. This is also a major creation of DeepSeek. Some people use this to suppress DeepSeek by rating according to the current output product rankings. In fact, the output performance of DeepSeek and other large generative language models is on par with each other, and there is no exaggerated situation of one being higher than the other. If we compare them in a more scientific way based on cost-effectiveness, DeepSeek is definitely the best in the world. Currently, there are not many secrets about DeepSeek’s key technology. Some large generative language models in China and abroad have basically learned DeepSeek’s key technology. When it comes to the next stage of AI competition, it can be said that everyone is on the same starting line. The advent of DeepSeek has triggered a fierce competition in global AI. The current DeepSeek model, like other large language models, are a generative autoregressive large language model. Limitations and negative defects exists in DeepSeek, affecting its performance. In DeepSeek’s development, it is important to overcome limitations, root out defects, greatly improve intelligence, save energy and increase efficiency, and expand applications. For the generative autoregressive language model, since language cannot replace the real world, it lacks world knowledge, or cannot generate new knowledge to truly understand the physical world. In addition, language is not equal to thinking, and it also limits the depth of thinking during operation, which ultimately limits the level of intelligence produced. The autoregressive mechanism of the language model training architecture is based on Tokens and the signal processing and statistics it supports, which is the root cause of the hallucination. DeepSeek, like other standard and inclusive base models, is difficult to directly transform into high-quality productivity for enterprises and industries. It still needs to improve its temporarily missing commercial value. They lack a deep understanding of enterprises and industries. While they are really applied in the business scenarios of enterprises and industries (such as finance, manufacturing, medical care, etc.), to generate value for enterprises and industries, they must capture the data of enterprises and industries and then apply them to fill the gaps. It is suggested that an important task for DeepSeek’s development is to solve its problem of deviation and transition, and strive to win in the fierce global competition. The goal of calibrating DeepSeek is to develop real and advanced AI - Artificial General Intelligence (AGI). When developing AGI, we must avoid being impatient for quick success. To achieve AGI, we must first develop the tasks of AI in the transition stage (such as multimodality, embodiment, agents and world models, etc.). AGI is an AI with an autonomous system. AGI is at a crossroads of whether AI intelligence can surpass humans. This is related to whether it affects human safety and even affects the extremely serious problem of whether humans can survive on the earth. When developing AGI to ensure preventive measures for human safety, it also requires countries around the world to take unified actions on the basis of mutual trust and implement the policy of combining technology and management (regulation). The task is extremely severe and arduous. 中文版:https://www.oschina.net/news/355187/lu-shouquns-view-of-deepseek

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册