Fabric8包含多款工具包,Kubernetes Client只是其中之一,本例代码涉及的Jar包如图9.7所示,能以Maven方式获取依赖包。因为该工具包已经对访问Kubernetes API客户端做了较好的封装,因此其访问代码比较简单,其具体的访问过程会在后续章节中举例说明。

图9.7 本例代码涉及的Jar包
首先,举例说明对API资源的基本访问,也就是对资源的增、删、改、查,以及替换资源的status。其中会单独对Node和Pod的特殊接口做举例说明。表9.2列出了常见资源对象的基本接口。
表9.2 常见资源对象的基本接口

▼续表

▼续表

表9.2中的Service Endpoints资源对象表示的是一个Service的所有Pod实例的访问地址列表。在通常情况下,一个Service只有几个Pod实例,所以它的Endpoints列表也不多,但是在某些大规模的系统中,一个Service对应几十、几百个Pod实例的情况下,它的Endpoints列表会变得很大,在这种情况下,当某个Pod实例出现变动时,Service的整个Endpoints列表都会跟着变动,导致Kubernetes Master承受很大的负荷,因此后面增加了新的资源对象——EndpointSlices,可以从根本上解决这个问题。在默认情况下,Kubernetes会自动分割Service的Endpoints列表并创建对应的EndpointSlices,确保每个EndpointSlices最多只包含100个Endpoints。
接下来举例说明如何通过API接口创建资源对象,基于Fabric8框架的代码如下:


由于Fabric8框架对Kubernetes API对象做了很好的封装,对其中的大量对象都做了定义,所以用户可以通过其提供的资源对象去定义Kubernetes API对象,例如上面例子中的命名空间对象。Fabric8框架中的kubernetes-model工具包用于API对象的封装。在上面的例子中,通过Fabric8框架提供的类创建了一个名为ns-fabric8的命名空间对象。
接下来会通过基于Jeysey框架的代码创建两个Pod资源对象。在两个例子中,一个是在上面创建的命名空间 ns-sample中创建Pod资源对象,另一个是为后续创建“cluster service”创建的Pod资源对象。由于基于Fabric8框架创建Pod资源对象的方法很简单,因此这里不再用Fabric8框架对上述两个例子做说明。通过基于Jersey框架创建这两个Pod资源对象的代码如下:

其中,podInNs.json和pod4ClusterService.json是对创建两个Pod资源对象的定义。podInNs.json的内容如下:


pod4ClusterService.json的内容如下:

下面的例子代码用于获取Pod资源列表,其中,第1部分代码用于获取所有Pod资源对象,第2、3部分代码主要用于说明如何使用标签选择Pod资源对象,最后一部分代码用于举例说明如何使用field选择Pod资源对象。代码如下:


接下来的例子代码用于替换一个Pod对象,在通过Kubernetes API替换一个Pod资源对象时需要注意如下两点。
(1)在替换该资源对象前,先从API中获取该资源对象的JSON对象,然后在该JSON对象的基础上修改需要替换的部分。
(2)在Kubernetes API提供的接口中,PUT方法(replace)只支持替换容器的image部分。
代码如下:


其中,pod4Replace.json的内容如下:


接下来的两个例子实现了在9.2.4节中提到的两种Merge方式:Merge Patch和Strategic Merge Patch。
Merge Patch的示例如下:

其中,pod4MergeJsonPatch.json的内容如下:

Strategic Merge Patch的示例如下:

其中,pod4StrategicMerge.json的内容如下:

接下来实现了修改Pod资源对象的状态,代码如下:

其中,pod4Status.json的内容如下:



接下来实现了查看Pod的log日志功能,代码如下:

下面通过API访问Node的多种接口,代码如下:


最后,举例说明如何通过API删除资源对象pod,代码如下:

下面基于Fabric8实现对资源对象的监听,代码如下:


目前Kubernetes官方支持的客户端库如表9.3所示。
表9.3 目前Kubernetes官方支持的客户端库

此外,Kubernetes社区也在开发和维护基于其他开发语言的客户端库,如表9.4所示。
表9.4 基于其他开发语言的客户端库

▼续表
