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