0x01 client-go

1、简介

Client-go是kubernetes官方发布的调用K8S API的golang语言包,可以用来开发K8S的管理服务、监控服务,配合前端展示,就可以开发出一款定制化的、可视化的管理或监控工具。目前最新版本为7.0,对应K8S的版本为1.10,访问链接:https://github.com/kubernetes/client-go
其中client-go与K8S版本对应关系为:

由于目前我们测试环境的K8S集群版本为1.5.2,所以此处我们使用client-go2.0版本。

2、安装

可以直接使用go语言第三方包管理工具下载client-go,或者使用go语言自带的管理工具下载,需要特别注意的是,client-go包与k8s版本号有一定的对应关系,一定要选择下载与目标k8s版本对应的版本号。下载方式为:

$ go get github.com/kubernetes/client-go

或者,也可以自己手动去github下载下面的几个包:

  • github.com/kubernetes/client-go
  • github.com/google/gofuzz
  • github.com/golang/glog

然后将它们放在$GOPATH下面的src文件夹中对应的文件夹下。例如:github.com/google/gofuzz,存放的目录为$GOPATH/src/github.com/google/gofuzz。
不过,需要特别注意的是,不知什么原因,网络上面的教程下载的client-go包存放的位置都是$GOPATH/src/k8s.io/client-go。其实go代码中引用的client-go包方式与client-go包在本地的存放位置有关,而该存放位置并没有严格的控制,可以随意存放(如果是手动下载的话),所以此处我们也将github.com/kubernetes/client-go存放位置修改为$GOPATH/src/k8s.io/client-go,如下图:

所以此时在go代码中引用client-go时的方式就变成了下面这样:

3、开发

Client-go开发k8s有两种方式,一种是in cluster模式,另一种是out of cluster模式,至于二者的区别,大致来看可以认为我们开发的go服务是否放在K8S集群内运行,在集群内运行则为in cluster模式,否则为out of cluster模式。此处我们此次采用的是out of cluster模式。
我们的项目名称为k8smanage,该项目下主要的文件为两个:main.go和config.yaml。其中,main.go中为我们访问k8s的主要代码,而config.yaml中保存了目标k8s集群的连接信息。其中,main.go中代码截图如下所示:

而config.yaml中的内容如下所示:

那么对于一个新的k8s集群来说,我们应该如何编写config.yaml文件中的内容呢?其实比较简单,在k8s集群的master上通过指令“kubectl config view”获取的信息就是我们config.yaml中的内容:

不过,为了直接通过config.yaml文件就能获取目标k8s集群的连接信息,我们没有直接使用空的clusters字段值,而是补充了里面的server字段信息,server字段值为k8s master节点上apiServer的访问地址。
到此,config.yaml文件中的配置信息就配置完成了。通过main.go中开头的代码部分就可以正常访问k8s集群了。

0x02 python-k8sclient

1、简介

python-k8sclient貌似是OpenStack维护的调用K8S API的python语言包,可以用来开发K8S的管理服务、监控服务,配合前端展示,就可以开发出一款定制化的、可视化的管理或监控工具。目前其最新版本为0.4.0,下载链接:https://pypi.org/project/python-k8sclient/

2、安装

  • 手动下载:手动去https://pypi.org/project/python-k8sclient/下载该包,然后解压并在其根目录下运行python setup.py install
  • Pip安装:pip install python-k8sclient
  • Pycharm下载:基本操作,此处不再赘述

3、开发

k8sclient开发比较简单,只需要提供K8S master的访问地址即可,如果设置了访问账号密码,那么还需要提供它们。我这里的K8S集群未设置任何权限认证功能,所以可以直接通过URL访问,部分示例代码如下:

至于其他的开发,主要是调用k8sclient包的接口,主要功能接口可以参看k8sclient源码,部分接口功能如下:

  • Pod:新建、查询所有、按名称查询、更新、删除
  • RC:新建、查询所有、按名称查询、更新、删除
  • Service:新建、查询所有、按名称查询、更新、删除
  • Deployment:新建、查询所有、按名称查询、更新、删除

0x03 Kubernetes官方维护的Python客户端client-python

地址:https://github.com/kubernetes-client/python

【K8S】client-go、python-k8sclient开发K8S的更多相关文章

  1. 使用 Tye 辅助开发 k8s 应用竟如此简单(三)

    续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中如何对数据库进行链接. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次 ...

  2. python安装二进制k8s高可用 版本1.13.0

    一.所有安装包.脚本.脚本说明.下载链接:https://pan.baidu.com/s/1kHaesJJuMQ5cG-O_nvljtg 提取码:kkv6 二.脚本安装说明 1.脚本说明: 本实验为三 ...

  3. python安装二进制k8s 1.11.0 一个master、一个node 查看node节点是主机名---apiserver无法启动,后来改了脚本应该可以

    一.脚本说明: 本实验中master.node.etcd都是单体. 安装顺序为:先安装test1节点主要组件,然后开始安装test2节点,最后回头把test1节点加入集群中,这样做目的是理解以后扩容都 ...

  4. 使用 Tye 辅助开发 k8s 应用竟如此简单(一)

    最近正巧在进行 Newbe.Claptrap 新版本的开发,其中使用到了 Tye 来辅助 k8s 应用的开发.该系列我们就来简单了解一下其用法. Newbe.Claptrap 是一个用于轻松应对并发问 ...

  5. K8s client 使用

    使用的k8s client包: <dependency> <groupId>io.fabric8</groupId> <artifactId>kuber ...

  6. 使用 Tye 辅助开发 k8s 应用竟如此简单(二)

    续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中使用服务发现. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次阅读本系 ...

  7. 使用 Tye 辅助开发 k8s 应用竟如此简单(四)

    续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中如何进行日志的统一管理. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首 ...

  8. 使用 Tye 辅助开发 k8s 应用竟如此简单(五)

    续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中实现对分布式链路追踪. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次 ...

  9. 使用 Tye 辅助开发 k8s 应用竟如此简单(六)

    续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们将进一步研究 Tye 与分布式应用程序运行时 Dapr 如何碰撞出更精彩的火花. Newbe.Claptrap 是一个用于轻松应对并发问题 ...

随机推荐

  1. Java集合不能存放基本数据类型

    Java集合不能存放基本数据类型,只能存放对象的引用. 每个集合元素都是一个引用变量,实际内容都存放在堆内或方法区里面, 但是基本数据类型是在栈内存上分配空间的,栈上的数据随时会被收回. 如何解决? ...

  2. redis_哈希对象

    redis哈希对象的底层编码有两种:ziplist.hashtable ziplist编码 当一个哈希键只包含少量kv对.且key和value都是小整数值.短字符串时,redis会使用压缩列表来做 z ...

  3. 多线程.Thread.Sleep方法

    多线程执行中,调用Thread.Sleep()方法 分情况: 1. 单核的情况下 是把当前正在工作的主线程停止(也就是从把线程变成非工作线程). 其他需要工作的线程来争夺CPU这个闲下来的核.谁争夺到 ...

  4. 基于fpga的vga学习(1)

    这次学习我主要掌握了vga的基本运行原理. vga基本概念: VGA时序主要包括两条信号线(HS,VS)的输出——行扫描和场扫描.VGA采用逐行扫描,每个像素对应的点扫描.行与行之间存在消隐以及显示时 ...

  5. codeforces 1066 B heater

    菜鸡只配做水题 思路就很简单嘛:肯定扩展的越靠后边越好了 0 0 1 0 1 1 0 0 假设范围是3 ,第一个1一定要选上,第2.3个肯定选3啦,越靠后边就一定能节省更多的点,没看出来和子问题有什么 ...

  6. display:inline-block; 在css中是什么意思?

    inline-block主要的用处是用来处理行内非替换元素的高宽问题的!行内非替换元素,比如span.a等标签,正常情况下士不能设置宽高的,加上该属性之后,就可以触发让这类标签表现得如块级元素一样,可 ...

  7. 深入-FastReport TfrxReport组件使用

    [翻译] FastReport TfrxReport组件使用   一:加载和保存报表 报表默认保存在项目窗体文件中,大多数情况下,没有更多的操作要深圳市, 因此,你不需要采取特别措施来载入报告.如果你 ...

  8. VSCode插件开发全攻略(五)跳转到定义、自动补全、悬停提示

    更多文章请戳VSCode插件开发全攻略系列目录导航. 跳转到定义 跳转到定义其实很简单,通过vscode.languages.registerDefinitionProvider注册一个provide ...

  9. 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知)

    [源码下载] 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知) 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 ...

  10. BeanPostProcessor —— 连接Spring IOC和AOP的桥梁

    之前都是从大Boss的视角,来介绍Spring,比如IOC.AOP. 今天换个视角,从一个小喽啰出发,来加深对Spring的理解. 这个小喽啰就是, BeanPostProcessor (下面简称 B ...