资讯专栏INFORMATION COLUMN

利用K8S技术栈打造个人私有云(连载之:K8S资源控制)

Reducto / 1273人阅读

摘要:将用户命令通过接口传送给,从而进行资源的增删改等操作。要使用编写应用程序,当下大多语言都可以很方便地去实现请求来操作的接口从而控制和查询资源,但本文主要是利用已有的客户端来更加优雅地实现的资源控制。


【利用K8S技术栈打造个人私有云系列文章目录】

利用K8S技术栈打造个人私有云(连载之:初章)

利用K8S技术栈打造个人私有云(连载之:K8S集群搭建)

利用K8S技术栈打造个人私有云(连载之:K8S环境理解和练手)

利用K8S技术栈打造个人私有云(连载之:基础镜像制作与实验)

利用K8S技术栈打造个人私有云(连载之:资源控制研究)

利用K8S技术栈打造个人私有云(连载之:私有云客户端打造)

注: 本文首发于 My 公众号 CodeSheep ,可 长按扫描 下面的 小心心 来订阅 ↓ ↓ ↓


私有云K8S资源控制原理

基于前面系列文章的详细阐述,我们已经可以手工去K8S集群的命令行下将CentOS 7.4操作系统的Docker镜像启动起来,然后用户可以通过SSH登录到CentOS容器之中进行使用。但实际使用过程中不同的用户不可能每次都手动去命令行启动一个CentOS镜像,然后用命令去查看该容器的IP地址和端口是多少,然后再通过ssh去连接。我们最好可以将Docker容器的启动、查询、删除等再封装一层,然后通过WEB页面去提供给用户操作,这才符合用户行为需求!

由于在我们的实践中Docker容器是放在kubernetes集群中进行管理,所以这里的资源控制涉及的资源主要就是kubernetes的资源,如Pod、RC、Service等。

kubernetes中的Master节点运行kube-apiserver模块,该模块对外提供restful接口,我们可以基于该接口进行编程,从而完成对集群资源的控制管理、如Pod、RC、Service等的申请、查询、删除等任务。

要CRUD一个 kubernetes 资源,比如一个 pod,首先要知道和 kubernetes 集群交互的接口。在 kubernetes 的 master 节点上安装有 kubectl 客户端程序,该程序面向用户提供命令行接口,供用户和 kubernetes 集群交互。 kubectl 将用户命令通过 restful 接口传送给 apiserver,从而进行资源的增、删、改等操作。该过程可以示意如下:

原理讲完了,接下来讲讲代码级别如何实现。


K8S资源控制客户端

总结上文不难看出,k8s相关资源的CRUD控制可以通过restful接口来实现。要使用Kubernetes REST API编写应用程序,当下大多语言都可以很方便地去实现HTTP请求来操作kubernetes的restful接口从而控制和查询资源,但本文主要是利用已有的kubernetes客户端来更加优雅地实现kubernetes的资源控制。你不需要自己编写API来调用、请求/响应等类型,可以直接使用现成的客户端库来实现。

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 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> 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即可写出对应的资源控制代码,此处不再赘述了,举一反三很重要。

后记

作者更多的原创文章在此,欢迎观赏

My Personal Blog

作者更多的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的几条准则



文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28039.html

相关文章

  • 利用K8S技术打造个人私有连载K8S资源控制

    摘要:将用户命令通过接口传送给,从而进行资源的增删改等操作。要使用编写应用程序,当下大多语言都可以很方便地去实现请求来操作的接口从而控制和查询资源,但本文主要是利用已有的客户端来更加优雅地实现的资源控制。 showImg(https://segmentfault.com/img/remote/1460000013517345); 【利用K8S技术栈打造个人私有云系列文章目录】 利用K8S...

    Render 评论0 收藏0
  • 利用K8S技术打造个人私有连载私有客户端打造

    摘要:前端技术栈还是非常庞大的,为了能够借助已经存在的轮子来造出一辆车,所以我选择了进行实践。状态的管理的状态管理依靠完成,用其来管理的所有组件状态。私有云客户端打造主页面首先是主页面,可以打开任何一个云主机系统的页面看,基本类似。 showImg(https://segmentfault.com/img/remote/1460000013930354); 【利用K8S技术栈打造个人私有...

    Jingbin_ 评论0 收藏0
  • 利用K8S技术打造个人私有连载私有客户端打造

    摘要:前端技术栈还是非常庞大的,为了能够借助已经存在的轮子来造出一辆车,所以我选择了进行实践。状态的管理的状态管理依靠完成,用其来管理的所有组件状态。私有云客户端打造主页面首先是主页面,可以打开任何一个云主机系统的页面看,基本类似。 showImg(https://segmentfault.com/img/remote/1460000013930354); 【利用K8S技术栈打造个人私有...

    shiina 评论0 收藏0
  • 利用K8S技术打造个人私有连载:基础镜像制作与实验)

    摘要:因此本篇博文将讲解如何在本地构建一个带组件的底包镜像并上传到上供下载使用。 showImg(https://segmentfault.com/img/remote/1460000013318761); 【利用K8S技术栈打造个人私有云系列文章目录】 利用K8S技术栈打造个人私有云(连载之:初章) 利用K8S技术栈打造个人私有云(连载之:K8S集群搭建) 利用K8S技术栈打造个人私...

    tabalt 评论0 收藏0
  • 利用K8S技术打造个人私有连载:基础镜像制作与实验)

    摘要:因此本篇博文将讲解如何在本地构建一个带组件的底包镜像并上传到上供下载使用。 showImg(https://segmentfault.com/img/remote/1460000013318761); 【利用K8S技术栈打造个人私有云系列文章目录】 利用K8S技术栈打造个人私有云(连载之:初章) 利用K8S技术栈打造个人私有云(连载之:K8S集群搭建) 利用K8S技术栈打造个人私...

    hot_pot_Leo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<