Kubernetes fabric8 JavaAPI

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介:

Kubernetes fabric8 JavaAPI

一、依赖准备

<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<version>4.9.0</version>


下列展示代码中可能包含演示需要的依赖包,需要手动导入。全文手动原创,非其他博客及官方转载。
二、代码例子及分析
1.客户端的创建
​ Kubernetes 的资源默认是对内部是可见并可以访问的,我们可以通过以下方式去访问Kubernetes 获取我们想要的资源。

对于Kubernetes 可以通过 JavaAPI 通过安全证书文件、Token或admin.conf配置外部访问
同样也可以配置这些配置文件通过HTTP访问apiService访问
内部也可以通过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> 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> operation1

            =oclient.deployments();

//将资源转换为JSON 查看
DeploymentList deploymentList =operation1.list();
List 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

原文地址https://www.cnblogs.com/wanchen-chen/p/12934449.html

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
Kubernetes 网络协议 Docker
基于kubernetes部署jaeger
基于kubernetes部署jaeger,采用非all-in-one的方式分别部署query,collector,elasticsearch和agent
6847 0
|
4月前
|
运维 Kubernetes API
kubernetes 安装 kubernetes-dashboard 7.x
kubernetes 安装 kubernetes-dashboard 7.x
182 0
|
存储 弹性计算 Kubernetes
01-Kubernetes-Kubernetes简介
01-Kubernetes-Kubernetes简介
01-Kubernetes-Kubernetes简介
|
4月前
|
存储 Kubernetes Docker
Kubernetes学习笔记-Part.03 Kubernetes原理
Part.01 Kubernets与docker Part.02 Docker版本 Part.03 Kubernetes原理 Part.04 资源规划 Part.05 基础环境准备 Part.06 Docker安装 Part.07 Harbor搭建 Part.08 K8s环境安装 Part.09 K8s集群构建 Part.10 容器回退
104 0
Kubernetes学习笔记-Part.03 Kubernetes原理
|
10月前
|
消息中间件 Kubernetes Kafka
kubernetes-v1.23.3 部署 kafka_2.12-2.3.0
kubernetes-v1.23.3 部署 kafka_2.12-2.3.0
131 0
|
域名解析 Kubernetes 网络协议
【k8s】kubernetes的基于coredns的服务发现机制
【k8s】kubernetes的基于coredns的服务发现机制
197 0
|
存储 Kubernetes 容器
【kubernetes】创建 minio 多集群版
【kubernetes】创建 minio 多集群版
270 0
|
Kubernetes Perl 容器
Kubernetes CKS【9】--- caution in using ServiceAccounts
Kubernetes CKS【9】--- caution in using ServiceAccounts
Kubernetes CKS【9】--- caution in using ServiceAccounts
|
Kubernetes 负载均衡 应用服务中间件
Kubernetes核心组件
什么是k8s,解决什么问题。
119 0
|
存储 Kubernetes 关系型数据库
Kubernetes 核心组件
Kubernetes 核心组件
199 1