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. LSTM(Long Short Term Memory)

    长时依赖是这样的一个问题,当预测点与依赖的相关信息距离比较远的时候,就难以学到该相关信息.例如在句子”我出生在法国,……,我会说法语“中,若要预测末尾”法语“,我们需要用到上下文”法国“.理论上,递归 ...

  2. 2019.03.25 bzoj4539: [Hnoi2016]树(主席树+倍增)

    传送门 题意:给一棵大树,令一棵模板树与这棵树相同,然后进行mmm次操作,每次选择模板树中的一个节点aaa和大树中一个节点bbb,把aaa这棵子树接在bbb上面,节点编号顺序跟aaa中的编号顺序相同. ...

  3. EmEditor注册码

    Emeditor 是一款非常好用的文本编辑器 Emeditor 注册码 姓 名:ttrar.com 序 列 号:DKAZQ-R9TYP-5SM2A-9Z8KD-3E2RK 姓 名:whyida 序 列 ...

  4. spring aop 的代理工厂

    参考 https://docs.spring.io/spring/docs/4.3.11.RELEASE/spring-framework-reference/htmlsingle/#aop-unde ...

  5. 计算机网络六:无线局域网、IEEE 802.11、WIFI和蓝牙

    无线局域网.IEEE 802.11.WIFI和蓝牙 ㈠无线局域网 1.定义       无线局域网络(Wireless Local Area Networks),简称WLAN.它是相当便利的数据传输系 ...

  6. HDU - 1241 Oil Deposits 经典dfs 格子

    最水的一道石油竟然改了一个小时,好菜好菜. x<=r  y<=c  x<=r  y<=c  x<=r  y<=c  x<=r y<=c #include ...

  7. webapi使用swagger出现“Cannot read property 'parameters' of null”

    前端时间在webapi项目使用swagger来提供接口文档及测试工具,按网上方法(http://wmpratt.com/swagger-and-asp-net-web-api-part-1)配置好之后 ...

  8. Maven3-依赖

    依赖配置 我们先来看一份简单的依赖声明: <project> ... <dependencies> <dependency> <groupId>...& ...

  9. Django 信号、中间件、i18n 专题

    信号 Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 1. Django内置信号 Model signals pr ...

  10. day_4流程控制之分支结构循环结构及for循环

    复习一下昨天的内容 1:变量的命名规范 只能由数字 字母 及下划线组成 不能以数字开头 不能与系统关键字重名 _开头有特殊含义 __开头__结尾的变量是魔法变量 支持大小驼峰 ,但建议使用下划线连接语 ...