原标题:kubernetes插件开发过程分享
前言
按照需求,需要在虚拟机部署的kubernetes环境中,使用neutron创建port并绑定到POD上使用,替换原来的docker0网络。本文对操作过程进行了记录,希望对初学者有所帮助,尝试开发自己的插件。
文中内容不对涉及的各个模块进行详细的介绍,重点是插件开发过程中框架的介绍。
概述
kubernetes通过插件使用neutron网络,替换docker0机制完成底层网络通信。Cni的位置下图所示:
图1 模块框架
开发过程
一
准备工作
在每个Kubernetes节点机器上必须安装Kubernetes, Docker, bash, jq等 。
Master和node可以部署在不同虚拟机上,也可以部署在同一台虚拟机上。本次测试在虚拟机机A上部署master和node,在虚拟机B上部署node。
二
Kubernetes配置
1
插件
本次开发包括一个配置文件和一个执行文件,把可执行文件放到/opt/cni/bin/目录下。把配置文件放到你所选择的目录下;通常使用/etc/cni/net.d/。
配置文件内容如下,其中文件中name字段指定你使用的执行文件的名称,它会根据这个名字执行所编写的插件网络可执行文件。
2
kubelet配置
Kubernetes想要使用插件,就必须告诉kubelet,所以需要在kubelet的配置文件中加上下面这句话。这里使用目录/etc/cni/net.d/作为配置文件放置目录。这样,POD创建时就好走Kubernetes插件机制的流程。
三
插件程序开发
插件程序开发,入口有两个,一个是cmdAdd,用于pod创建时添加port,另外一个是cmdDel,用于pod删除时删除对应的port。针对里面具体实现细节,这里就不再详述,有需求者可以单独探讨。
1
cmdAdd
原型以及实行流程如下:
图2 POD创建时插件工作流程
需要特殊说明的,此插件开发是基于neutron的network和subnet已经创建的基础之上,所以插件实现主要包含三大块:
1、使用neutron创建port;
2、把创建的port落地到对应的虚机上;
3、在插件中把port放置到POD中。
2
cmdDel
原型以及实行流程如下:
图3 POD删除时插件工作流程
删除时过程与添加时刚好相反,也是包含了三大块:1、解除POD中port的绑定;2、解除VM中port的绑定;3、删除port。
四
neutron接口
为了能够在插件中调用neutron接口,需要研究neutron接口参数,可以在openstack虚拟环境直接使用命令执行,然后获取日志信息,根据日志中字段内容,在插件代码中构造相应结构进行接口调用。所以下面主要介绍命令参数,方便需要人员直接构造,GO代码的实现就不再详细说明。
1
获取keystone的token
为了能够执行neutron提供的RESTFUL接口,需要先获取keystone的token,命令以及返回结果如下:
执行获取token的命令:
命令执行后的RESP,可以看到会返回一个token:
在插件中按照上面获取token的命令,构造http请求,然后根据应答内容解析出id,供后面创建端口等接口使用。
2
创建port
获取keystone的token之后,可以携带该token直接创建端口,命令以及返回结果如下:
创建port命令:
完成port创建之后neutron返回的RESP,根据RESP解析出port的id、mac、IP等相关信息,用于后面POD绑定。
3
绑定port到虚机
绑定neutron创建的port到VM,命令如下:
完成port绑定之后,如果返回状态正常,可以不关心应答内容,直接进行后续操作。
4
解除port到虚机的绑定
POD删除时,需要解除port到VM的绑定,命令如下:
解除port到VM的绑定命令:
解除port绑定命令执行完之后,如果返回状态正常,可以不关心应答内容,直接进行后续操作。
5
删除port
删除port的命令:
同意只需要关系返回的状态是否OK。
五
大功告成
经过上面所有操作之后,在创建POD时,Kubernetes会自动调用插件完成底层网络的部署,而你可以通过查看pod信息(IP),发现你创建的port的IP地址已经出现在了POD信息列表中,你再ping一下试试效果。
结尾
作者同样是初学者,只能先分享到这里了,大家一起继续努力吧。另外,文中不免有错误,欢迎批评指正。
责任编辑: