Alodi:为了保密我开发了一个系统

每天都在愉快的造轮子,这次可以一键创建测试环境

咖啡君维护了几十个不同类型项目,其中有相当一部分项目是对保密性有很高要求的,也就是说下个版本要上线的内容是不能提前泄露的,就像苹果新产品的介绍网站决不允许在产品发布之前流出一样,这种保密内容除了在制度上加以约束外,还需要一些技术手段来保障

本次要介绍的Aloid系统就对保密有着一定的作用,这个系统的主要作用是快速生成临时环境,这个临时环境会有一定的有效期,过期自动清除,当然你也可以手动清除,同时这个环境会有唯一的随机访问地址,只有知道这个随机地址的人才能访问

涉及技术

整个项目基于Django构建,前后端框架代码可以通过这篇文章获取,通过框架代码可以快速构建项目,添加自己需要的功能,需要说明的是框架代码并非这个项目源码

subprocess

编译部署难免要跟系统命令打交道,在调研了几种python执行系统命令的方法后选择了subprocess,subprocess作为os.systemos.popen的替代模块,功能更为强大,且为python自带模块,不需额外安装,使用方便

在需要频繁执行系统命令的情况下,可以写一个类似下边这样的方法封装命令执行和返回输出,使代码简洁易读

import shlex, subprocess

def runCmd(tid, msg, cmd):
    try:
        p = subprocess.Popen(shlex.split(cmd), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
        while p.poll() == None:
            out = p.stdout.readline().strip()
            if out:
                print('---->' + out.decode())

        res = ' 失败 ~_~' if p.returncode else ' 完成 ^_^'
        print('---->' + msg + res)

        return p.returncode
    except Exception as e:
        print('---->Shell Exec Error:%s' % str(e))
        return 999

kubernetes-api

所有环境跑在kubernetes之上,创建或销毁临时环境都需要与kubernetes做交互,我选择了使用kubernetes python sdk来完成

from kubernetes import client, config

class KubeApi:
    def __init__(self, namespace='alodi'):
        config.load_kube_config("/ops/coffee/kubeconfig.yaml")
        self.namespace = namespace

    def create_deployment(self, RAND, PROJ, ENVT):
        api_instance = client.AppsV1Api()
        body = client.V1Deployment(
            api_version="apps/v1",
            kind="Deployment",
            metadata=client.V1ObjectMeta(name=RAND),
            spec=client.V1DeploymentSpec(
                replicas=1,
                selector={'matchLabels': {'app': RAND}},
                template=client.V1PodTemplateSpec(
                    metadata=client.V1ObjectMeta(labels={"app": RAND}),
                    spec=client.V1PodSpec(
                        containers=[client.V1Container(
                            name=RAND,
                            image="k8s-harbor.blz.netease.com/alodi/" + RAND,
                            env=[{"name": "ENVT", "value": ENVT}, {"name": "PROJ", "value": PROJ}],
                            ports=[client.V1ContainerPort(container_port=80)],
                        )]
                    )
                ),
            )
        )

        try:
            r = api_instance.create_namespaced_deployment(
                namespace=self.namespace, body=body
            )

            return True, "Deployment created: %s" % r
        except Exception as e:
            return False, 'Deployment created: ' + str(e)

    def delete_deployment(self, RAND):
        api_instance = client.AppsV1Api()
        body = client.V1DeleteOptions(
            propagation_policy='Foreground',
            grace_period_seconds=5)

        try:
            r = api_instance.delete_namespaced_deployment(
                namespace=self.namespace,
                name=RAND,
                body=body
            )

            return True, "Deployment deleted. %s" % r
        except Exception as e:
            return False, 'Deployment deleted: ' + str(e)

load_kube_config加载的配置文件为kubernetes主服务器上的~/.kube/config文件,这个文件内包含了集群相关信息,通过这个配置文件可以免认证操作集群修改资源,要妥善保管这个配置文件,当然也可以通过token的方式自己实现认证

另外需要特别注意的是sdk的版本与kubernetes的版本有对应关系,且不同资源的操作对kubernetes的api版本要求也不同,使用时多参考官方文档

介于篇幅原因这里只贴了两个deployment的操作示例,其他更多示例可以单独找我获取

界面展示

整个项目除了用户管理之类的常规页面外,主要有三个页面构成,由这三个页面完成了主要流程的执行和展示

项目管理页:在这个页面内可以新建、编辑和删除项目

20190912.01.png

同时也可以在项目管理页创建临时环境,这里主要选择使用的数据环境和代码TAG

20190912.02.png

当填写相关信息点击Build & Deploy按钮后会跳转到任务详情页,这个页面实时展示部署过程的日志输出,右上角有个爬虫的按钮,可以终止部署

20190912.03.png

部署列表页:可以在部署列表页查看到部署历史记录,当这个环境正在运行时可以点击销毁按钮来销毁项目,清除kubernetes的资源占用

20190912.04.png

写在最后

  1. 我们写了很多项目,也造了很多轮子,目的都是为了让我们的工作更轻松,达到“一杯咖啡、轻松运维”的愿景
  2. 项目代码暂不开源,但项目里边用到的技术大都有专门的文章介绍,文章都附带有代码,有些甚至提供有Demo,完全可以快速搞定自己的需求
  3. 如果有任何问题欢迎与我联系,一起沟通交流,共同成长,期待加我好友~

扫码关注公众号查看更多实用文章

相关文章推荐阅读:

转载于:https://www.cnblogs.com/37Y37/p/11525597.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码下载:完整代码,可直接运行 ;运行版本:2022a或2019b或2014a;若运行有问题,可私信博主; **仿真咨询 1 各类智能优化算法改进及应用** 生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化 **2 机器学习和深度学习方面** 卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断 **3 图像处理方面** 图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知 **4 路径规划方面** 旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化 **5 无人机应用方面** 无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配 **6 无线传感器定位及布局方面** 传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化 **7 信号处理方面** 信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化 **8 电力系统方面** 微电网优化、无功优化、配电网重构、储能配置 **9 元胞自动机方面** 交通流 人群疏散 病毒扩散 晶体生长 **10 雷达方面** 卡尔曼滤波跟踪、航迹关联、航迹融合

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值