【K8S】client-go、python-k8sclient开发K8S
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的更多相关文章
- 使用 Tye 辅助开发 k8s 应用竟如此简单(三)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中如何对数据库进行链接. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次 ...
- python安装二进制k8s高可用 版本1.13.0
一.所有安装包.脚本.脚本说明.下载链接:https://pan.baidu.com/s/1kHaesJJuMQ5cG-O_nvljtg 提取码:kkv6 二.脚本安装说明 1.脚本说明: 本实验为三 ...
- python安装二进制k8s 1.11.0 一个master、一个node 查看node节点是主机名---apiserver无法启动,后来改了脚本应该可以
一.脚本说明: 本实验中master.node.etcd都是单体. 安装顺序为:先安装test1节点主要组件,然后开始安装test2节点,最后回头把test1节点加入集群中,这样做目的是理解以后扩容都 ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(一)
最近正巧在进行 Newbe.Claptrap 新版本的开发,其中使用到了 Tye 来辅助 k8s 应用的开发.该系列我们就来简单了解一下其用法. Newbe.Claptrap 是一个用于轻松应对并发问 ...
- K8s client 使用
使用的k8s client包: <dependency> <groupId>io.fabric8</groupId> <artifactId>kuber ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(二)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中使用服务发现. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次阅读本系 ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(四)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中如何进行日志的统一管理. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首 ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(五)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中实现对分布式链路追踪. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次 ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(六)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们将进一步研究 Tye 与分布式应用程序运行时 Dapr 如何碰撞出更精彩的火花. Newbe.Claptrap 是一个用于轻松应对并发问题 ...
随机推荐
- 学习Acegi应用到实际项目中(11)- 切换用户
在某些应用场合中,可能需要用到切换用户的功能,从而以另一用户的身份进行相关操作.这一点类似于在Linux系统中,用su命令切换到另一用户进行相关操作. 既然实际应用中有这种场合,那么我们就有必要对其进 ...
- Oracle去除重复(某一列的值重复),取最新(日期字段最新)的一条数据
转自 : http://blog.csdn.net/nux_123/article/details/45037719 问题:在项目中有一张设备检测信息表DEVICE_INFO_TBL, 每个设备每天都 ...
- 整理CSS中display flex(布局利器)
关于display:flex布局,有人了解颇深,我也是看着别人的东西学习的. display:flex的布局是什么.基本概念之类的我根本就不了解,只会用.每次看到概念之类的东西,我都是扫一眼就过去. ...
- flask-文件上传
flask文件上传 流程 1. 上传的文件request.files拿取 2. 可以通过WTForms表单验证 3. 通过secure_filename (from werkzeug.utils im ...
- noip第30课资料
- Delphi XE7试用记录2
Delphi XE7试用记录2 万一博客中介绍了不少Delphi7以后的新功能测试,想跟着测试一下.每次测试建立一个工程,在窗体上放几个按钮,测试几个相关的功能,这样虽然简单明了,但日后查阅起来不方便 ...
- kubernets基础
1.定义和功能. 1.1定义:kubernets解释为舵手或者飞行员,以Borg为主衍生出. 1.2功能:自动装箱,自我修复,水平扩展,服务发现和负载均衡,自动发布和回滚. 密钥和配置管理,存储编排, ...
- Node.js 开发指南
1.Node.js 简介 Node.js 其实就是借助谷歌的 V8 引擎,将桌面端的 js 带到了服务器端,它的出现我将其归结为两点: V8 引擎的出色: js 异步 io 与事件驱动给服务器带来极高 ...
- nova compute enable password injection and filesystem resize
root@OpenstackIcehouse2:~# cat /etc/nova/nova-compute.conf [DEFAULT] compute_driver=libvirt.LibvirtD ...
- dcloud 近期遇到的小知识一览
1.form-data时,请求头改变为application/x-www-form-urlencoded. 2.下拉刷新,首先在page.json里面的style将enablePullDownRefr ...