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)。
騰訊自今年起,對騰訊雲投入了大量的資源,並且給予了前所未有的重視和支持。筆者前不久受邀參與了騰訊雲TKE專場技術交流會,這里分享幾張照片給大家:

騰訊與容器服務

騰訊在很早的時候就已經開始使用容器服務了,並且根據內部消息透露,騰訊的新業務基本上均使用容器服務進行托管,而舊有業務也在逐步遷移到容器服務之中。比如大家所熟悉的LOL(英雄聯盟),就使用了大量的容器實例用於構建和托管相關服務。
眾所周知,一個復雜游戲的構建是非常不容易的。英雄聯盟的構建包含了超過150個獨立的任務,需要構建每個英雄聯盟的特征。而構建包括各種形式和尺寸,從傳統的調試構建到各種形式的未來內容構建,還包括全球合作者,如騰訊(Tencent)和競舞台(Garena)。單單完成構建,就使用超過了450台虛擬機!后續改為使用Docker之后,構建的成本的降低大大提高了團隊的迭代速度。當然,中間也出現過許多問題,這些我們后續再講述。本篇先行略過。

一般服務部署流程

為了讓大家更好的理解和使用雲端產品,這里我們結合騰訊雲容器服務,根據日常情況下我們服務部署的情況,來講解本流程。
在開始之前,有很多額外的初始步驟——比如注冊、充值等等,這里筆者先行略過,本篇只圍繞一般情況下服務部署到雲端的配置和部署流程。因此,這里再強調下前提條件:
  1. 騰訊雲賬號正常並且資金足夠,或者無門檻代金券充足,能夠滿足此次使用
  2. 本地服務鏡像已經打包完畢(具體可以參閱之前的講解)
  3. 您已經充分閱讀了前面的教程,或者對容器服務已經比較了解
滿足了以上的前提條件,對於一般情況下,服務托管到騰訊雲,我們的主體流程如下所示:

創建集群和節點

集群:是指容器運行所需雲資源的集合,包含了若干台雲服務器、負載均衡器等騰訊雲資源;
節點:一台已注冊到集群內的雲服務器。
如果大家對此不是很好理解的話,這里筆者做一個比喻——集群就好比某款手游,節點就如同該手游的某個區,我們要玩游戲的話,是必須登錄到某個區才能玩,就如同我們的服務實例,最終也是分布在各個節點上。
注意:集群創建完畢之后,可以添加已有的節點,也就是已購買的服務器,不過,操作系統必須一致!如果不一致,添加已有節點時可以自動重置該服務器的操作系統。
 
創建界面如下所示:
其中,如果CIDR顯示沖突,我們就改到不沖突為止。
節點這塊,大家可以選擇購買新的主機或者選擇已有主機,這里就不多介紹了。

創建命名空間和鏡像

這里我們需要了解下鏡像倉庫。什么是鏡像倉庫?鏡像倉庫就是用於存放Docker鏡像的倉庫,而Docker鏡像用於部署容器服務,每個鏡像有特定的唯一標識(鏡像的Registry地址+鏡像名稱+鏡像Tag)。
除了Docker官方提供了Docker Hub官方鏡像倉庫之外,各大雲廠商往往也提供了自己的鏡像倉庫,比如騰訊雲的鏡像倉庫是TencentHub。如果我們要獲得最佳的體驗,那么使用雲端產品時,我們建議將Docker鏡像推送到該雲產品的鏡像倉庫,這樣鏡像拉取的延遲更小,支持粒度以及可用性更高。
 
注意:此步驟不是必須的,使用雲端產品,我們依然可以使用官方鏡像和第三方公共鏡像。
 
在本篇教程,我們講解使用TencentHub,也就是騰訊雲的鏡像倉庫。在容器服務的管理頁,我們就可以看到入口:
首先,我們需要創建命名空間和鏡像。這里,我們進入【我的鏡像】頁面,先來創建命名空間。

創建命名空間

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

創建鏡像

新建頁面如下所示:
整個創建過程其實和我們在Github上創建一個代碼庫非常類似,只是這里界面的呈現不夠友好(先把產品經理打一頓)。我們在創建代碼庫的時候,也是需要填寫路徑(命名空間)和項目名稱(鏡像名稱),如下所示:
通過代碼庫的類比,相信你能夠更好的理解鏡像倉庫。

創建服務

鏡像有了,那么接下來就可以創建服務了,相當於是把我們的代碼丟到web服務器上跑起來。服務很易於理解,比如數據庫服務、web服務等等。
騰訊雲容器服務的創建過程如下所示:
  • 基本設置
         服務名稱、容器名稱我們建議和鏡像名稱保持一致,由於有些命名約束,比如“.”需要改成“ _” )。

 

  • 部署設置
我們推薦使用存活檢查和就緒檢查,啟動延時最好不要設為0,實例數量大家可以根據需要改為自動調節,比如根據CPU的使用率來彈性擴展。

  • 訪問設置
提供公網訪問,端口可以設置成80。如果需要提供https,那么還需要開放443端口,對於某些僅需內網訪問的服務,建議大家不要開啟公網端口。
服務創建完成之后,我們希望鏡像在推送之后,能夠自動觸發服務更新。因此,我們還需要配置鏡像觸發器。

配置鏡像觸發器

鏡像觸發器可以在每次生成新的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”。

利用容器服務日志

在開發過程中,容器服務實例可能經常會崩潰或者在運行中出現問題,一方面,我們可以記錄相關日志或者將日志推送到日志服務,另一方面,我們強烈推薦大家利用好容器服務日志。
在前面的【控制台日志提供程序】章節,我們有詳細講解,配置了控制台日志提供程序之后,我們可以在容器服務實例中看到所有的日志,包括導致容器實例崩潰的日志,這點對於我們排錯也非常重要——因為往往崩潰太快,有可能文件日志都來不及記錄或者推送。

往期內容鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM