fabric8io/kubernetes-client 简单使用
阅读原文时间:2021年04月26日阅读:1

注意:客户端版本支持的k8s环境版本,见如下连接

https://github.com/fabric8io/kubernetes-client

客户端使用的是fabric8io开发的kubernetes-client项目。

<!--kubernetes-client 中包括了 对应版本的kubernetes-model依赖 -->
<dependency>
    <groupId>io.fabric8</groupId>
    <artifactId>kubernetes-client</artifactId>
    <version>4.0.0</version><!-- 对应k8s的1.9版本-->
</dependency>

1、创建客户端

Config config = new ConfigBuilder().withMasterUrl("http://x.x.x.x:1234").build();
KubernetesClient client = new DefaultKubernetesClient(config);//使用默认的就足够了

2、获取资源操作类

client.namespaces()    
client.services()
client.pods()        
client.customResources()
client.storage()
client.network()

3、资源的CRUD。

创建:
Service service = client.services().inNamespace(namespace).create(service);

更新:
Namespace namespace = client.namespaces().withName(name).get();
 //update resources
client.namespaces().createOrReplace(namespace);

查询:
ServiceList services = client.services().inNamespace("default").list();
Service service = client.services().inNamespace("default").withName("myservice").get()

删除:
client.services().inNamespace("default").withName("myservice").delete();

注:以上是连缀调用,先修改资源,再进行资源的操作,还有一种内建的方式,如下,但是不方便维护。

client.services().inNamespace("default").withName("myservice").edit()
                     .editMetadata()
                       .addToLabels("another", "label")
                     .endMetadata()
                     .done();

4、自定义资源

customresourcedefinition (aka 'crd')自定义资源定义,用来生成自定义资源的一个模板。

#1、自定义资源的model,必须继承于基本的model,才能被client管理起来。

#**
 * @param <FtpCluster> The Kubernetes resource type.
 * @param <FtpList> The list variant of the Kubernetes resource type.
 * @param <DoneableFtp> The doneable variant of the Kubernetes resource type.
 */
public class FtpCluster extends CustomResource
public class FtpList extends CustomResourceList<FtpCluster>
public class DoneableFtp extends CustomResourceDoneable<FtpCluster>


#2、获取自定义资源模板(如果想操作模板,替换get方法即可)
String crdName = "ftpclusters.ftp.bonc.com";
CustomResourceDefinition ftpCrd = client.customResourceDefinitions()
    .withName(crdName).get();

#3、获取自定义资源操作类,也可以叫CRD client(指的是通过模板生成的实例的操作权)
MixedOperation<FtpCluster, FtpList, DoneableFtp, Resource<FtpCluster, DoneableFtp>> ftpClient = client.customResources(ftpCrd, FtpCluster.class, FtpList.class, DoneableFtp.class);

#4、同操作k8s内置资源一样,使用对应的client(自定义操作类)进行自定义资源操作。
CustomResourceList<FtpCluster> customResourceList = ftpClient.list();
ftpClient.create(ftpCluster);  //创建自定义资源
ftpClient.createOrReplace(ftpCluster);    //更新自定义资源
...

#注:上述操作均是操作yaml(k8s资源),自定义资源落地成服务的话,需要自己写operator。