基于Python+Django的Kubernetes集群管理平台

原文出自【听云技术博客】:http://blog.tingyun.com/web/article/detail/1345

时至今日,接触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接口,让服务部署与更新,更简单透明化。

时间: 2024-10-01 14:29:37

基于Python+Django的Kubernetes集群管理平台的相关文章

容器集群管理平台的比较

容器化和微服务是当前最热话题,不久之前,笔者(据说因为现在都不用笔了,"笔者"的称谓已经不合适了,因为输入用键盘,叫"键人"更为合适)参加QCon上海一个微服务监控的Session,场面爆棚,我不得不在拥挤的过道听完了整个session.随着要管理的容器越来越多,容器的集群管理平台成为了刚需! Docker Swarm Swarm是Docker公司在2014年12月初新发布的容器集群管理工具.它可以把多个主机变成一个虚拟的Docker主机来管理.Swarm使用Go语

OpenPAI:大规模人工智能集群管理平台介绍及任务提交指南

产品渊源: 随着人工智能技术的快速发展,各种深度学习框架层出不穷,为了提高效率,更好地让人工智能快速落地,很多企业都很关注深度学习训练的平台化问题.例如,如何提升GPU等硬件资源的利用率?如何节省硬件投入成本?如何支持算法工程师更方便的应用各类深度学习技术,从繁杂的环境运维等工作中解脱出来?等等. 产品定位: 为深度学习提供一个深度定制和优化的人工智能集群管理平台,让人工智能堆栈变得简单.快速.可扩展. 产品优势: ● 为深度学习量身定做,可扩展支撑更多AI和大数据框架 通过创新的PAI运行环境

基于 CentOS 7 搭建kubernetes集群

基于Centos7构建Kubernetes平台 一.实验环境 3台centos7的主机: master  192.168.111.131部署etcd,kube-apiserver,kube-controller-manager,kube-scheduler 4个应用. node01  192.168.111.130  部署docker,kubelet, kube-proxy  3个应用 node02  192.168.111.129  部署docker,kubelet, kube-proxy  

052.Kubernetes集群管理-故障排错指南

一 故障指南 1.1 常见问题排障 为了跟踪和发现在Kubernetes集群中运行的容器应用出现的问题,常用如下查错方法: 查看Kubernetes对象的当前运行时信息,特别是与对象关联的Event事件.这些事件记录了相关主题.发生时间.最近发生时间.发生次数及事件原因等,对排查故障非常有价值.此外,通过查看对象的运行时数据,还可以发现参数错误.关联错误.状态异常等明显问题.由于在Kubernetes中多种对象相互关联,因此这一步可能会涉及多个相关对象的排查问题. 对于服务.容器方面的问题,可能

kubernetes集群管理常用命令一

系列目录 我们把集群管理命令分为两个部分,第一部分介绍一些简单的,但是可能是非常常用的命令以及一些平时可能没有碰到的技巧.第二部分将综合前面介绍的工具通过示例来讲解一些更为复杂的命令. 列出集群中所有pod 使用kubectl get pods获取的一般是默认名称空间的信息(可以在配置文件中指定默认全称空间,如果没有指定则默认为default).如果想要获取获取非默认名称空间的pod,则需要指定-n(或者--namespace)参数.但是有些时候我们想要查看整个集群中所有名称空间的pod,则可以

02:Kubernetes集群部署——平台环境规划

1.官方提供的三种部署方式: minikube: Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,仅用于尝试Kubernetes或日常开发的用户使用. 部署地址:https://kubernetes.io/docs/setup/minikube/ kubeadm Kubeadm也是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群. 部署地址:https://kubernetes.io/docs/reference

Docker集群管理工具-Kubernetes部署记录

Kubernetes介绍 Kubernetes是Google开源的容器集群管理系统,是基于Docker构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.动态扩缩容等功能套件. Kubernetes提供应用部署.维护. 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下: 1) 使用Docker对应用程序包装(package).实例化(instantiate).运行(run). 2) 将多台Docker主机抽象为一个资源,以集群的方式运行.管理跨机器

在Kubernetes集群上部署和管理JFrog Artifactory

JFrog Artifactory是一个artifacts仓库管理平台,它支持所有的主流打包格式.构建工具和持续集成(CI)服务器.它将所有二进制内容保存在一个单一位置并提供一个接口,这使得用户在整个应用程序开发和交付过程中,能更易于上传.查找和使用二进制文件. 在本文中我们将介绍如何使用Rancher在Kubernetes集群上部署和管理JFrog Artifactory.在看完本文后,你将会系统地了解JFrog Artifactory OSS的安装设置,并且能够按照同样的步骤在任何Kuber

Ignite集群管理——基于静态IP的节点发现

Ignite作为分布式内存,集群管理必不可少,Ignite支持基于组播,静态IP,Zookeeper,JDBC等方式发现节点,本文主要介绍基于静态IP的节点发现. 两个最重要的TCP通信设置类: 1. TcpDiscoverySpi 用于设置集群维持与节点发现的tcp通信ip,port. 2. TcpCommunicationSpi 用于设置业务数据(缓存数据)tcp通信的ip,port. 3. 两者的区别与联系 TcpDiscoverySpi用于维持管理集群,交换的是用户不感知的ignite内