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