Cloud-native way to provide elastic Jupyter Notebook services on Kubernetes

Overview

elastic-jupyter-operator: Elastic Jupyter on Kubernetes

Kubernetes 原生的弹性 Jupyter 即服务

介绍

为用户按需提供弹性的 Jupyter Notebook 服务。elastic-jupyter-operator 提供以下特性:

  • GPU 空闲时自动释放资源到 Kubernetes 集群
  • 资源延迟申请,在使用时按需申请对应 CPU/内存/GPU 资源
  • 多 Jupyter 共享资源池,提高资源利用率

部署

kubectl apply -f ./hack/enterprise_gateway/prepare.yaml
make deploy

架构

elastic-jupyter-operator 的架构如图所示,JupyterGatewayJupyterNotebook 是两个 CRD。其中 Notebook 是 Jupyter Notebook 的前端服务,负责面向用户提供用户界面,并且与后端服务通过 HTTPS 和 Websocket 进行通信,处理用户的计算请求。

Gateway 是对应的后端服务。它负责处理来自 Notebook CR 的请求,通过调用 Kubernetes 的 API 按需创建出真正负责处理用户计算任务的 Kernel。

多用户

多个用户可以创建多个 Notebook CR,连接同一个 Gateway CR,以起到复用资源的作用。Gateway 会根据不同 Jupyter Notebook 的请求按需创建出对应的 Kernel。在某个用户暂时不进行任务时,会将对应 Kernel Pod 回收删除,释放资源。

对比

elastic-jupyter-operator 部分参考了 Kubeflow jupyter-controller 和 Jupyter enterprise gateway 的设计,这里介绍了与两者的不同。

与 Kubeflow Jupyter Controller 的比较

Kubeflow Jupyter Controller 也提供了在 Kubernetes 上部署 Jupyter Notebook 的解决方案。相比于 elastic-jupyter-operator,其最大的问题在于它在一个 Pod 中运行了 Notebook 前端与负责计算的 Kernel,导致无法在 Kernel 空闲时回收资源。

与 Jupyter Enterprise Gateway 的比较

Jupyter Enterprise Gateway 提供了弹性 Jupyter 服务的基础,elastic-jupyter-operator 也是基于它来设计和实现的。与 Jupyter Enterprise Gateway 相比,elastic-jupyter-operator 提供了云原生的实现。Jupyter Enterprise Gateway 需要用户自行部署和维护 Gateway 和 Notebook,而 elastic-jupyter-operator 则简化了在 Kubernetes 上运维的复杂度。

使用

首先,创建一个 Jupyter Gateway CR:

kubectl apply -f ./config/samples/kubeflow.tkestack.io_v1alpha1_jupytergateway.yaml
apiVersion: kubeflow.tkestack.io/v1alpha1
kind: JupyterGateway
metadata:
  name: jupytergateway-sample
spec:
  cullIdleTimeout: 3600

其中 cullIdleTimeout 是一个配置项,在 Kernel 空闲指定 cullIdleTimeout 秒内,会由 Gateway 回收对应 Kernel 以释放资源。

其次需要创建一个 Jupyter Notebook CR 实例,并且指定对应的 Gateway CR:

kubectl apply -f ./config/samples/kubeflow.tkestack.io_v1alpha1_jupytergateway.yaml
apiVersion: kubeflow.tkestack.io/v1alpha1
kind: JupyterNotebook
metadata:
  name: jupyternotebook-sample
spec:
  gateway:
    name: jupytergateway-sample
    namespace: default

集群上所有资源如下所示:

NAME                                          READY   STATUS    RESTARTS   AGE
pod/jupytergateway-sample-6d5d97949c-p8bj6    1/1     Running   2          11d
pod/jupyternotebook-sample-5bf7d9d9fb-nq9b8   1/1     Running   2          11d

NAME                            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/jupytergateway-sample   ClusterIP   10.96.138.111           8888/TCP   11d
service/kubernetes              ClusterIP   10.96.0.1               443/TCP    31d

NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/jupytergateway-sample    1/1     1            1           11d
deployment.apps/jupyternotebook-sample   1/1     1            1           11d

NAME                                                DESIRED   CURRENT   READY   AGE
replicaset.apps/jupytergateway-sample-6d5d97949c    1         1         1       11d
replicaset.apps/jupyternotebook-sample-5bf7d9d9fb   1         1         1       11d

随后可以通过 NodePort、kubectl port-forward、ingress 等方式将 Notebook CR 对外暴露提供服务,这里以 kubectl port-forward 为例:

kubectl port-forward jupyternotebook-sample-5bf7d9d9fb-nq9b8 8888

API 文档

请见 API 文档

Issues
  • bug(arm64) Cannot run the operator

    bug(arm64) Cannot run the operator

    Hi, do you know how to resolve this issue?

    [email protected] elastic-jupyter-operator % kubectl port-forward deploy/jupyternotebook-elastic 8888:8888
    Error from server (NotFound): deployments.apps "jupyternotebook-elastic" not found
    

    All steps

    [email protected] elastic-jupyter-operator % minikube start 
    😄  minikube v1.24.0 on Darwin 12.1 (arm64)
    ✨  Automatically selected the docker driver
    👍  Starting control plane node minikube in cluster minikube
    🚜  Pulling base image ...
    🔥  Creating docker container (CPUs=2, Memory=4000MB) ...
    🐳  Preparing Kubernetes v1.22.3 on Docker 20.10.8 ...
        ▪ Generating certificates and keys ...
        ▪ Booting up control plane ...
        ▪ Configuring RBAC rules ...
    🔎  Verifying Kubernetes components...
        ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
    🌟  Enabled addons: storage-provisioner, default-storageclass
    🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
    
    
    [email protected] elastic-jupyter-operator % kubectl apply -f ./hack/enterprise_gateway/prepare.yaml
    namespace/enterprise-gateway created
    serviceaccount/enterprise-gateway-sa created
    clusterrole.rbac.authorization.k8s.io/enterprise-gateway-controller created
    clusterrole.rbac.authorization.k8s.io/kernel-controller created
    clusterrolebinding.rbac.authorization.k8s.io/enterprise-gateway-controller created
    
    [email protected] elastic-jupyter-operator % make deploy
    go: creating new go.mod: module tmp
    go get: installing executables with 'go get' in module mode is deprecated.
    	To adjust and download dependencies of the current module, use 'go get -d'.
    	To install using requirements of the current module, use 'go install'.
    	To install ignoring the current module, use 'go install' with a version,
    	like 'go install example.com/[email protected]'.
    	For more information, see https://golang.org/doc/go-get-install-deprecation
    	or run 'go help get' or 'go help install'.
    go get: added github.com/fatih/color v1.9.0
    go get: added github.com/go-logr/logr v0.2.0
    go get: added github.com/gobuffalo/flect v0.2.2
    go get: added github.com/gogo/protobuf v1.3.1
    go get: added github.com/google/gofuzz v1.1.0
    go get: added github.com/inconshreveable/mousetrap v1.0.0
    go get: added github.com/json-iterator/go v1.1.10
    go get: added github.com/mattn/go-colorable v0.1.8
    go get: added github.com/mattn/go-isatty v0.0.12
    go get: added github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
    go get: added github.com/modern-go/reflect2 v1.0.1
    go get: added github.com/spf13/cobra v1.1.1
    go get: added github.com/spf13/pflag v1.0.5
    go get: added golang.org/x/mod v0.3.0
    go get: added golang.org/x/net v0.0.0-20201110031124-69a78807bb2b
    go get: added golang.org/x/sys v0.0.0-20201112073958-5cba982894dd
    go get: added golang.org/x/text v0.3.4
    go get: added golang.org/x/tools v0.0.0-20200616133436-c1934b75d054
    go get: added golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
    go get: added gopkg.in/inf.v0 v0.9.1
    go get: added gopkg.in/yaml.v2 v2.3.0
    go get: added gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776
    go get: added k8s.io/api v0.20.2
    go get: added k8s.io/apiextensions-apiserver v0.20.2
    go get: added k8s.io/apimachinery v0.20.2
    go get: added k8s.io/klog/v2 v2.4.0
    go get: added k8s.io/utils v0.0.0-20201110183641-67b214c5f920
    go get: added sigs.k8s.io/controller-tools v0.5.0
    go get: added sigs.k8s.io/structured-merge-diff/v4 v4.0.2
    go get: added sigs.k8s.io/yaml v1.2.0
    /Users/eugene/go/bin/controller-gen "crd:trivialVersions=true" rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases
    go: creating new go.mod: module tmp
    go get: installing executables with 'go get' in module mode is deprecated.
    	To adjust and download dependencies of the current module, use 'go get -d'.
    	To install using requirements of the current module, use 'go install'.
    	To install ignoring the current module, use 'go install' with a version,
    	like 'go install example.com/[email protected]'.
    	For more information, see https://golang.org/doc/go-get-install-deprecation
    	or run 'go help get' or 'go help install'.
    go get: added cloud.google.com/go v0.38.0
    go get: added github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78
    go get: added github.com/Azure/go-autorest/autorest v0.9.0
    go get: added github.com/Azure/go-autorest/autorest/adal v0.5.0
    go get: added github.com/Azure/go-autorest/autorest/date v0.1.0
    go get: added github.com/Azure/go-autorest/logger v0.1.0
    go get: added github.com/Azure/go-autorest/tracing v0.5.0
    go get: added github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd
    go get: added github.com/PuerkitoBio/purell v1.1.1
    go get: added github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578
    go get: added github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5
    go get: added github.com/davecgh/go-spew v1.1.1
    go get: added github.com/dgrijalva/jwt-go v3.2.0+incompatible
    go get: added github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0
    go get: added github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96
    go get: added github.com/emicklei/go-restful v2.9.5+incompatible
    go get: added github.com/evanphx/json-patch v4.5.0+incompatible
    go get: added github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d
    go get: added github.com/ghodss/yaml v1.0.0
    go get: added github.com/go-errors/errors v1.0.1
    go get: added github.com/go-openapi/jsonpointer v0.19.3
    go get: added github.com/go-openapi/jsonreference v0.19.3
    go get: added github.com/go-openapi/spec v0.19.5
    go get: added github.com/go-openapi/swag v0.19.5
    go get: added github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d
    go get: added github.com/golang/protobuf v1.3.2
    go get: added github.com/google/btree v1.0.0
    go get: added github.com/google/go-cmp v0.3.0
    go get: added github.com/google/gofuzz v1.0.0
    go get: added github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
    go get: added github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d
    go get: added github.com/gophercloud/gophercloud v0.1.0
    go get: added github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7
    go get: added github.com/hashicorp/errwrap v1.0.0
    go get: added github.com/hashicorp/go-multierror v1.0.0
    go get: added github.com/hashicorp/golang-lru v0.5.1
    go get: added github.com/imdario/mergo v0.3.5
    go get: added github.com/inconshreveable/mousetrap v1.0.0
    go get: added github.com/jonboulle/clockwork v0.1.0
    go get: added github.com/json-iterator/go v1.1.8
    go get: added github.com/konsorten/go-windows-terminal-sequences v1.0.1
    go get: added github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de
    go get: added github.com/mailru/easyjson v0.7.0
    go get: added github.com/mattn/go-runewidth v0.0.7
    go get: added github.com/mitchellh/go-wordwrap v1.0.0
    go get: added github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
    go get: added github.com/modern-go/reflect2 v1.0.1
    go get: added github.com/olekukonko/tablewriter v0.0.4
    go get: added github.com/peterbourgon/diskv v2.0.1+incompatible
    go get: added github.com/pkg/errors v0.8.1
    go get: added github.com/posener/complete/v2 v2.0.1-alpha.12
    go get: added github.com/posener/script v1.0.4
    go get: added github.com/russross/blackfriday v1.5.2
    go get: added github.com/sirupsen/logrus v1.4.2
    go get: added github.com/spf13/cobra v0.0.5
    go get: added github.com/spf13/pflag v1.0.5
    go get: added github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca
    go get: added golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392
    go get: added golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
    go get: added golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
    go get: added golang.org/x/sys v0.0.0-20190922100055-0a153f010e69
    go get: added golang.org/x/text v0.3.2
    go get: added golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
    go get: added google.golang.org/appengine v1.5.0
    go get: added gopkg.in/inf.v0 v0.9.1
    go get: added gopkg.in/yaml.v2 v2.2.4
    go get: added gopkg.in/yaml.v3 v3.0.0-20191026110619-0b21df46bc1d
    go get: added k8s.io/api v0.17.0
    go get: added k8s.io/apimachinery v0.17.0
    go get: added k8s.io/cli-runtime v0.17.0
    go get: added k8s.io/client-go v0.17.0
    go get: added k8s.io/component-base v0.17.0
    go get: added k8s.io/klog v1.0.0
    go get: added k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a
    go get: added k8s.io/kubectl v0.0.0-20191219154910-1528d4eea6dd
    go get: added k8s.io/utils v0.0.0-20191114184206-e782cd3c129f
    go get: added sigs.k8s.io/kustomize v2.0.3+incompatible
    go get: added sigs.k8s.io/kustomize/api v0.3.2
    go get: added sigs.k8s.io/kustomize/cmd/config v0.0.5
    go get: added sigs.k8s.io/kustomize/cmd/kubectl v0.0.3
    go get: added sigs.k8s.io/kustomize/kustomize/v3 v3.5.4
    go get: added sigs.k8s.io/kustomize/kyaml v0.0.6
    go get: added sigs.k8s.io/yaml v1.1.0
    cd config/manager && /Users/eugene/go/bin/kustomize edit set image controller=ccr.ccs.tencentyun.com/kubeflow-oteam/elastic-jupyter-operator:latest
    /Users/eugene/go/bin/kustomize build config/default | kubectl apply -f -
    namespace/elastic-jupyter-operator-system created
    customresourcedefinition.apiextensions.k8s.io/jupytergateways.kubeflow.tkestack.io created
    customresourcedefinition.apiextensions.k8s.io/jupyterkernels.kubeflow.tkestack.io created
    customresourcedefinition.apiextensions.k8s.io/jupyterkernelspecs.kubeflow.tkestack.io created
    customresourcedefinition.apiextensions.k8s.io/jupyterkerneltemplates.kubeflow.tkestack.io created
    customresourcedefinition.apiextensions.k8s.io/jupyternotebooks.kubeflow.tkestack.io created
    role.rbac.authorization.k8s.io/elastic-jupyter-operator-leader-election-role created
    clusterrole.rbac.authorization.k8s.io/elastic-jupyter-operator-manager-role created
    rolebinding.rbac.authorization.k8s.io/elastic-jupyter-operator-leader-election-rolebinding created
    clusterrolebinding.rbac.authorization.k8s.io/elastic-jupyter-operator-manager-rolebinding created
    deployment.apps/elastic-jupyter-operator-controller-manager created
    
    [email protected] elastic-jupyter-operator % kubectl apply -f ./examples/elastic/kubeflow.tkestack.io_v1alpha1_jupyternotebook.yaml
    jupyternotebook.kubeflow.tkestack.io/jupyternotebook-elastic created
    
    
    [email protected] elastic-jupyter-operator % kubectl apply -f ./examples/elastic/kubeflow.tkestack.io_v1alpha1_jupytergateway.yaml
    jupytergateway.kubeflow.tkestack.io/jupytergateway-elastic created
    
    
    [email protected] elastic-jupyter-operator % kubectl port-forward deploy/jupyternotebook-elastic 8888:8888
    Error from server (NotFound): deployments.apps "jupyternotebook-elastic" not found
    
    bug question 
    opened by EugeneTorap 14
  • Customized Labels & Annotations are not supported in notebook CRD refered pod & deployment

    Customized Labels & Annotations are not supported in notebook CRD refered pod & deployment

    Behavior: kubectl apply the following yaml:

    apiVersion: kubeflow.tkestack.io/v1alpha1
    kind: JupyterNotebook
    metadata:
      name: jupyternotebook-elastic-with-custom-kernels
      namespace: public
    spec:
      gateway:
        name: jupytergateway-elastic-with-custom-kernels
        namespace: public
      # Disable the password and token based auth in this example,
      # please do not do it in PROD.
      auth:
        mode: disable
      template:
        metadata:
          annotations:
            cni: macvlan 
    

    get the following:

    apiVersion: v1
    items:
    - apiVersion: kubeflow.tkestack.io/v1alpha1
      kind: JupyterNotebook
      metadata:
        annotations:
          cni: macvlan
        creationTimestamp: "2022-03-21T09:50:31Z"
        generation: 3
        name: jupyternotebook-elastic
        namespace: public
        resourceVersion: "152659678"
        selfLink: /apis/kubeflow.tkestack.io/v1alpha1/namespaces/public/jupyternotebooks/jupyternotebook-elastic
        uid: 12d437c1-45e5-4afa-99bf-38371533046e
      spec:
        auth:
          mode: disable
        gateway:
          name: jupytergateway-elastic
          namespace: public
        template:
          metadata: {}
    kind: List
    metadata:
      resourceVersion: ""
      selfLink: ""
    

    Manually Editing the jupyternotebook to add spec.template.metadata.annotations does not work either.

    Found that spec.template.metadata.annotations is never used/considered in reconciling deloyment: https://github.com/skai-x/elastic-jupyter-operator/blob/4415a90f4fcb48341b7aff5587aeed3fc48cb771/pkg/notebook/reconcile.go#L71

    https://github.com/skai-x/elastic-jupyter-operator/blob/0d1472bf97697e2cf50d215d6266d9a92f8898e3/pkg/notebook/generate.go#L116 https://github.com/skai-x/elastic-jupyter-operator/blob/0d1472bf97697e2cf50d215d6266d9a92f8898e3/pkg/notebook/generate.go#L125

    opened by mkkb473 3
  • Followed quickstart, but no kernels, did I miss something?

    Followed quickstart, but no kernels, did I miss something?

    Hey folks,

    Firstly - thank you so much for starting this project! It looks really promising, very excited to try it out.

    Disclaimer: I'm not super familiar with enterprise gateway, so I might just be doing something stupid (likely).

    I ran make deploy, then followed the quickstart guide. Everything worked, but when I went to localhost:8888 I get an empty notebook with no kernels....

    Was I supposed to do something else? I feel like I'm just missing a step.

    Thanks for pointing me in the right direction!

    image

    Matthew

    opened by rathboma 3
  • [bug] Kernel completed when run

    [bug] Kernel completed when run

    Traceback (most recent call last): File "/usr/local/bin/kernel-launchers/python/scripts/launch_ipykernel.py", line 289, in _validate_port_range lower_port = int(port_ranges[0]) ValueError: invalid literal for int() with base 10: 'None'

    opened by gaocegege 2
  • Support arm64 architecture for operator

    Support arm64 architecture for operator

    Fix #46 issue @gaocegege Try to update the remote operator image for linux/amd64 & linux/arm64

    docker buildx build --push --platform linux/amd64,linux/arm64 --tag ccr.ccs.tencentyun.com/kubeflow-oteam/elastic-jupyter-operator:latest .
    
    opened by EugeneTorap 0
  • Running the custom kernel example - error when starting kernel from JupyterLab

    Running the custom kernel example - error when starting kernel from JupyterLab

    When going through the custom kernel example everything starts correctly in k8s, but when starting the kernel from the notebook it produced a 500 HTTP error:

    image

    Seems like the error is some version incompatibility with enterprise gateway. Here are the logs from the gateway:

    Error: TypeError: __init__() got an unexpected keyword argument 'kernel_id'

     HTTPServerRequest(protocol='http', host='jupytergateway-elastic-with-custom-kernels.default:8888', method='POST', uri='/api/kernels', version='HTTP/1.1', remote_ip='172.17.0.1')
    Traceback (most recent call last):
    File "/opt/conda/lib/python3.9/site-packages/tornado/web.py", line 1704, in _execute
    result = await result
    File "/opt/conda/lib/python3.9/site-packages/enterprise_gateway/services/kernels/handlers.py", line 90, in post
    await super(MainKernelHandler, self).post()
    File "/opt/conda/lib/python3.9/site-packages/jupyter_server/services/kernels/handlers.py", line 47, in post
    kernel_id = await km.start_kernel(kernel_name=model["name"], path=model.get("path"))
    File "/opt/conda/lib/python3.9/site-packages/enterprise_gateway/services/kernels/remotemanager.py", line 156, in start_kernel
    kernel_id = await super(RemoteMappingKernelManager, self).start_kernel(*args, **kwargs)
    File "/opt/conda/lib/python3.9/site-packages/jupyter_server/services/kernels/kernelmanager.py", line 211, in start_kernel
    kernel_id = await ensure_async(self.pinned_superclass.start_kernel(self, **kwargs))
    File "/opt/conda/lib/python3.9/site-packages/jupyter_server/utils.py", line 189, in ensure_async
    result = await obj
    File "/opt/conda/lib/python3.9/site-packages/jupyter_client/multikernelmanager.py", line 194, in _async_start_kernel
    await fut
    File "/opt/conda/lib/python3.9/site-packages/jupyter_client/multikernelmanager.py", line 165, in _add_kernel_when_ready
    await kernel_awaitable
    File "/opt/conda/lib/python3.9/site-packages/jupyter_client/utils.py", line 34, in ensure_async
    return await obj
    File "/opt/conda/lib/python3.9/site-packages/enterprise_gateway/services/kernels/remotemanager.py", line 365, in start_kernel
    await super(RemoteKernelManager, self).start_kernel(**kwargs)
    File "/opt/conda/lib/python3.9/site-packages/jupyter_client/manager.py", line 362, in _async_start_kernel
    raise e
    File "/opt/conda/lib/python3.9/site-packages/jupyter_client/manager.py", line 351, in _async_start_kernel
    await ensure_async(self._launch_kernel(kernel_cmd, **kw))
    File "/opt/conda/lib/python3.9/site-packages/jupyter_client/utils.py", line 34, in ensure_async
    return await obj
    File "/opt/conda/lib/python3.9/site-packages/enterprise_gateway/services/kernels/remotemanager.py", line 425, in _launch_kernel
    proxy = await self.process_proxy.launch_process(kernel_cmd, **kwargs)
    File "/opt/conda/lib/python3.9/site-packages/enterprise_gateway/services/processproxies/kubeflow.py", line 49, in launch_process
    await super(KubeflowProcessProxy, self).launch_process(kernel_cmd, **kwargs)
    File "/opt/conda/lib/python3.9/site-packages/enterprise_gateway/services/processproxies/container.py", line 81, in launch_process
    self.local_proc = self.launch_kernel(kernel_cmd, **kwargs)
    File "/opt/conda/lib/python3.9/site-packages/enterprise_gateway/services/processproxies/processproxy.py", line 456, in launch_kernel
    return launch_kernel(cmd, **kwargs)
    File "/opt/conda/lib/python3.9/site-packages/jupyter_client/launcher.py", line 169, in launch_kernel
    raise ex
    File "/opt/conda/lib/python3.9/site-packages/jupyter_client/launcher.py", line 157, in launch_kernel
    proc = Popen(cmd, **kwargs)
    TypeError: __init__() got an unexpected keyword argument 'kernel_id'
    [E 220201 17:06:22 web:2239] 500 POST /api/kernels (172.17.0.1) 23.14ms
    
    

    This seems related to this issue: https://github.com/jupyter/enterprise_gateway/issues/1024

    Seems like it's using jupyter-client 7.1.0, which might be the problem? I'll try to confirm

    opened by rathboma 7
Releases(v0.3.0)
Owner
TKEStack
TKEStack
Cloudpods is a cloud-native open source unified multi/hybrid-cloud platform developed with Golang

Cloudpods is a cloud-native open source unified multi/hybrid-cloud platform developed with Golang, i.e. Cloudpods is a cloud on clouds. Cloudpods is able to manage not only on-premise KVM/baremetals, but also resources from many cloud accounts across many cloud providers. It hides the differences of underlying cloud providers and exposes one set of APIs that allow programatically interacting with these many clouds.

null 1 Jan 11, 2022
A Cloud Native Buildpack for Go

The Go Paketo Buildpack provides a set of collaborating buildpacks that enable the building of a Go-based application.

Paketo Buildpacks 53 Jun 6, 2022
cloud-native local storage management system

Open-Local是由多个组件构成的本地磁盘管理系统,目标是解决当前 Kubernetes 本地存储能力缺失问题。通过Open-Local,使用本地存储会像集中式存储一样简单。

null 211 Jun 26, 2022
Nocalhost is Cloud Native Dev Environment.

Most productive way to build cloud-native applications. Nocalhost The term Nocalhost originates from No Local, which is a cloud-native development too

Nocalhost 1.3k Jun 30, 2022
A Cloud Native Buildpack that contributes SDKMAN and uses it to install dependencies like the Java Virtual Machine

gcr.io/paketo-buildpacks/sdkman A Cloud Native Buildpack that contributes SDKMAN and uses it to install dependencies like the Java Virtual Machine. Be

Daniel Mikusa 1 Jan 8, 2022
A Cloud Native Buildpack that provides the Open Liberty runtime

gcr.io/paketo-buildpacks/open-liberty The Paketo Open Liberty Buildpack is a Cloud Native Buildpack that contributes Open Liberty for Java EE support.

Paketo Buildpacks 4 May 23, 2022
cloneMAP: cloud-native Multi-Agent Platform

cloneMAP: cloud-native Multi-Agent Platform cloneMAP is a multi-agent platform (MAP) that is designed to run in a cloud environment based on Kubernete

RWTH Aachen University, Institute for Automation of Complex Power Systems 3 Apr 24, 2022
A Cloud Native Buildpack that contributes the Syft CLI which can be used to generate SBoM information

gcr.io/paketo-buildpacks/syft The Paketo Syft Buildpack is a Cloud Native Buildpack that contributes the Syft CLI which can be used to generate SBoM i

Paketo Buildpacks 1 Apr 27, 2022
TurtleDex is a decentralized cloud storage platform that radically alters the landscape of cloud storage.

TurtleDex is a decentralized cloud storage platform that radically alters the landscape of cloud storage. By leveraging smart contracts, client-side e

TurtleDev 18 Feb 17, 2021
Contentrouter - Protect static content via Firebase Hosting with Cloud Run and Google Cloud Storage

contentrouter A Cloud Run service to gate static content stored in Google Cloud

G. Hussain Chinoy 0 Jan 2, 2022
An edge-native container management system for edge computing

SuperEdge is an open source container management system for edge computing to manage compute resources and container applications in multiple edge regions. These resources and applications, in the current approach, are managed as one single Kubernetes cluster. A native Kubernetes cluster can be easily converted to a SuperEdge cluster.

SuperEdge 825 Jun 22, 2022
Lightweight Cloud Instance Contextualizer

Flamingo Flamingo is a lightweight contextualization tool that aims to handle initialization of cloud instances. It is meant to be a replacement for c

Tamer Tas 36 Jun 18, 2022
Go language interface to Swift / Openstack Object Storage / Rackspace cloud files (golang)

Swift This package provides an easy to use library for interfacing with Swift / Openstack Object Storage / Rackspace cloud files from the Go Language

Nick Craig-Wood 292 Jun 30, 2022
The extensible SQL interface to your favorite cloud APIs.

The extensible SQL interface to your favorite cloud APIs.

Turbot 1.6k Jun 26, 2022
Terraform provider for HashiCorp Cloud Platform.

HashiCorp Cloud Platform (HCP) Terraform Provider Requirements Terraform >= 0.12.x Go >= 1.14 Building The Provider Clone the repository Enter the rep

HashiCorp 26 Jun 6, 2022
The Cloud Posse Terraform Provider for various utilities (E.g. deep merging)

terraform-provider-utils Terraform provider to add additional missing functionality to Terraform This project is part of our comprehensive "SweetOps"

Cloud Posse 59 Jun 8, 2022
Cloud cost estimates for Terraform in your CLI and pull requests 💰📉

Infracost shows cloud cost estimates for Terraform projects. It helps developers, devops and others to quickly see the cost breakdown and compare different options upfront.

Infracost 7.1k Jul 1, 2022
Google Cloud Client Libraries for Go.

Google Cloud Client Libraries for Go.

Google APIs 2.9k Jul 1, 2022
Fleex allows you to create multiple VPS on cloud providers and use them to distribute your workload.

Fleex allows you to create multiple VPS on cloud providers and use them to distribute your workload. Run tools like masscan, puredns, ffuf, httpx or anything you need and get results quickly!

null 151 Jul 1, 2022