Docker最全教程——從理論到實戰(zhàn)(六)

托管到騰訊云容器服務(wù)

托管到騰訊云容器服務(wù),我們的公眾號“magiccodes”已經(jīng)發(fā)布了相關(guān)的錄屏教程,大家可以結(jié)合本篇教程一起查閱。

自建還是托管?

在開始之前,我們先來討論一個問題——是自建容器服務(wù)還是托管到云容器服務(wù)?

這里筆者建議大家托管到云容器服務(wù)。對于中小團隊來說,很多情況下,團隊中的運維人員是缺失的,或者運維人員的水平非常有限——大部分比網(wǎng)吧的網(wǎng)管就好那么一點,從成本、安全(云端產(chǎn)品往往提供了一些解決方案,比如權(quán)限控制、災(zāi)備、高可用、數(shù)據(jù)加密等)、擴展性的角度,使用云容器服務(wù)更加靠譜和省事,而且是可以直接開箱即用的(可以直接跳過自建的初始化時間)。而且隨著生產(chǎn)力的繼續(xù)發(fā)展,人的成本一定會越來越高于機器的成本,而且目前已經(jīng)是遠遠高于機器的成本了。因此,如何選擇,大家是否心中有數(shù)了呢?

接下來,我們結(jié)合官方資料進行一定的對比:

騰訊云容器服務(wù)TKE對比自建容器服務(wù)

騰訊云容器服務(wù)TKE監(jiān)控與自建容器監(jiān)控對比

騰訊云容器服務(wù)監(jiān)控為容器集群、服務(wù)、實例提供數(shù)據(jù)收集和數(shù)據(jù)展示功能。使用容器服務(wù)監(jiān)控,您可以查看集群、節(jié)點、服務(wù)、實例,容器近 30 個指標的監(jiān)控統(tǒng)計數(shù)據(jù),驗證集群是否正常運行并創(chuàng)建相應(yīng)告警,監(jiān)控指標覆蓋面全,并且在持續(xù)增加中。具體如下所示:

關(guān)于騰訊云容器服務(wù)

在使用云端產(chǎn)品時,我們需要先了解該產(chǎn)品。

?騰訊云容器服務(wù)(Tencent Kubernetes Engine,即TKE)為用戶解決容器集群的搭建以及運維管理工作,無縫銜接了騰訊云的計算、網(wǎng)絡(luò)、存儲、監(jiān)控、安全能力,幫助用戶升級開發(fā)模式、變更應(yīng)用交付、重構(gòu)數(shù)據(jù)管理方式。騰訊云容器服務(wù)提速應(yīng)用部署、簡化集群管理,助力企業(yè)快速上云。

了解騰訊云容器服務(wù),會涉及到以下概念:

集群:是指容器運行所需云資源的集合,包含了若干臺云服務(wù)器、負載均衡器等騰訊云資源。

節(jié)點:一臺已注冊到集群內(nèi)的云服務(wù)器。

服務(wù):由多個相同配置的容器和訪問這些容器的規(guī)則組成的微服務(wù)。

鏡像:Docker鏡像,用于部署容器服務(wù),每個鏡像有特定的唯一標識(鏡像的Registry地址+鏡像名稱+鏡像Tag)。

騰訊自今年起,對騰訊云投入了大量的資源,并且給予了前所未有的重視和支持。筆者前不久受邀參與了騰訊云TKE專場技術(shù)交流會,這里分享幾張照片給大家:

騰訊與容器服務(wù)

騰訊在很早的時候就已經(jīng)開始使用容器服務(wù)了,并且根據(jù)內(nèi)部消息透露,騰訊的新業(yè)務(wù)基本上均使用容器服務(wù)進行托管,而舊有業(yè)務(wù)也在逐步遷移到容器服務(wù)之中。比如大家所熟悉的LOL(英雄聯(lián)盟),就使用了大量的容器實例用于構(gòu)建和托管相關(guān)服務(wù)。

眾所周知,一個復(fù)雜游戲的構(gòu)建是非常不容易的。英雄聯(lián)盟的構(gòu)建包含了超過150個獨立的任務(wù),需要構(gòu)建每個英雄聯(lián)盟的特征。而構(gòu)建包括各種形式和尺寸,從傳統(tǒng)的調(diào)試構(gòu)建到各種形式的未來內(nèi)容構(gòu)建,還包括全球合作者,如騰訊(Tencent)和競舞臺(Garena)。單單完成構(gòu)建,就使用超過了450臺虛擬機!后續(xù)改為使用Docker之后,構(gòu)建的成本的降低大大提高了團隊的迭代速度。當然,中間也出現(xiàn)過許多問題,這些我們后續(xù)再講述。本篇先行略過。

一般服務(wù)部署流程

為了讓大家更好的理解和使用云端產(chǎn)品,這里我們結(jié)合騰訊云容器服務(wù),根據(jù)日常情況下我們服務(wù)部署的情況,來講解本流程。

在開始之前,有很多額外的初始步驟——比如注冊、充值等等,這里筆者先行略過,本篇只圍繞一般情況下服務(wù)部署到云端的配置和部署流程。因此,這里再強調(diào)下前提條件:

1.騰訊云賬號正常并且資金足夠,或者無門檻代金券充足,能夠滿足此次使用

2.本地服務(wù)鏡像已經(jīng)打包完畢(具體可以參閱之前的講解)

3.您已經(jīng)充分閱讀了前面的教程,或者對容器服務(wù)已經(jīng)比較了解

滿足了以上的前提條件,對于一般情況下,服務(wù)托管到騰訊云,我們的主體流程如下所示:

創(chuàng)建集群和節(jié)點

集群:是指容器運行所需云資源的集合,包含了若干臺云服務(wù)器、負載均衡器等騰訊云資源;

節(jié)點:一臺已注冊到集群內(nèi)的云服務(wù)器。

如果大家對此不是很好理解的話,這里筆者做一個比喻——集群就好比某款手游,節(jié)點就如同該手游的某個區(qū),我們要玩游戲的話,是必須登錄到某個區(qū)才能玩,就如同我們的服務(wù)實例,最終也是分布在各個節(jié)點上。

注意:集群創(chuàng)建完畢之后,可以添加已有的節(jié)點,也就是已購買的服務(wù)器,不過,操作系統(tǒng)必須一致!如果不一致,添加已有節(jié)點時可以自動重置該服務(wù)器的操作系統(tǒng)。

創(chuàng)建界面如下所示:?

其中,如果CIDR顯示沖突,我們就改到不沖突為止。

節(jié)點這塊,大家可以選擇購買新的主機或者選擇已有主機,這里就不多介紹了。

創(chuàng)建命名空間和鏡像

這里我們需要了解下鏡像倉庫。什么是鏡像倉庫?鏡像倉庫就是用于存放Docker鏡像的倉庫,而Docker鏡像用于部署容器服務(wù),每個鏡像有特定的唯一標識(鏡像的Registry地址+鏡像名稱+鏡像Tag)。

除了Docker官方提供了Docker Hub官方鏡像倉庫之外,各大云廠商往往也提供了自己的鏡像倉庫,比如騰訊云的鏡像倉庫是TencentHub。如果我們要獲得最佳的體驗,那么使用云端產(chǎn)品時,我們建議將Docker鏡像推送到該云產(chǎn)品的鏡像倉庫,這樣鏡像拉取的延遲更小,支持粒度以及可用性更高。

注意:此步驟不是必須的,使用云端產(chǎn)品,我們依然可以使用官方鏡像和第三方公共鏡像。

在本篇教程,我們講解使用TencentHub,也就是騰訊云的鏡像倉庫。在容器服務(wù)的管理頁,我們就可以看到入口:

?首先,我們需要創(chuàng)建命名空間和鏡像。這里,我們進入【我的鏡像】頁面,先來創(chuàng)建命名空間。

創(chuàng)建命名空間

命名空間的創(chuàng)建比較簡單:

?命名空間大家可以理解為目錄或者前綴,起一定的分類和約束作用,大家可以使用公司的名稱或者自己心中神往的詞匯,只要易于理解就行。命名空間OK之后,我們就需要創(chuàng)建鏡像:

創(chuàng)建鏡像?

新建頁面如下所示:

整個創(chuàng)建過程其實和我們在Github上創(chuàng)建一個代碼庫非常類似,只是這里界面的呈現(xiàn)不夠友好(先把產(chǎn)品經(jīng)理打一頓)。我們在創(chuàng)建代碼庫的時候,也是需要填寫路徑(命名空間)和項目名稱(鏡像名稱),如下所示:?

通過代碼庫的類比,相信你能夠更好的理解鏡像倉庫。

創(chuàng)建服務(wù)

鏡像有了,那么接下來就可以創(chuàng)建服務(wù)了,相當于是把我們的代碼丟到web服務(wù)器上跑起來。服務(wù)很易于理解,比如數(shù)據(jù)庫服務(wù)、web服務(wù)等等。

騰訊云容器服務(wù)的創(chuàng)建過程如下所示:

?基本設(shè)置

服務(wù)名稱、容器名稱我們建議和鏡像名稱保持一致,由于有些命名約束,比如“.”需要改成“_” )。

部署設(shè)置

我們推薦使用存活檢查和就緒檢查,啟動延時最好不要設(shè)為0,實例數(shù)量大家可以根據(jù)需要改為自動調(diào)節(jié),比如根據(jù)CPU的使用率來彈性擴展。

訪問設(shè)置

提供公網(wǎng)訪問,端口可以設(shè)置成80。如果需要提供https,那么還需要開放443端口,對于某些僅需內(nèi)網(wǎng)訪問的服務(wù),建議大家不要開啟公網(wǎng)端口。

?

服務(wù)創(chuàng)建完成之后,我們希望鏡像在推送之后,能夠自動觸發(fā)服務(wù)更新。因此,我們還需要配置鏡像觸發(fā)器。

配置鏡像觸發(fā)器

鏡像觸發(fā)器可以在每次生成新的Tag(鏡像版本)時,自行執(zhí)行動作,如:自動更新使用該鏡像倉庫的服務(wù)。

我們可以通過【我的鏡像】頁面,點擊剛添加的鏡像名稱,進入詳情頁,然后點擊【觸發(fā)器】tab頁來打開觸發(fā)器管理頁面。

點擊【添加觸發(fā)器】按鈕可以來創(chuàng)建觸發(fā)器。相關(guān)配置如下所示:

我們需要選擇對應(yīng)的容器服務(wù)。我們推薦使用全部觸發(fā)這個觸發(fā)條件,大家也可以根據(jù)自己的需求設(shè)置指定Tag觸發(fā),比如針對生產(chǎn)、測試和開發(fā)環(huán)境。

推送鏡像

觸發(fā)器設(shè)置好了,也就是整個水管都鋪設(shè)好了,只要打開水龍頭就可以開閘放水了。對于我們這里,這個水指的就是鏡像。我們只需將我們的鏡像推送到騰訊云鏡像倉庫,即可自動完成整個服務(wù)部署流程。

鏡像推送的方式有很多,比如通過CI工具構(gòu)建和推送,也可以通過腳本來推送已有的鏡像。這里,我們將介紹通過腳本來推送鏡像。

核心腳本代碼為:

docker login --username {用戶名} --password {密碼} ccr.ccs.tencentyun.com

docker push {鏡像名稱}:{鏡像版本}

注意:ccr.ccs.tencentyun.com為騰訊倉庫的地址。username為騰訊云賬號Id,密碼為倉庫密碼。

如果忘記密碼,可以在此處重置:

Magicodes.Admin框架提供了騰訊云推送腳本,相關(guān)參數(shù)如下所示:

一般情況下,我們僅需提供默認的配置即可,即配置tencentyun.config即可:

鏡像地址可以從騰訊云的【我的鏡像】獲?。?

如果沒有特殊的配置,我們僅需執(zhí)行此腳本即可完成編譯、運行單元測試、打包、生成鏡像以及鏡像推送的整個過程。編譯的文件會放在tsoutputs目錄,如下所示:

例如,我們可以執(zhí)行以下命令來發(fā)布Host工程,也就是后臺服務(wù):

./build-with-tencentyun.ps1 -pushType HOST -debug true ?

如果需要傳遞相關(guān)應(yīng)用的自定義設(shè)置,腳本這邊也提供了對設(shè)置文件的支持,例如:

如果在編譯前需要執(zhí)行單元測試并通過之后才允許發(fā)布,腳本也提供了參數(shù)進行支持:

例如:

./build-with-tencentyun.ps1 -pushType HOST -debug true -runTest true

當單元測試失敗時,腳本將終止執(zhí)行:

除了使用腳本推送之外,我們還可以通過CI工具或者服務(wù)來完成自動構(gòu)建和推送。在后續(xù)的章節(jié),我們會進行講述。

問題排查

將服務(wù)托管到云端時,我們可能會碰到一些問題。掌握一些手段或技巧,能夠讓我們更易于排查問題以及解決問題。

鏡像拉取問題

目前騰訊云容器服務(wù)日志中不會打印鏡像拉取失敗的具體錯誤,如下圖所示:

我們需要在服務(wù)器上拉取鏡像來查看具體日志錯誤,比如執(zhí)行以下命令:

sudo su

docker login --username {用戶名} --password {密碼} ccr.ccs.tencentyun.com

docker pull {鏡像名稱}

遠程登錄

在某些情況下,我們需要登錄具體的容器實例來排查問題,這點,騰訊云是能夠支持的:

登錄之后,我們可以直接執(zhí)行命令,比如執(zhí)行dir命令列出所有的文件和目錄:

我們也可以上傳下載容器實例中的文件,如圖所示:

?

通過文件助手,我們能夠很方便的檢查和修改實例中的配置文件,或者查看具體日志。這對于我們調(diào)測或者檢查問題非常重要。

注意:使用文件助手上傳下載文件時,注意加上當前工作目錄路徑,比如“/app/appsettings.json”。

利用容器服務(wù)日志

在開發(fā)過程中,容器服務(wù)實例可能經(jīng)常會崩潰或者在運行中出現(xiàn)問題,一方面,我們可以記錄相關(guān)日志或者將日志推送到日志服務(wù),另一方面,我們強烈推薦大家利用好容器服務(wù)日志。

在前面的【控制臺日志提供程序】章節(jié),我們有詳細講解,配置了控制臺日志提供程序之后,我們可以在容器服務(wù)實例中看到所有的日志,包括導(dǎo)致容器實例崩潰的日志,這點對于我們排錯也非常重要——因為往往崩潰太快,有可能文件日志都來不及記錄或者推送。

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容