Question about Jupyterhub

Hi, I am updating Jupyterhub by moving to use Python 3.11 (currently using Python 3.8 and jupyterhub==1.5.0) but I am having an issue because Jupyterhub is not able to run/executed.

When Jupyterhub is triying to launch is showing this error.

-- running run from builder
 Fri Mar  7 05:02:49 PM UTC 2025 : Starting Jupyterhub process (logging to syslog)
*[E 2025-03-07 17:02:51.145 JupyterHub app:3408]*
*    Traceback (most recent call last):*
*      File "/opt/app-root/lib64/python3.11/site-packages/jupyterhub/app.py", line 3405, in launch_instance_async*
*        await self.initialize(argv)*
*      File "/opt/app-root/lib64/python3.11/site-packages/jupyterhub/app.py", line 2883, in initialize*
*        self.load_config_file(self.config_file)*
*      File "/opt/app-root/lib64/python3.11/site-packages/traitlets/config/application.py", line 113, in inner*
*        return method(app, *args, **kwargs)*
*               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/traitlets/config/application.py", line 950, in load_config_file*
*        for (config, fname) in self._load_config_files(*
*      File "/opt/app-root/lib64/python3.11/site-packages/traitlets/config/application.py", line 909, in _load_config_files*
*        config = loader.load_config()*
*                 ^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/traitlets/config/loader.py", line 626, in load_config*
*        self._read_file_as_dict()*
*      File "/opt/app-root/lib64/python3.11/site-packages/traitlets/config/loader.py", line 659, in _read_file_as_dict*
*        exec(compile(f.read(), conf_filename, "exec"), namespace, namespace)  # noqa*
*        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/etc/jupyterhub_config.py", line 59, in <module>*
*        api_client = DynamicClient(ApiClient())*
*                     ^^^^^^^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/openshift/dynamic/client.py", line 40, in __init__*
*        K8sDynamicClient.__init__(self, client, cache_file=cache_file, discoverer=discoverer)*
*      File "/opt/app-root/lib64/python3.11/site-packages/kubernetes/dynamic/client.py", line 84, in __init__*
*        self.__discoverer = discoverer(self, cache_file)*
*                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/kubernetes/dynamic/discovery.py", line 228, in __init__*
*        Discoverer.__init__(self, client, cache_file)*
*      File "/opt/app-root/lib64/python3.11/site-packages/kubernetes/dynamic/discovery.py", line 54, in __init__*
*        self.__init_cache()*
*      File "/opt/app-root/lib64/python3.11/site-packages/kubernetes/dynamic/discovery.py", line 70, in __init_cache*
*        self._load_server_info()*
*      File "/opt/app-root/lib64/python3.11/site-packages/openshift/dynamic/discovery.py", line 98, in _load_server_info*
*        'kubernetes': self.client.request('get', '/version', serializer=just_json)*
*                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/kubernetes/dynamic/client.py", line 55, in inner*
*        resp = func(self, *args, **kwargs)*
*               ^^^^^^^^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/kubernetes/dynamic/client.py", line 273, in request*
*        api_response = self.client.call_api(*
*                       ^^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/kubernetes/client/api_client.py", line 348, in call_api*
*        return self.__call_api(resource_path, method,*
*               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/kubernetes/client/api_client.py", line 180, in __call_api*
*        response_data = self.request(*
*                        ^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/kubernetes/client/api_client.py", line 373, in request*
*        return self.rest_client.GET(url,*
*               ^^^^^^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/kubernetes/client/rest.py", line 244, in GET*
*        return self.request("GET", url,*
*               ^^^^^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/kubernetes/client/rest.py", line 217, in request*
*        r = self.pool_manager.request(method, url,*
*            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/urllib3/_request_methods.py", line 136, in request*
*        return self.request_encode_url(*
*               ^^^^^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/urllib3/_request_methods.py", line 183, in request_encode_url*
*        return self.urlopen(method, url, **extra_kw)*
*               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/urllib3/poolmanager.py", line 444, in urlopen*
*        response = conn.urlopen(method, u.request_uri, **kw)*
*                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/urllib3/connectionpool.py", line 877, in urlopen*
*        return self.urlopen(*
*               ^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/urllib3/connectionpool.py", line 877, in urlopen*
*        return self.urlopen(*
*               ^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/urllib3/connectionpool.py", line 877, in urlopen*
*        return self.urlopen(*
*               ^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/urllib3/connectionpool.py", line 847, in urlopen*
*        retries = retries.increment(*
*                  ^^^^^^^^^^^^^^^^^^*
*      File "/opt/app-root/lib64/python3.11/site-packages/urllib3/util/retry.py", line 515, in increment*
*        raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]*
*        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*
*    urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=80): Max retries exceeded with url: /version (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fd0ccbd3d50>: Failed to establish a new connection: [Errno 111] Connection refused'))*

Package Versions used
jupyterhub==4.1.0
Python == 3.11

I will appreciated any help and support on this case.

Thanks in advanced.

The trouble appears to be this line in your /opt/app-root/etc/jupyterhub_config.py file:

This doesn’t appear to be related to jupyterhub, but your kubernetes client does not appear to have the information it needs to be instantiated.