SwarmSpawner fails on spawn notebook servers

649 views
Skip to first unread message

JoanAntoni

unread,
May 12, 2019, 5:27:46 AM5/12/19
to Project Jupyter
I am using a `JupyterHub` deployment with `SwarmSpawner`. When I try to
login, `JupyterHub` fails spawning the new container. I have the debug mode
in all the configuration but the logs doesn't give me enoght information.
 
I am using the following components:
- Docker version 18.09.2
- JupyterHub version 0.9.4
- Jupyter Notebook image: datascience-notebook:59b402ce701d
- dockerspawner version 0.10.0 (swarmspawner)
- dummyauthenticator
 
This is my configuration:
 
*Dockerfile*:
 
ARG JUPYTERHUB_VERSION=0.9.4
FROM jupyterhub/jupyterhub:${JUPYTERHUB_VERSION}
 
RUN pip install --upgrade pip
RUN pip install --no-cache \
jupyterhub-dummyauthenticator \
dockerspawner==0.10.0
 
COPY jupyterhub_config.py /srv/jupyterhub/jupyterhub_config.py
 
 
*docker-compose.yml*:
 
version: "3.7"
services:
jupyterhub:
image: hubimport os
 
notebook = {
'dir' : os.environ.get('DOCKER_NOTEBOOK_DIR') or '~',
'image' : os.environ.get('DOCKER_NOTEBOOK_IMAGE') or
'jupyter/datascience-notebook:59b402ce701d',
'network' : os.environ.get('DOCKER_NETWORK_NAME') or 'jupyterhub_net',
}
 
# Spawner
c.Spawner.cmd = ['jupyterhub-singleuser']
c.Spawner.start_timeout = 60
c.Spawner.http_timeout = 30
 
# Notebook Resources
c.Spawner.mem_limit =
'300M'
 
c.Spawner.cpu_limit =
0.20
 
 
# SwarmSpawner
c.JupyterHub.spawner_class = 'dockerspawner.SwarmSpawner'
c.SwarmSpawner.image = notebook['image']
 
c.JupyterHub.ip = '0.0.0.0'
c.JupyterHub.port = 8000
 
c.JupyterHub.hub_ip = '0.0.0.0'
c.JupyterHub.hub_connect_ip = 'mussol.cpl.upc.edu'
 
#
Authentification
 
c.JupyterHub.authenticator_class = 'dummyauthenticator.DummyAuthenticator'
c.DummyAuthenticator.password = "passwd"
c.Authenticator.whitelist = {'joan'}
c.Authenticator.admin_users = {'joan'}
 
#
Debug
 
c.Application.log_level = 1
c.JupyterHub.log_level = 'DEBUG'
c.Spawner.debug = True
c.SwarmSpawner.debug = True
 
from docker.types import Mount,DriverConfig
 
mounts = [
Mount(type='volume',
source='jupyterhub-user-{username}',
target=notebook['dir'],
driver_config=DriverConfig('vieux/sshfs'),
),
Mount(type='bind',
source='/var/run/docker.sock',
target='/var/run/docker.sock',
),
]
 
c.SwarmSpawner.extra_container_spec = {
'mounts' : mounts
}
 
c.SwarmSpawner.network_name = notebook['network']
c.SwarmSpawner.extra_host_config = { 'network_mode' : notebook['network'] }
hostname: jupyterhub_mussol
deploy:
replicas: 1
restart_policy:
condition: on-failure
# assegurem execució al swarm manager
placement:
constraints:
- node.role == manager
ports:
- "8000:8000"
- "8081:8081"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
networks:# pels notebooks (standalone containers)
- jupyterhub_net
environment:
DOCKER_NOTEBOOK_DIR: /home/jovyan/work
DOCKER_NOTEBOOK_IMAGE: jupyter/datascience-notebook:59b402ce701d
DOCKER_NETWORK_NAME: jupyterhub_net
 
networks:
jupyterhub_net:
name: jupyterhub_net
driver: overlay
attachable: true
 
 
*jupyterhub_config.py*:
 
import os
 
notebook = {
'dir' : os.environ.get('DOCKER_NOTEBOOK_DIR') or '~',
'image' : os.environ.get('DOCKER_NOTEBOOK_IMAGE') or
'jupyter/datascience-notebook:59b402ce701d',
'network' : os.environ.get('DOCKER_NETWORK_NAME') or 'jupyterhub_net',
}
 
# Spawner
c.Spawner.cmd = ['jupyterhub-singleuser']
c.Spawner.start_timeout = 60
c.Spawner.http_timeout = 30
 
# Notebook Resources
c.Spawner.mem_limit = '300M'
c.Spawner.cpu_limit = 0.20
 
# SwarmSpawner
c.JupyterHub.spawner_class = 'dockerspawner.SwarmSpawner'
c.SwarmSpawner.image = notebook['image']
 
c.JupyterHub.ip = '0.0.0.0'
c.JupyterHub.port = 8000
 
c.JupyterHub.hub_ip = '0.0.*jupyterhub_config.py*:0.0'
c.JupyterHub.hub_connect_ip = 'mussol.cpl.upc.edu'
 
This is my configuration:
# Authentification
c.JupyterHub.authenticator_class = 'dummyauthenticator.DummyAuthenticator'
c.DummyAuthenticator.password = "passwd"
c.Authenticator.whitelist = {'joan'}
c.Authenticator.admin_users = {'joan'}
 
# Debug
c.Application.log_level = 1
c.JupyterHub.log_level = 'DEBUG'
c.Spawner.debug = True
c.SwarmSpawner.debug = True
 
from docker.types import Mount,DriverConfig
 
mounts = [
Mount(type='volume',
source='jupyterhub-user-{username}',
target=notebook['dir'],
driver_config=DriverConfig('vieux/sshfs'),
),
Mount(type='bind',
source='/var/run/docker.sock',
target='/var/run/docker.sock',
),
]
 
c.SwarmSpawner.extra_container_spec = {
'mounts' : mounts
}
 
c.SwarmSpawner.network_name = notebook['network']
c.SwarmSpawner.extra_host_config = { 'network_mode' : notebook['network'] }
 
 
Here the *log* trying to login to the server:
 
[I 2019-05-07 16:05:52.273 JupyterHub app:1673] Using Authenticator:
dummyauthenticator.dummyauthenticator.DummyAuthenticator
[I 2019-05-07 16:05:52.274 JupyterHub app:1673] Using Spawner:
dockerspawner.swarmspawner.SwarmSpawner-0.10.0
[D 2019-05-07 16:05:52.278 JupyterHub app:1050] Generating new cookie_secret
[I 2019-05-07 16:05:52.279 JupyterHub app:1055] Writing cookie_secret to
/srv/jupyterhub/jupyterhub_cookie_secret
[D 2019-05-07 16:05:52.280 JupyterHub app:1071] Connecting to db:
sqlite:///jupyterhub.sqlite
[D 2019-05-07 16:05:52.303 JupyterHub orm:656] Stamping empty database with
alembic revision 896818069c98
[I 2019-05-07 16:05:52.310 alembic.runtime.migration migration:117] Context
impl SQLiteImpl.
[I 2019-05-07 16:05:52.310 alembic.runtime.migration migration:122] Will
assume non-transactional DDL.
[I 2019-05-07 16:05:52.423 alembic.runtime.migration migration:327] Running
stamp_revision -> 896818069c98
[D 2019-05-07 16:05:52.424 alembic.runtime.migration migration:516] new
branch insert 896818069c98
[I 2019-05-07 16:05:53.463 JupyterHub proxy:431] Generating new
CONFIGPROXY_AUTH_TOKEN
[D 2019-05-07 16:05:53.582 JupyterHub app:1473] Loading state for joan from
db
[D 2019-05-07 16:05:53.585 JupyterHub app:1489] Loaded users:
joan admin
[I 2019-05-07 16:05:53.599 JupyterHub app:1855] Hub API listening on
http://0.0.0.0:8081/hub/
[W 2019-05-07 16:05:53.600 JupyterHub proxy:565] Running JupyterHub without
SSL. I hope there is SSL termination happening somewhere else...
[I 2019-05-07 16:05:53.600 JupyterHub proxy:567] Starting proxy @
http://0.0.0.0:8000/
[D 2019-05-07 16:05:53.600 JupyterHub proxy:568] Proxy cmd:
['configurable-http-proxy', '--ip', '0.0.0.0', '--port', '8000',
'--api-ip', '127.0.0.1', '--api-port', '8001', '--error-target',
'http://0.0.0.0:8081/hub/error']
[D 2019-05-07 16:05:53.608 JupyterHub proxy:517] Writing proxy pid file:
jupyterhub-proxy.pid
16:05:54.141 - info: [ConfigProxy] Proxying http://0.0.0.0:8000 to (no
default)
16:05:54.144 - info: [ConfigProxy] Proxy API at
http://127.0.0.1:8001/api/routes
[D 2019-05-07 16:05:54.189 JupyterHub proxy:603] Proxy started and appears
to be up
[D 2019-05-07 16:05:54.190 JupyterHub proxy:296] Fetching routes to check
[D 2019-05-07 16:05:54.192 JupyterHub proxy:686] Proxy: Fetching GET
http://127.0.0.1:8001/api/routes
16:05:54.205 - info: [ConfigProxy] 200 GET /api/routes
[I 2019-05-07 16:05:54.206 JupyterHub proxy:301] Checking routes
[I 2019-05-07 16:05:54.206 JupyterHub proxy:370] Adding default route for
Hub: / => http://0.0.0.0:8081
[D 2019-05-07 16:05:54.206 JupyterHub proxy:686] Proxy: Fetching POST
http://127.0.0.1:8001/api/routes/
16:05:54.209 - info: [ConfigProxy] Adding route / -> http://0.0.0.0:8081
16:05:54.210 - info: [ConfigProxy] 201 POST /api/routes/
[I 2019-05-07 16:05:54.210 Jupyt```erHub*log* app:1912] JupyterHub is now
running at http://0.0.0.0:8000/
[I 2019-05-07 16:06:07.027 JupyterHub log:158] 302 GET / -> /hub
(@10.255.0.2) 1.71ms
[W 2019-05-07 16:06:07.058 JupyterHub base:242] Invalid or expired cookie
token
[I 2019-05-07 16:06:07.058 JupyterHub log:158] 302 GET /hub -> /hub/
(@10.255.0.2) 1.01ms
[W 2019-05-07 16:06:07.070 JupyterHub base:242] Invalid or expired cookie
token
[I 2019-05-07 16:06:07.071 JupyterHub log:158] 302 GET /hub/ -> /hub/login
(@10.255.0.2) 1.64ms
[I 2019-05-07 16:06:07.132 JupyterHub log:158] 200 GET /hub/login
(@10.255.0.2) 52.47ms
[D 2019-05-07 16:06:10.255 JupyterHub base:362] Setting cookie for joan:
jupyterhub-hub-login
[D 2019-05-07 16:06:10.255 JupyterHub base:357] Setting cookie
jupyterhub-hub-login: {'httponly': True, 'path': '/hub/'}
[I 2019-05-07 16:06:10.255 JupyterHub base:499] User logged in: joan
[I 2019-05-07 16:06:10.256 JupyterHub log:158] 302 POST /hub/login?next= ->
/user/joan/ (jo...@10.255.0.2) 13.01ms
[I 2019-05-07 16:06:10.270 JupyterHub log:158] 302 GET /user/joan/ ->
/hub/user/joan/ (@10.255.0.2) 0.95ms
[D 2019-05-07 16:06:10.371 JupyterHub user:190] Creating <class
'dockerspawner.swarmspawner.SwarmSpawner'> for joan:
[D 2019-05-07 16:06:10.442 JupyterHub base:603] Initiating spawn for joan
[D 2019-05-07 16:06:10.442 JupyterHub base:609] 0/100 concurrent spawns
[D 2019-05-07 16:06:10.442 JupyterHub base:612] 0 active servers
[D 2019-05-07 16:06:10.738 JupyterHub dockerspawner:557] Getting container
'jupyter-joan'
[I 2019-05-07 16:06:10.751 JupyterHub dockerspawner:564] Service
'jupyter-joan' is gone
[I 2019-05-07 16:06:10.792 JupyterHub dockerspawner:698] Created service
jupyter-joan (id: nnguhuf) from image
jupyter/datascience-notebook:59b402ce701d
[I 2019-05-07 16:06:10.793 JupyterHub dockerspawner:721] Starting service
jupyter-joan (id: nnguhuf)
[D 2019-05-07 16:06:10.904 JupyterHub spawner:851] Polling subprocess every
30s
[D 2019-05-07 16:06:20.444 JupyterHub swarmspawner:137] Getting task of
service 'jupyter-joan'
[D 2019-05-07 16:06:20.444 JupyterHub dockerspawner:557] Getting container
'jupyter-joan'
[W 2019-05-07 16:06:20.455 JupyterHub swarmspawner:121] Service
jupyter-joan not found
[W 2019-05-07 16:06:20.456 JupyterHub web:1667] 500 GET /hub/user/joan/
(10.255.0.2): Spawner failed to start [status=0]. The logs for joan may
contain details.
[D 2019-05-07 16:06:20.456 JupyterHub base:880] No template for 500
[E 2019-05-07 16:06:20.467 JupyterHub log:150] {
"X-Forwarded-Host": "mussol.cpl.upc.edu:8000",
"X-Forwarded-Proto": "http",
"X-Forwarded-Port": "8000",
"X-Forwarded-For": "10.255.0.2",
"Upgrade-Insecure-Requests": "1",
"Connection": "close",
"Cookie":
"jupyterhub-hub-login=\"2|1:0|10:1557245170|20:jupyterhub-hub-login|44:NDg0ZTE0ZDgzMjliNDU2Yjk2ODRkYWI4NzlmYmI2OGQ=|6dadad2e54ab049a2f3fcde00eb7e12561ff07f8405f179674ac25f52e8bf568\";
_ga=GA1.2.917524424.1530000626;
jupyterhub-session-id=7fe2aa90931b4454bb52c9cf25ae9de8",
"Referer": "http://mussol.cpl.upc.edu:8000/hub/login",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "en-US,en;q=0.5",
"Accept":
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:60.0)
Gecko/20100101 Firefox/60.0",
"Host": "mussol.cpl.upc.edu:8000"
}
[E 2019-05-07 16:06:20.467 JupyterHub log:158] 500 GET /hub/user/joan/
(jo...@10.255.0.2) 10190.43ms

JoanAntoni

unread,
May 14, 2019, 5:01:46 PM5/14/19
to Project Jupyter
Sorry, the code was malfomed. Here are the three files:

Dockerfile:
ARG JUPYTERHUB_VERSION=0.9.4
FROM jupyterhub/jupyterhub:${JUPYTERHUB_VERSION}

RUN pip install --upgrade pip
RUN pip install --no-cache \
jupyterhub-dummyauthenticator \
dockerspawner==0.10.0

COPY jupyterhub_config.py /srv/jupyterhub/jupyterhub_config.py

docker-compose:
version: "3.7" services: jupyterhub: image: hub hostname: jupyterhub_mussol deploy: replicas: 1 restart_policy: condition: on-failure # assegurem execució al swarm manager placement: constraints: - node.role == manager ports: - "8000:8000" - "8081:8081" volumes: - "/var/run/docker.sock:/var/run/docker.sock" - "/etc/timezone:/etc/timezone" - "/etc/localtime:/etc/localtime" networks:# pels notebooks (standalone containers) - jupyterhub_net environment: DOCKER_NOTEBOOK_DIR: /home/jovyan/work DOCKER_NOTEBOOK_IMAGE: jupyter/datascience-notebook:59b402ce701d DOCKER_NETWORK_NAME: jupyterhub_net networks: jupyterhub_net: name: jupyterhub_net driver: overlay attachable: true

jupyterhub_config.py:
import os notebook = { 'dir' : os.environ.get('DOCKER_NOTEBOOK_DIR') or '~', 'image' : os.environ.get('DOCKER_NOTEBOOK_IMAGE') or 'jupyter/datascience-notebook:59b402ce701d', 'network' : os.environ.get('DOCKER_NETWORK_NAME') or 'jupyterhub_net', } # Spawner c.Spawner.cmd = ['jupyterhub-singleuser'] c.Spawner.start_timeout = 60 c.Spawner.http_timeout = 30 # Notebook Resources c.Spawner.mem_limit = '300M' c.Spawner.cpu_limit = 0.20 # SwarmSpawner c.JupyterHub.spawner_class = 'dockerspawner.SwarmSpawner' c.SwarmSpawner.image = notebook['image'] c.JupyterHub.ip = '0.0.0.0' c.JupyterHub.port = 8000 c.JupyterHub.hub_ip = '0.0.0.0' c.JupyterHub.hub_connect_ip = 'mussol.cpl.upc.edu' # Authentification c.JupyterHub.authenticator_class = 'dummyauthenticator.DummyAuthenticator' c.DummyAuthenticator.password = "passwd" c.Authenticator.whitelist = {'joan'} c.Authenticator.admin_users = {'joan'} # Debug c.Application.log_level = 1 c.JupyterHub.log_level = 'DEBUG' c.Spawner.debug = True c.SwarmSpawner.debug = True from docker.types import Mount,DriverConfig mounts = [ Mount(type='volume', source='jupyterhub-user-{username}', target=notebook['dir'], driver_config=DriverConfig('vieux/sshfs'), ), Mount(type='bind', source='/var/run/docker.sock', target='/var/run/docker.sock', ), ] c.SwarmSpawner.extra_container_spec = { 'mounts' : mounts } c.SwarmSpawner.network_name = notebook['network'] c.SwarmSpawner.extra_host_config = { 'network_mode' : notebook['network'] }


Finally the logs:

Reply all
Reply to author
Forward
0 new messages