使用 Tye 輔助開發 k8s 應用竟如此簡單(一)
最近正巧在進行 Newbe.Claptrap 新版本的開發,其中使用到了 Tye 來輔助 k8s 應用的開發。該系列我們就來簡單瞭解一下其用法。
Newbe.Claptrap 是一個用於輕鬆應對併發問題的分散式開發框架。如果您是首次閱讀本系列文章。建議可以先從本文末尾的入門文章開始瞭解。
安裝 Tye
首先,確保已經正確安裝了 netcore 2.1 或以上版本的 dotnet SDK。
Tye 目前還處於開發階段,因此,目前只能安裝預覽版本進行使用。通過以下連結可以搜尋到當前最新的版本,並複製介面上的 CLI 安裝。
https://www.nuget.org/packages/Microsoft.Tye/
dotnet tool install --global Microsoft.Tye --version 0.6.0-alpha.21070.5 |
安裝完畢後,在控制檯中執行 tye,便可以檢視到如下結果:
PS C:\tools\Cmder> tye |
建立並執行一個測試專案
接下來我們建立一個 netcore 應用來測試該部署方案。選擇一個合適的位置執行以下命令來建立測試專案:
dotnet new sln -n TyeTest |
這樣,我們就得到了一個測試的解決方案和 WebApi 專案。我們可以執行以下命令在本地啟動這個服務:
dotnet run --project .\TyeTest\TyeTest.csproj |
啟動後,可以在瀏覽器中開啟 https://localhost:5001/swagger/index.html 來檢視啟動好的 swagger 介面。
使用 tye 在本地執行應用
接下來,我們關閉前面正在執行的應用,改為使用 tye 在本地啟動測試應用。
在解決方案目錄下,使用控制檯執行以下命令:
tye run |
執行之後,可能會得到如下的結果:
PS C:\Repos\TyeTest> tye run |
按照以上的提示,在 http://127.0.0.1:8000 成功啟動的 tye dashboard。使用瀏覽器開啟 dashboard 便可以檢視到已經部署起來的應用列表。如下圖所示:
通過 dashboard ,可以看到測試程式已經啟動,並且綁定了 http://localhost:14099 和 https://localhost:14100。實際在自行測試中,這兩個埠是隨機選擇的,因此會有不同。
我們通過上面公開的 https 繫結開啟 swagger 就能看到和前面使用 dotnet run
一樣的效果:https://localhost:14100/swagger
本地部署一個 k8s
接下來,我們將使用 Tye 將應用部署到 k8s 當中。那麼為了實現這個效果,首先需要準備一個 k8s 。
在開發機器上部署 k8s 的方式多種多樣,本次實驗採用的是 Docker Desktop + k8s 的方案,原因不是別的,就是因為使用其他方案在過程中遇到了或多或少的問題。具體的開發者可以自行選擇。
Docker Desktop + k8s 的方案在以下連結中講述的非常清楚,建議開發者可以參考:
《Docker Desktop 啟動 Kubernetes》https://www.cnblogs.com/weschen/p/12658839.html
本次實驗除了 k8s 本體之外,還需要安裝 nginx ingress 和 helm ,也可以參考以上文章中的內容進行安裝。
將應用部署到 k8s 中
但 k8s 配置完畢之後,我們就可以使用 tye 將應用快速釋出到 k8s 中進行檢視。
登入 docker registry
首先,需要為本地的 docker 配置 docker registry。因為在使用 tye 釋出的過程中將會將專案打包的 docker image 並且推送到一個 docker registry 中。
開發者可以選擇多種方式獲得一個自己的 docker registry:
- Nexus OSS Repository
- 阿里雲、騰訊雲、DaoCloud 等等都有免費額度的 docker registry
- docker hub,如果網路都好的話
使用 docker login
登入你的 docker registry。
tye init 建立 tye.yml
在解決方案目錄中,執行以下命令來建立 tye.yml 配置檔案:
tye init |
執行之後,將會在解決方案資料夾得到如下檔案:
name: tyetest |
這就是一個最簡單的 tye.yml 檔案。
修改 tye.yml
我們在 tye.yml 中加入一行關於 docker registry 的配置,以指定構建出來的映象將推送到何處:
name: tyetest |
例如,此處筆者使用的是阿里雲杭州節點的 docker registry,名稱空間為 newbe36524。因此增加了一行 registry: registry.cn-hangzhou.aliyuncs.com/newbe36524
。
這就相當於,如果進行構建,將會構建一個 tag 為 registry.cn-hangzhou.aliyuncs.com/newbe36524/tyetest:1.0.0
的映象並推送到阿里雲中。
提前下載 netcore 基礎映象
因為此次我們釋出的是 netcore 程式,他們將會被構建的 netcore 映象,因此,為了更加順利的進行構建,建議先使用加速工具在本地提前下載好基礎映象。
例如,筆者在此次的使用中使用的 net5 TFM 的應用程式,因此,就需要在本地先拉好 mcr.microsoft.com/dotnet/aspnet:5.0
作為基礎映象。
由於現在 netcore 基礎映象的源已經從 docker hub 遷移到 mcr.microsoft.com。故而,建議使用 Newbe.McrMirror
進行加速下載。
詳細的使用方法可以參考:https://github.com/newbe36524/Newbe.McrMirror
如果開發者不知道自己當前需要拉取的基礎映象是什麼,也可以先嚐試下面一個步驟直接釋出,檢視過程中使用的基礎映象內容,再來拉取。
使用 tye deploy
一切已經準備就緒,現在,繼續在解決方案目錄執行以下命令,便可以進行釋出:
tye deploy |
可能會得到如下結果:
PS C:\Repos\TyeTest> tye deploy |
從輸出的日誌,我們可以看出,應用已經發布成功。並且使用 k8s dashboard 或者 k9s,我們都可以檢視到應用已經成功部署,並且啟動完成。
tyetest-674865dcc4-mxkd5 ●● 1/1 Δ 0 Running Δ 10.1.0.73 docker-desktop 3m46s |
值得注意的是,確保這一步正常執行有幾個前提:
- 需要確保本地的 kubectl 已經正確配置。一般來說,如果是使用 docker desktop,那麼已經配置好了
- 需要確保 docker login 已經成功。開發者可以在執行部署前,測試以下是否可以手動推送映象
- MCR 映象的下載速度不是很理想的話,記得用 Newbe.McrMirror 進行加速
建立並使用 ingress
到這一步,我們已經完成了應用的釋出。但是,由於沒有配置 nginx ingress,服務雖然已經可以在 k8s 內部運行了,但是沒有在外部進行訪問。也就是說,在電腦上使用瀏覽器現在依然處於打不開的狀態。故而,我們還需要為服務配置 ingress。還沒有為 k8s 安裝 ingress 的朋友,建議檢視前面安裝 k8s 的相關章節。
這裡,我們開啟 tye.yml 新增 ingress 相關配置:
name: tyetest |
我們增加了一個 ingress 配置,使得當流量從 ingress 進入,並且域名為 www.yueluo.pro
的時候,將會轉發到 tyetest 服務。這樣就實現了從外部訪問 k8s 內部服務的目的。
首先,使用 tye run
命令可以在本地檢視一下這個效果。執行命令之後可能在 dashboard 中檢視到以下情況:
其中,https://localhost:8310 就是 ingress 的入口地址。由於我們採用的是域名繫結,因此可以採用兩種方式進行訪問以驗證效果:
- 在 hosts 中加入 www.yueluo.pro -> 127.0.0.1 的對映關係
- 使用 http 請求檔案直接訪問。
這裡我們採用 http 請求檔案直接訪問:
GET https://localhost:8310/WeatherForecast |
這樣,我們就成功驗證了繫結的結果。
注意,其中的埠由於筆者沒有配置為固定埠,因此每次執行開發者都要注意發生的變化。
將 ingress 部署到 k8s 中
接下來,停止 tye run
, 執行 tye deploy
將 ingress 和應用程式釋出到 k8s 中。
注意,ingress 的部署可能會花費數十秒的時間,因此需要進行一下等待。
部署完成之後,便可以通過 k8s dashboard 或者 k9s 檢視部署的結果。
並且,可以使用以下 http 請求來驗證部署的結果:
GET https://localhost/WeatherForecast |
其得到的結果與先前自然是一樣的。
從 k8s 中解除安裝應用
解除安裝應用,非常簡單,tye undeploy
。
PS C:\Repos\TyeTest> tye undeploy |
小結
本篇,我們簡單介紹瞭如何使用 tye 執行或者部署應用的簡單步驟。實際過程中還有很多可以擴充套件和自定義的選項。感興趣的朋友可以檢視 https://github.com/dotnet/tye 中的內容進行學習。
下一篇,我們將來部署一些稍微複雜一點的多例項應用。
最後但是最重要!
如果讀者對該內容感興趣,歡迎轉發、評論、收藏文章以及專案。
最近作者正在構建以反應式
、Actor模式
和事件溯源
為理論基礎的一套服務端開發框架。希望為開發者提供能夠便於開發出 “分散式”、“可水平擴充套件”、“可測試性高” 的應用系統 ——Newbe.Claptrap
本篇文章是該框架的一篇技術選文,屬於技術構成的一部分。
聯絡方式:
- Github Issue
- Gitee Issue
- QQ 群 610394020
您還可以查閱本系列的其他選文:
理論入門篇
- Newbe.Claptrap - 一套以 “事件溯源” 和 “Actor 模式” 作為基本理論的服務端開發框架
術語介紹篇
- Actor 模式
- 事件溯源(Event Sourcing)
- Claptrap
- Minion
- 事件 (Event)
- 狀態 (State)
- 狀態快照 (State Snapshot)
- Claptrap 設計圖 (Claptrap Design)
- Claptrap 工廠 (Claptrap Factory)
- Claptrap Identity
- Claptrap Box
- Claptrap 生命週期(Claptrap Lifetime Scope)
- 序列化(Serialization)
實現入門篇
- Newbe.Claptrap 框架入門,第一步 —— 建立專案,實現簡易購物車
- Newbe.Claptrap 框架入門,第二步 —— 簡單業務,清空購物車
- Newbe.Claptrap 框架入門,第三步 —— 定義 Claptrap,管理商品庫存
- Newbe.Claptrap 框架入門,第四步 —— 利用 Minion,商品下單
樣例實踐篇
- 構建一個簡易的火車票售票系統,Newbe.Claptrap 框架用例,第一步 —— 業務分析
- 線上體驗火車票售票系統
其他番外篇
- 談反應式程式設計在服務端中的應用,資料庫操作優化,從 20 秒到 0.5 秒
- 談反應式程式設計在服務端中的應用,資料庫操作優化,提速 Upsert
- 十萬同時線上使用者,需要多少記憶體?——Newbe.Claptrap 框架水平擴充套件實驗
- docker-mcr 助您全速下載 dotnet 映象
- 十多位全球技術專家,為你獻上近十個小時的.Net 微服務介紹
- 年輕的樵夫喲,你掉的是這個免費 8 核 4G 公網伺服器,還是這個隨時可用的 Docker 實驗平臺?
- 如何使用 dotTrace 來診斷 netcore 應用的效能問題
- 只要十步,你就可以應用表示式樹來優化動態呼叫
- 使用 Tye 輔助開發 k8s 應用竟如此簡單(一)
GitHub 專案地址:https://github.com/newbe36524/Newbe.Claptrap
Gitee 專案地址:https://gitee.com/yks/Newbe.Claptrap
您當前檢視的是先行釋出於 www.newbe.pro 上的部落格文章,實際開發文件隨版本而迭代。若要檢視最新的開發文件,需要移步 claptrap.newbe.pro。