kube-apiserver 是 Kubernetes 唯一操作 etcd 的组件,并对外提供 REST API 与 Kubernetes 进行交互。
同时,官方和社区封装了 REST API ,提供了各个编程语言版本的客户端库,其中就包括了 Java 版本 kubenetes-client 。
执行命令 kubectl version
查看 Kubernetes 集群版本,并对照官方提供的 兼容性 表格,使用合适的版本。
例如:Kubernetes v1.11.x 集群可以使用 >= 3.0.0 客户端。
编辑 pom.xml 文件,添加依赖:
<dependency> <groupId>io.kubernetes</groupId> <artifactId>client-java</artifactId> <version>5.0.0</version> </dependency>
在 macOS 系统中,配置文件通常位于 ~/.kube/config。拷贝文件到 Java 工程 src/main/resources 目录下,并重命名为 config.yaml。
创建加载 Classpath 文件工具方法:
static Reader readFromClasspath(String path) { ClassLoader classLoader = Application.class.getClassLoader(); InputStream in = classLoader.getResourceAsStream(path); return new InputStreamReader(in); }
ApiClient client; try (Reader reader = readFromClasspath("config.yaml")) { client = ClientBuilder .kubeconfig(KubeConfig.loadKubeConfig(reader)) .build(); // ① } Configuration.setDefaultApiClient(client); // ②
① 创建客户端;
② 配置全局默认的客户端。
客户端创建完毕,就可以和 Kubernetes 进行交互了。
以创建 Job 为例,更多实例参考 Kubernetes API Reference Docs :
BatchV1Api api = new BatchV1Api(); // ① try (Reader reader = readFromClasspath("job.yaml")) { V1Job job = (V1Job) Yaml.load(reader); // ② api.createNamespacedJob("default", job, null, null, null); // ③ }
① 创建 API 对象;
② 通过 YAML 文件创建请求参数;
③ 调用 api-server 创建资源。