在 Kubernetes 集群中部署数据科学服务

发送反馈


SuperMap iServer 数据科学服务提供了Helm Chart形式的分发包,用于在Kubernetes(以下简称K8S)集群中快速部署iServer数据科学服务。数据科学服务运行在K8S集群中,各用户的Notebook Server 独立运行在一个K8S Pod中,从而支持大量用户并发访问,互不干扰,较好地实现用户级的隔离。

SuperMap iServer数据科学服务Helm Chart,提供了独立的分发包,并托管在第三方的Chart仓库中。其中国内仓库地址: https://isupermap.gitee.io/helm-charts

部署 Helm Chart 形式的 SuprMap iServer 数据科学服务的环境要求,包括:

以上环境准备好后,下面开始介绍如何在 K8S 集群中安装配置 iServer 数据科学服务 Helm Chart。

安装SuperMap iServer 数据科学服务Helm Chart

下载安装Helm3工具

Helm 是 K8S 的一个包管理工具,用来简化 K8S 应用的部署和管理。

以 Helm v3.1.2 为例,下载 Linux amd64 版本:

wget https://get.helm.sh/helm-v3.1.2-linux-amd64.tar.gz

tar -zxvf helm-v3.1.2-linux-amd64.tar.gz

cp linux-amd64/helm /usr/local/bin/

下载安装并启动SuperMap iServer数据科学服务

添加 Helm Chart 仓库

helm repo add isupermap http://isupermap.gitee.io/helm-charts

helm repo update #更新本地索引

安装并启动 iServer 数据科学服务

NAMESPACE=supermap

kubectl create namespace $NAMESPACE #创建命名空间

helm install iserver-datascience isupermap/iserver-datascience  -n $NAMESPACE #安装并启动

以上命令是以默认配置安装并启动 iServer 数据科学服务,在配置SuperMap iServer数据科学服务Helm Chart部分列出了可以在安装前配置的参数。

至此,iServer 数据科学服务启动完成。

可以通过如下命令验证 iServer 数据科学服务是否启动完成:

NAMESPACE=supermap

kubectl get pod -n $NAMESPACE

出现如下信息表示 iServer 数据科学服务启动完成。

在浏览器中输入http://<K8S集群节点IP>:31000,即可访问 iServer 数据科学服务。

具体使用请参考iServer数据科学服务使用说明

卸载 SuperMap iServer 数据科学服务 Helm Chart

使用如下命令卸载 iServer 数据科学服务 Helm Chart:

NAMESPACE=supermap

helm3 uninstall iserver-datascience   --namespace $NAMESPACE

配置 SuperMap iServer 数据科学服务 Helm Chart

SuperMap iServer 数据科学服务 Helm Chart 的可配置参数及其描述信息可以在 values.yaml 中看到。下表列出了 iServer 数据科学服务 Helm Chart 的可配置参数及其默认值。

参数 描述 默认值
hub.db.type 配置iServer数据科学服务的存储方式,可选 emptyDir 或 pvc emptyDir
hub.db.pvc 当hub.db.type值为pvc时生效  
hub.db.pvc.storageClassName pvc使用的storageClass名称  
hub.db.pvc.storage 存储空间大小 1Gi
hub.db.pvc.accessModes 挂载pv访问类型 [ReadWriteOnce]
hub.image iServer数据科学服务镜像信息,包括镜像名和标签。如果需要更换iServer数据科学服务镜像的版本,可以更改此参数 {name: registry.cn-beijing.aliyuncs.com/supermap/iserver-datascience, tag: latest }
hub.imagePullPolicy iServer数据科学服务镜像拉取策略 IfNotPresent
proxy.secretToken 一个32字节的加密安全随机生成的字符串,用于保护集线器和可配置的http代理之间的通信。使用默认值可以正常运行,为安全起见建议自行修改 "固定随机值"
proxy.service K8S公开IserverDatascience服务的对象  
proxy.service.type K8S service type LoadBalancer
proxy.service.nodePorts K8S service nodePorts 即在 type为nodePort 或 LoadBalancer 时 集群外通过集群节点 ip:nodePort 可以访问服务 {http:31000}
proxy.service.loadBalancerIP 在 proxy.service.type 为 LoadBalancer 时生效  
singleuser.storage.type Notebook用户数据存储挂载方式,默认不挂载,如需使用pvc挂载,可选static或dynamic  
singleuser.storage.static 静态挂载,当 singleuser.storage.type 值为 static 时生效,使用单一pvc挂载所有用户数据,pvc由用户自己提供 {pvcName:"",subPath: '{username}'}
singleuser.storage.dynamic 动态挂载,当 singleuser.storage.type 值为 dynamic 时生效 ,当用户登录时,使用配置的 K8S storageclass 自动创建 pv 挂载,用户间数据隔离 {storageClass:"",pvcNameTemplate: claim-{username}{servername},volumeNameTemplate: volume-{username}{servername},storageAccessModes: [ReadWriteOnce]}
singleuser.storage.extraVolumes 额外的卷,按照K8S格式添加 []
singleuser.storage.extraVolumeMounts 挂载额外的卷,按照K8S格式添加,可以挂载到 /opt/datascience/notebooks/data 作为共享目录 []
singleuser.image Notebook 使用的镜像 { name: registry.cn-beijing.aliyuncs.com/supermap/iserver-datascience, tag: latest , pullPolicy: IfNotPresent}
singleuser.extra_container_config.ports Notebook容器额外开放端口到集群,默认为Spark开放端口 [{containerPort: 31234},{containerPort: 31235},{containerPort: 31236},{containerPort: 4040}]
singleuser.service.type Notebook service type LoadBalancer
singleuser.service.driverport 使用Spark集群时需要开放的端口,该端口号需要与Notebook中设置的外部Spark集群端口号保持一致 {port: 31001,nodePort: 31001}
singleuser.service.blockport 使用Spark集群时需要开放的端口,该端口号需要与Notebook中设置的外部Spark集群端口号保持一致 {port: 31002,nodePort: 31002}
singleuser.service.executorport 使用Spark集群时需要开放的端口,该端口号需要与Notebook中设置的外部Spark集群端口号保持一致 {port: 31003,nodePort: 31003}
singleuser.service.workui 使用Spark集群时需要开放的端口 {port: 4040,nodePort: 31004}

您可以在安装 iServer 数据科学服务 Helm Chart 之前,通过以下两种方式修改配置以上参数:

方式一:通过新建一个config.yaml 配置文件来配置参数

  1. 创建一个 config.yaml 配置文件(以上 values.yaml 中的预定义值均可被 config.yaml 覆盖),保存到安全的地方,以后还会用来更新数据科学服务的配置。编辑 config.yaml 文件,插入配置参数。

例如,设置iServer数据科学服务Helm Chart的存储方式为pvc的storageClass,并为Notebook用户动态挂载数据存储,不同用户的数据存储是彼此隔离的。参考示例如下:

hub:

  db:

    type: pvc

    pvc:

      storageClassName: managed-nfs-storage

 

singleuser:

  extra_container_config:

   storage:

    type: dynamic

      storageClass: managed-nfs-storage

注意:以上示例需要您自行搭建NFS并创建storageClass。

  1. 使用配置好的 config.yaml 文件来安装并启动iServer数据科学服务,命令如下:

NAMESPACE=supermap

helm install iserver-datascience isupermap/iserver-datascience  -n $NAMESPACE -f config.yaml

方式二:通过--set key=value[,key=value]的方式来配置参数

例如,设置 proxy.secretToken 安全令牌,可执行以下命令生成 Token:

openssl rand -hex 32

复制下来,通过以下命令设置 proxy.secretToken 安全令牌,并安装启动 iServer 数据科学服务

NAMESPACE=supermap

helm install iserver-datascience isupermap/iserver-datascience  -n $NAMESPACE --set proxy.secretToken="acfde3dd7231d43ac1a246171c72c2afc7cdb413e5cc87bf611ba9179e19fa6a"