在 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。
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/
添加 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数据科学服务使用说明。
使用如下命令卸载 iServer 数据科学服务 Helm Chart:
NAMESPACE=supermap
helm3 uninstall iserver-datascience --namespace $NAMESPACE
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 配置文件来配置参数
例如,设置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。
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"