k8s的客户端开源项目有很多,官方有支持,社区也维护了很多。
官方支持的Kubernetes客户端库比较有限,有下面几种:
社区维护的客户端库则更加丰富,基本热门的编程语言都支持,下面的这些Kubernetes API客户端库由社区创建者维护,Kubernetes团队不会提供支持和维护:
本实践选用的是Fabric8的k8s-client,基于Java实现。
下面就基于该Clinet讲讲代码级别的实现
K8S资源控制代码实现举例
下面结合代码来阐述一下Fabric8常用的k8s资源控制操作:
- 创建K8S客户端
String namespace = "default"; // namespace名
String master = "http://XXXX/"; // 配置为你的k8s集群的主节点地址
Config config = new ConfigBuilder().withMasterUrl(master).build();
KubernetesClient client = new DefaultKubernetesClient(config);
接下来对K8S资源的控制、查询等操作基本都靠该client来完成!
- 创建Pod
我们从一个pod.yaml文件来创建Pod资源:
List<HasMetadata> resources = client.load(new FileInputStream(fileName)).get(); // fileName为一个外部的pod.yaml文件
if (resources.isEmpty()) {
System.err.println("No resources loaded from file: " +fileName);
return;
}
HasMetadata resource = resources.get(0);
if (resource instanceof Pod){
Pod pod = (Pod) resource;
System.out.println("Creating pod in namespace " + namespace);
NonNamespaceOperation<Pod, PodList, DoneablePod, PodResource<Pod, DoneablePod>> pods = client.pods().inNamespace(namespace);
Pod result = pods.create(pod); // 此处创建pod资源!!!
System.out.println("Created pod " + result.getMetadata().getName());
} else {
System.err.println("Loaded resource is not a Pod! " + resource);
}
- 删除Pod
删除很简单,只要知道Pod所在的namespace和name,一行代码即可搞定
client.pods().inNamespace("namespace名字").withName("pod名").delete();
- 查询Pod
查询Pod的log日志并于控制台打印:
client.pods().inNamespace("namespace名字").withName("pod名").tailingLines(10).watchLog(System.out))
欲查询Pod的一些其他信息,可以参考创建Pod步骤中的代码:
Pod result = pods.create(pod); // 此处创建pod资源!!!
System.out.println("Created pod " + result.getMetadata().getName()); // 类似于此处,除了获取Pod的名字外还可以获取很多类似信息
- 修改Pod配置
Pod updatedPod = client.pods().inNamespace("namespace名字").withName("pod名").edit()
.editMetadata()
.addToLabels("server2", "nginx2")
.and().done();
log("Replaced testPod:", updatedPod);
上文从创建一个K8S客户端开始比较完整地介绍了一个Pod资源的CRUD操作,限于篇幅原因,其他资源如RC、Service、Deployment等等的增删改查操作都类似,只是名字不同而已,其接口稍微类比一下Pod即可写出对应的资源控制代码,此处不再赘述了,举一反三很重要。
后记
作者更多的SpringBt实践文章在此:
- Spring Boot应用监控实战
- SpringBoot应用部署于外置Tomcat容器
- ElasticSearch搜索引擎在SpringBt中的实践
- 初探Kotlin+SpringBoot联合编程
- Spring Boot日志框架实践
- SpringBoot优雅编码之:Lombok加持
如果有兴趣,也可以抽点时间看看作者一些关于容器化、微服务化方面的文章:
- 利用K8S技术栈打造个人私有云 连载文章
- 从一份配置清单详解Nginx服务器配置
- Docker容器可视化监控中心搭建
- 利用ELK搭建Docker容器化应用日志中心
- RPC框架实践之:Apache Thrift
- RPC框架实践之:Google gRPC
- 微服务调用链追踪中心搭建
- Docker容器跨主机通信
- Docker Swarm集群初探
- 高效编写Dockerfile的几条准则
可 长按 或 扫描 下面的 小心心 来订阅 CodeSheep,获取更多 务实、能看懂、可复现的 原创文 ↓↓↓
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新