Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >打破内网壁垒,从云端一次添加成百上千的边缘节点

打破内网壁垒,从云端一次添加成百上千的边缘节点

作者头像
腾讯云原生
发布于 2021-06-25 10:12:36
发布于 2021-06-25 10:12:36
68000
代码可运行
举报
运行总次数:0
代码可运行

李腾飞,腾讯容器技术研发工程师,腾讯云TKE后台研发,SuperEdge核心开发成员。

王冬,腾讯云TKE后台研发工程师,专注容器云原生领域,SuperEdge 核心开发人员,现负责腾讯云边缘容器TKE Edge私有化相关工作。

背景

边缘计算的场景中,边缘节点分布在不同的区域,而且大多数边缘节点是藏在NAT网络背后的,且边缘节点和云端之间是单向网络(边缘节点可以访问云端,云端无法直接访问边缘节点)。这种场景下如何批量的将众多的边缘节点添加到一个边缘集群是一个问题?如果有一种机制,让用户可以从云端批量添加和重装位于边缘的节点,是一件解放生产能力的大事。针对这一需求,SuperEdge[1] 项目研发了 Penetrator 组件,实现了从云端批量的添加和重装节点的能力。

需求分析

总体来说,具体的需求可以细分为两种:

云端控制面能直接ssh到边缘节点

该场景下,云端管控平面和边缘节点有可能运行在同一内网内,也有可能公网可通,无论是哪种形式,总之在云端控制平面能直接 ssh 到边缘节点。这种场景使用最朴素的方式即可,即直接手动或者通过工具 ssh 到边缘节点完成节点添加,无需使用复杂的方式。

云端控制面不能ssh到边缘节点

该场景下,云端管控平面和边缘节点不在同一内网,有可能是单向网络,如:边缘节点位于 NAT 网络。这种情况下,边缘节点可以访问管控平面,但是无法从管控平面直接 SSH 到边缘节点。这种场景是本文重点处理的重点,针对这种场景设计出了一种简化边缘节点添加的组件 Penetrator。

Penetrator 的架构设计

云端管控平面无法直接连接边缘节点,现有的解决方案是搭建跳板机访问内网节点,边缘节点可能处于不同的内网中,在每个内网环境都搭建跳板,会带来额外的机器资源的开销和运维人员的工作量。在云端管控平面可以连接用户集群的 apiserver 的情况下,可以在管控平面向用户集群的 apiserver 下发一个添加节点的 job[2],job被调度到集群内的一个节点执行,具体实现如下图所示:

在云端管控平面运行k8s,管理用户的k8s集群,因此可以在云端的管控平面运行 Operator[3] 来实现。

Penetrator 通过集群内节点添加节点

用户通过 kubectl[4] 向 apiserver 发送请求,创建一个 nodes-task-crd CRD[5],Penetrator 监听到 task 任务创建之后,Penetrator 就会创建一个job任务,同时会生成 job 运行所需的 configmap 配置文件,这个 job 任务会被调度到指定的node-1节点上执行添加节点的操作。创建的 job 和 configmap 的 ownerReference[6] 指向 nodes-task-crd CRD,在 CRD 删除之后 Kubernetes 的 GC 会自动删除生成的 job 和 configmap。

Penetrator 会周期请求用户集群的 apiserver,查询 job 的运行状态,如果 job 不存在,则会请用户集群的apiserver,获取节点的安装状态,在节点没有全部安装完成,会根据未完成安装的节点信息重新下发 job 运行所需的 configmap 配置文件 add-node-cm,同时也会重新下发 job。为避免多个任务在同一个目标机器上执行添加节点的命令,对于一个添加节点的 task,有且只有一个 job,同时还要保对于一个用户的 k8s 集群,只能创建一个task 任务。

Penetrator云端直连添加节点

与通过集群内的节点添加节点不同,添加节点的job是运行在管控平面的k8s集群,具体设计如下图所示:

如图所示,用户通过 kubectl 向 apiserver 发送请求,创建一个 nodes-task-crd crd,Penetrator 监听到 task 任务创建之后,会创建 job 运行所需的 configmap 配置文件 add-node-cm 和登录目标机器节点的 ssh 的密码(passwd) 或私钥 (sshkey) 的secret,同时会创建一个 add-node-job job。add-node-job 运行在管控平面的 k8s 集群内,ssh 登录内网的节点,执行安装节点的命令。

Penetrators 实现的功能

批量安装边缘节点

NodeTask 的 spec.要添加的节点的 ip 列表,Penetrator 会根据节点名前缀生成节点名,将节点名和信息保存到configmap 中,下发job时挂载该 configmap 做为 job 的启动配置文件。

批量重装边缘节点

每次创建的 NodeTask 都会有唯一标签[7],NodeTask 在安装完节点之后会给节点打上该标签,同时 NodeTask 使用 label 判断节点是否安装完成,重装时节点的标签和 NodeTask 标签不一致,就会对节点执行重装操作。

Penetrator 的在 SuperEdge 的具体使用

功能演示视频: 

用 edgeadm 搭建 SuperEdge Kubernetes 边缘集群

如何搭建:请参考 用 edgeadm 一键安装边缘独立 Kubernetes 集群

部署 Penetrator

在 SuperEdge Kubernetes 边缘集群 Master 节点执行如下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f https://raw.githubusercontent.com/superedge/superedge/main/deployment/penetrator.yaml

具体使用见:使用 penetrator 添加边缘节点[8]

创建边缘节点密钥的 secret

Penetrator 组件是基于 Kubernetes 的 CRD[9] 实现的,要用 Penetrator 进行边缘节点的批量安装,需要提供边缘节点的登录方式,可以通过下面的方式提供:

  • 使用 SSH 的密码文件 passwd 创建 sshCredential kubectl -n edge-system create secret generic login-secret --from-file=passwd=./passwd
  • 或者,使用 SSH 的私钥文件 sshkey 创建 sshCredential kubectl -n edge-system create secret generic login-secret --from-file=sshkey=./sshkey 其中./passwd 和./sshkey 文件中分别保存的是目标节点 root 用户的登录口令和私钥(明文)

用 Penetrator 批量添加或批量重装边缘节点

下面分别给出批量添加边缘节点和批量重装节点的 yaml:

批量添加边缘节点的例子
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: nodetask.apps.superedge.io/v1beta1
kind: NodeTask
metadata:
name: nodes
spec:
nodeNamePrefix: "edge"        #节点名前缀,节点名的格式: nodeNamePrefix-随机字符串(6)
targetMachines:                    #待安装的节点的ip列表
  - 172.21.3.194
  - 172.21.3.195
sshCredential: login-secret     #存储目标节点root用户的登录口令(passwd)或者私钥(sshkey)的Secret
proxyNode: vm-2-117-centos  #集群内某个节点的节点名,该节点起到跳板机的作用,要求必须可以使用targetMachines中的ip地址ssh到待安装的节点

效果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get nodes –show-labels | grep edge | wc -l
50
批量重装边缘节点的例子
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: nodetask.apps.superedge.io/v1beta1
kind: NodeTask
metadata:
name: nodes
spec:
nodeNamesOverride:            #重装节点的节点名和IP
  edge-1mokvl: 172.21.3.194 #此处支持更改节点nodename,如:172.21.3.194节点之前的nodename为a,本次重装更改成edge-1mokvl
sshCredential: login-secret
proxyNode: vm-2-117-centos

效果:重装 edge-uvzzijv4 节点之前

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get nodes -o wide –show-labels
NAME               STATUS   LABELS
edge-uvzzijv4    Ready   app.superedge.io/node-label=nodes-lokbfd
...

重装 edge-uvzzijv4 节点之后

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get nodes -o wide –show-labels
NAME               STATUS    LABELS
edge-uvzzijv4   Ready      app.superedge.io/node-label=nodes-pfu8en

批量任务状态查看

在执行完批量操作后,可查询 task 的具体状态。

NodeTask 的 Status 中包含任务的执行状态 (creating和ready) 和未安装完成节点的节点名和IP,可以使用下面命令查看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get nt NodeTaskName -o custom-columns='STATUS:status.nodetaskStatus'

任务在执行过程的成功和错误信息以事件的形式上报的apiserver,可以使用下面命令查看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl -n edge-system get event

小结

针对云端管控平面和边缘节点不同的网络情况,选择不同的批量添加节点的形式,实现在云端管控平面批量添加节点。同时,添加 kubernetes 集群节点时需要安装文件,通过内网分发,缩短节点安装的时间,提高了节点安装的效率。

未来展望

未来我们会支持使用 Penetrator 在多集群纳管的场景下支持添加集群的节点。

合作和开源

Penetrator 组件已经在 SuperEdge release 0.4.0 开源,欢迎大家体验。我们也会持续提升 Penetrator 的能力,简化边缘集群场景下节点的操作,也欢迎对边缘计算感兴趣的公司、组织及个人一起共建 SuperEdge 边缘容器项目。

参考资料

[1]

SuperEdge: 【https://github.com/superedge/superedge】

[2]

job: 【https://kubernetes.io/docs/concepts/workloads/controllers/job/】

[3]

Operator: 【https://kubernetes.io/docs/concepts/extend-kubernetes/operator/】

[4]

kubectl:【 https://kubernetes.io/docs/reference/kubectl/overview/】

[5]

CRD: 【https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/】

[6]

ownerReference: 【https://kubernetes.io/zh/docs/concepts/workloads/controllers/garbage-collection/】

[7]

标签:【 https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/labels/】

[8]

使用 penetrator 添加边缘节点:【 https://github.com/superedge/superedge/blob/main/docs/installation/addnode_via_penetrator_CN.md】

[9]

CRD: 【https://kubernetes.io/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/】

  往期精选推荐  

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SuperEdge易学易用系列-系统介绍
SuperEdge是由腾讯、Intel、VMware、虎牙直播、寒武纪、首都在线和美团等多家公司共同发起的边缘容器管理系统,它基于原生Kubernetes、针对边缘计算和分布式云场景而设计,旨在将集中式的Kubernetes的能力拓展到边缘计算和分布式的资源管理场景,便于用户管理和运维地理位置远、分布广泛的边缘和分布式系统。该系统适用于IoT、边缘AI、智慧交通、工业互联网、分布式云等场景,有助于业务快速落地。本文将向大家介绍SuperEdge的主要使用场景和核心能力。
SuperEdge官方号
2021/07/07
1.1K0
SuperEdge 易学易用系列-SuperEdge 简介
王继罗,腾讯云专家工程师,腾讯边缘 Kubernetes 管理平台 TKE Edge 技术负责人,SuperEdge 边缘容器开源项目创始人&技术负责人。 关于 SuperEdge SuperEdge[1] 是由腾讯、Intel、VMware、虎牙直播、寒武纪、首都在线和美团等多家公司共同发起的边缘容器管理系统,它基于原生 Kubernetes、针对边缘计算和分布式云场景而设计,旨在将集中式的 Kubernetes 的能力拓展到边缘计算和分布式的资源管理场景,便于用户管理和运维地理位置远、分布广泛的边缘和
腾讯云原生
2021/07/15
7820
Addon SuperEdge 让原生 K8s 集群可管理边缘应用和节点
梁豪,腾讯TEG工程师,云原生开源爱好者,SuperEdge 开发者,现负责TKEX-TEG容器平台运维相关工作。 王冬,腾讯云TKE后台研发工程师,专注容器云原生领域,SuperEdge 核心开发人员,现负责腾讯云边缘容器TKE Edge私有化相关工作。 李腾飞,腾讯容器技术研发工程师,腾讯云TKE后台研发,SuperEdge核心开发成员。 边缘能力 先说说 Addon SuperEdge 后,您的普通 Kubernetes 集群将具备哪些能力: 既能管理中心应用和节点,也能管理边缘应用和节点 可以用
腾讯云原生
2021/07/06
7220
SuperEdge v0.4.0 发布,大幅提升使用和运维效率
关于 SuperEdge SuperEdge 提供了一套基于原生 Kubernetes 的边缘容器管理系统,该开源项目是由腾讯云联合英特尔、VMware 威睿、虎牙、寒武纪、美团、首都在线,多家公司共同发布。SuperEdge 把云原生能力扩展到边缘侧,不仅很好的实现了云端对边缘端资源和业务的管理和控制,而且提供了边缘应用管理能力,支持多区域应用部署、区域自治、灰度发布等一系列能力,为应用实现边缘原生化提供了强有力的支持。 SuperEdge v0.4.0 发布 SuperEdge 在2021-06-18
腾讯云原生
2021/06/23
5800
SuperEdge的新特性和未来之路
王冬,腾讯云高级研发工程师,专注于Kubernetes、容器等云原生领域,SuperEdge 核心开发人员,现负责腾讯云边缘容器TKE Edge私有化相关工作。 背景 2021年9月27号,在 VMware 联合了 Intel、 PingCAP 等多家合作公司举办的2021智能云边开源峰会边缘计算专场上,来自腾讯云的高级工程师王冬,发表《 SuperEdge 的新特性和未来之路》的分享。 SuperEdge[1] 是2020年由腾讯联合 Intel、VMware、虎牙直播、寒武纪、首都在线和美团等多家公司
腾讯云原生
2021/09/29
1.4K0
一文读懂 SuperEdge 边缘容器架构与原理
作者杜杨浩,腾讯云高级工程师,热衷于开源、容器和Kubernetes。目前主要从事镜像仓库,Kubernetes集群高可用&备份还原,以及边缘计算相关研发工作。 作者陈凯悦,腾讯云容器工程师,腾讯云边缘容器核心开发成员。 作者张鑫宇,腾讯云容器工程师,目前主要从事Kubernetes集群相关研发工作,边缘容器核心开发者之一。 前言 SuperEdge[1]是腾讯推出的Kubernetes-native边缘计算管理框架。相比openyurt[2]以及kubeedge[3],SuperEdge除了具备Kube
腾讯云原生
2021/01/13
1.6K0
边缘计算云原生开源方案选型比较
随着Kubernetes已经成为容器编排和调度的事实标准,各大公有云厂商都已经基于Kubernetes提供了完善的Kubernetes云上托管服务。同时也看到越来越多的企业、行业开始在生产中使用Kubernetes, 拥抱云原生。在各行各业数字化转型和上云过程中,公有云厂商也在主动拥抱传统线下环境,在思考各种各样的解决方案使云上能力向边缘(或线下)延伸。
边缘计算
2021/03/10
2K0
用 edgeadm 一键安装边缘 K8s 集群和原生 K8s 集群
王冬,腾讯云TKE后台研发工程师,专注容器云原生领域,SuperEdge 核心开发人员,现负责腾讯云边缘容器TKE Edge私有化相关工作。 梁豪,腾讯TEG工程师,云原生开源爱好者,SuperEdge 开发者,现负责TKEX-TEG容器平台运维相关工作。 姚树标,新浪微博软件工程师,开源项目爱好者,superEdge开发人员,现负责微博活动平台的设计及研发工作。 背景 目前,很多边缘计算容器开源项目在使用上均存在一个默认的前提:用户需要提前准备一个标准的或者特定工具搭建的 Kubernetes 集群,
腾讯云原生
2021/05/18
9170
SuperEdge 云边隧道新特性:从云端SSH运维边缘节点
李腾飞,腾讯容器技术研发工程师,腾讯云TKE后台研发,SuperEdge核心开发成员。 王冬,腾讯云TKE后台研发工程师,专注容器云原生领域,SuperEdge 核心开发人员,现负责腾讯云边缘容器TKE Edge私有化相关工作。 背景 在边缘集群的场景下边缘节点分布在不同的区域,且边缘节点和云端之间是单向网络,边缘节点可以访问云端节点,云端节点无法直接访问边缘节点,给边缘节点的运维带来很大不便,如果可以从云端SSH登录到边缘节点可以简化节点的运维工作。针对这一需求,SuperEdge[1] 项目扩展了
腾讯云原生
2021/06/30
9610
边缘计算k8s集群之SuperEdge
边缘计算,是指在靠近物或数据源头的一侧,采用网络、计算、存储、应用核心能力为一体的开放平台,就近提供最近端服务。其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务、应用智能、安全与隐私保护等方面的基本需求。边缘计算处于物理实体和工业连接之间,或处于物理实体的顶端。而云端计算,仍然可以访问边缘计算的历史数据。
雪雁-心莱科技
2021/03/04
1.7K0
边缘计算k8s集群之SuperEdge
SuperEdge再添边缘智能加速卡,为边缘智能推理再提速10倍
寒武纪 AE 团队,腾讯云容器中心边缘计算团队,SuperEdge 开发者 SuperEdge 支持寒武纪边缘智能加速卡 MLU220 SuperEdge 对应的商业产品 TKE Edge 也一直在硬件和加速方面在持续耕耘,不但支持 NVIDIA 系列 GPU 的加速,还在GPU虚拟,QGPU 化等方面持续发力。本次联合寒武纪对边缘智能加速卡进行了支持,以利于用户在边缘进行模型训练和边缘智能推理性能的提升。下面是经过寒武纪 AE 团队和 SuperEdge 开源团队的联合测试,对寒武纪边缘智能加速卡兼容性
腾讯云原生
2021/12/03
5960
SuperEdge 高可用云边隧道有哪些特点?
作者李腾飞,腾讯容器技术研发工程师,腾讯云TKE后台研发,SuperEdge核心开发成员。 背景 在边缘集群中,边缘端和云端为单向网络,云端无法主动连接边缘端,常见的解决方案是边缘端主动和云端(tunnel server)建立长连接,云端通过长连接将请求转发到边缘端。在云端隧道 server 实例扩容后需要考虑新增的实例对已有的边缘端长连接转发的影响。出于系统稳定性的考虑,能通过云边隧道采集到边缘端的监控信息。 社区方案ANP[1] 隧道云端 Server 自动扩缩容 ANP 主要用于代理转发 apise
腾讯云原生
2021/08/05
9890
高效边缘流处理方案教程:使用 OpenYurt 部署和管理 eKuiper
LF Edge eKuiper 是轻量级物联网数据分析和流处理软件,通常在边缘端运行。它提供了一个管理仪表板(https://github.com/lf-edge/ekuiper/blob/master/docs/zh_CN/manager-ui/overview.md)来管理一个或多个 eKuiper 实例。通常,仪表板部署在云节点中,用于管理跨多个边缘节点的 eKuiper 实例。
CNCF
2021/08/26
1.2K0
高效边缘流处理方案教程:使用 OpenYurt 部署和管理 eKuiper
多种边缘集群管理方案对比选型(文末送书)
边缘计算平台,旨在将边缘端靠近数据源的计算单元纳入到中心云,实现集中管理,将云服务部署其上,及时响应终端请求。然而,成千上万的边缘节点散布于各地,例如银行网点、车载节点、加油站等基于一些边缘设备管理场景,服务器分散在不同城市,无法统一管理,为了优化集群部署以及统一管理,特探索边缘计算场景方案。
没有故事的陈师傅
2021/10/20
1.5K0
SuperEdge再添国产智能加速卡支持,为边缘智能推理再提速10倍
寒武纪 AE 团队,腾讯云容器中心边缘计算团队,SuperEdge 开发者 SuperEdge 支持国产智能加速卡寒武纪 MLU220 SuperEdge 对应的商业产品 TKE Edge 也一直在硬件和加速方面在持续耕耘,不但支持 NVIDIA 系列 GPU的加速,还在 GPU 虚拟,QGPU 化等方面持续发力。本次联合寒武纪对国产智能边缘加速卡进行了支持,以利于用户在边缘进行模型训练和边缘智能推理性能的提升。下面是经过寒武纪 AE 团队和 SuperEdge 开源团队的联合测试,对国产寒武纪边缘计算加
腾讯云原生
2021/11/23
7320
一文读懂 SuperEdge 云边隧道
李腾飞,腾讯容器技术研发工程师,腾讯云TKE后台研发,SuperEdge核心开发成员。 杜杨浩,腾讯云高级工程师,热衷于开源、容器和Kubernetes。目前主要从事镜像仓库,Kubernetes集群高可用&备份还原,以及边缘计算相关研发工作。 SuperEdge 介绍 SuperEdge 是 Kubernetes 原生的边缘容器方案,它将 Kubernetes 强大的容器管理能力扩展到边缘计算场景中,针对边缘计算场景中常见的技术挑战提供了解决方案,如:单集群节点跨地域、云边网络不可靠、边缘节点位于 NA
腾讯云原生
2021/05/17
1.1K0
分布式边缘容器项目 SuperEdge v0.7.0 版本来袭!
陈 SuperEdge 开发者团队,腾讯云容器中心TKE Edge团队 摘要 SuperEdge 是基于原生 Kubernetes 的分布式边缘云容器管理系统,由腾讯云牵头,联合英特尔、VMware 威睿、虎牙、寒武纪、美团、首都在线等多家厂商在2020年12月共同发起的边缘计算开源项目,旨在将把 Kubernetes 强大的容器管理能力无缝的扩展到边缘计算和分布式资源管理的场景中,为边缘 IoT,边缘 AI,边缘智慧行业等赋能,推动物联网和数字化的落地。目前已成为 CNCF Sandbox 项目,由 C
腾讯云原生
2022/03/14
5170
白话边缘计算解决方案 SuperEdge
姚树标,新浪微博软件工程师,开源项目爱好者,SuperEdge开发者,现负责微博活动平台的设计及研发工作。 王冬,腾讯容器云后台研发工程师,开源项目爱好者,专注容器云原生领域,现负责腾讯云边缘容器TKE Edge私有化相关工作。 SuperEdge 的定义 引用下 SuperEdge开源官网[1] 的定义: SuperEdge is an open source container management system for edge computing to manage compute resourc
腾讯云原生
2021/07/08
9550
手把手教你在 SuperEdge 上用 EdgeX Foundry 接入 IoT 设备
连泓乔,华南理工计算机科学与技术大三在读,主要研究容器领域,Kubernetes、容器等云原生技术爱好者,SuperEdge 优秀贡献者。 王冬,腾讯云研发工程师,专注于 Kubernetes、容器等云原生领域,SuperEdge 核心开发人员,现负责腾讯云边缘容器 TKE Edge 私有化相关工作。 李腾飞,腾讯容器技术研发工程师,腾讯云 TKE 后台研发,SuperEdge 核心开发成员。 背景 随着物联网的发展,连接云的设备种类和数量越来越多,2020年全球物联网设备已高达126亿个[1],并
腾讯云原生
2021/09/07
2.6K0
案例| 腾讯WeMake工业互联网平台的边缘容器化实践:打造更高效的工业互联网
腾讯WeMake工业互联网平台基于强大的数据、算力、算法与连接能力,并叠加上大量的工业Know-how, 机理模型与OT技术,搭建了一套强大的工业互联网平台架构。应用和数据是企业的核心资源,如何保证应用和数据的可靠性、安全性是腾讯WeMake最关心的问题之一。出于安全考虑,多数用户强调“数据落本地”,单靠数据中心难以满足其需求。此外,随着物联网技术的发展,平台中大量的智能终端位于网络边缘,集中计算模式不能满足所有应用场景。基于以上问题,腾讯WeMake工业互联网平台选用了边缘容器打造了一套安全高效的工
腾讯云原生
2021/03/15
2.1K0
推荐阅读
相关推荐
SuperEdge易学易用系列-系统介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验