云网牛站
所在位置:首页 > Linux教程 > 在Ubuntu 18.04+JupyterHub环境中的NFS服务Bug修复办法

在Ubuntu 18.04+JupyterHub环境中的NFS服务Bug修复办法

2018-09-14 11:45:36作者:openthings稿源:linux开源社区

在Kubernetes1.11.2中,使用Ubuntu 18.04操作系统及JupyterHub出现jupyterhub_cookie_secret无法写入的错误,以下是该问题的出错信息、原因及解决办法。

 

1、问题现象

JupyterHub的Hub Pod启动失败,查看日志如下:

[I 2018-09-14 8:27:32.280 JupyterHub app:1656] Using Authenticator: dummyauthenticator.dummyauthenticator.DummyAuthenticator

[I 2018-09-14 8:27:32.280 JupyterHub app:1656] Using Spawner: kubespawner.spawner.KubeSpawner

[I 2018-09-14 8:27:32.281 JupyterHub app:1053] Writing cookie_secret to /srv/jupyterhub/jupyterhub_cookie_secret

[E 2018-09-14 8:27:32.281 JupyterHub app:1941]

Traceback (most recent call last):

File "/usr/local/lib/python3.6/dist-packages/jupyterhub/app.py", line 1938, in launch_instance_async await self.initialize(argv)

File "/usr/local/lib/python3.6/dist-packages/jupyterhub/app.py", line 1662, in initialize self.init_secrets()

File "/usr/local/lib/python3.6/dist-packages/jupyterhub/app.py", line 1055, in init_secrets with open(secret_file, 'w') as f:

OSError: [Errno 22] Invalid argument: '/srv/jupyterhub/jupyterhub_cookie_secret' 

 

2、原因分析

经初步测试,这是Ubuntu操作系统和Kubernetes新版本升级后所致,升级NFS的服务Pod即可。

 

3、解决办法

将NFS-provisioner的Images设为最新的版本v2.1.0-k8s1.11,获取镜像:

docker pull quay.io/kubernetes_incubator/nfs-provisioner:v2.1.0-k8s1.11

如果访问有问题,可以从阿里云上获取镜像的复制:

MY_REGISTRY=registry.cn-hangzhou.aliyuncs.com/openthings

docker pull ${MY_REGISTRY}/quay-io-nfs-provisioner:v2.1.0-k8s1.11

docker tag ${MY_REGISTRY}/quay-io-nfs-provisioner:v2.1.0-k8s1.11 quay.io/kubernetes_incubator/nfs-provisioner:v2.1.0-k8s1.11

编辑NFS服务的statefull-set的启动参数:

获取sts(Stateful Sets) id

kubectl get sts -n nfs

#编辑images参数,设为v2.1.0-k8s1.11

kubectl edit sts/nfs-server-nfs-server-provisioner -n nfs

#按i进行编辑,按esc : w保存,按:q退出。 

#查看

kubectl describe sts/nfs-server-nfs-server-provisioner -n nfs

然后,删除pod,等kubernetes 自动重建pod后,刷新pod状态变绿,应该就可以正常使用了。

 

4、测试验证

到原来的Data8(基于JupyterHub的部署)查看pv,已经状态显示为绿色,可以使用。

然后重新部署IPFS为NFS存储方式,发现pvc一直处于pending状态。创建一个新的pvc测试一下,也是如此。经过多次测试发现,新的这个NFS部署放在default命名空间没有问题,其它的就会有问题。需要进一步测试和改进。

 

5、最终解决

经过排查,问题发现主要是命名空间和访问权限导致创建pv失败。NFS-provisioner的原始实现在这里,其中deploy/kubernetes目录包含部署用的配置文件,解决办法如下:

1].修改rbac.yaml里面的namespace为最终想要部署的命名空间为nfs2x,然后在 kubectl 命令后加-n nfs2x指定命名空间,nfs2x是我设定的命名空间。

2].将所有的配置文件全部指定命名空间。nfs2x是我设定的命名空间,storageclass设为openthings-nfs。修改后的文件,在这里供参考。

然后,运行安装脚本install-dep.sh(部署为deployment),内容如下:

kubectl create ns nfs2x

kubectl apply -f deployment.yaml

kubectl apply -f class.yaml

kubectl apply -f rbac.yaml

最后,创建pvc:

kubectl apply -f claim.yaml 

 

6、更进一步

目前上面的解决办法是采用yaml文件使用kubectl部署的,以后应改进、更新helm chart的部署,以及支持GitOps的部署管理方法。

 

相关主题

Ubuntu 18.04下安装Kubernetes 1.11 + Istio 1.0组合

精选文章
热门文章