一步一步使用阿里云容器服務部署基于.NET的JEXUS網站

一.概念

jexus:一款國產的運行在linux下的基于mono的高性能web服務器。國內有諸多中大型網站使用jexus作為web服務程序部署在linux平臺上,jexus不開源,完全免費,可以隨意使用。官網:https://www.jexus.org 成功案例:https://www.jexus.org/Examples.htm jexus作者:宇內流云

阿里云容器服務:阿里將自己的負載均衡,云服務器,nas文件存儲,docker,網絡安全,云監(jiān)控等一覽子產品做了深度整合。實現了高性能、可伸縮的容器應用管理服務,可以把一組云服務器做成群集,通過 Docker 容器來進行應用生命周期管理。阿里云容器服務極大簡化了對網站發(fā)布,資源伸縮的工作量。

二.jexus網站在云容器服務部署的步驟

1.注冊阿里云賬號,開通阿里云容器服務 https://cs.console.aliyun.com

2.開通阿里云的文件存儲服務 https://nas.console.aliyun.com創(chuàng)建一個文件系統(tǒng)

添加掛載點,在管理界面里面取得 文件系統(tǒng)ID 和 掛載地址,供群集統(tǒng)一掛載

3.選擇集群節(jié)點,創(chuàng)建集群,服務器節(jié)點,負載均衡。

創(chuàng)建集群的同時,會提示創(chuàng)建負載均衡和節(jié)點。 其中節(jié)點可以是實時創(chuàng)建一個或者多個,也可以把現有的ecs服務器加入節(jié)點。不過一定要注意,現有ecs云服務器加入群集,原ecs服務器系統(tǒng)盤會被替換掉,也就是說整個被干掉。新創(chuàng)建的節(jié)點只能是按量收費的,加入現有ecs服務器,可以是包月包年的,根據情況決定如何處理。

負載均衡可以自動創(chuàng)建,也可以之后在綁定到群集。 負載均衡負責任務的調度,按指定算法把工作量分攤到不同節(jié)點的容器中服務。容器中的應用創(chuàng)建后,會自動把涉及到的節(jié)點添加到負載均衡的后臺服務器清單中去。負載均衡還可以綁定證書,在負載均衡中實現網站的ssl單向或者雙向加密認證。

在群集左邊菜單的“”數據卷“”中,點擊右邊的創(chuàng)建,創(chuàng)建一個供群集內所有節(jié)點使用的數據卷,容器是無狀態(tài)的,不適宜在容器內保存任何數據,一旦容器重啟,所有數據都會丟失。這個數據卷用以存放網站的程序,資源,配置。一個數據卷同時被所有節(jié)點使用,這樣,更新網站的程序和內容,只需要做一次。數據卷名隨意填寫,文件系統(tǒng)ID和掛載點域名在上一步驟獲得。

完成操作后,telnet到集群的任意服務器節(jié)點下可以看到nas文件系統(tǒng)掛載到了節(jié)點主機的/mnt路徑下.啟動容器時,我們就把nas的文件卷從宿主操作系統(tǒng)映射到容器中去。


4.在群集的任意一個節(jié)點中,拉取基礎的jexus鏡像,對鏡像內的配置做定制,commit鏡像,push到自己的鏡像倉庫

2017年4月,jexus作者制作了一個鏡像,我把這個鏡像上傳到了阿里云的鏡像倉庫。鏡像地址 :registry.cn-shenzhen.aliyuncs.com/ddtimer/jexusv1:latest 該映像基于ubuntu系統(tǒng)

包括: 1,Jexus 5.8.2.11獨立版 2,vim curl wget命令 3,ssh服務 4,asp.net System.Drawing 所需要的圖形庫 不支持ssh,web端口80,ssh端口22 默認網站有url安全檢查和jexus的文件日志

我對這個鏡像做了修改后 commit后提交到了鏡像倉庫,地址 registry.cn-shenzhen.aliyuncs.com/ddtimer/jexusv1:ddjexus

主要做了如下修改

1.網站默認端口改成8080 2.cpu數量改成auto ?3網站配置改為不處理url安全監(jiān)測(如果使用負載均衡,需要關掉這個選項,不然有可能會被誤認為病毒攻擊) 4.jexus的日志功能關閉(后臺用log4net記錄更好) 4.默認網站的文件路徑改為 /var/ddhomework(默認路徑是虛擬的,實際不存在,在運行容器時將綁定到宿主節(jié)點映射的nas卷)

熟悉dockr的同學可以下載latest版本的鏡像,自己做配置修改,然后commit在push到自己的容器倉庫(切記這個版本的jexus使用的是80端口,我的修改版使用的是8080端口

如果不熟悉docker的同學,可以直接用ddjexus版本的鏡像,把網站文件丟去nas文件系統(tǒng),在容器應用頁面設置好nas對應,就可以直接部署好.net網站到容器上了。 后面的容器應用和服務的創(chuàng)建都是根據這個鏡像版本來描述。

從registry中拉取鏡像:

$ sudo docker pull registry.cn-shenzhen.aliyuncs.com/ddtimer/jexusv1:[鏡像版本號]

將鏡像推送到registry:

$ sudo docker login --username=xxxxxxxxxxx?registry.cn-shenzhen.aliyuncs.com

$ docker images ?列出容器清單,得到當前容器的id ?為 xxxxxxxxx

$ sudo docker commit xxxxxxxxx registry-internal.cn-shenzhen.aliyuncs.com/ddtimer/jexusv1:ddv3? ? ? ddv3為給以新鏡像的版本號?

$sudo docker images? ? ? ? ? ? 得到新的imageid

$sudo docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/ddtimer/jexusv1:[鏡像版本號]

$ sudo docker push registry.cn-shenzhen.aliyuncs.com/ddtimer/[鏡像名稱]:[鏡像版本號]

其中[ImageId],[鏡像版本號]請你根據自己的鏡像信息進行填寫。

5.容器應用和服務的創(chuàng)建

我的理解,阿里云容器的應用當于根據鏡像創(chuàng)建了一個包含容器各種配置信息的藍本,容器服務就是群集屬性的,根據藍本部署調度到各個ecs服務器節(jié)點上。

創(chuàng)建應用會彈出一個應用基本消息,隨意填,然后選擇使用鏡像創(chuàng)建

下一步,按選擇鏡像,彈出個鏡像搜索窗口

,輸入篩選條件,jexusv1,選擇jexusv1的鏡像


版本選擇處選擇我修改過的ddjexus版本,最后結果如下圖 。

容器數量和節(jié)點數目有關,1個節(jié)點選擇一個容器即可。如果有多個節(jié)點,只選擇一個容器,那么容器只會部署在其中一臺服務器節(jié)點。

EntryPoint 輸入 /usr/bin/bootstrap.sh 這個鏡像中包括的初始化腳本,容器創(chuàng)建時會執(zhí)行,負責啟動jexus和ssh服務器之類

端口映射處,把ecs節(jié)點的端口映射到容器的端口 主要就是ssh服務器和jexus服務的端口映射(如果是使用jexus作者發(fā)布的鏡像,那么容器端口應該使用80而不是8080

負載均衡和數據卷的設置

負載均衡路由配置的容器端口,填寫容器中jexus的端口,右邊填寫負載均衡名字和前段的端口號 我這里寫的例子是 容器jexus服務器使用8080端口,負載均衡前段使用80端口訪問,轉發(fā)到負載均衡名字為 SLB_name的后端服務器。 其中負載均衡需要提前設置好80端口的監(jiān)聽并記錄下負載均衡的名字或者id,然后在這里替換掉 SLB_name

數據卷,主機路徑和數據卷名填寫在第三步操作中取得的信息,將nas文件系統(tǒng)掛載到節(jié)點的路徑填上,容器路徑如果使用我的定制鏡像,必須輸入/var/ddhomework . 這個路徑和鏡像中jexus的site目錄對應。這樣只要通過一臺宿主機更新nas文件,所有部署的jexus容器都能訪問到。

阿里云的負載均衡在創(chuàng)建群集是會自動創(chuàng)建。也可以在群集管理里面對應到現有的負載均衡,負載均衡設置中可以設置ssl證書,這樣可以在容器內使用常規(guī)http訪問,在負載均衡層使用https對外,減少服務的加密認證的壓力。

其他選項設置,可以設置容器的伸縮過著。如果是一個容器對應一個ecs服務器,那么應該在集群管理的節(jié)點伸縮中,按相同標準設置。

平滑升級選線,需要開啟負載均衡的健康檢查,經過幾次測試,jexus服務器在阿里的負載均衡開啟健康檢查后,會導致服務器卡死不響應的問題。據宇內流云說是jexus有病毒防護機制,健康檢查會導致誤殺。關閉url安全檢查可以解決,不過經過我測試,沒有效果,如果要開啟負載均衡的健康檢查還需要作者做一些針對性的改動才行。在這里@下宇內流云大神

所有設置完成后,按創(chuàng)建,將會創(chuàng)建一個應用,并且根據應用定義的容器數量和容器節(jié)點的數量在各個ecs節(jié)點啟動服務。 啟動了服務的節(jié)點,會被自動加入到負載均衡的后端服務器列表。

如果在nas卷中已經上傳了網站文件,那么就可以嘗試通過負載均衡的地址訪問網頁了。


由于所有的容器都是訪問同一個nas文件卷,當我們更新網站內容是,只需要通過任意一個節(jié)點,上傳更新文件即可。當后臺有幾十臺服務器是,一臺一臺去更新和通過nas一次性發(fā)布,工作量完全不在一個層次了。


5.容器集群的縮容和擴容

1.可以手動擴張,在集群管理里面手動增加節(jié)點數量

手動節(jié)點擴容后,需要在服務中修改容器數量,如果容器和節(jié)點是一對一關系,容器數量要修改為和節(jié)點一致的數量。

2.設置自動的縮容擴容策略,在cpu或者內存到達一定使用率時,觸發(fā)執(zhí)行。

在群集-管理-節(jié)點伸縮中處理,如下圖


以上就是這段時間對后臺服務器實行容器集群改造的一些經驗總結,這些經驗是否正確,是否是最佳實踐,還需要時間來檢測。也期待更熟悉的同行交流經驗,斧正謬錯。

希望這篇總結文章能對計劃在阿里云容器運行jexus服務器的朋友提供一些幫助。

附加跳坑指南:

1.容器日期和宿主日期不一致,相差8小時的解決

運行? dpkg-reconfigure tzdata ?選擇 6 亞洲,再選擇69 上海 即可。

registry-internal.cn-shenzhen.aliyuncs.com/ddtimer/jexusv1:ddv3 版本更新了最新版jexus并處理了容器內時區(qū)問題 ?2017-04-28

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容