基于Python+Django的Kubernetes集群管理平台
时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署、迭代,还是从资源调度管理等方面都有其难以言喻的优势,但是随着业务的不断增长,以及服务的多元化,容器的体量与管理的难度也随之增长。
浅述Kubernetes集群日常管理维护中的一些痛点:
1.较为庞大的集群规模及容器数量维护管理。
我们公司的业务场景属于典型的多业务线并行。同时为了便于分类管理,避免端口冲突和资源合理利用。我们也采取了一些策略,如:
标签 label:通过标签,一方面可以标识哪个产品线的哪个应用坐落于哪些node之上,也许有人会想为什么要这样做,假设你有一个数据落盘的应用而该应用总是每次随着启动变来变去就不好玩了。一方面通过标签可以均衡设备负载,比如将比较耗cpu和比较耗内存的搭配在一起,不但资源充分利用而且还有效的防止同类型(比如高耗cpu)偶然间跑一个node上导致资源争抢及端口冲突。
那么问题来了,如何让一个运维人员面对茫茫多的标签并对其维护管理(kubectl get node –show-labels ?),又如何让一个运维人员,故障发生时,面对茫茫多的nodes/pods,即时快速地定位两者的对应关系,从而解决问题。
2. 测试环境维护管理问题。
一般的应用部署与上线流程较为繁琐

这种模式下,让每个研发人员在每次调试beta环境时,无论是更改配置还是代码更新都需要沟通运维人员予以操作,让每个运维人员都要用更多的精力额外的维护一套甚至更多系统环境,每天游走于beta,线上之间。不免有点让人头痛。
更希望有这样的一种模式

这样大大减少了部门之间的沟通成本。但是问题来了,如何让一个研发人员能够独立的开发维护属于自己的beta环境,且不需要过多的关心除代码调试外的一些东西呢?(如怎样去写一个基于kubernetes服务的yaml或json)
借此,于是萌生出了一个尝试写一个管理服务的想法,目的在于让运维人员更加方便的管理自己的kubernetes线下线上集群,让研发人员也能够独立自主的编写与维护属于自己的测试环境应用,初期阶段,仅供参考,若有不足之处,欢迎大家随时予以宝贵意见。
Python Admin(测试版)是基于Python+Django与kubernetes Api的运维管理系统。前端采用开源SB(start bootstrap) Admin-2模板(清新,简约)。
1.版本信息:
Python2.7.5+Django1.8.13+Kubernetes1.2.4+docker1.10.3
2.Kubernetes Api相关:
创建与更新label
curl -X PATCH -i -H \
"Content-Type:application/merge-patch+json" \
http://k8smaster:8080/api/v1/nodes/{ nodename } \
-d '{"metadata":{"labels":{"标签":"应用"}}}'
创建configmap
curl -X POST -i -H \
"Content-Type:application/json" \
http://k8smaster:8080/api/v1/namespaces/default/configmaps/ \
-d "$(cat configmaptest.json)"
更新configmap
curl -X PATCH -i -H \
"Content-Type:application/merge-patch+json" \
http://k8smaster:8080/api/v1/namespaces/default/configmaps/{ configmapname } \
-d "$(cat configmapupdate.json)"
删除configmap
curl -X DELETE \
http://k8smaster:8080/api/v1/namespaces/default/configmaps/{ configmapname }
Configmap的基本Json模板

创建daemonset
curl -X POST -i –H \
"Content-Type:application/json" \
http://k8smaster:8080 /apis/extensions/v1beta1/namespaces/default/daemonsets \
-d "$(cat daemonset.json)"
更新daemonset
curl -X PATCH -i -H \
"Content-Type:application/merge-patch+json" \
http://k8smaster:8080/apis/extensions/v1beta1/namespaces/default/daemonsets/{daemonsetname} -d "$(cat daemonsetupdate.json)"
删除daemonset
curl -X DELETE \
http://k8smaster:8080/apis/extensions/v1beta1/namespaces/default/daemonsets/{daemonsetname}
daemonset 基本json模板

以上列举为部分api操作,其他相关操作请参考kubernetes官方文档
http://kubernetes.io/docs/api-reference/v1/operations/
3.平台操作界面概览
1..Kubernets集群资源管理界面(清晰展示集群资源信息及所属项目组,便于分类管理)

2.项目应用配置管理界面(配置文件单独管理,采用数据库存储配置文件内容。创建和更新configmap时重新reload,并实时同步配置文件使用状态。)


3.服务部署与管理界面(应用模板创建,同时增加系统日志功能,服务启动后记录每个阶段的执行情况,方便错误追踪,具有一定的操作审计功能)


4.Kubernetes容器资源管理界面(每个集群所有node,以及每个node所有pods信息,并采用websocket方式exec进入容器内部避免权限控制不当问题)

如果不确认服务是否能正常启动,Container建立完毕后,可以通过debug模式(command: ["sleep", "足够长时间"])进去容器内部执行./run.sh调节服务,待没问题后,再已正常模式启动。
未来优化的一些小想法:
1.kubernets集群一键部署,节点资源即时加入。
2.监控方面,在系统级别监控的基础上,增加容器服务级别监控及相应告警策略。
3.整合融入jenkins接口,让服务部署与更新,更简单透明化。
基于Python+Django的Kubernetes集群管理平台的更多相关文章
- 美团点评Kubernetes集群管理实践
背景 作为国内领先的生活服务平台,美团点评很多业务都具有非常显著.规律的”高峰“和”低谷“特征.尤其遇到节假日或促销活动,流量还会在短时间内出现爆发式的增长.这对集群中心的资源弹性和可用性有非常高的要 ...
- 基于 Clusternet 与 OCM 打造新一代开放的多集群管理平台
背景 随着 5G.物联网设备的爆炸性增长以及智能终端不断增强的计算能力,带来了前所未有的数据量,传统的中心集中式计算捉襟见肘."新基建"战略的实施,工业互联网.车联网/自动驾驶.智 ...
- 基于zookeeper+mesos+marathon的docker集群管理平台
参考文档: mesos:http://mesos.apache.org/ mesosphere社区版:https://github.com/mesosphere/open-docs mesospher ...
- OpenPAI:大规模人工智能集群管理平台介绍及任务提交指南
产品渊源: 随着人工智能技术的快速发展,各种深度学习框架层出不穷,为了提高效率,更好地让人工智能快速落地,很多企业都很关注深度学习训练的平台化问题.例如,如何提升GPU等硬件资源的利用率?如何节省硬件 ...
- 强大多云混合多K8S集群管理平台Rancher入门实战
@ 目录 概述 定义 为何使用 其他产品 安装 简述 规划 基础环境 Docker安装 Rancher安装 创建用户 创建集群 添加Node节点 配置kubectl 创建项目和名称空间 发布应用 偏好 ...
- 容器、容器集群管理平台与 Kubernetes 技术漫谈
原文:https://www.kubernetes.org.cn/4786.html 我们为什么使用容器? 我们为什么使用虚拟机(云主机)? 为什么使用物理机? 这一系列的问题并没有一个统一的标准答案 ...
- 052.Kubernetes集群管理-故障排错指南
一 故障指南 1.1 常见问题排障 为了跟踪和发现在Kubernetes集群中运行的容器应用出现的问题,常用如下查错方法: 查看Kubernetes对象的当前运行时信息,特别是与对象关联的Event事 ...
- 049.Kubernetes集群管理-集群监控Metrics
一 集群监控 1.1 Metrics Kubernetes的早期版本依靠Heapster来实现完整的性能数据采集和监控功能,Kubernetes从1.8版本开始,性能数据开始以Metrics API的 ...
- 快速部署Kubernetes集群管理
这篇文章介绍了如何快速部署一套Kubernetes集群,下面就快速开始吧! 准备工作 //关闭防火墙 systemctl stop firewalld.service systemctl disabl ...
随机推荐
- 如何让我们的PHP在Jexus中跑起来
最近一段时间,经常看到不少的朋友在问,应该怎么设置才能够让Jexus支持PHP.其实,Jexus在很早之前就已经是可以支持PHP,像Apache或Nginx一样充当PHP的Web服务器的.不过由于没有 ...
- opengl 笔记(1)
参考<opengl入门教程>.<OpenGL之坐标转换>.<OpenGL绘制管线操作细节>等资料. 复习下留个备忘:) /*- * Opengl Demo Test ...
- .NET - 基于事件的异步模型
注:这是大概四年前写的文章了.而且我离开.net领域也有四年多了.本来不想再发表,但是这实际上是Active Object模式在.net中的一种重要实现方法,因此我把它掏出来发布一下.如果该模型有新的 ...
- 集成基于CAS协议的单点登陆
相信大家对单点登陆(SSO,Single Sign On)这个名词并不感到陌生吧?简单地说,单点登陆允许多个应用使用同一个登陆服务.一旦一个用户登陆了一个支持单点登陆的应用,那么在进入其它使用同一单点 ...
- Johnson 全源最短路径算法
解决单源最短路径问题(Single Source Shortest Paths Problem)的算法包括: Dijkstra 单源最短路径算法:时间复杂度为 O(E + VlogV),要求权值非负: ...
- ASP.NET Web API Selfhost宿主环境中管道、路由
ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...
- Android测试网络是否连接
一.布局页面 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- 使用nodemailer发送邮件
今天闲来无事,一时兴起看了下如果使用javascript来发送邮件.经过调研发现,nodeJs可以实现这个功能. 具体的步骤如下: 1.安装依赖 npm install nodemailer -g ( ...
- 解析大型.NET ERP系统 单据标准(新增,修改,删除,复制,打印)功能程序设计
ERP系统的单据具备标准的功能,这里的单据可翻译为Bill,Document,Entry,具备相似的工具条操作界面.通过设计可复用的基类,子类只需要继承基类窗体即可完成单据功能的程序设计.先看标准的销 ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...