在使用jupyterhub时候往启动的容器里挂载了一个文件很多的目录,导致容器启动报错如下。
配置如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20singleuser:
defaultUrl: "/lab"
extraEnv:
JUPYTERHUB_SINGLEUSER_APP: "jupyter_server.serverapp.ServerApp"
storage:
capacity: 20Gi
dynamic:
storageClass: managed-nfs-storage-nfs-10
extraVolumes:
- name: dataset
persistentVolumeClaim:
claimName: dataset-pvc
- name: share
persistentVolumeClaim:
claimName: share-pvc
extraVolumeMounts:
- name: dataset
mountPath: /Datasets
- name: share
mountPath: /home/jovyan/share
Warning FailedMount 77s kubelet Unable to attach or mount volumes: unmounted volumes=[dataset], unattached volumes=[dataset volume-admin jupyterhub-share]: timed out waiting for the condition
因为刚开始挂载了一个文件较小的目录是能正常启动的,当又挂载了一个文件很多的目录后,容器启动失败并提示如下错误。
因为小目录是可以挂载成功的,所以可以排除,网络等原因,猜测可能是k8s的问题。
于是,自己写了个yaml文件并把pvc dataset 进行挂载,发现此时容器正常启动并无异常。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39apiVersion: v1
kind: Pod
metadata:
name: mount-test
spec:
containers:
- name: mount-test
image: gpu-jupyter:cu111-ubuntu20.04
command:
- sleep
- "36000"
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /DataSets
name: dataset
initContainers:
- command:
- iptables
- -A
- OUTPUT
- -d
- 169.254.169.254
- -j
- DROP
image: jupyterhub/k8s-network-tools:1.1.4
imagePullPolicy: IfNotPresent
name: bbb
securityContext:
capabilities:
add:
- NET_ADMIN
privileged: true
runAsUser: 0
securityContext:
fsGroup: 100
volumes:
- name: dataset
persistentVolumeClaim:
claimName: dataset-pvc
于是和jupyterhub启动的容器yaml进行对比,然后不断添加配置,直到添加securityContext:fsGroup:100
后导致容器启动失败。
查看k8s文档,发现当指定了fsGroup后,当挂载文件时,k8s会对文件的所有权和权限进行检查和修改,导致容器启动缓慢,并会打印出mount 失败的日志。
解决方法:
1.不挂载大目录
2.删除fsGroup配置
修改jupyterhub的config配置,改为如下,然后helm upgrade
1
2
3singleuser:
fsGid: null
...