一个按钮救不了运维:聊聊 SDK、CLI、Portal 三位一体的内部平台设计

简介: 一个按钮救不了运维:聊聊 SDK、CLI、Portal 三位一体的内部平台设计

一个按钮救不了运维:聊聊 SDK、CLI、Portal 三位一体的内部平台设计

作者:Echo_Wish


做运维时间长了,你会发现一个很有意思的现象。

很多公司在搞“内部平台化”的时候,第一反应都是:

做个 Portal。

于是就会出现一个看起来很高级的东西:

DevOps Portal

页面很漂亮,按钮很多:

  • 一键部署
  • 一键扩容
  • 一键回滚
  • 一键重启

但半年之后,工程师们的真实行为却是:

ssh + bash

Portal 静静地躺在那里,变成一个“参观系统”。

为什么会这样?

我后来慢慢总结出一个结论:

真正好用的内部平台,一定是 SDK、CLI、Portal 三位一体。

缺一个,都会变形。

今天就跟大家聊聊这个在很多公司被忽视的 平台设计模式


一、Portal 并不是平台,它只是“界面”

很多公司对内部平台的理解,其实是这样的:

开发人员
   ↓
Portal 页面
   ↓
后端 API
   ↓
K8s / 云资源

结构大概这样:

+-----------+
|  Portal   |
+-----------+
      |
      v
+-----------+
|  API服务  |
+-----------+
      |
      v
+-----------+
|  云平台   |
+-----------+

听起来没毛病,但有一个很致命的问题:

Portal 不适合自动化。

比如你想写一个自动部署脚本:

CI/CD → 调用 Portal?

显然不现实。

Portal 天生是给人点按钮的。

而工程体系真正需要的是:

API
SDK
CLI

所以一个成熟的内部平台,底层应该是:

API First

所有能力都必须先变成 API。


二、SDK:让开发者像用库一样用平台

很多内部平台失败,是因为开发者觉得:

“这平台太麻烦了。”

要申请资源:

开工单
等审批
点 Portal
填表

但如果平台提供 SDK,体验会完全不同。

举个简单例子。

假设我们有一个内部部署平台:

deploy service

如果提供 Python SDK:

# internal_platform_sdk.py

import requests

class DeployClient:

    def __init__(self, token):
        self.token = token
        self.base_url = "https://platform/api"

    def deploy_service(self, name, image, replicas=1):

        payload = {
   
            "name": name,
            "image": image,
            "replicas": replicas
        }

        r = requests.post(
            f"{self.base_url}/deploy",
            json=payload,
            headers={
   "Authorization": self.token}
        )

        return r.json()

开发者在 CI 里可以直接用:

from internal_platform_sdk import DeployClient

client = DeployClient(token="xxx")

client.deploy_service(
    name="order-service",
    image="order:v1.3.0",
    replicas=3
)

开发体验立刻变成:

调用函数 = 部署服务

这才是 平台化的真正感觉


三、CLI:工程师最真实的入口

很多管理者不愿意承认一件事:

工程师更喜欢 CLI。

为什么?

因为 CLI 有三个巨大优势:

可脚本化
速度快
可自动化

所以一个成熟的平台,一定会有 CLI。

比如:

platform deploy order-service

一个简单 CLI 示例:

# platform_cli.py

import click
import requests

API = "https://platform/api"


@click.group()
def cli():
    pass


@cli.command()
@click.argument("service")
@click.argument("image")
def deploy(service, image):

    payload = {
   
        "service": service,
        "image": image
    }

    r = requests.post(
        f"{API}/deploy",
        json=payload
    )

    print("部署结果:", r.json())


if __name__ == "__main__":
    cli()

使用方式:

platform deploy order-service order:v2

再进一步还能做:

platform logs
platform scale
platform restart

很多成熟平台其实都是这么设计的:

kubectl
aws cli
gcloud

Portal 只是附加层。


四、Portal:最后才是给人看的

Portal 的定位其实应该是:

可视化入口

适合:

  • 新手
  • 运营人员
  • 业务人员
  • 查看状态

而不是核心入口。

比如一个部署系统:

Portal 做什么?

查看部署历史
查看服务状态
查看日志
点击触发部署

但真正的部署路径应该是:

CI/CD → SDK / CLI → API

Portal 调用的其实也是同一个 API。

架构就变成:

                +---------+
                | Portal  |
                +----+----+
                     |
                     v
+------+      +------------+      +-------+
| SDK  | ---> | Platform   | ---> | 资源  |
+------+      | API Layer  |      +-------+
              +------------+
                     ^
                     |
                 +---+---+
                 | CLI   |
                 +-------+

这就是:

三位一体架构。


五、三位一体设计的关键原则

我自己在做内部平台的时候,总结过三个原则。


原则一:API First

所有能力必须先有 API。

比如:

创建服务
扩容
部署
回滚

示例:

@app.post("/deploy")
def deploy_service(service: ServiceDeploy):

    k8s.deploy(
        name=service.name,
        image=service.image,
        replicas=service.replicas
    )

    return {
   "status": "ok"}

然后:

CLI 调用 API
SDK 调用 API
Portal 调用 API

原则二:CLI 是一等公民

很多平台的 CLI 只是“补充工具”。

这是错的。

CLI 应该是:

核心入口

CI/CD 的所有流程都应该能通过 CLI 实现。

例如:

platform deploy
platform rollback
platform scale

这样:

Jenkins
GitLab CI
Argo

都能直接集成。


原则三:Portal 只做可视化

Portal 最大的价值不是操作,而是:

观察

比如:

部署时间线
服务拓扑
资源用量
错误日志

如果 Portal 负责复杂操作,通常会变成:

复杂表单地狱

工程师就不爱用了。


六、我对内部平台的一点真实感受

这些年我见过很多内部平台项目。

失败的有一个共同特点:

太像管理系统。

各种:

审批
流程
表单
权限

最后工程师的真实行为是:

绕过平台
直接 ssh

真正成功的平台反而很简单。

特点只有两个:

好调用
好自动化

工程师甚至感觉不到“平台存在”。

但事情却都自动完成了。

这才是平台工程真正厉害的地方。


结尾

如果让我用一句话总结 SDK + CLI + Portal 设计模式,我会这么说:

平台不是给人点按钮的,而是给系统调用的。

真正的顺序应该是:

API → SDK / CLI → Portal

而不是:

Portal → API
目录
相关文章
|
1天前
|
人工智能 机器人 API
“小龙虾”OpenClaw保姆级教程:阿里云+本地部署步骤+钉钉集成+百炼API配置+常见问题解答
2026年,OpenClaw(曾用名Clawdbot、Moltbot,昵称“小龙虾”)作为开源AI智能体领域的领军工具,凭借跨平台部署能力、丰富的Skill生态以及灵活的第三方办公平台集成特性,成为个人高效办公与企业协同管理的核心助力。其核心价值在于打破AI“仅能聊天交互”的局限,通过对接外部大模型、集成主流办公工具,将AI能力嵌入实际工作流,实现任务自动化落地。钉钉作为国内企业办公协同的主流平台,与OpenClaw的深度集成,可让AI智能体直接嵌入钉钉聊天、审批、云盘、会议等全场景,实现消息自动回复、文档批量处理、会议纪要生成、任务提醒推送等自动化操作,大幅降低人工重复劳动,提升团队协作效率
219 2
|
2天前
|
人工智能 弹性计算 安全
2026年OpenClaw极简部署教程,两步拥有专属AI助理!
2026年,OpenClaw(原Moltbot/Clawdbot)以极简两步部署(选镜像+图形化配置),零代码即可在阿里云轻量服务器上启用24小时AI助理,支持自动化办公、多平台消息接入与智能执行,大幅提升个人与企业效率。
84 8
|
1月前
|
运维 Kubernetes 安全
CNI 不是装完就完事:Calico、Cilium、Weave,选错一个,集群网络天天加班
CNI 不是装完就完事:Calico、Cilium、Weave,选错一个,集群网络天天加班
182 8
|
1月前
|
人工智能 机器人 API
从“调个 API”到“自己养模型”:用 Python 快速构建聊天机器人的完整路径
从“调个 API”到“自己养模型”:用 Python 快速构建聊天机器人的完整路径
171 3
|
1天前
|
人工智能 安全 Android开发
当龙虾住进云桌面:一次 jvsclaw 实测
把龙虾放进云桌面之后会发生什么?实测 jvsclaw 的实际体验、优缺点,以及对 Agent 形态的一些思考
404 11
|
1天前
|
人工智能 弹性计算 安全
新手养虾指南:OpenClaw安装在轻量应用服务器教程(不建议部署在本地电脑)
本教程详解OpenClaw(AI龙虾)在阿里云轻量应用服务器的一键部署:推荐云端而非本地部署,兼顾安全与省电;仅需3步——创建含OpenClaw镜像的服务器(38元/年)、配置百炼API Key(Lite版7.9元首月)、接入钉钉/飞书/微信等多平台。
116 2
|
1天前
|
人工智能 Linux API
喂饭级教程:OpenClaw(大龙虾)云端/本地部署+五大应用场景+配置阿里云百炼Coding Plan及常见问题解答
2026年,开源AI智能体OpenClaw(曾用名ClawdBot、MoltBot,因Logo酷似小龙虾被网友亲切称为“大龙虾”)以“行动式AI”的鲜明定位爆红全网。它打破了传统“对话式AI”仅能答疑的局限,通过极简的Pi引擎架构与丰富的Skills生态,让非技术用户也能轻松拥有7×24小时运行的“个人AI员工”,覆盖个人办公、企业协作、开发运维、生活效率、创新应用五大核心场景。
173 5
|
1天前
|
人工智能 监控 Linux
AI开发革命:阿里云/本地部署OpenClaw+Codex/Claude Code 搭建AI Agent集群指南+免费多模型API配置+避坑教程
OpenClaw+AI Agent集群的模式,彻底打破了独立开发者的效率天花板,让"一人创办百万美元公司"从愿景变为现实。其核心并非依赖更强的AI模型,而是通过精妙的架构设计,让业务上下文与代码实现各司其职,同时借助自动化闭环与自我进化机制,持续降低人工干预成本。
142 1
|
1天前
|
机器学习/深度学习 PyTorch TensorFlow
动态图 vs 静态图:深度学习框架到底该怎么选?别再被“概念战”忽悠了
动态图 vs 静态图:深度学习框架到底该怎么选?别再被“概念战”忽悠了
44 5
|
1天前
|
NoSQL Java 调度
开源外卖系统多运力并存模型设计:自营+众包架构实现
开源外卖系统需突破单一运力瓶颈。本文详解如何通过架构设计、统一骑手表、策略模式调度(自营/众包/第三方)、差异化分账与Redis锁,实现高可用多运力模型,支撑弹性扩张与高峰履约。(239字)