仿真容器平台项目 2019.09-至今
项目职务: 仿真容器平台规划设计搭建
项目描述: 通过kubeadm原生方式搭建仿真容器k8s平台, 设计k8s平台的promethues监控告警规则,设计规划k8s平台日志采集和查看方案, 设计规划k8s平台各种业务监控展板展示, 通过helm方式部署业务到k8s平台,独立设计helm chart包。
个人开发容器平台项目 2019.06-至今
项目职务: 运维工程师
项目描述: 本项目共有3个TKE集群,集群1和集群2主要运行statefullset类型资源供公司员工申请个人开发容器,集群3主要运行job类型资源 运行公司蓝盾后台的CI CD流水线job任务。
3个TKE集群的网络方案均为全局路由 + 策略路由 + 弹性网卡,通过tke-eni-ipamd, sip , uip这几个对象来提供静态ip的功能。 每个node节点上面都有如下的daemonset类型资源:
Kube-proxy(服务发现和注册,没有使用kube-proxy进行服务转发而是通过ipvs模式进行服务;流量转发)
Kube-router(主要用了此对象的network-policy功能)
Ip-masq-agent(通过此资源实现对集群外部的访问时snat的操作)
tke-cni-agent tke-eni-agent(网络相关插件)
金光openstack私有云平台项目 2017.09-2018.10
项目职务: 技术负责人
项目描述: 项目采用中兴通讯自研云平台tecs(基于openstack实现)进行部署,其中负责自动化安装的daisy组件和负责提供web界面服务的horizon组件都是通过docker容器方式进行部署,后端存储驱动为devicemapper,网络为host模式组网,各个容器内的进程start,stop等都是通过进程管家--supervisord这个安装在容器内的后台进程负责管理。
本项目共有46台物理服务器,其中2台服务器做为主备控制节点,通过开源的双机监控软件placemaker, pcs实现了集群监控和双机热备,其余44台服务器全为计算节点,后端存储为走FC协议的磁阵系统,通过cinder组件来提供块存储服务。整套系统共启虚机245套,虚机之上运行不同的集群业务。在neutron服务方面,每个计算节点都启用openstack-ovdk-agent代理服务通过dvs技术来提供二层网络服务,neutron的其他服务全部部署在主备两个控制节点上。cinder组件的相关服务cinder-api, cinder-schedule, cinder-volume 全部部署在两个主备控制节点上,在运行时只有主节点的相关服务为启动状态,备节点为关闭状态。
通过python语言开发站点维护工具 2017.03-2017.05
项目职务: python开发
项目描述: 本项目是通过框架编程的思想实现,基本的实现思路如下:
通过命令调用入口函数:python ./NodeBKit.py --sitelist ./list.csv --task ./task_name.py,入口函数获取外部命令传递的sys.argv[1:]参数,其中主要有两大类型参数一个是--sitelist list.csv 一个是--task task_name.py,当外部参数传入后先进行初步的准备工作创建相关的输出目录和日志准备等,接着通过一个for循环来调用已经编写好的静态钩子函数statick_hook_dict['hand_sitelist'](list),statick_hook_dict['hand_task'](task_name), 这两个静态钩子函数通过字典进行保存,通过一个for循环语句加上入参的判断就能够完成调用,而函数statick_hook_dict['hand_sitelist'](list)作用就是把外部输入的站点list列表信息通过csv.reader()方法进行处理后把有用的信息给存放在一个列表中方便后续循环调用,函数statick_hook_dict['hand_task'](task_name)的作用就是通过外部的输入的具体的task_name来完成要处理的task函数的动态注册,也就是回调函数的动态注册---主要是通过eval()函数来实现了外部输入的参数变量到要调用的函数的动态注册过程taskHookDict[task_name] = eval(task_name + '.main'), 通过如上的动态注册后,后续就能够非常方便的通过taskHookDict这个字典类型的数据结构来回调函数task_name.main()。
如上所有的对入参处理的准备工作完成后,主调程序就会在调用do_task(task_name, sitelists)函数进行相关处理,在这个函数内部会为每个站点生成一个站点对象实例,且调用站点对象实例的handing_task()方法 而这个方法又会回调前面完成的动态注册函数task_name.main(), 这样就实现了所有站点对象的共同操作都能够在站点类中完成代码编写,而具体对外的各种应用场景能够通过对task_name这个API接口函数的编程来实现上层逻辑应用。