Esempio n. 1
0
def get_deployment_status(**args):
    username = args.get('username')
    deployment_uuid = args.get('deploymentUuid')
    token = token_service.get_token(args.get('http_request'))
    has_role = token.has_role('ROLE_OPERATOR')
    user_login = token.username
    if user_login is None or (user_login != username and not has_role):
        raise Exception('403 Forbidden')

    try:
        namespace = 'ucumos-' + replace_special_char(username)
        res = g.k8s_client.apps_api.read_namespaced_deployment_status(
            'deployment-' + deployment_uuid, namespace)

        deployment_status = DeploymentStatus()
        if res.status.replicas:
            deployment_status.replicas = res.status.replicas
        if res.status.ready_replicas:
            deployment_status.replicasReady = res.status.ready_replicas
        deployment_status.limitsCpu = res.spec.template.spec.containers[
            0].resources.limits["cpu"]
        deployment_status.limitsMem = res.spec.template.spec.containers[
            0].resources.limits["memory"]
        deployment_status.requestsCpu = res.spec.template.spec.containers[
            0].resources.requests["cpu"]
        deployment_status.requestsMem = res.spec.template.spec.containers[
            0].resources.requests["memory"]
    except:
        raise Exception('获取k8s状态失败')

    return deployment_status.__dict__
Esempio n. 2
0
def get_deployment_logs(**args):
    username = args.get('username')
    deployment_uuid = args.get('deploymentUuid')
    token = token_service.get_token(args.get('http_request'))
    has_role = token.has_role('ROLE_OPERATOR')
    user_login = token.username
    if user_login is None or (user_login != username and not has_role):
        raise Exception('403 Forbidden')

    try:
        namespace = 'ucumos-' + replace_special_char(username)
        res = g.k8s_client.core_api.list_namespaced_pod(
            namespace, label_selector='ucumos=' + deployment_uuid)

        lines = []
        for pods in res.items:
            if pods.status.phase != 'Running':
                continue
            lines.append('[pod ' + pods.metadata.name[-15:] + ']:')
            lines.append(
                g.k8s_client.core_api.read_namespaced_pod_log(
                    pods.metadata.name, namespace))
    except:
        raise Exception('获取k8s日志失败')

    return '\n'.join(lines)
Esempio n. 3
0
def scale_deployment(**args):
    deployment = Deployment()
    deployment.__dict__ = args.get('deployment')
    target_status = DeploymentStatus()
    target_status.__dict__ = args.get('targetStatus')
    token = token_service.get_token(args.get('http_request'))
    has_role = token.has_role('ROLE_OPERATOR')
    user_login = token.username
    if user_login is None or (user_login != deployment.deployer
                              and not has_role):
        raise Exception('403 Forbidden')

    try:
        name = 'deployment-' + deployment.uuid
        namespace = 'ucumos-' + replace_special_char(deployment.deployer)

        old_status = g.k8s_client.apps_api.read_namespaced_deployment_status(
            name, namespace)
        body = {
            'spec': {
                'replicas': target_status.replicas,
                'template': {
                    'spec': {
                        'containers': [{
                            "name":
                            old_status.spec.template.spec.containers[0].name,
                            "resources": {
                                "requests": {
                                    "cpu": target_status.requestsCpu,
                                    "memory": target_status.requestsMem
                                },
                                "limits": {
                                    "cpu": target_status.limitsCpu,
                                    "memory": target_status.limitsMem
                                }
                            }
                        }]
                    }
                }
            }
        }
        g.k8s_client.apps_api.patch_namespaced_deployment(
            name, namespace, body)
    except:
        raise Exception('k8s扩缩容失败')

    return 0
Esempio n. 4
0
def deploy_thread(task, is_public):
    save_task_progress(task, "正在执行", 5, "启动模型部署...")
    save_task_step_progress(task.uuid, '模型部署', '执行', 5, '启动模型部署...')

    try:
        namespace = 'ucumos-' + replace_special_char(task.userLogin)
    except:
        save_task_step_progress(task.uuid, '模型部署', '失败', 100, '获取用户信息失败。')
        save_task_progress(task, '失败', 100, '获取用户信息失败。', mytime.now())
        return

    if do_deploy(task, namespace, is_public):
        complete = '完成'
    else:
        delete_deploy(task.uuid, namespace)
        complete = '失败'

    message_service.send_message(
        task.userLogin, '模型 ' + task.taskName + ' 部署' + complete, '你的模型 ' +
        task.taskName + ' 部署' + complete + '!\n\n请点击下方[目标页面]按钮查看任务详情。',
        '/pmodelhub/#/deploy/view/' + task.uuid, False)
Esempio n. 5
0
def restart_deployment(**args):
    deployment = Deployment()
    deployment.__dict__ = args.get('deployment')
    token = token_service.get_token(args.get('http_request'))
    has_role = token.has_role('ROLE_OPERATOR')
    user_login = token.username
    if user_login is None or (user_login != deployment.deployer
                              and not has_role):
        raise Exception('403 Forbidden')

    try:
        name = 'deployment-' + deployment.uuid
        namespace = 'ucumos-' + replace_special_char(deployment.deployer)

        body = {'spec': {'replicas': 1}}
        g.k8s_client.apps_api.patch_namespaced_deployment(
            name, namespace, body)
        umm_client.update_deployment_status(deployment.id, '运行',
                                            g.oauth_client.get_jwt())
    except:
        raise Exception('重启k8s实体失败')

    return 0
Esempio n. 6
0
def stop_deployment(**args):
    deployment = Deployment()
    deployment.__dict__ = args.get('deployment')
    token = token_service.get_token(args.get('http_request'))
    has_role = token.has_role('ROLE_OPERATOR')
    user_login = token.username
    if user_login is None or (user_login != deployment.deployer
                              and not has_role):
        raise Exception('403 Forbidden')

    try:
        name = 'deployment-' + deployment.uuid
        service = 'service-' + deployment.uuid
        namespace = 'ucumos-' + replace_special_char(deployment.deployer)

        g.k8s_client.apps_api.delete_namespaced_deployment(name, namespace)
        g.k8s_client.core_api.delete_namespaced_service(service, namespace)

        umm_client.update_deployment_status(deployment.id, '停止',
                                            g.oauth_client.get_jwt())
    except:
        raise Exception('停止k8s实体失败')

    return 0