Hello, Members.
1. Overview
I’m a newbie about Z2JH (and k8s).
I installed Z2JH with the following command. As a result, the hub node shows the status PENDING.
kubectl describe
show the following message.
0/4 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/4 nodes are available: 4 No preemption victims found for incoming pod
It may Storage setting missing. But I’m not sure how to fix it.
Does anyone tell me how to solve it?
Best regards.
2. Environment.
- OS: Ubuntu 22.04
- Helm: v3.12.3
- Kubernetes: v1.27.4 (Self-Hosted)
- Z2JH: 3.0.2
3. Installation
config.yaml
The document describes there is no need configuration file. So I tried the first with an empty config.yaml file. But It is still PENDING status.
Initialize a Helm chart configuration file
As of version 1.0.0, you don’t need any configuration to get started so you can just create a config.yaml file with some helpful comments.
hub:
db:
pvc:
storageClassName: external-nfs
helm upgrade --cleanup-on-fail \
--install jhub jupyterhub/jupyterhub \
--namespace namespace-jupyterhub \
--create-namespace \
--version=3.0.2 \
--values config.yaml
StorageClass configuration
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: external-nfs
provisioner: example.com/external-nfs
reclaimPolicy: Retain
parameters:
server: 10.10.10.10
path: /export_path
readonly: "false"
4. Logs
kubectl get pods --all-namespaces
...
namespace-jupyterhub continuous-image-puller-gj6sl 1/1 Running 0 16h
namespace-jupyterhub hub-bcc98d754-rk6g2 0/1 Pending 0 16h
namespace-jupyterhub proxy-7db55f77fb-xp46z 1/1 Running 0 16h
namespace-jupyterhub user-scheduler-5b448ff99-4lrk8 1/1 Running 0 16h
namespace-jupyterhub user-scheduler-5b448ff99-9x8r2 1/1 Running 0 16h
kubectl describe pods --namespace=namespace-jupyterhub hub-bcc98d754-rk6g2
Name: hub-bcc98d754-rk6g2
Namespace: namespace-jupyterhub
Priority: 0
Service Account: hub
Node: <none>
Labels: app=jupyterhub
component=hub
hub.jupyter.org/network-access-proxy-api=true
hub.jupyter.org/network-access-proxy-http=true
hub.jupyter.org/network-access-singleuser=true
pod-template-hash=bcc98d754
release=jhub
Annotations: checksum/config-map: 5bcffc906ea430544c047723a2f4de5d7e99e45e61944810d7583ff255195a30
checksum/secret: ad1ccc6aa6084bb09465e8c1bc7c7fea9462da15a9ffd7f7e71448e4cd7cdd7e
Status: Pending
IP:
IPs: <none>
Controlled By: ReplicaSet/hub-bcc98d754
Containers:
hub:
Image: jupyterhub/k8s-hub:3.0.2
Port: 8081/TCP
Host Port: 0/TCP
Args:
jupyterhub
--config
/usr/local/etc/jupyterhub/jupyterhub_config.py
--upgrade-db
Liveness: http-get http://:http/hub/health delay=300s timeout=3s period=10s #success=1 #failure=30
Readiness: http-get http://:http/hub/health delay=0s timeout=1s period=2s #success=1 #failure=1000
Environment:
PYTHONUNBUFFERED: 1
HELM_RELEASE_NAME: jhub
POD_NAMESPACE: namespace-jupyterhub (v1:metadata.namespace)
CONFIGPROXY_AUTH_TOKEN: <set to the key 'hub.config.ConfigurableHTTPProxy.auth_token' in secret 'hub'> Optional: false
Mounts:
/srv/jupyterhub from pvc (rw)
/usr/local/etc/jupyterhub/config/ from config (rw)
/usr/local/etc/jupyterhub/jupyterhub_config.py from config (rw,path="jupyterhub_config.py")
/usr/local/etc/jupyterhub/secret/ from secret (rw)
/usr/local/etc/jupyterhub/z2jh.py from config (rw,path="z2jh.py")
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-8sg4p (ro)
Conditions:
Type Status
PodScheduled False
Volumes:
config:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: hub
Optional: false
secret:
Type: Secret (a volume populated by a Secret)
SecretName: hub
Optional: false
pvc:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: hub-db-dir
ReadOnly: false
kube-api-access-8sg4p:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: hub.jupyter.org/dedicated=core:NoSchedule
hub.jupyter.org_dedicated=core:NoSchedule
node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 4m52s (x191 over 15h) default-scheduler 0/4 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/4 nodes are available: 4 No preemption victims found for incoming pod..