Ubuntu 18.04+JupyterHub的NFS服務 Bug 修復

在Kubernetes1.11.2上,使用Ubuntu 18.04+JupyterHub出現jupyterhub_cookie_secret沒法寫入的錯誤。python

一、問題現象

JupyterHub的Hub Pod啓動失敗,查看日誌以下:git

[I 2018-08-12 10:27:52.280 JupyterHub app:1656] Using Authenticator: dummyauthenticator.dummyauthenticator.DummyAuthenticator
[I 2018-08-12 10:27:52.280 JupyterHub app:1656] Using Spawner: kubespawner.spawner.KubeSpawner
[I 2018-08-12 10:27:52.281 JupyterHub app:1053] Writing cookie_secret to /srv/jupyterhub/jupyterhub_cookie_secret
[E 2018-08-12 10:27:52.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'

二、緣由分析

經初步測試,這是Ubuntu操做系統和Kubernetes新版本升級後所致,升級NFS的服務Pod便可。github

三、解決辦法

將NFS-provisioner的Images設爲最新的版本v2.1.0-k8s1.11,獲取鏡像:docker

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

若是訪問有問題,能夠從阿里雲上獲取鏡像的拷貝:cookie

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的啓動參數:app

獲取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狀態變綠,應該就能夠正常使用了。async

四、測試驗證

到原來的Data8(基於JupyterHub的部署)查看pv,已經狀態顯示爲綠色,可使用。測試

而後從新部署IPFS爲NFS存儲方式,發現pvc一直處於pending狀態。建立一個新的pvc測試一下,也是如此。通過屢次測試發現,新的這個NFS部署放在default命名空間沒有問題,其它的就會有問題。須要進一步測試和改進。阿里雲

五、最終解決

通過排查,問題發現主要是命名空間和訪問權限致使建立pv失敗。NFS-provisioner的原始實如今 https://github.com/openthings/external-storage/tree/master/nfs ,其中deploy/kubernetes目錄包含部署用的配置文件,解決辦法以下:spa

  • 修改rbac.yaml裏面的namespace爲最終想要部署的命名空間爲nfs2x,而後在 kubectl 命令後加-n nfs2x指定命名空間,nfs2x是我設定的命名空間。
  •  將全部的配置文件所有指定命名空間。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

六、更進一步

目前上面的解決辦法是採用yaml文件使用kubectl部署的,之後應改進、更新helm chart的部署,以及支持GitOps的部署管理方法。

相關文章
相關標籤/搜索