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」。

利用容器服務日誌

在開發過程當中,容器服務實例可能常常會崩潰或者在運行中出現問題,一方面,咱們能夠記錄相關日誌或者將日誌推送到日誌服務,另外一方面,咱們強烈推薦你們利用好容器服務日誌。
在前面的【控制檯日誌提供程序】章節,咱們有詳細講解,配置了控制檯日誌提供程序以後,咱們能夠在容器服務實例中看到全部的日誌,包括致使容器實例崩潰的日誌,這點對於咱們排錯也很是重要——由於每每崩潰太快,有可能文件日誌都來不及記錄或者推送。

往期內容連接

相關文章
相關標籤/搜索