Docker最全教程——从理论到实战(六)
生活随笔
收集整理的這篇文章主要介紹了
Docker最全教程——从理论到实战(六)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Docker最全教程——從理論到實(shí)戰(zhàn)(六) 原文:Docker最全教程——從理論到實(shí)戰(zhàn)(六)
托管到騰訊云容器服務(wù)
托管到騰訊云容器服務(wù),我們的公眾號(hào)“magiccodes”已經(jīng)發(fā)布了相關(guān)的錄屏教程,大家可以結(jié)合本篇教程一起查閱。自建還是托管?
在開(kāi)始之前,我們先來(lái)討論一個(gè)問(wèn)題——是自建容器服務(wù)還是托管到云容器服務(wù)? 這里筆者建議大家托管到云容器服務(wù)。對(duì)于中小團(tuán)隊(duì)來(lái)說(shuō),很多情況下,團(tuán)隊(duì)中的運(yùn)維人員是缺失的,或者運(yùn)維人員的水平非常有限——大部分比網(wǎng)吧的網(wǎng)管就好那么一點(diǎn),從成本、安全(云端產(chǎn)品往往提供了一些解決方案,比如權(quán)限控制、災(zāi)備、高可用、數(shù)據(jù)加密等)、擴(kuò)展性的角度,使用云容器服務(wù)更加靠譜和省事,而且是可以直接開(kāi)箱即用的(可以直接跳過(guò)自建的初始化時(shí)間)。而且隨著生產(chǎn)力的繼續(xù)發(fā)展,人的成本一定會(huì)越來(lái)越高于機(jī)器的成本,而且目前已經(jīng)是遠(yuǎn)遠(yuǎn)高于機(jī)器的成本了。因此,如何選擇,大家是否心中有數(shù)了呢? 接下來(lái),我們結(jié)合官方資料進(jìn)行一定的對(duì)比:?
騰訊云容器服務(wù)TKE對(duì)比自建容器服務(wù)
| 優(yōu)勢(shì) | 騰訊云容器服務(wù)(TKE) | 自建容器服務(wù) |
| 簡(jiǎn)單易用 | 簡(jiǎn)化集群管理 ? 騰訊云容器服務(wù)提供超大規(guī)模容器集群管理、資源調(diào)度、容器編排、代碼構(gòu)建,屏蔽了底層基礎(chǔ)構(gòu)架的差異,簡(jiǎn)化了分布式應(yīng)用的管理和運(yùn)維,您無(wú)需再操作集群管理軟件或設(shè)計(jì)容錯(cuò)集群架構(gòu),因此也無(wú)需參與任何相關(guān)的管理或擴(kuò)展工作。 ? 您只需啟動(dòng)容器集群,并指定想要運(yùn)行的任務(wù)即可,騰訊云容器服務(wù)幫您完成所有的集群管理工作,讓您可以集中精力開(kāi)發(fā) Docker 化的應(yīng)用程序。 | 自建容器管理基礎(chǔ)設(shè)施通常涉及安裝、操作、擴(kuò)展自己的集群管理軟件、配置管理系統(tǒng)和監(jiān)控解決方案,管理復(fù)雜。 |
| 靈活擴(kuò)展 | 靈活集群托管,集成負(fù)載均衡 ? 您可以使用容器服務(wù)靈活安排長(zhǎng)期運(yùn)行的應(yīng)用程序和批量作業(yè)。您還可以使用 API 獲得最新的集群狀態(tài)信息,以便集成您自己的自定義計(jì)劃程序和第三方計(jì)劃程序。 ? 騰訊云容器服務(wù)與負(fù)載均衡集成,支持在多個(gè)容器之間分配流量。您只需指定容器配置和要使用的負(fù)載均衡器,容器服務(wù)管理程序?qū)⒆詣?dòng)添加和刪除。另外騰訊云容器服務(wù)可以自動(dòng)恢復(fù)運(yùn)行狀況不佳的容器,保證容器數(shù)量滿足您的需求,以便為應(yīng)用程序提供支持。 | 需要根據(jù)業(yè)務(wù)流量情況和健康情況人工確定容器服務(wù)的部署,可用性和可擴(kuò)展性差 |
| 安全可靠 | 資源高度隔離,服務(wù)高可用 ? 容器服務(wù)在您自己的云服務(wù)器實(shí)例中啟動(dòng),不與其他客戶共享計(jì)算資源。 ? 您的集群在私有網(wǎng)絡(luò)中運(yùn)行,因此您可以使用您自己的安全組和網(wǎng)絡(luò) ACL,這些功能為您提供了高隔離水平,并幫助您使用云服務(wù)器構(gòu)建高度安全可靠的應(yīng)用程序。 ? 容器服務(wù)采用分布式服務(wù)架構(gòu),保證服務(wù)的故障自動(dòng)恢復(fù)、快速遷移;結(jié)合有狀態(tài)服務(wù)后端的分布式存儲(chǔ),實(shí)現(xiàn)服務(wù)和數(shù)據(jù)的安全、高可用。 | 自建容器服務(wù)因其內(nèi)核問(wèn)題及 Namespace 不夠完善,租戶、設(shè)備、內(nèi)核模塊隔離性都比較差 |
| 高效 | 鏡像快速部署,業(yè)務(wù)持續(xù)集成 ? 騰訊云容器服務(wù)運(yùn)行在您的私有網(wǎng)絡(luò)中,高品質(zhì)的 BGP 網(wǎng)絡(luò)保證鏡像極速上傳下載,輕松支持海量容器秒級(jí)啟動(dòng),極大程度降低了運(yùn)行開(kāi)銷,使您的部署更加專注于業(yè)務(wù)運(yùn)行。 ? 您可以在騰訊云容器服務(wù)上部署業(yè)務(wù),開(kāi)發(fā)人員在 GitHub 或其他代碼平臺(tái)提交代碼后,容器服務(wù)可立即進(jìn)行構(gòu)建、測(cè)試、打包集成,將集成的代碼部署到預(yù)發(fā)布環(huán)境和現(xiàn)網(wǎng)環(huán)境上。 | 自建容器服務(wù)的網(wǎng)絡(luò)無(wú)保證,因此無(wú)法保證使用鏡像創(chuàng)建容器的效率 |
| 低成本 | 容器服務(wù)免費(fèi)騰訊云容器服務(wù)沒(méi)有任何附加費(fèi)用,您可以在容器中免費(fèi)調(diào)用 API 構(gòu)建您的集群管理程序。您只需為您創(chuàng)建的用于存儲(chǔ)和運(yùn)行應(yīng)用程序的云服務(wù)資源(例如云服務(wù)器、云硬盤(pán)等)付費(fèi)。 | 需要投入資金構(gòu)建、安裝、運(yùn)維、擴(kuò)展自己的集群管理基礎(chǔ)設(shè)施,成本開(kāi)銷大 |
?
騰訊云容器服務(wù)TKE監(jiān)控與自建容器監(jiān)控對(duì)比
騰訊云容器服務(wù)監(jiān)控為容器集群、服務(wù)、實(shí)例提供數(shù)據(jù)收集和數(shù)據(jù)展示功能。使用容器服務(wù)監(jiān)控,您可以查看集群、節(jié)點(diǎn)、服務(wù)、實(shí)例,容器近 30 個(gè)指標(biāo)的監(jiān)控統(tǒng)計(jì)數(shù)據(jù),驗(yàn)證集群是否正常運(yùn)行并創(chuàng)建相應(yīng)告警,監(jiān)控指標(biāo)覆蓋面全,并且在持續(xù)增加中。具體如下所示:| 優(yōu)勢(shì) | 騰訊云容器服務(wù)(TKE) | 自建容器服務(wù) |
| 指標(biāo)完整 | 涉及到集群,服務(wù),容器,pod 近 30 個(gè)指標(biāo) | 指標(biāo)不完整,很多需要開(kāi)發(fā) |
| 搭建成本低 | 創(chuàng)建集群時(shí)自帶 | 人工搭建,成本高 |
| 運(yùn)維成本低 | 平臺(tái)助力運(yùn)維,保證數(shù)據(jù)準(zhǔn)確性 | 人工維護(hù) |
| 存儲(chǔ)成本低 | 每個(gè)指標(biāo)免費(fèi)保存 3 個(gè)月數(shù)據(jù) | 根據(jù)存儲(chǔ)大小計(jì)算 |
| 擴(kuò)展性高 | 平臺(tái)側(cè)會(huì)不斷完善和增加新的指標(biāo)項(xiàng) | 需要技術(shù)人員大量投入開(kāi)發(fā)新指標(biāo) |
| 告警 | 有 | 無(wú) |
| 問(wèn)題排查手段 | 控制臺(tái)可以方便查看容器 log, 并與 webshell 結(jié)合一鍵登錄容器快速排查問(wèn)題 | 需要手動(dòng)登錄到容器或者機(jī)器排查 |
關(guān)于騰訊云容器服務(wù)
在使用云端產(chǎn)品時(shí),我們需要先了解該產(chǎn)品。 ?騰訊云容器服務(wù)(Tencent Kubernetes Engine,即TKE)為用戶解決容器集群的搭建以及運(yùn)維管理工作,無(wú)縫銜接了騰訊云的計(jì)算、網(wǎng)絡(luò)、存儲(chǔ)、監(jiān)控、安全能力,幫助用戶升級(jí)開(kāi)發(fā)模式、變更應(yīng)用交付、重構(gòu)數(shù)據(jù)管理方式。騰訊云容器服務(wù)提速應(yīng)用部署、簡(jiǎn)化集群管理,助力企業(yè)快速上云。 了解騰訊云容器服務(wù),會(huì)涉及到以下概念:- 集群:是指容器運(yùn)行所需云資源的集合,包含了若干臺(tái)云服務(wù)器、負(fù)載均衡器等騰訊云資源。
- 節(jié)點(diǎn):一臺(tái)已注冊(cè)到集群內(nèi)的云服務(wù)器。
- 服務(wù):由多個(gè)相同配置的容器和訪問(wèn)這些容器的規(guī)則組成的微服務(wù)。
- 鏡像:Docker鏡像,用于部署容器服務(wù),每個(gè)鏡像有特定的唯一標(biāo)識(shí)(鏡像的Registry地址+鏡像名稱+鏡像Tag)。
騰訊與容器服務(wù)
騰訊在很早的時(shí)候就已經(jīng)開(kāi)始使用容器服務(wù)了,并且根據(jù)內(nèi)部消息透露,騰訊的新業(yè)務(wù)基本上均使用容器服務(wù)進(jìn)行托管,而舊有業(yè)務(wù)也在逐步遷移到容器服務(wù)之中。比如大家所熟悉的LOL(英雄聯(lián)盟),就使用了大量的容器實(shí)例用于構(gòu)建和托管相關(guān)服務(wù)。 眾所周知,一個(gè)復(fù)雜游戲的構(gòu)建是非常不容易的。英雄聯(lián)盟的構(gòu)建包含了超過(guò)150個(gè)獨(dú)立的任務(wù),需要構(gòu)建每個(gè)英雄聯(lián)盟的特征。而構(gòu)建包括各種形式和尺寸,從傳統(tǒng)的調(diào)試構(gòu)建到各種形式的未來(lái)內(nèi)容構(gòu)建,還包括全球合作者,如騰訊(Tencent)和競(jìng)舞臺(tái)(Garena)。單單完成構(gòu)建,就使用超過(guò)了450臺(tái)虛擬機(jī)!后續(xù)改為使用Docker之后,構(gòu)建的成本的降低大大提高了團(tuán)隊(duì)的迭代速度。當(dāng)然,中間也出現(xiàn)過(guò)許多問(wèn)題,這些我們后續(xù)再講述。本篇先行略過(guò)。 ?一般服務(wù)部署流程
為了讓大家更好的理解和使用云端產(chǎn)品,這里我們結(jié)合騰訊云容器服務(wù),根據(jù)日常情況下我們服務(wù)部署的情況,來(lái)講解本流程。 在開(kāi)始之前,有很多額外的初始步驟——比如注冊(cè)、充值等等,這里筆者先行略過(guò),本篇只圍繞一般情況下服務(wù)部署到云端的配置和部署流程。因此,這里再?gòu)?qiáng)調(diào)下前提條件:- 騰訊云賬號(hào)正常并且資金足夠,或者無(wú)門(mén)檻代金券充足,能夠滿足此次使用
- 本地服務(wù)鏡像已經(jīng)打包完畢(具體可以參閱之前的講解)
- 您已經(jīng)充分閱讀了前面的教程,或者對(duì)容器服務(wù)已經(jīng)比較了解
創(chuàng)建集群和節(jié)點(diǎn)
集群:是指容器運(yùn)行所需云資源的集合,包含了若干臺(tái)云服務(wù)器、負(fù)載均衡器等騰訊云資源; 節(jié)點(diǎn):一臺(tái)已注冊(cè)到集群內(nèi)的云服務(wù)器。 如果大家對(duì)此不是很好理解的話,這里筆者做一個(gè)比喻——集群就好比某款手游,節(jié)點(diǎn)就如同該手游的某個(gè)區(qū),我們要玩游戲的話,是必須登錄到某個(gè)區(qū)才能玩,就如同我們的服務(wù)實(shí)例,最終也是分布在各個(gè)節(jié)點(diǎn)上。 注意:集群創(chuàng)建完畢之后,可以添加已有的節(jié)點(diǎn),也就是已購(gòu)買的服務(wù)器,不過(guò),操作系統(tǒng)必須一致!如果不一致,添加已有節(jié)點(diǎn)時(shí)可以自動(dòng)重置該服務(wù)器的操作系統(tǒng)。 創(chuàng)建界面如下所示: ? 其中,如果CIDR顯示沖突,我們就改到不沖突為止。 節(jié)點(diǎn)這塊,大家可以選擇購(gòu)買新的主機(jī)或者選擇已有主機(jī),這里就不多介紹了。創(chuàng)建命名空間和鏡像
這里我們需要了解下鏡像倉(cāng)庫(kù)。什么是鏡像倉(cāng)庫(kù)?鏡像倉(cāng)庫(kù)就是用于存放Docker鏡像的倉(cāng)庫(kù),而Docker鏡像用于部署容器服務(wù),每個(gè)鏡像有特定的唯一標(biāo)識(shí)(鏡像的Registry地址+鏡像名稱+鏡像Tag)。 除了Docker官方提供了Docker Hub官方鏡像倉(cāng)庫(kù)之外,各大云廠商往往也提供了自己的鏡像倉(cāng)庫(kù),比如騰訊云的鏡像倉(cāng)庫(kù)是TencentHub。如果我們要獲得最佳的體驗(yàn),那么使用云端產(chǎn)品時(shí),我們建議將Docker鏡像推送到該云產(chǎn)品的鏡像倉(cāng)庫(kù),這樣鏡像拉取的延遲更小,支持粒度以及可用性更高。 注意:此步驟不是必須的,使用云端產(chǎn)品,我們依然可以使用官方鏡像和第三方公共鏡像。 在本篇教程,我們講解使用TencentHub,也就是騰訊云的鏡像倉(cāng)庫(kù)。在容器服務(wù)的管理頁(yè),我們就可以看到入口: ? 首先,我們需要?jiǎng)?chuàng)建命名空間和鏡像。這里,我們進(jìn)入【我的鏡像】頁(yè)面,先來(lái)創(chuàng)建命名空間。創(chuàng)建命名空間
命名空間的創(chuàng)建比較簡(jiǎn)單: ? ? 命名空間大家可以理解為目錄或者前綴,起一定的分類和約束作用,大家可以使用公司的名稱或者自己心中神往的詞匯,只要易于理解就行。命名空間OK之后,我們就需要?jiǎng)?chuàng)建鏡像:創(chuàng)建鏡像
? 新建頁(yè)面如下所示: ? 整個(gè)創(chuàng)建過(guò)程其實(shí)和我們?cè)?span id="ozvdkddzhkzd" class="font-family:等線">Github上創(chuàng)建一個(gè)代碼庫(kù)非常類似,只是這里界面的呈現(xiàn)不夠友好(先把產(chǎn)品經(jīng)理打一頓)。我們?cè)趧?chuàng)建代碼庫(kù)的時(shí)候,也是需要填寫(xiě)路徑(命名空間)和項(xiàng)目名稱(鏡像名稱),如下所示: ?? 通過(guò)代碼庫(kù)的類比,相信你能夠更好的理解鏡像倉(cāng)庫(kù)。創(chuàng)建服務(wù)
鏡像有了,那么接下來(lái)就可以創(chuàng)建服務(wù)了,相當(dāng)于是把我們的代碼丟到web服務(wù)器上跑起來(lái)。服務(wù)很易于理解,比如數(shù)據(jù)庫(kù)服務(wù)、web服務(wù)等等。 騰訊云容器服務(wù)的創(chuàng)建過(guò)程如下所示:- ?基本設(shè)置
?
??
- 部署設(shè)置
??
- 訪問(wèn)設(shè)置
配置鏡像觸發(fā)器
鏡像觸發(fā)器可以在每次生成新的Tag(鏡像版本)時(shí),自行執(zhí)行動(dòng)作,如:自動(dòng)更新使用該鏡像倉(cāng)庫(kù)的服務(wù)。 我們可以通過(guò)【我的鏡像】頁(yè)面,點(diǎn)擊剛添加的鏡像名稱,進(jìn)入詳情頁(yè),然后點(diǎn)擊【觸發(fā)器】tab頁(yè)來(lái)打開(kāi)觸發(fā)器管理頁(yè)面。??
點(diǎn)擊【添加觸發(fā)器】按鈕可以來(lái)創(chuàng)建觸發(fā)器。相關(guān)配置如下所示: ?? 我們需要選擇對(duì)應(yīng)的容器服務(wù)。我們推薦使用全部觸發(fā)這個(gè)觸發(fā)條件,大家也可以根據(jù)自己的需求設(shè)置指定Tag觸發(fā),比如針對(duì)生產(chǎn)、測(cè)試和開(kāi)發(fā)環(huán)境。推送鏡像
觸發(fā)器設(shè)置好了,也就是整個(gè)水管都鋪設(shè)好了,只要打開(kāi)水龍頭就可以開(kāi)閘放水了。對(duì)于我們這里,這個(gè)水指的就是鏡像。我們只需將我們的鏡像推送到騰訊云鏡像倉(cāng)庫(kù),即可自動(dòng)完成整個(gè)服務(wù)部署流程。 鏡像推送的方式有很多,比如通過(guò)CI工具構(gòu)建和推送,也可以通過(guò)腳本來(lái)推送已有的鏡像。這里,我們將介紹通過(guò)腳本來(lái)推送鏡像。 核心腳本代碼為: docker login --username {用戶名} --password {密碼} ccr.ccs.tencentyun.com docker push {鏡像名稱}:{鏡像版本} 注意:ccr.ccs.tencentyun.com為騰訊倉(cāng)庫(kù)的地址。username為騰訊云賬號(hào)Id,密碼為倉(cāng)庫(kù)密碼。 如果忘記密碼,可以在此處重置: ?? Magicodes.Admin框架提供了騰訊云推送腳本,相關(guān)參數(shù)如下所示: ?? 一般情況下,我們僅需提供默認(rèn)的配置即可,即配置tencentyun.config即可: ? 鏡像地址可以從騰訊云的【我的鏡像】獲取:??
如果沒(méi)有特殊的配置,我們僅需執(zhí)行此腳本即可完成編譯、運(yùn)行單元測(cè)試、打包、生成鏡像以及鏡像推送的整個(gè)過(guò)程。編譯的文件會(huì)放在tsoutputs目錄,如下所示: ?? 例如,我們可以執(zhí)行以下命令來(lái)發(fā)布Host工程,也就是后臺(tái)服務(wù): ./build-with-tencentyun.ps1 -pushType HOST -debug true ? ? 如果需要傳遞相關(guān)應(yīng)用的自定義設(shè)置,腳本這邊也提供了對(duì)設(shè)置文件的支持,例如: ? 如果在編譯前需要執(zhí)行單元測(cè)試并通過(guò)之后才允許發(fā)布,腳本也提供了參數(shù)進(jìn)行支持: 例如: ./build-with-tencentyun.ps1 -pushType HOST -debug true -runTest true當(dāng)單元測(cè)試失敗時(shí),腳本將終止執(zhí)行:
?? 除了使用腳本推送之外,我們還可以通過(guò)CI工具或者服務(wù)來(lái)完成自動(dòng)構(gòu)建和推送。在后續(xù)的章節(jié),我們會(huì)進(jìn)行講述。問(wèn)題排查
將服務(wù)托管到云端時(shí),我們可能會(huì)碰到一些問(wèn)題。掌握一些手段或技巧,能夠讓我們更易于排查問(wèn)題以及解決問(wèn)題。鏡像拉取問(wèn)題
目前騰訊云容器服務(wù)日志中不會(huì)打印鏡像拉取失敗的具體錯(cuò)誤,如下圖所示: ? ? 我們需要在服務(wù)器上拉取鏡像來(lái)查看具體日志錯(cuò)誤,比如執(zhí)行以下命令: sudo su docker login --username {用戶名} --password {密碼} ccr.ccs.tencentyun.com docker pull {鏡像名稱}遠(yuǎn)程登錄
在某些情況下,我們需要登錄具體的容器實(shí)例來(lái)排查問(wèn)題,這點(diǎn),騰訊云是能夠支持的: ?? 登錄之后,我們可以直接執(zhí)行命令,比如執(zhí)行dir命令列出所有的文件和目錄: ?? 我們也可以上傳下載容器實(shí)例中的文件,如圖所示: ? 通過(guò)文件助手,我們能夠很方便的檢查和修改實(shí)例中的配置文件,或者查看具體日志。這對(duì)于我們調(diào)測(cè)或者檢查問(wèn)題非常重要。 注意:使用文件助手上傳下載文件時(shí),注意加上當(dāng)前工作目錄路徑,比如“/app/appsettings.json”。利用容器服務(wù)日志
在開(kāi)發(fā)過(guò)程中,容器服務(wù)實(shí)例可能經(jīng)常會(huì)崩潰或者在運(yùn)行中出現(xiàn)問(wèn)題,一方面,我們可以記錄相關(guān)日志或者將日志推送到日志服務(wù),另一方面,我們強(qiáng)烈推薦大家利用好容器服務(wù)日志。 在前面的【控制臺(tái)日志提供程序】章節(jié),我們有詳細(xì)講解,配置了控制臺(tái)日志提供程序之后,我們可以在容器服務(wù)實(shí)例中看到所有的日志,包括導(dǎo)致容器實(shí)例崩潰的日志,這點(diǎn)對(duì)于我們排錯(cuò)也非常重要——因?yàn)橥罎⑻?#xff0c;有可能文件日志都來(lái)不及記錄或者推送。 ??往期內(nèi)容鏈接
Docker最全教程——從理論到實(shí)戰(zhàn)(一)Docker最全教程——從理論到實(shí)戰(zhàn)(二)
Docker最全教程——從理論到實(shí)戰(zhàn)(三)Docker最全教程——從理論到實(shí)戰(zhàn)(四)
Docker最全教程——從理論到實(shí)戰(zhàn)(五) posted on 2019-01-14 11:43 NET未來(lái)之路 閱讀(...) 評(píng)論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/10266005.html
總結(jié)
以上是生活随笔為你收集整理的Docker最全教程——从理论到实战(六)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 普通装修多少钱啊?
- 下一篇: C# http 性能优化500毫秒到 6