JupyterHub+Docker+K8s 簡單總結(jié)

上個(gè)月大概花了四周時(shí)間,學(xué)習(xí)了docker讶迁、k8s肴捉、jupyterhub等組件的概念和使用,并在個(gè)人Mac和測試集群上分別部署了一套基于k8s的jupyterhub乏德,提供jupyter notebook基本服務(wù):對(duì)于用戶來說撤奸,可以創(chuàng)建屬于自己的notebook吠昭,并支持主流的十余種機(jī)器學(xué)習(xí)、深度學(xué)習(xí)算法胧瓜。對(duì)于管理者來說矢棚,可以支持基于數(shù)據(jù)庫的身份認(rèn)證、持久化府喳、更新singleuser鏡像等功能蒲肋。整體上看,滿足算法工程師前期模型開發(fā)的各項(xiàng)需求钝满。

項(xiàng)目暫時(shí)告一段落兜粘,有必要簡單對(duì)安裝過程、工具命令舱沧、后期展望做個(gè)總結(jié)妹沙,方便后續(xù)上手繼續(xù)改進(jìn)。

1. 安裝回顧

1.1 安裝過程

由于涉及的組件較多熟吏,參考資料比較少距糖,關(guān)鍵還有墻的緣故,整體安裝過程相對(duì)來說比較繁瑣牵寺。經(jīng)過我的采坑后悍引,沉淀出的兩篇文章,可以供相關(guān)同學(xué)參考帽氓。

安裝流程主要包括:

  • 安裝docker趣斤、k8s
  • 安裝helm
  • 安裝jupyterhub
  • 配置pvc持久化
  • 開發(fā)并配置auth身份認(rèn)證
  • 更新singleuser鏡像

具體的一些細(xì)節(jié),有些不方便公開黎休,但個(gè)人Mac版的安裝浓领、配置過程都可以在我的文章中查詢。

步驟1-3可以參考JupyterHub on Kubernetes部署

步驟4取決于PVC持久化選擇的類型势腮,重點(diǎn)是一個(gè)權(quán)限的問題联贩。由于singleuser鏡像默認(rèn)的用戶為jovyan(uid=1000),所屬組(gid=100)捎拯,所以需要配置時(shí)泪幌,指定singleuser的uid和gid;此外還要指定掛載位置homeMountPath為/home/jovyan/

步驟5可以參考JupyterHub on Kubernetes的SQLite署照、MySQL身份認(rèn)證 (Auth)祸泪,目前github上已經(jīng)更新了密碼加密部分。

步驟6目的是使用已經(jīng)安裝好各種算法包的鏡像建芙,包裝成singleuser鏡像供用戶使用没隘。這部分在1.2小節(jié)里具體說一下。

按照上述6個(gè)步驟禁荸,基本可以搭出一個(gè)基于k8s的jupyterhub升略,對(duì)外提供服務(wù)微王。

1.2 更新singleuser鏡像

singleuser鏡像是官網(wǎng)上為用戶提供的notebook基礎(chǔ)鏡像,上面安裝了jupyterhub品嚣,但是在實(shí)際項(xiàng)目中炕倘,我們需要為用戶提供多種算法包,如果一個(gè)個(gè)自己安裝的話翰撑,還是很麻煩的罩旋,所以最簡單的辦法,就是拿已經(jīng)安裝好的鏡像眶诈,我們包裝成singleuser就可以啦涨醋。

Deepo是一個(gè)docker鏡像倉庫,提供了包含很多算法的鏡像逝撬。所以第一步我們可以從GitHub(https://github.com/ufoym/deepo)下載相關(guān)鏡像浴骂,作為基礎(chǔ)鏡像。

第二步是在該鏡像中宪潮,創(chuàng)建user組(gid=100)溯警,創(chuàng)建jovyan用戶(uid=1000),這都是為了和singleuser鏡像匹配狡相。

第三步是切換到j(luò)ovyan用戶梯轻,并安裝jupyterhub,可以參考https://github.com/jupyterhub/jupyterhub 上的Installation安裝過程尽棕。

第四步是保存該鏡像喳挑,重新命名,并打tag滔悉,修改values的相關(guān)配置伊诵,聯(lián)調(diào)成功后,用戶可以在自己nootbook中調(diào)用pandas回官、tensorflow等曹宴。

2. 工具命令

這部分主要是記錄一下這些組件我使用過的命令,方便后續(xù)再改進(jìn)時(shí)參考孙乖。

2.1 docker

# list docker images
docker images

# list docker container
docker ps

# run a image
docker run -it <image_name>:<tag> bash

# package a image
docker save <image_name>:<tag>  -o  path/xx.tar 

# load a image
docker load -i <images_tar_name> 

# copy files between images and pc
docker cp xx:xx/path1  /path2

# make a new image from container
docker commit <container_id>   <images_name>:<tag>

2.2 k8s

# get, describe, delete, logs, exec
kubectl get pods -n <namespace> -o yaml
kubectl describe pod <pod_name> -n <namespace>
kubectl delete svc <svc_name> -n <namespace>
kubectl logs <pod_name> -n <namespace>
kubectl exec -it <pod_name> bash -n <namespace>

2.3 helm


# install 
helm install ./jupyterhub --version=0.7.0 --name=jupyter --namespace=jupyter

# delete   
helm delete --purge <namespace>

3. 后期展望

對(duì)于后期,肯定需要一版一版的去改進(jìn)迭代份氧。從我的角度看唯袄,目前還存在以下改進(jìn)空間。

3.1 提供注冊服務(wù)

目前新用戶注冊賬戶還缺乏對(duì)應(yīng)的server蜗帜,還是管理員手工腳本添加恋拷。我感覺可以寫一個(gè)web服務(wù),用戶可以在web頁面完成基本的注冊功能厅缺。

3.2 PVC/PV隱患

目前的PVC/PV邏輯是為每一個(gè)用戶提供一個(gè)獨(dú)立的PVC/PV蔬顾,用于數(shù)據(jù)的持久化宴偿。但是隨著用戶規(guī)模的拓展,這種方式不可持續(xù)诀豁。理想的情況應(yīng)該是開辟一個(gè)總的PVC/PV窄刘,所有用戶的數(shù)據(jù)都存儲(chǔ)在該P(yáng)V下,彼此之間相互保持獨(dú)立舷胜。

4. 總結(jié)

基于k8s的jupyterhub服務(wù)娩践,目前已經(jīng)在很多公司得到落地實(shí)踐,甚至還是一大賣點(diǎn)烹骨。

docker容器之前也沒接觸過翻伺,但這次簡單的使用感覺非常好【诨溃基于docker容器的部署方式無論是個(gè)人開發(fā)吨岭,還是企業(yè)應(yīng)用都很方便。

程序員這個(gè)職業(yè)需要不停的學(xué)習(xí)新的知識(shí)峦树、技能辣辫,對(duì)個(gè)人要求還是不低的。對(duì)知識(shí)的廣度和深度空入,都有要求络它。錢不好掙啊歪赢!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末化戳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子埋凯,更是在濱河造成了極大的恐慌点楼,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件白对,死亡現(xiàn)場離奇詭異掠廓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)甩恼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蟀瞧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人条摸,你說我怎么就攤上這事悦污。” “怎么了钉蒲?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵切端,是天一觀的道長。 經(jīng)常有香客問我顷啼,道長踏枣,這世上最難降的妖魔是什么昌屉? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮茵瀑,結(jié)果婚禮上间驮,老公的妹妹穿的比我還像新娘。我一直安慰自己瘾婿,他們只是感情好蜻牢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著偏陪,像睡著了一般抢呆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上笛谦,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天抱虐,我揣著相機(jī)與錄音,去河邊找鬼饥脑。 笑死恳邀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灶轰。 我是一名探鬼主播谣沸,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼笋颤!你這毒婦竟也來了乳附?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤伴澄,失蹤者是張志新(化名)和其女友劉穎赋除,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體非凌,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡举农,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了敞嗡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颁糟。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖喉悴,靈堂內(nèi)的尸體忽然破棺而出棱貌,到底是詐尸還是另有隱情,我是刑警寧澤粥惧,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布键畴,位于F島的核電站最盅,受9級(jí)特大地震影響突雪,放射性物質(zhì)發(fā)生泄漏起惕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一咏删、第九天 我趴在偏房一處隱蔽的房頂上張望惹想。 院中可真熱鬧,春花似錦督函、人聲如沸嘀粱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锋叨。三九已至,卻和暖如春宛篇,著一層夾襖步出監(jiān)牢的瞬間娃磺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工叫倍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留偷卧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓吆倦,卻偏偏與公主長得像听诸,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚕泽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • k8s容器編排 [TOC] 1:k8s集群的安裝 1.1 k8s的架構(gòu) 除了核心組件晌梨,還有一些推薦的Add-ons...
    Zh_bd92閱讀 908評(píng)論 0 0
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,748評(píng)論 1 21
  • 目錄 存儲(chǔ)卷是屬于Pod璧南,不屬于容器掌逛。但是可以在容器中去掛載存儲(chǔ)卷來使用。 K8S上可用的存儲(chǔ)卷類型: empty...
    CaiGuangyin閱讀 2,762評(píng)論 2 4
  • feisky云計(jì)算司倚、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,849評(píng)論 0 5
  • 馬車西行十里动知,停在一座高大的門口跟前皿伺,門牌正上方掛著一塊三丈匾額,赫然寫著三個(gè)金燦燦的大字——天鷹幫盒粮。老者緩步走下...
    羊官俠閱讀 696評(píng)論 0 6