2024年Kubernetes官方java客户端之六:OpenAPI基本操作,数据结构常见面试题总结

最后

现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  1. 除了使用ProtoClient对K8S资源进行增删改查,还提供了另一种更强大的方式:OpenAPI,本章咱们就来一起学习OpenAPI相关的操作;

K8S的OpenAPI

  1. 先抛开java客户端不提,咱们来看看K8S本身的OpenAPI,地址是:https://kubernetes.io/zh/docs/concepts/overview/kubernetes-api/ ,关键信息如下图所示,可见K8S提供了OpenAPI规范:

在这里插入图片描述

  1. 如果您想查看当前K8S环境的OpenAPI规范,请打开K8S环境的/etc/kubernetes/manifests/kube-apiserver.yaml文件,增加下图红框中的内容:

在这里插入图片描述

  1. 修改完毕后请稍候,系统会根据文件的变化自动更新(千万不要执行kubectl apply -f kube-apiserver.yaml,这会导致新建api-server的pod,由于端口占用而启动失败);

  2. 假设宿主机IP地址是192.168.50.135,那么在浏览器上访问:http://192.168.50.135:8080/openapi/v2,就能得到所有OpenAPI信息如下图:

在这里插入图片描述

  1. 上图的原始数据没有可读性,复制到在线JSON格式化网站,得到的内容如下图,例如查询pod列表的API信息已经非常详细了:

在这里插入图片描述

  1. 以上就是对K8S的OpenAPI简介,接下来回到java客户端本身,看看它提供了哪些OpenAPI相关的能力;

java客户端的OpenAPI

  1. 打开java客户端工程的源码如下图,红框1就是和OpenAPI相关的子工程,提供服务的功能类都在红框2的package中,也就是说,依靠红框2中的API以及红框3中的数据结构,我们可以完成大部分K8S资源控制相关的操作:

在这里插入图片描述

  1. 打开常用的CoreV1Api.java,如下图红框,顶部的注释已经说明了一切:这些代码都是工具生成的(至于如何生成就不在本文中讨论了):

在这里插入图片描述

  1. 如果您下载了java客户端源码,可以在client-java-api这个子工程中看到完整的OpenAPI接口文档:

在这里插入图片描述

  1. 前文《Kubernetes官方java客户端之五:proto基本操作 》的代码中,咱们尝试过获取pod列表,但是ProtoClient的已有API不支持提交更详细的业务参数,此时选择OpenAPI接口即可输入详细的业务参数,接口详细信息可以在文档中查到,还带有完整的demo代码,如下图所示:

在这里插入图片描述

  1. 上图中的listNamespacedPod接口有两个重要参数:fieldSelector和labelSelector,这是过滤用的,详细的用法请参考K8S官方文档,地址是:https://kubernetes.io/docs/concepts/overview/working-with-objects/ ,如下图红框:

在这里插入图片描述

  1. 弄清楚了K8S的OpenAPI规范,以及java客户端依据此规范生成的API服务,还有详细的接口文档在手,可以编码实战了;

源码下载

  1. 如果您不想编码,可以在GitHub下载所有源码,地址和链接信息如下表所示(https://github.com/zq2599/blog_demos):

| 名称 | 链接 | 备注 |

| :-- | :-- | :-- |

| 项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |

| git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |

| git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |

  1. 这个git项目中有多个文件夹,本章的应用在kubernetesclient文件夹下,如下图红框所示:

在这里插入图片描述

开始编码

  1. 打开《Kubernetes官方java客户端之一:准备 》中创建的kubernetesclient工程,在里面新建子工程openapi,其pom.xml内容如下,要注意的是spring-boot-starter-json已经被排除,因此序列化工具会变为Gson(原本默认是jackson):
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd”>

4.0.0

com.bolingcavalry

kubernetesclient

1.0-SNAPSHOT

…/pom.xml

com.bolingcavalry

openapi

0.0.1-SNAPSHOT

openapi

Demo project for openapi client

jar

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-json

org.projectlombok

lombok

true

io.kubernetes

client-java

org.springframework.boot

spring-boot-maven-plugin

2.3.0.RELEASE

  1. 新增OpenAPIDemoApplication.java,这是新工程的引导类,也有两个web接口,一个创建namespace,另一个按照namespace查询pod列表,关键位置已添加了注释,就不多赘述了:

package com.bolingcavalry.openapi;

import com.google.gson.GsonBuilder;

import io.kubernetes.client.openapi.ApiClient;

import io.kubernetes.client.openapi.ApiException;

import io.kubernetes.client.openapi.Configuration;

import io.kubernetes.client.openapi.apis.CoreV1Api;

import io.kubernetes.client.openapi.models.V1Namespace;

import io.kubernetes.client.openapi.models.V1NamespaceBuilder;

import io.kubernetes.client.openapi.models.V1PodList;

import io.kubernetes.client.util.ClientBuilder;

import io.kubernetes.client.util.KubeConfig;

import lombok.extern.slf4j.Slf4j;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;

import java.io.FileReader;

@SpringBootApplication

@RestController

@Slf4j

public class OpenAPIDemoApplication {

public static void main(String[] args) {

SpringApplication.run(OpenAPIDemoApplication.class, args);

}

/**

最后

2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。

更多JVM面试整理:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

了。

[外链图片转存中…(img-t76zWxi7-1715001830671)]

更多JVM面试整理:

[外链图片转存中…(img-137WIQzC-1715001830671)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 29
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java.net.UnknownHostException异常是Java编程中经常遇到的网络错误之一,该异常在建立网络连接时通常发生,原因是程序无法解析所查询的主机名,即无法找到该主机名对应的IP地址。对于出现java.net.UnknownHostException异常,我们一般需要检查其可能的原因和解决方案。 在本问题中,出现了java.net.UnknownHostException: openapi.alipay.com异常,这是因为程序无法解析openapi.alipay.com这个主机名。针对这个问题,我们需要排查如下几个可能的原因: 1. DNS解析问题:程序可能没有正确配置或无法访问DNS服务器,导致无法解析域名为IP地址,需要确认DNS解析是否正常。 2. 网络连接问题:可能存在网络连接问题,比如代理服务器配置不正确、网络不稳定等问题,需要确认网络连接是否正常。 3. 安全相关问题:如果运行程序需要进行安全认证,可能是证书相关问题导致无法建立连接,需要检查证书是否正确。 针对以上可能的原因,我们可以尝试相应的解决方案: 1. DNS解析问题可以尝试更换DNS服务器、在hosts文件中手动添加IP地址等方式解决。 2. 网络连接问题可以尝试更换网络环境,检查代理服务器等。 3. 安全相关问题需要确认证书的正确性,可以参考相应的API文档进行调试和排查。 总之,出现java.net.UnknownHostException异常,需要认真分析可能出现的原因和解决方案,通过正确的调试和排查,才能最终解决问题。针对本问题,需要检查网络连接、DNS解析等方面,如果还不能解决问题,可以查阅相关API文档进行更深入的调试和排查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值