add starod integration

This commit is contained in:
Lee moon soo 2020-08-03 15:36:59 -07:00
parent 3c350f0c93
commit 614135933b
6 changed files with 184 additions and 0 deletions

18
.staroid/README.md Normal file
View File

@ -0,0 +1,18 @@
## gpu-jupyter on staroid
This directory contains files to deploy gpu-jupyter project on [staroid](https://staroid.com).
[![Run](https://staroid.com/api/run/button.svg)](https://staroid.com/api/run)
## Development
Run locally with [skaffold](https://skaffold.dev) command.
```
$ git clone https://github.com/iot-salzburg/gpu-jupyter.git
$ cd gpu-jupyter
$ skaffold dev -f .staroid/skaffold.yaml --port-forward -p minikube
```
and browse `http://localhost:8888`

18
.staroid/build.sh Executable file
View File

@ -0,0 +1,18 @@
#!/bin/bash
# Custom builder script for Skaffold
# https://skaffold.dev/docs/pipeline-stages/builders/custom/
#
# generate Dockerfile
./generate-Dockerfile.sh -s --no-datascience-notebook --no-useful-packages
cd .build
# print Dockerfile
cat Dockerfile
# build
docker build -f Dockerfile -t $IMAGE .
if $PUSH_IMAGE; then
docker push $IMAGE
fi

76
.staroid/k8s.yaml Normal file
View File

@ -0,0 +1,76 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: jupyter-deployment
spec:
replicas: 1
strategy:
type: "Recreate"
selector:
matchLabels:
app: jupyter
template:
metadata:
labels:
app: jupyter
pod.staroid.com/isolation: dedicated
pod.staroid.com/spot: "false"
pod.staroid.com/instance-type: gpu-1
spec:
automountServiceAccountToken: true
securityContext:
runAsUser: 1000 # will be overrided by staroid
runAsGroup: 100 # writable directories are accessible with GID 100. see https://github.com/jupyter/docker-stacks/blob/master/base-notebook/Dockerfile
containers:
- name: jupyter
image: jupyter
command:
- "bash"
- "-c"
- >-
mkdir -p ~/.ssh && chmod 700 ~/.ssh &&
echo -n "$(echo $MLFLOW_TRACKING_URI | sed 's/.*\(mlflow[^:]*\).*/\1/g') " >> ~/.ssh/known_hosts &&
echo $MLFLOW_ARTIFACT_STORE_RSA_PUB | base64 --decode >> ~/.ssh/known_hosts &&
echo $MLFLOW_ARTIFACT_STORE_RSA_PRI | base64 --decode >> ~/.ssh/id_rsa &&
chmod 600 ~/.ssh/* &&
jupyter-lab --ip='*' --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.allow_origin='*'
env:
- name: JUPYTER_ENABLE_LAB
value: "yes"
envFrom:
- configMapRef:
name: mlflow-env
volumeMounts:
- name: work-volume
mountPath: /home/jovyan/work
volumes:
- name: work-volume
persistentVolumeClaim:
claimName: work
---
kind: Service
apiVersion: v1
metadata:
name: jupyter
spec:
ports:
- name: http
port: 8888
selector:
app: jupyter
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: work
annotations:
storage.staroid.com/scope: Instance
storage.staroid.com/file-manager: "1000:100"
spec:
storageClassName: nfs
accessModes:
- ReadWriteMany
volumeMode: Filesystem
resources:
requests:
storage: 1Gi

19
.staroid/minikube.yaml Normal file
View File

@ -0,0 +1,19 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: jupyter-work-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
hostPath:
path: ./jupyter-work-pv
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: nfs
labels:
addonmanager.kubernetes.io/mode: EnsureExists
provisioner: k8s.io/minikube-hostpath

18
.staroid/skaffold.yaml Normal file
View File

@ -0,0 +1,18 @@
apiVersion: skaffold/v2beta1
kind: Config
build:
artifacts:
- image: jupyter
context: .
custom:
buildCommand: .staroid/build.sh
deploy:
kubectl:
manifests:
- k8s.yaml
profiles:
- name: minikube
patches:
- op: add
path: /deploy/kubectl/manifests/0
value: minikube.yaml

35
.staroid/staroid.yaml Normal file
View File

@ -0,0 +1,35 @@
# See https://docs.staroid.com/references/staroid_yaml.html for more configuration detail
apiVersion: beta/v1
starRank:
rate: 1.0 # set community rate here. https://staroid.com/site/starrank
build:
skaffold: {}
ingress:
- serviceName: jupyter
port: 8888
deploy:
dependencies:
- project: open-datastudio/mlflow-server
level: OPTIONAL
paramGroups:
- name: Configurations
params:
- name: "Instance type"
description: "GPU instance is supported only in AWS for now"
type: STRING
defaultValue: gpu-1
options:
- name: gpu-1 (8CPU, 61GB Mem, 1 GPU - Tesla V100 16GB Mem)
value: gpu-1
paths:
- Deployment:jupyter-deployment:spec.template.metadata.labels["pod.staroid.com/instance-type"]
- name: "Spot instance"
type: STRING
defaultValue: "false"
options:
- name: "false"
value: "false"
- name: "true"
value: "true"
paths:
- Deployment:jupyter-deployment:spec.template.metadata.labels["pod.staroid.com/spot"]