【翻译】我们建立了一个.NET操作员SDK(所以您不必这样做)。

文章介绍了.NETOperatorSDK,这是一个允许开发者使用C#或任何.NET语言构建Kubernetes操作者的工具,避免了学习Go的需求。SDK提供了一个简单的接口和控制器引擎,帮助管理Kubernetes对象的状态,确保实际状态与期望状态一致。文章通过一个MSSQL数据库操作员的例子展示了如何使用SDK创建和管理资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们用C#语言构建了一个.NET操作者SDK,因此您可以用C#或任何.NET语言构建自己的Kubernetes操作者。

当然也

Go Operator SDK,还有我们的Java Operator SDK,那么为什么不为.NET社区提供一些东西呢?

这篇文章假设您熟悉Kubernetes和Operator模式。如果不是这样,你可能想去看看 "Kubernetes操作者解释 "一文。

为什么需要这个?

假设你已经在微软堆栈上开发了很长时间。你直接进入了第一个版本的.NET框架,并喜欢 "新 "ASP.NET的理念。你使用WebForms建立了你的第一个网站。从那一刻起,你的应用程序就随着框架版本的变化而不断发展。几年前,你听说了.NET Core,并认为,"哦,太酷了!现在我可以运行.NET Core了!

然后Docker出现在你的生活中,当然,在将你的应用程序容器化之后,你发现自己需要一个协调器。

一旦你了解了Kubernetes并围绕它实施GitOps,你的应用程序的每一部分都成为Kubernetes对象就变得至关重要。所以你基本上会开始有YAML文件用于所有的事情。你有你的部署、服务、入口,可能还有一些网络策略,围绕你的应用程序的一切都开始变得简单,你可以开始担心 "其他东西"。我所说的 "其他东西 "是指那些不是Kubernetes原生对象的东西,比如你的数据库,创建数据库表,也许调度备份,甚至是你的应用程序的特定东西。

这就是你学习控制器或运营商的时候,但是...你必须学习Go吗?

不!为了与Kubernetes合作,你不需要学习Go!

DgWidmtgmcuDfOHW4jiOxMAdfwhHuygilJXFgFa4KAYNWPEU33p0XH4883BY4nWG0wwub755zO2cRDKj74YSoBeKbQO7oA2F3ck-xuN25pLbr-xsrpRl_gY4PXE6bQAS4iHvT77-

介绍.NET运营商SDK

你有一个由C#的岩石明星开发人员组成的团队。

是否雇佣了一些Go开发人员,是否让您的团队学习Go?

幸运的是,您现在可以用您熟悉和喜爱的语言和框架编写自己的控制器/操作程序。

.NET Operator SDK是一个围绕官方Kubernetes C#客户端的薄型封装,允许您轻松创建自己的操作程序。它实际上为您提供了需要实现的正确接口和一个控制器引擎,它负责调用Kubernetes API和迭代调和循环的所有繁重工作。

它负责调用正确的API,管理你的当前状态,并在你的一个对象被添加、删除或更新时调用你的所有函数。它也是自我修复的,这意味着如果你在更新资源时搞砸了什么,控制器本身会继续运行,你可以尝试修复任何损坏的东西。

以下是它的工作原理。

SDK内部情况

.NET操作员SDK提供了一个类,操作员类必须继承这个类,一个你将编写你的函数(添加、删除、更新)的接口和控制器类,你需要用你的类初始化并调用StartAsync方法。

往深处走

这个函数将调用Kubernetes API并请求获得你操作员观察的对象。每次有事件发生(添加、更新或删除),它都会调用你在操作员上实现的函数。

mRuI7i7psDE0Il3LeL4BHDFOhGWKxSrAKeWtDJWVKJ-fcMJc08gb7SI2XSpyXVoIG5e6K08TD3OcaMXh-TPNhBe2zgt6GdKFB-YJjHIJ8uEPsjMxWk9HwAEEfjY9FFxfxbwyqmbE

但它也会调用你的ReconciliationLoop。你必须在你的操作员中实现的函数之一是处理这样一个事实:也许你的资源已经停机了--在这种情况下,你需要弄清楚该怎么做。把它想象成部署的控制器。这个控制器不仅在你创建部署时旋转新的豆荚,而且在豆荚失败和被终止时重新创建。换句话说,控制器确保实际状态与期望状态相同。

下面是一个来自MSSQL数据库操作员的小例子,它是用.NET操作员SDK构建的一个样本操作员。

foreach (string keyin m_currentState Keys.ToList()) 
{ MSSQLDB db = m_currentState[key]; using (SqlConnection connection = GetDBConnection(k8s, db)) { connection Open(); SqlCommand queryCommand = new SqlCommand($"SELECT COUNT(*) FROM SYS.DATABASES WHERE NAME = '{db.Spec.DBName}';", connection); try { int i = (int)queryCommand.ExecuteScalar(); if(i == 0) { Log.Warn($"Database {db.Spec.DBName} ({db.Name()})
 没有找到!"); CreateDB(k8s, db); } } catch (Exception ex) { Log.Error(ex.Message); } }

这里你看到,我们基本上是通过创建的数据库的缓存进行迭代,并查询Sql Server实例以检查数据库是否确实存在(在sys.database系统表中注册)。然后,如果没有找到记录(对于每个数据库),它将尝试创建它(再次)。

结论

我希望我说的是重点,但万一你错过了:不,你不需要为了使用Kubernetes而学习Go!你现在可以使用你熟悉和喜爱的框架来构建你自己的Kubernetes操作器,并让它们在你的集群中迅速运行。

那么,这是你认为你可能需要的东西吗?也许你直到现在才想到,你可以使用C#。CustomResourceDefinitionsKubernetes原生的方式,让一切都进入相同的工作方式。配置秘密,部署一个新的数据库,(也许只是一个表),旋转一个新的日志解决方案,也许是一个可观察性集群:一切都应该由Kubernetes原生处理,而你自己的自定义资源也是如此。

对我们正在做的事情感兴趣?去repo看看

,也许你能帮助我们改进它。

图片来源: Eduardo Sánchez on Unsplash

hiring.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值