托管到騰訊云容器服務
托管到騰訊云容器服務,我們的公眾號“magiccodes”已經(jīng)發(fā)布了相關的錄屏教程,大家可以結合本篇教程一起查閱。
自建還是托管金顿?
在開始之前,我們先來討論一個問題——是自建容器服務還是托管到云容器服務鲤桥?
這里筆者建議大家托管到云容器服務揍拆。對于中小團隊來說,很多情況下芜壁,團隊中的運維人員是缺失的礁凡,或者運維人員的水平非常有限——大部分比網(wǎng)吧的網(wǎng)管就好那么一點,從成本慧妄、安全(云端產(chǎn)品往往提供了一些解決方案顷牌,比如權限控制、災備塞淹、高可用窟蓝、數(shù)據(jù)加密等)、擴展性的角度饱普,使用云容器服務更加靠譜和省事运挫,而且是可以直接開箱即用的(可以直接跳過自建的初始化時間)。而且隨著生產(chǎn)力的繼續(xù)發(fā)展套耕,人的成本一定會越來越高于機器的成本谁帕,而且目前已經(jīng)是遠遠高于機器的成本了。因此冯袍,如何選擇匈挖,大家是否心中有數(shù)了呢?
接下來康愤,我們結合官方資料進行一定的對比:
騰訊云容器服務TKE對比自建容器服務
騰訊云容器服務TKE監(jiān)控與自建容器監(jiān)控對比
騰訊云容器服務監(jiān)控為容器集群儡循、服務、實例提供數(shù)據(jù)收集和數(shù)據(jù)展示功能征冷。使用容器服務監(jiān)控择膝,您可以查看集群、節(jié)點检激、服務肴捉、實例,容器近 30 個指標的監(jiān)控統(tǒng)計數(shù)據(jù)叔收,驗證集群是否正常運行并創(chuàng)建相應告警齿穗,監(jiān)控指標覆蓋面全,并且在持續(xù)增加中今穿。具體如下所示:
關于騰訊云容器服務
在使用云端產(chǎn)品時缤灵,我們需要先了解該產(chǎn)品。
?騰訊云容器服務(Tencent Kubernetes Engine,即TKE)為用戶解決容器集群的搭建以及運維管理工作腮出,無縫銜接了騰訊云的計算帖鸦、網(wǎng)絡、存儲胚嘲、監(jiān)控作儿、安全能力,幫助用戶升級開發(fā)模式馋劈、變更應用交付攻锰、重構數(shù)據(jù)管理方式。騰訊云容器服務提速應用部署妓雾、簡化集群管理娶吞,助力企業(yè)快速上云。
了解騰訊云容器服務械姻,會涉及到以下概念:
集群:是指容器運行所需云資源的集合议蟆,包含了若干臺云服務器官紫、負載均衡器等騰訊云資源盟猖。
節(jié)點:一臺已注冊到集群內(nèi)的云服務器俩块。
服務:由多個相同配置的容器和訪問這些容器的規(guī)則組成的微服務。
鏡像:Docker鏡像欢揖,用于部署容器服務陶耍,每個鏡像有特定的唯一標識(鏡像的Registry地址+鏡像名稱+鏡像Tag)。
騰訊自今年起她混,對騰訊云投入了大量的資源烈钞,并且給予了前所未有的重視和支持。筆者前不久受邀參與了騰訊云TKE專場技術交流會产上,這里分享幾張照片給大家:
騰訊與容器服務
騰訊在很早的時候就已經(jīng)開始使用容器服務了棵磷,并且根據(jù)內(nèi)部消息透露蛾狗,騰訊的新業(yè)務基本上均使用容器服務進行托管晋涣,而舊有業(yè)務也在逐步遷移到容器服務之中。比如大家所熟悉的LOL(英雄聯(lián)盟)沉桌,就使用了大量的容器實例用于構建和托管相關服務谢鹊。
眾所周知,一個復雜游戲的構建是非常不容易的留凭。英雄聯(lián)盟的構建包含了超過150個獨立的任務佃扼,需要構建每個英雄聯(lián)盟的特征。而構建包括各種形式和尺寸蔼夜,從傳統(tǒng)的調(diào)試構建到各種形式的未來內(nèi)容構建兼耀,還包括全球合作者,如騰訊(Tencent)和競舞臺(Garena)。單單完成構建瘤运,就使用超過了450臺虛擬機窍霞!后續(xù)改為使用Docker之后,構建的成本的降低大大提高了團隊的迭代速度拯坟。當然但金,中間也出現(xiàn)過許多問題,這些我們后續(xù)再講述郁季。本篇先行略過冷溃。
一般服務部署流程
為了讓大家更好的理解和使用云端產(chǎn)品,這里我們結合騰訊云容器服務梦裂,根據(jù)日常情況下我們服務部署的情況似枕,來講解本流程。
在開始之前年柠,有很多額外的初始步驟——比如注冊菠净、充值等等,這里筆者先行略過彪杉,本篇只圍繞一般情況下服務部署到云端的配置和部署流程毅往。因此,這里再強調(diào)下前提條件:
1.騰訊云賬號正常并且資金足夠派近,或者無門檻代金券充足攀唯,能夠滿足此次使用
2.本地服務鏡像已經(jīng)打包完畢(具體可以參閱之前的講解)
3.您已經(jīng)充分閱讀了前面的教程,或者對容器服務已經(jīng)比較了解
滿足了以上的前提條件渴丸,對于一般情況下侯嘀,服務托管到騰訊云,我們的主體流程如下所示:
創(chuàng)建集群和節(jié)點
集群:是指容器運行所需云資源的集合谱轨,包含了若干臺云服務器戒幔、負載均衡器等騰訊云資源;
節(jié)點:一臺已注冊到集群內(nèi)的云服務器土童。
如果大家對此不是很好理解的話诗茎,這里筆者做一個比喻——集群就好比某款手游,節(jié)點就如同該手游的某個區(qū)献汗,我們要玩游戲的話敢订,是必須登錄到某個區(qū)才能玩,就如同我們的服務實例罢吃,最終也是分布在各個節(jié)點上楚午。
注意:集群創(chuàng)建完畢之后,可以添加已有的節(jié)點尿招,也就是已購買的服務器矾柜,不過阱驾,操作系統(tǒng)必須一致!如果不一致怪蔑,添加已有節(jié)點時可以自動重置該服務器的操作系統(tǒng)啊易。
創(chuàng)建界面如下所示:?
其中,如果CIDR顯示沖突饮睬,我們就改到不沖突為止租谈。
節(jié)點這塊,大家可以選擇購買新的主機或者選擇已有主機捆愁,這里就不多介紹了割去。
創(chuàng)建命名空間和鏡像
這里我們需要了解下鏡像倉庫。什么是鏡像倉庫昼丑?鏡像倉庫就是用于存放Docker鏡像的倉庫呻逆,而Docker鏡像用于部署容器服務,每個鏡像有特定的唯一標識(鏡像的Registry地址+鏡像名稱+鏡像Tag)菩帝。
除了Docker官方提供了Docker Hub官方鏡像倉庫之外咖城,各大云廠商往往也提供了自己的鏡像倉庫,比如騰訊云的鏡像倉庫是TencentHub呼奢。如果我們要獲得最佳的體驗宜雀,那么使用云端產(chǎn)品時,我們建議將Docker鏡像推送到該云產(chǎn)品的鏡像倉庫握础,這樣鏡像拉取的延遲更小辐董,支持粒度以及可用性更高。
注意:此步驟不是必須的禀综,使用云端產(chǎn)品简烘,我們依然可以使用官方鏡像和第三方公共鏡像。
在本篇教程定枷,我們講解使用TencentHub孤澎,也就是騰訊云的鏡像倉庫。在容器服務的管理頁欠窒,我們就可以看到入口:
?首先覆旭,我們需要創(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)建服務
鏡像有了,那么接下來就可以創(chuàng)建服務了刹缝,相當于是把我們的代碼丟到web服務器上跑起來碗暗。服務很易于理解,比如數(shù)據(jù)庫服務梢夯、web服務等等言疗。
騰訊云容器服務的創(chuàng)建過程如下所示:
?基本設置
服務名稱、容器名稱我們建議和鏡像名稱保持一致颂砸,由于有些命名約束噪奄,比如“.”需要改成“_” )。
部署設置
我們推薦使用存活檢查和就緒檢查人乓,啟動延時最好不要設為0勤篮,實例數(shù)量大家可以根據(jù)需要改為自動調(diào)節(jié),比如根據(jù)CPU的使用率來彈性擴展色罚。
訪問設置
提供公網(wǎng)訪問叙谨,端口可以設置成80。如果需要提供https保屯,那么還需要開放443端口手负,對于某些僅需內(nèi)網(wǎng)訪問的服務,建議大家不要開啟公網(wǎng)端口姑尺。
?
服務創(chuàng)建完成之后竟终,我們希望鏡像在推送之后,能夠自動觸發(fā)服務更新切蟋。因此统捶,我們還需要配置鏡像觸發(fā)器。
配置鏡像觸發(fā)器
鏡像觸發(fā)器可以在每次生成新的Tag(鏡像版本)時柄粹,自行執(zhí)行動作喘鸟,如:自動更新使用該鏡像倉庫的服務。
我們可以通過【我的鏡像】頁面驻右,點擊剛添加的鏡像名稱什黑,進入詳情頁,然后點擊【觸發(fā)器】tab頁來打開觸發(fā)器管理頁面堪夭。
點擊【添加觸發(fā)器】按鈕可以來創(chuàng)建觸發(fā)器愕把。相關配置如下所示:
我們需要選擇對應的容器服務拣凹。我們推薦使用全部觸發(fā)這個觸發(fā)條件,大家也可以根據(jù)自己的需求設置指定Tag觸發(fā)恨豁,比如針對生產(chǎn)嚣镜、測試和開發(fā)環(huán)境。
推送鏡像
觸發(fā)器設置好了橘蜜,也就是整個水管都鋪設好了菊匿,只要打開水龍頭就可以開閘放水了。對于我們這里计福,這個水指的就是鏡像捧请。我們只需將我們的鏡像推送到騰訊云鏡像倉庫,即可自動完成整個服務部署流程棒搜。
鏡像推送的方式有很多疹蛉,比如通過CI工具構建和推送,也可以通過腳本來推送已有的鏡像力麸。這里可款,我們將介紹通過腳本來推送鏡像。
核心腳本代碼為:
docker login --username {用戶名} --password {密碼} ccr.ccs.tencentyun.com
docker push {鏡像名稱}:{鏡像版本}
注意:ccr.ccs.tencentyun.com為騰訊倉庫的地址克蚂。username為騰訊云賬號Id闺鲸,密碼為倉庫密碼。
如果忘記密碼埃叭,可以在此處重置:
Magicodes.Admin框架提供了騰訊云推送腳本摸恍,相關參數(shù)如下所示:
一般情況下,我們僅需提供默認的配置即可赤屋,即配置tencentyun.config即可:
鏡像地址可以從騰訊云的【我的鏡像】獲攘⑾狻:?
如果沒有特殊的配置,我們僅需執(zhí)行此腳本即可完成編譯类早、運行單元測試媚媒、打包、生成鏡像以及鏡像推送的整個過程涩僻。編譯的文件會放在tsoutputs目錄缭召,如下所示:
例如,我們可以執(zhí)行以下命令來發(fā)布Host工程逆日,也就是后臺服務:
./build-with-tencentyun.ps1 -pushType HOST -debug true ?
如果需要傳遞相關應用的自定義設置嵌巷,腳本這邊也提供了對設置文件的支持,例如:
如果在編譯前需要執(zhí)行單元測試并通過之后才允許發(fā)布室抽,腳本也提供了參數(shù)進行支持:
例如:
./build-with-tencentyun.ps1 -pushType HOST -debug true -runTest true
當單元測試失敗時搪哪,腳本將終止執(zhí)行:
除了使用腳本推送之外,我們還可以通過CI工具或者服務來完成自動構建和推送狠半。在后續(xù)的章節(jié)噩死,我們會進行講述颤难。
問題排查
將服務托管到云端時神年,我們可能會碰到一些問題已维。掌握一些手段或技巧,能夠讓我們更易于排查問題以及解決問題已日。
鏡像拉取問題
目前騰訊云容器服務日志中不會打印鏡像拉取失敗的具體錯誤垛耳,如下圖所示:
我們需要在服務器上拉取鏡像來查看具體日志錯誤,比如執(zhí)行以下命令:
sudo su
docker login --username {用戶名} --password {密碼} ccr.ccs.tencentyun.com
docker pull {鏡像名稱}
遠程登錄
在某些情況下飘千,我們需要登錄具體的容器實例來排查問題堂鲜,這點,騰訊云是能夠支持的:
登錄之后护奈,我們可以直接執(zhí)行命令缔莲,比如執(zhí)行dir命令列出所有的文件和目錄:
我們也可以上傳下載容器實例中的文件,如圖所示:
?
通過文件助手霉旗,我們能夠很方便的檢查和修改實例中的配置文件痴奏,或者查看具體日志。這對于我們調(diào)測或者檢查問題非常重要厌秒。
注意:使用文件助手上傳下載文件時读拆,注意加上當前工作目錄路徑,比如“/app/appsettings.json”鸵闪。
利用容器服務日志
在開發(fā)過程中檐晕,容器服務實例可能經(jīng)常會崩潰或者在運行中出現(xiàn)問題,一方面蚌讼,我們可以記錄相關日志或者將日志推送到日志服務辟灰,另一方面,我們強烈推薦大家利用好容器服務日志篡石。
在前面的【控制臺日志提供程序】章節(jié)伞矩,我們有詳細講解,配置了控制臺日志提供程序之后夏志,我們可以在容器服務實例中看到所有的日志乃坤,包括導致容器實例崩潰的日志,這點對于我們排錯也非常重要——因為往往崩潰太快沟蔑,有可能文件日志都來不及記錄或者推送湿诊。