作为一个框架的 Kubernetes
本篇是 Kubernetes 2016 年度「Kubernetesトビラ」の第12日目の記事です。
今回は、Kubernetesを分散システムのフレームワークとして使用する方法について紹介したいと思います。
第三方资源
在介绍如何使用ThirdPartyResource(TPR)之前,先简要介绍一下TPR是如何实现的。
TPR是Kubernetes中的一个对象(如Pod、Service、Node等)。
TPR提供了一种通过扩展Kubernetes API来添加新的对象类型的方法。
通过添加TPR对象,可以添加用户自定义的新的对象类型API。这个用户自定义的新对象类型的API支持CRUD操作和观察(watch)。
换句话说,通过使用TPR,可以轻松创建用户自定义资源的WebAPI和数据存储。
第三方资源的使用方法
由于 ThirdPartyResource 是一个对象,所以需要像 Pod 等资源一样准备定义文件。
apiVersion: extensions/v1beta1
kind: ThirdPartyResource
metadata:
name: hello-world.example.com
description: "hello world object"
versions:
- name: v1
一旦文件创建成功,我们将制作TPR。
$ kubectl create -f tpr.yml
thirdpartyresource "hello-world.example.com" created
当调用API时,您会发现已创建了终端节点。
$ kubectl proxy &
$ curl http://localhost:8001/apis/example.com
{
"kind": "APIGroup",
"apiVersion": "v1",
"name": "example.com",
"versions": [
{
"groupVersion": "example.com/v1",
"version": "v1"
}
],
"preferredVersion": {
"groupVersion": "example.com/v1",
"version": "v1"
},
"serverAddressByClientCIDRs": null
}
$ curl http://localhost:8001/apis/example.com/v1
{
"kind": "APIResourceList",
"apiVersion": "v1",
"groupVersion": "example.com/v1",
"resources": [
{
"name": "helloworlds",
"namespaced": true,
"kind": "HelloWorld"
}
]
}
客户端-前往 –
接下来,我们将使用这个创建好的 TPR 的 API 来创建应用程序。
如果您希望使用 golang 来创建应用程序,那么我认为您可以使用client-go,它是 Kubernetes 的客户端,只需使用 client-go 就可以了。
client-go 提供了各种库来访问 Kubernetes,通过使用这些库,我们可以轻松地访问它。
在 https://github.com/kubernetes/client-go/tree/master/examples 这个链接中,提供了一些示例。其中有关操作 TPR 的示例如下所示。
err = tprclient.Get().
Resource("examples").
Namespace(api.NamespaceDefault).
Name("example1").
Do().Into(&example)
err = tprclient.Post().
Resource("examples").
Namespace(api.NamespaceDefault).
Body(example).
Do().Into(&result)
在TPR的情况下,与标准资源不同,没有提供专用的客户端,因此需要一些额外的工作。但是,通过使用TPR,可以轻松地准备数据存储和WebAPI,并使用相应的库构建分布式系统。此外,开发人员可以将创建的应用程序直接部署到Kubernetes上,从而能够将注意力集中在应用程序逻辑的开发上。
在创建复杂应用程序时,您也可以使用Kubernetes的ControllerManager中使用的InformerFramework。使用InformerFramework可以相对容易地创建类似Kubernetes的资源监视系统,以便在资源更改时执行操作。但是,要在InformerFramework中使用TPR,您需要准备Kubernetes自动生成的API Client代码,这仍然需要一些额外工作。关于这种方法,我们将在有机会的时候再进行介绍。
最后
使用Kubernetes TPR来将Kubernetes作为框架使用的方法已经介绍了。这种方法在最近在CoreOS的Operator等各处开始被使用并受到关注。
虽然TPR仍然存在许多问题,例如无法使用kubectl edit或kubectl apply,没有客户端生成器等,但是如果能够有效地利用TPR,Kubernetes的领域也将扩展,因此我希望继续关注其发展动态。
仅提供一种选项,以下为原文的中文释义:
以下是用中文进行的本地化释义,仅提供一种选项:
– Kubernetes官方用户指南第三方资源的文档网址:http://kubernetes.io/docs/user-guide/thirdpartyresources/
– Kubernetes官方客户端Go库的GitHub链接:https://github.com/kubernetes/client-go
– CoreOS提供的etcd操作器的GitHub链接:https://github.com/coreos/etcd-operator