Kubernetes官方java客户端之五:proto基本操作

  • 假设实战的内容是查询kube-system这个namespace下面的所有pod列表,那么API相关信息在哪获取:
  1. 打开API在线文档,我这里K8S版本是1.15,地址是:https://v1-15.docs.kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/

  2. 如下图,红框1是pod列表的接口文档,红框2显示了该URL,有了这个URL我们可以编码了:

在这里插入图片描述

  1. 在今后的操作中,所有资源都可以根据该文档找到对应的API信息,辅助我们编码;

  2. 终于,可以开始实战了;

源码下载

  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工程,在里面新建子工程protobufclient,其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

protobufclient

0.0.1-SNAPSHOT

protobufclient

Demo project for protobuf 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. 新增ProtobufApplication.java,这是新工程的引导类,也有通过ProtoClient查询pod列表的代码:

package com.bolingcavalry.protobufclient;

import com.google.gson.GsonBuilder;

import io.kubernetes.client.ProtoClient;

import io.kubernetes.client.ProtoClient.ObjectOrStatus;

import io.kubernetes.client.openapi.ApiClient;

import io.kubernetes.client.proto.Meta;

import io.kubernetes.client.proto.V1.Namespace;

import io.kubernetes.client.proto.V1.PodList;

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 java.io.FileReader;

@SpringBootApplication

@RestController

@Slf4j

public class ProtobufApplication {

public static void main(String[] args) {

SpringApplication.run(ProtobufApplication.class, args);

}

/**

  • 根据配置文件创建ProtoClient实例

  • @return

  • @throws Exception

*/

private ProtoClient buildProtoClient() throws Exception {

// 存放K8S的config文件的全路径

String kubeConfigPath = “/Users/zhaoqin/temp/202007/05/config”;

// 以config作为入参创建的client对象,可以访问到K8S的API Server

ApiClient client = ClientBuilder

.kubeconfig(KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath)))

.build();

// 创建操作类

return new ProtoClient(client);

}

@RequestMapping(value = “/createnamespace/{namespace}”, method = RequestMethod.GET)

public ObjectOrStatus createnamespace(@PathVariable(“namespace”) String namespace) throws Exception {

// 创建namespace资源对象

Namespace namespaceObj =

Namespace.newBuilder().setMetadata(Meta.ObjectMeta.newBuilder().setName(namespace).build()).build();

// 通过ProtoClient的create接口在K8S创建namespace

ObjectOrStatus ns = buildProtoClient().create(namespaceObj, “/api/v1/namespaces”, “v1”, “Namespace”);

// 使用Gson将集合对象序列化成JSON,在日志中打印出来

log.info(“ns info \n{}”, new GsonBuilder().setPrettyPrinting().create().toJson(ns));

return ns;

}

@RequestMapping(value = “/pods/{namespace}”, method = RequestMethod.GET)

public ObjectOrStatus pods(@PathVariable(“namespace”) String namespace) throws Exception {

// 通过ProtoClient的list接口获取指定namespace下的pod列表

ObjectOrStatus pods = buildProtoClient().list(PodList.newBuilder(), “/api/v1/namespaces/” + namespace + “/pods”);

// 使用Gson将集合对象序列化成JSON,在日志中打印出来

最后

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!

我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!
一共有20个知识点专题,分别是:

Dubbo面试专题

JVM面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Java并发面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Kafka面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MongDB面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MyBatis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MySQL面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Netty面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

RabbitMQ面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Redis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Spring Cloud面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

SpringBoot面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

zookeeper面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

常见面试算法题汇总专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

计算机网络基础专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

设计模式专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

0)]

Spring Cloud面试专题

[外链图片转存中…(img-xAV1rY86-1714412054880)]

SpringBoot面试专题

[外链图片转存中…(img-dMjPmfGJ-1714412054881)]

zookeeper面试专题

[外链图片转存中…(img-C1qKIkFl-1714412054881)]

常见面试算法题汇总专题

[外链图片转存中…(img-t4mqz7jT-1714412054881)]

计算机网络基础专题

[外链图片转存中…(img-hhtKglrg-1714412054882)]

设计模式专题

[外链图片转存中…(img-y7O0D3Mt-1714412054882)]

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

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值