[.com快速翻译]使用Kubernetes并不总是那么容易。管理集群和pod需要付出努力,虽然云托管的Kubernetes实例(例如Azure的AKS)可以为您处理很多繁重的工作,但如果您在本地或在自己的虚拟基础架构上运行Kubernetes,则无法使用它们.这就是KubernetesAPI发挥作用的地方,因为它是Kubernetes在组件和外部控制器之间进行通信的方式。您可以使用kubectl命令行工具与API通信,或通过熟悉的REST(具象状态传输)调用来使用它。API可帮助您管理工作负载、配置集群以及管理应用程序和集群的行为。像这样充分利用REST的API是有用的工具,但如果您构建自己的控制器,它们需要大量开发。您可以避免与官方KubernetesAPI客户端(现在包括.NET库)之一相关的开发开销。除了官方客户端,还有非官方客户端:如果官方版本不太适合您的使用方式,非官方版本包含两个可供选择的.NET实现。.NETKubernetesAPI客户端库简介官方的.NET客户端库可在GitHub上获得,由一群开源开发人员管理,其中包括Microsoft的开发人员。最新版本为1.6.21,正在开发中。您可以从GitHub下载代码并自行编译,也可以通过NuGet将该库作为名为KubernetesClient的包添加到您的应用程序中。安装后,使用loadclient语句将库添加到您的代码中。该库同时支持.NET和.NETCore,因此您可以使用它来编写跨平台应用程序以及纯Windows代码。安装后,您可以开始使用该库为Kubernetes构建您自己的工具,例如响应分布式应用程序中事件的特定事件处理程序。您可以从侦听Kubernetes命名空间上的事件开始。您可以通过使用C#现有的异步编程功能、设置等待来监视事件以及将处理程序附加到结果来实现这一点。Kubernetes提供自定义资源,可用于监控您自己的事件和管理自定义Kubernetes基础设施。在Kubernetes方面,首先为您的代码将使用的控制器构建适当的自定义资源定义。这将需要API版本以及资源所需的大量适当的元数据。这些元素映射到C#KubernetesAPI中的对象,可以从对象中读取。最后可以在资源的spec字段和status字段添加自己的数据,自定义资源类进行管理。拥有这些元素后,您可以通过将它们包装在KubernetesAPI客户端实例中来构建控制器,并为我们要查看的资源定义自定义资源。获得事件处理程序的结果后,您可以在Kubernetes管理应用程序的其余部分使用它们,例如编写日志或修改Kubernetes实例。如果您的Kubernetes代码将消息写入自定义资源的状态字段,则此类处理程序可以根据需要生成新的pod。创建Kubernetes客户端创建客户端意味着为实例加载Kubernetes配置数据。您可以从默认的本地kubeconfig、特定文件或当前集群执行此操作。一旦将配置数据作为配置对象,就可以使用加载的配置创建客户端。这为您提供了可用于KubernetesAPI调用的客户端对象。该库的GitHub存储库中有一组工作示例代码。值得复制和运行这些示例,因为它们可以帮助您了解如何使用.NETKubernetes客户端、如何理解语法以及如何使用API来处理创建、读取、更新和删除等操作。一个有用的示例是一个25行的小程序,它列出了pod中的命名空间。如果您正在构建控制Kubernetes实例的应用程序,列出所有当前命名空间很重要,因为这些命名空间允许您将API定位到Kubernetes基础设施的特定部分。处理KubernetesAPI文档要充分利用.NETAPI库,最好花一些时间阅读KubernetesAPI的文档。虽然库中有足够的资源可以帮助您入门,但您需要深入研究官方文档以获取构建自己的控制器所需的详细信息。查看其他一些API库实现的文档会有所帮助。将Java或Go调用转换为C#并不难,您可以看到其他人如何使用这些API。另一种选择是使用kubectl文档来查看如何在代码中使用关键的kubectl动词。在处理更复杂的任务之前,最好使用API等工具来构建可自动执行常见操作的应用程序。在编写任何新代码之前,您应该检查现有的Kubernetes扩展是否已经实现了您正在考虑的功能,例如KEDA(基于Kubernetes的事件驱动的自动缩放)。使用您自己的代码自动化Kubernetes操作管理Kubernetes可能很复杂,因此很高兴看到一组官方库可以帮助您构建自己的工具以使用KubernetesAPI。由于活跃的社区和非官方的客户端交互,.NETAPI团队显然正在努力提供一个实用的框架,用于在.NETFramework和.NETCore上构建适用于Kubernetes的代码。如果我们要构建在云原生平台上运行的分布式应用程序所需的新一代操作工具,这些工具是必不可少的。通过使用一种熟悉的语言,尤其是可以访问其他平台库的语言,我们可以构建连接到AzurePipelines、GitHub和Kubernetes等平台的工具,将我们目前手动完成的大量工作自动化。原标题:如何使用KubernetesC#客户端库,作者:SimonBisson
