團隊新開發(fā)的區(qū)域醫(yī)療平臺包含一個課件上傳與播放模塊,其實際的業(yè)務(wù)包含如下的步驟:
1.? 縣級和鄉(xiāng)鎮(zhèn)衛(wèi)生院的醫(yī)生們通過在線視頻參加培訓(xùn)纵装、并錄制視頻征讲。
2. 醫(yī)生上傳視頻,并共享課件橡娄。
3.? 平臺上的其他醫(yī)生可以在課件學(xué)習(xí)欄目學(xué)習(xí)錄制的培訓(xùn)會議诗箍。
通常,課件的上傳和保存我們都是通過對象存儲做的挽唉,對象存儲的好處顯而易見:不擔(dān)心文件丟失(三份備份)滤祖, 不擔(dān)心容量(云服務(wù)商集群),https/http訪問瓶籽, 數(shù)據(jù)安全(對象訪問簽名)匠童;? 但是這個平臺需要部署到區(qū)域醫(yī)療機構(gòu)的機房里,多數(shù)情況下是沒有對象存儲的塑顺,外購對象存儲也成本過高汤求, 所以我們采用了折中的方案,存儲系統(tǒng)換為NFS严拒, 只需要一個大存儲量的機器就可以了首昔,大概服務(wù)如下:
我們開發(fā)了一個uploader服務(wù),用于上傳文件糙俗,同時使用Nginx提供http/https服務(wù)勒奇,兩個服務(wù)之間共享存儲,使用NFS存儲掛載給他們巧骚。
這里我們來看看怎么給microk8s上的pod掛載NFS存儲赊颠。
首先格二,我們需要安裝NFS server 用于測試
我們使用ubuntu來進行測試,先執(zhí)行命令:sudo apt install nfs-kernel-server
這個命令將安裝服務(wù)器端竣蹦,以及所有相關(guān)的包:
在home目錄下創(chuàng)建一個nfsshare的文件夾用作共享目錄顶猜。然后我們來編輯nfs配置文件,配置該共享目錄痘括,默認允許所有IP段掛在:
啟動nfs:?sudo /etc/init.d/nfs-kernel-server start
可以使用服務(wù)命令查看服務(wù)狀態(tài): service?nfs-kernel-server? ?status
使用ip addr命令查看以下當(dāng)前主機的IP:
現(xiàn)在我們來使用nfsclient端測試一下:
sudo mount 10.0.2.15:/home/nfsshare? ?/mnt
查詢 /mnt 目錄长窄,可以看到在 /home/nsshare下面創(chuàng)建的文件和子目錄
測試完后umount 掛載點:? sudo umount -v /mnt
現(xiàn)在我們已經(jīng)完成了nfs的搭建,現(xiàn)在我們需要編寫k8s部署需要的文件
1. 先寫一個PV纲菌, 用來表示可以掛載的NFS存儲:
2. 接著寫一個PVC挠日,用于綁定PV:
3. 然后寫包裝了nginx的存儲服務(wù)的deployment文件:
4. 最后寫存儲服務(wù)對應(yīng)的service文件:
完成了所有配置文件,使用microk8s kubectl apply -f 命令翰舌,依次創(chuàng)建資源對象嚣潜。
查詢創(chuàng)建的pod:
使用exec 登陸docker,
查詢/usr/share/storage目錄椅贱,如下圖懂算,nfs已經(jīng)掛載好了,可以看見我們在test目錄下創(chuàng)建了幾個文件:
最后庇麦,我們來驗證一下http方式訪問文件
現(xiàn)在storage的nfs目錄下創(chuàng)建兩個子目錄计技,attachement、video 山橄, 對應(yīng)docker的掛在路徑為: /usr/share/storage/atttachment酸役、/usr/share/storage/video。?
在兩個文件夾下面驾胆,分別創(chuàng)建兩個文件 helloA.txt? helloB.txt, 并隨意寫寫內(nèi)容涣澡。
完成后我們通過30080端口,從microk8s節(jié)點的瀏覽器訪問兩個文件:
至此丧诺,在k8s下入桂,給pod掛在nfs的工作,并通過http訪問的任務(wù)就完了驳阎。另外:
1.? ?后續(xù)需要考慮抗愁,通過Lua寫一個腳本和nginx集成,實現(xiàn)訪問資源簽名驗證呵晚,這個機制可以很容易的參考對象存儲的驗證蜘腌。
2. 這里沒有討論,如何寫upload和制作storage服務(wù)的鏡像饵隙,upload服務(wù)也需要掛載nfs撮珠,原理是一樣的,所以就不再討論金矛。 storage服務(wù)是基于Nginx鏡像實現(xiàn)芯急,下面的附錄了帶上了可參考的配置文件勺届。
==============================================================
附錄A: storageservice服務(wù)中,nginx的配置文件storage.conf
附錄B:??storageservice服務(wù)中dockerfile文件
附錄C: Storageservice的build.gradle文件
參考一個Springboot項目的build.gradle和Dockerfile娶耍,? 這里的buiild.gradle文件不需要java build免姿, 僅需要用來生成新docker鏡像。