Kubernetes fabric8 JavaAPI

一、依赖准备

<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<version>4.9.0</version>
</dependency>
下列展示代码中可能包含演示需要的依赖包,需要手动导入。全文手动原创,非其他博客及官方转载。

二、代码例子及分析

1.客户端的创建

​ Kubernetes 的资源默认是对内部是可见并可以访问的,我们可以通过以下方式去访问Kubernetes 获取我们想要的资源。

  1. 对于Kubernetes 可以通过 JavaAPI 通过安全证书文件、Token或admin.conf配置外部访问
  2. 同样也可以配置这些配置文件通过HTTP访问apiService访问
  3. 内部也可以通过kube-proxy将内部数据暴露出来进行访问的方式。
JavaAPI访问

​ 1.1 通过安全证书访问

需要安全证书文件:apiserver-kubelet-client.crt、apiserver-kubelet-client.key、ca.crt

//创建 Config 用于创建 Client
Config config = new ConfigBuilder()
.withMasterUrl("ip")
.withCaCertData("ca.crt内容")
.withClientCertData("apiserver-kubelet-client.crt内容")
.withClientKeyData("apiserver-kubelet-client.key内容")
.build();
// 创建Client
KubernetesClient kubernetesClient = new DefaultKubernetesClient(config);

​ 1.2 通过配置文件访问

需要配置文件:admin.conf

config = Config.fromKubeconfig("admin.conf内容");
KubernetesClient kubernetesClient = new DefaultKubernetesClient(config);

​ 1.3 kube-proxy 配置后通过 HTTP 直接访问

首先在服务器中开启kube-proxy代理暴露8080端口:nohup kubectl proxy --port=8080 &

config = new ConfigBuilder().withMasterUrl("http://127.0.0.1:8080").build();
KubernetesClient kubernetesClient = new DefaultKubernetesClient(config);
//通过http访问k8s中的路径资源
HttpClient httpClient = HttpClientBuilder.create().build(); HttpGet httpGet = new HttpGet("http://127.0.0.1:8080/apis/devices.kubeedge.io/v1alpha1/devices");
HttpResponse response = null;
response = httpClient.execute(httpGet);
HttpEntity responseEntity = response.getEntity();
StatusLine statusLine = response.getStatusLine();
int code = statusLine.getStatusCode();
String result = EntityUtils.toString(responseEntity);

​ 1.4 http浏览器直接访问K8S资源的,这里暂不讲解。

2.访问操作pod、nodeSpace等基础资源
//查看Pod
MixedOperation<Pod, PodList, DoneablePod, PodResource<Pod, DoneablePod>> operation = client.pods();
//创建Pod,获取资源处理类,在传入组装号的Pod类
NonNamespaceOperation pods =client.pods().inNamespace("default");
//配置Pod,还可以通过 pod 类组装,想要运行 这里的参数是不够的,仅作演示
Pod pod1 =new PodBuilder().withNewMetadata().withName("pod1").withNamespace("default").and().build();
pods.create(pod1);
//删除同上
pods.delete(pod1);
3.访问操作复杂管理器Deployment控制器
import io.fabric8.kubernetes.api.model.*;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.api.model.apps.DeploymentSpec; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* @author wanchen.chen
* @ClassName K8sDeploymentConf
* @Despriction: 用于组合 Deployment
* @date 2020/5/17 23:40
* @Version 1.0
**/
public class K8sDeploymentConf { /**
*
* @param appName
* @param image
* @param nodeName
* @return
*/
public static Deployment getDepandDeployment(String appName,String image,String nodeName){
//参数传递
String appGroup = "appGroup";
//参数
Map<String,String> labels = new HashMap<String,String>();
labels.put("app",appGroup);
Map<String,String> nodeSelector = new HashMap<String,String>();
nodeSelector.put("name",nodeName);
//mataData 数据组装
ObjectMeta mataData = new ObjectMeta();
mataData.setName(appName);
mataData.setLabels(labels);
//镜像设置
Container container = new Container();
container.setName(appName);
container.setImage(image);
container.setImagePullPolicy("IfNotPresent");
SecurityContext sc = new SecurityContext();
sc.setPrivileged(true);
container.setSecurityContext(sc);
List<Container> containers = new ArrayList<>();
containers.add(container);
//Spec 数据组装
//1.selector
LabelSelector ls =new LabelSelector();
ls.setMatchLabels(labels);
//2.template
ObjectMeta empMataData = new ObjectMeta();
empMataData.setLabels(labels);
PodSpec pods = new PodSpec();
pods.setHostNetwork(true);
pods.setNodeSelector(nodeSelector);
pods.setContainers(containers);
//2.2 组装
PodTemplateSpec pt = new PodTemplateSpec();
pt.setMetadata(empMataData);
pt.setSpec(pods);
//3.spec 组合
DeploymentSpec ds = new DeploymentSpec();
ds.setReplicas(1);
ds.setSelector(ls);
ds.setTemplate(pt);
//Deployment 设置
Deployment deployment =new Deployment();
deployment.setApiVersion("apps/v1");
deployment.setKind("Deployment");
deployment.setMetadata(mataData);
deployment.setSpec(ds);
return deployment;
} }

Deployment操作:

//将基础Client转换为AppsAPIGroupClient,用于操作deployment
AppsAPIGroupClient oclient =client.adapt(AppsAPIGroupClient.class);
MixedOperation<Deployment, DeploymentList, DoneableDeployment, RollableScalableResource<Deployment, DoneableDeployment>> operation1
=oclient.deployments();
//将资源转换为JSON 查看
DeploymentList deploymentList =operation1.list();
List<Deployment> deployments = deploymentList.getItems();
JSONArray jsonArray=JSON.parseArray(JSON.toJSONString(deployments));
//创建Deployment,返回创建好的Deployment文件
oclient.deployments().create(K8sDeploymentConf.getDepandDeployment("appName","image","nodeName"));
//删除同上,返回结果为boolean类型数据
oclient.deployments().delete(K8sDeploymentConf.getDepandDeployment("appName","image","nodeName"));

三、博客参考及持续更新

感谢以下博客作业的辛苦创作,参考博客:

https://www.jianshu.com/p/6bce2c2d1853

https://blog.csdn.net/Ay_Ly/article/details/90404445

Kubernetes fabric8 JavaAPI的更多相关文章

  1. 在Kubernetes集群里安装微服务DevOps平台fabric8

    转载于https://blog.csdn.net/wzp1986/article/details/72128063?utm_source=itdadao&utm_medium=referral ...

  2. io.fabric8.kubernetes对pv和pvc的增删查改

    1.新建maven项目k8stest,pom.xml如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns: ...

  3. Openstack+Kubernetes+Docker微服务实践之路--RPC

    重点来了,本文全面阐述一下我们的RPC是怎么实现并如何使用的,跟Kubernetes和Openstack怎么结合.  在选型一文中说到我们选定的RPC框架是Apache Thrift,它的用法是在Ma ...

  4. 【SFA官方翻译】使用 Kubernetes、Spring Boot 2.0 和 Docker 的微服务快速指南

    [SFA官方翻译]使用 Kubernetes.Spring Boot 2.0 和 Docker 的微服务快速指南 原创: Darren Luo SpringForAll社区 今天 原文链接:https ...

  5. 转载:必须收藏!50个最流行的免费Kubernetes工具集

    必须收藏!50个最流行的免费Kubernetes工具集 http://cloud.51cto.com/art/201806/576406.htm 在短短的两年时间里,Kubernetes在容器编排的竞 ...

  6. Netflix OSS、Spring Cloud还是Kubernetes? 都要吧!

    Netflix OSS是由Netflix公司主持开发的一套代码框架和库,目的是解决上了规模之后的分布式系统可能出现的一些有趣问题.对于当今时代的Java开发者们来说,Netflix OSS简直就是在云 ...

  7. Kubernetes+Flannel 环境中部署HBase集群

    2015-12-14注:加入新节点不更改运行节点参数需求已满足,将在后续文章中陆续总结. 注:目前方案不满足加入新节点(master节点或regionserver节点)而不更改已运行节点的参数的需求, ...

  8. Kubernetes client-go

    Github地址:https://github.com/kubernetes/client-go 访问kubernetes集群有几下几种方式: 方式 特点 支持者 Kubernetes dashboa ...

  9. 最好的Kubernetes客户端Java库fabric8io,快来自定义你的操作

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 Kubernetes Java客户端 对于Kubernetes集群的操作,官方提供了命令行工具kubectl,这也是我 ...

随机推荐

  1. MySQL 入门(1):查询和更新的内部实现

    摘要 在MySQL中,简单的CURD是很容易上手的. 但是,理解CURD的背后发生了什么,却是一件特别困难的事情. 在这一篇的内容中,我将简单介绍一下MySQL的架构是什么样的,分别有什么样的功能.然 ...

  2. js 函数对象的继承 inherit 带 插件完整解析版[helpers.js]

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS的对象继承方法 需求分析: 1. ...

  3. UVALive 7501 Business Cycle

    细心题 #include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;++i) # ...

  4. Clustered和Nonclustered Indexes 各自得特点和区别及长短处

    1 簇索引 簇索引对表的物理数据页中的数据按列进行排序然后再重新存储到磁盘上即簇索 引与数据是混为一体的它的叶节点中存储的是实际的数据由于簇索引对表中的数据一 一进行了排序因此用簇索引查找数据很快但由 ...

  5. Python编程求解第1天1分钱之后每天两倍持续一个月的等比数列问题

    一.问题 问题1 场景:如果你未来的丈母娘要求你,第1天给她1分钱,第2天给2分钱,第3天给4分钱,以此类推,每天给前一天的2倍,给1个月(按30天)算就行.问:第30天给多少钱,总共给多少钱? 问题 ...

  6. C++ 函数重载,函数模板和函数模板重载,选择哪一个?

    重载解析 在C++中,对于函数重载.函数模板和函数模板重载,C++需要有一个良好的策略,去选择调用哪一个函数定义(尤其是多个参数时),这个过程称为重载解析. (这个过程将会非常复杂,但愿不要遇到一定要 ...

  7. 使用jQuery完成课工场论坛列表

    1.点击我要发帖 2.显示出form表单,然后我们填入标题和选择板块 3.点击发布,隐藏表单,发帖列表中出现随机头像,刚才填入的标题和板块显示在列表中,其中还显示出了发布消息的时间 4.再一次的点击我 ...

  8. django 整理数据库文档时,从mysql导出的表中没有注释的解决方案

    公司要将Django项目重构成Java项目,也就有了整理数据库文档的经历....... 由于django从model迁移时没有将注释(也就是模型类中的verbose_name)写进mysql的表中,导 ...

  9. zookeeper(分布式协调框架)简介与集群搭建

    ZooKeeper 的由来: Zookeeper最早起源于雅虎研究院的一个研究小组.在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布 ...

  10. java基础篇 之 构造器内部的多态行为

    java基础篇 之 构造器内部的多态行为 ​ 我们来看下下面这段代码: public class Main { public static void main(String[] args) { new ...