简要分析Kubernetes API的使用

 

0.    提要

Kubernetes是一个基于主机集群的容器管理工具,通过Kubernetes,我们可以对主机集群进行“面向服务”的管理。与云主机管理平台拥有一套完整的OpenAPI相似的是,Kubernetes也有可以由http访问的API,我们可以通过访问这些API,获取主机集群正在运行的服务,甚至还可以搭建可定制的Web平台实现人性化的管理功能。本文将简单介绍Kubernetes API的接口功能和获取、调用的方法。

 

1.    获取和调用Kubernetes的API

 

1.1   搭建Kubernetes集群

本文的实验环境是单台CPU2核、内存4G、已绑定公网IP的云主机,Kubernetes的版本为v1.16.0,使用kuboard.cn提供的脚本实现Kubernetes单机快速部署。

更新系统:

yum update -y

设置hostname解析:

hostnamectl set-hostname xxx

echo "127.0.0.1  $(hostname)" >> /etc/hosts

安装docker、kubeadm、kubelet、kubectl:

curl -sSLhttps://kuboard.cn/install-script/v1.16.0/install-kubelet.sh | sh

修改master节点hosts配置:

export MASTER_IP=x.x.x.x

export APISERVER_NAME=apiserver.demo

export POD_SUBNET=10.100.0.1/20

echo "${MASTER_IP}   ${APISERVER_NAME}" >> /etc/hosts

初始化master节点:

curl -sSLhttps://kuboard.cn/install-script/v1.16.0/init-master.sh | sh

查看kubernetes组件创建状态:

watch kubectl get pod -n kube-system -o wide

由于本次实验环境是单节点,所以无需进行node节点使用token加入主机集群的操作。

 

1.2   获取API列表

Kubernetes允许外部访问主机集群的方法是使用proxy。

kubectlproxy可以指定广播域,如果需要在局域网内访问集群,则可以将广播域设定为主机所在的私有网络所在的网段,如果需要在局域网外访问集群,则需要将广播域设定为访问节点所在的网段,当然也可以全网广播,但全网广播比较危险,只用于本文的实验环境中,不可用于生产环境。

命令示例:kubectl proxy --address=x.x.x.x --port=xx,address为广播网段,port为暴露的端口,在使用proxy暴露端口后,外部主机访问主机ip地址和端口即可获取API列表。

kubectl proxy --address=0.0.0.0 --port=8001

在输入这条命令后,使用浏览器访问该节点的8001端口,会发现浏览器报错。

 

                         

这是因为Kubernetes的apiserver拒绝了外部主机的请求,如果需要同意该请求,需要在proxy命令中附加一个额外的参数accept-hosts,如下:

kubectl proxy --address=0.0.0.0 --accept-hosts='^*$' --port=8001

再使用浏览器访问同一网址和端口,会发现已经出现了一个json文件:

 

1.3   API调用规则

我们可以访问url列表中的部分路径,获取到该api的信息。

以弹性伸缩为例,我们可以进一步访问apis/autoscaling路径,可以看到以下内容:

这个json显示了autoscaling api的基本信息。

kind/apiVersion:我们正在访问的是一个APIGroup组中的v1 api

name:这个api的名字是autoscaling

versions:它所支持的版本有v1、v2beta1、v2beta2

preferredVersion:推荐使用的版本是v1

我们也可以编写基于各种python请求库的request脚本,去获取这些页面中的数据,由于python的json库支持json文件的解析操作,我们可以快速的格式化我们想要得到的信息。

如果逐个查看,可能我们需要操作很多次才能获取所有的api信息。和部分网站的api一样,Kubernetes也使用了openapi进行了接口定义,我们访问openapi/v2可以看到一个很长的json文件,这个文件展示了openapi v2对Kubernetes接口的全部定义。

这个json文件看起来很乱,但是它的每个api路径对应的功能描述、请求方法、标签信息、返回结构体说明等信息都归属在paths字段下,解析这个文件就可以得到api的定义和详细介绍。

解析后的api定义文档,可以看到多达444条记录。

当然,我们也可以通过访问Kubernetes的官网,直接找到api参考文档,以获取常用api的调用方法。

 

2.    以Kuboard为例分析Kubernetes API的功能

 

2.1   Kuboard介绍

为什么选择Kuboard而不是Kubernetes官方的dashboard?因为Kuboard拥有交互性更强的中文界面,简单直观,易于使用,且不需要绕开无法获取的镜像等文件,配置更加方便。

Kuboard支持在线体验,当然,这个“在线体验”并不能让用户管理自己的Kubernetes集群,而是通过一个kuboard.cn为用户设置的展示型集群,让用户充分预览和浅层体验这个前端平台的功能。

 

2.2   Kuboard搭建

由于kuboard.cn提供了整合安装脚本,Kuboard的搭建是非常简单的。

安装Kuboard:

kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml

查看Kuboard创建状态:

watch kubectl get pods -l k8s.eip.work/name=kuboard -nkube-system

观察pod状态,等到kuboard开头的pod状态为running,即代表Kuboard搭建完成。

查看Kuboard端口:

kubectl get services -n kube-system

可以得到的结论是,kuboard服务的部署方式为NodePort,端口为32567,因此访问方式为集群内任一节点的IP地址和32567端口。

打开浏览器访问该端口,发现需要token:

运行以下命令获取token:

kubectl -n kube-system describe secret $(kubectl -n kube-systemget secret | grep kuboard-user | awk '{print $1}')


将获得的token粘贴到输入框内,点击登录,可以看到如下界面,代表登录成功:

2.3   Kuboard界面分析

Kuboard获取集群状态和进行集群操作都是通过访问Kubernetes的API进行的,调用chrome浏览器的Devtools,可以分析平台上的功能元素对应的接口。

点击“计算资源”中的任一节点,发现Kuboard使用GET方法请求了api/v1/nodes接口。

返回体中则包含了节点的各种信息,包含类型、名称、资源ID、创建时间、规格、pod网段等:

命名空间、deploy部署、持久卷等功能对应的接口也可以通过点击页面元素找到:

使用创建命名空间可以发现,创建资源的接口是通过POST请求调用的,与查看对应资源使用同一个URI,如果创建成功,返回状态码201。与此相应的是,删除资源通过DELETE请求调用,如果删除成功,返回状态码200。

只要了解了Kubernetes的API调用方法,就可以编写管理集群的离线程序,甚至根据自己的需求定制Kubernetes集群的管理平台。

 

了解新钛云服

招聘:高级运维工程师

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案

新钛云服出品的部分精品技术干货

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值