日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用 Tye 辅助开发 k8s 应用竟如此简单(三)

發布時間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 Tye 辅助开发 k8s 应用竟如此简单(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用 Tye 輔助開發 k8s 應用竟如此簡單(一)

使用 Tye 輔助開發 k8s 應用竟如此簡單(二)

續上篇,這篇我們來進一步探索 Tye 更多的使用方法。本篇我們來了解一下如何在 Tye 中如何對數據庫進行鏈接。

Newbe.Claptrap 是一個用于輕松應對并發問題的分布式開發框架。如果您是首次閱讀本系列文章。建議可以先從本文末尾的入門文章開始了解。

中間件鏈接

絕大多數服務都需要用到外部中間件來支持應用程序的正常運行,通常來說,就包含有數據庫、緩存中間件、消息隊列和文件系統等等。

因此,在開發過程中需要在應用程序中管理對這些中間件的鏈接字符串。

Tye 提供了一種方式以便更加容易的管理這些鏈接字符串。

使用 Tye 啟動 mongo

首先,我們使用 Tye 來啟動一個 mongo。

手動創建一個 tye.yml:

tye.yml
name: mongo-sample services:- name: mongoimage: mongoenv:- name: ME_CONFIG_MONGODB_ADMINUSERNAMEvalue: root- name: ME_CONFIG_MONGODB_ADMINPASSWORDvalue: example- name: mongo-expressimage: mongo-expressbindings:- port: 8081containerPort: 8081protocol: httpenv:- name: ME_CONFIG_MONGODB_ADMINUSERNAMEvalue: root- name: ME_CONFIG_MONGODB_ADMINPASSWORDvalue: example

使用 tye run 便可以在本地啟動一個 mongo 并且在 http://localhost:8081 通過 ui 查看 mongo 中的數據情況:

實際上就是使用 Tye 控制 docker desktop 啟動 mongo。因此需要提前在本地安裝好 docker desktop,以便啟動。

當然,這實際上和使用?docker-compose?沒有什么實質性的區別。

創建應用程序連接 mongo

下面,我們創建一個應用,并且將應用與 mongo 進行連接。

創建測試引用,并安裝必要的包:

create-tye-mongo-test.sh
dotnet new sln -n TyeTest dotnet new webapi -n TyeTest dotnet sln ./TyeTest.sln add ./TyeTest/TyeTest.csproj dotnet add ./TyeTest/TyeTest.csproj package Microsoft.Tye.Extensions.Configuration --version 0.6.0-alpha.21070.5 dotnet add ./TyeTest/TyeTest.csproj package MongoDB.Driver

進入 Startup,向容器中注冊 MongoClient :

Startup.cs
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) {services.AddControllers();services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo {Title = "TyeTest", Version = "v1"}); });services.AddScoped(p =>{var config = p.GetRequiredService<IConfiguration>();var connectionString = config.GetConnectionString("mongo");Console.WriteLine(connectionString);var client = new MongoClient(connectionString);return client;}); }

值得注意的是,這里使用了一個擴展方法從?IConfiguration?中讀取 mongo 的連接字符串:

  • mongo?實際上就是定義在 tye 中的服務名稱。

  • GetConnectionString?是來自于?Microsoft.Tye.Extensions.Configuration?的擴展方法

  • MongoClient?應該全局單例還是?Scope?其實筆者也沒查過資料。實際項目開發者注意按照需求調整。

  • 打開?WeatherForecastController,讓我們在每次接受請求時,都寫入一些數據到?mongo?中以驗證效果。

    WeatherForecastController.cs
    using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using MongoDB.Driver;namespace TyeTest.Controllers {[ApiController][Route("[controller]")]public class WeatherForecastController : ControllerBase{private static readonly string[] Summaries = new[]{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"};private readonly ILogger<WeatherForecastController> _logger;private readonly MongoClient _mongoClient;public WeatherForecastController(ILogger<WeatherForecastController> logger,MongoClient mongoClient){_logger = logger;_mongoClient = mongoClient;}[HttpGet]public IEnumerable<WeatherForecast> Get(){var rng = new Random();var result = Enumerable.Range(1, 5).Select(index => new WeatherForecast{Date = DateTime.Now.AddDays(index),TemperatureC = rng.Next(-20, 55),Summary = Summaries[rng.Next(Summaries.Length)]}).ToArray();var mongoCollection = _mongoClient.GetDatabase(nameof(WeatherForecast)).GetCollection<WeatherForecast>(nameof(WeatherForecast));mongoCollection.InsertMany(result);return result;}} }

    至此,測試引用就創建完畢了。預期的效果是,當接受到請求時,就會想?mongo?中的?WeatherForecast?collection?寫入一些數據??梢酝ㄟ^ mongo express UI 進行查看。

    修改 tye.yml 以配置鏈接串

    由于前面,我們是手動創建過了 tye.yml。因此,我們現在直接在原來的基礎上進行修改,以便加入測試應用。

    首先,將之前創建好的 tye.yml 放置到?TyeTest.sln?的根目錄。

    然后修改為如下形式:

    tye.yml
    name: mongo-sample services:- name: mongoimage: mongoenv:- name: ME_CONFIG_MONGODB_ADMINUSERNAMEvalue: root- name: ME_CONFIG_MONGODB_ADMINPASSWORDvalue: examplebindings:- containerPort: 27017connectionString: 'mongodb://${host}:${port}'- name: mongo-expressimage: mongo-expressbindings:- port: 8081containerPort: 8081protocol: httpenv:- name: ME_CONFIG_MONGODB_ADMINUSERNAMEvalue: root- name: ME_CONFIG_MONGODB_ADMINPASSWORDvalue: example- name: tyetestproject: TyeTest/TyeTest.csproj

    對比之前,一共有兩處修改:

  • 增加了?tyetest?服務配置的節點,以便能夠啟動測試應用

  • 在?mongo?服務上增加了?bindings。這是?tye?中組織服務之間相互連接的一種方式。其中的?connectionString?便是其他服務連接?mongo?所使用的鏈接串。

  • 修改完畢之后。使用?tye run?啟動應用。

    打開?swagger?頁面,并訪問 API,便可以在 mongo express 中查看到數據已經成功完成了寫入:

    查看效果之后可以使用?Ctrl+C?停止?tye?以移除相關容器。

    最后,發到 K8S 里面試一下

    這次的樣例,并不是直接使用?tye deploy?就可以完成了。

    首先,通常來說,中間件在生成環境中不太可能是通過部署在容器中的方式而存在的。即便是使用容器部署,也不會每次 deploy 都希望重新部署。也就是說,通常是直接連接已有的中間件就可以了。

    其次,中間件連接字符串通常來說是以?secret?的形式存在在?k8s?中。故而不太可能在 tye 腳本中進行指定。

    故而,tye?僅僅會幫助開發者檢查需要部署的目標集群中是否已經存在符合要求的?secret。當且僅當,目標集群中存在符合要求的?secret?才能部署。

    以本示例為例,需要在目標集群中存在?binding-production-mongo-secret?對應的?secret?才能都實現使用?tye?進行部署。

    具體的名稱約定規則,可以參照如下內容:

    https://github.com/dotnet/tye/blob/master/docs/reference/deployment.md#validate-secrets

    小結

    本篇,我們已經順利完成了使用 Tye 來完成應用與中間件之間的鏈接配置。

    不過還遺留一些問題沒有細說:

    • 如果一個中間存在多個綁定該如何處理

    • https 綁定該如何處理

    詳細這些內容,請移步官方文檔進行查看:

    https://github.com/dotnet/tye/blob/master/docs/reference/service_discovery.md

    下一篇,我們將進一步在 Tye 中實現對紛繁復雜的日志進行統一管理。

    總結

    以上是生活随笔為你收集整理的使用 Tye 辅助开发 k8s 应用竟如此简单(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。