云原生基础设施实践:NebulaGraph 的 KubeBlocks 集成故事

像是 NebulaGraph 这类基础设施上云,通用的方法一般是将线下物理机替换成云端的虚拟资源,依托各大云服务厂商实现“服务上云”。但还有一种选择,就是依托云数据基础设施,将数据库产品变成为云生态的一环,不只是提供自身的数据云服务,还能同其他的数据库一起分析挖掘业务数据价值。
在本篇分享中,让你在了解何为云原生基础设施之余,可以获得更多的 NebulaGraph 部署使用方法。又有新的使用姿势了,下面一起来了解下这个集成过程以及相关的使用方法。

KubeBlocks 是什么

在介绍之前,可能有了解云生态的小伙伴,会好奇标题中的 “KubeBlocsk”是什么?它带有 Kube- 前缀,和云原生什么关系?

KubeBlocks 的名字源自 Kubernetes(K8s)和乐高积木(Blocks),致力于让 K8s 上的数据基础设施管理就像搭乐高积木一样,既高效又有趣。

它是基于 Kubernetes 的云原生数据基础设施,为用户提供了关系型数据库、NoSQL 数据库、向量数据库以及流计算系统的管理控制功能。

下面开始进入主菜,KubeBlocsk 对 NebulaGraph 的集成。别看本文篇幅不短,事实上集成过程非常便捷,三步就能完成本次集成实践。

KubeBlocks 快速集成图数据库 NebulaGraph

因为本身 KubeBlocks 是 K8s 生态的框架基础设施,因此,你如果要基于 KubeBlocks 集成数据库或者是计算引擎的话,本章节内容就是相关的分享。简单来说,只要你熟悉 K8s,不需要学习任何新概念,像下面这样,3 步就搞定一个数据库的集成。

如果你不想了解集成过程,可以跳过本章节,直接进入到下一个章节的使用部分,了解如何在 KubeBlocks 上使用数据库。

下面,讲述本次 NebulaGraph 的集成过程,虽然本文以 NebulaGraph 为例,但是集成过程是相似的,可以举一反三。

1. NebulaGraph 的服务架构

第一步,我们需要理解集群的组成,了解图数据库 NebulaGraph 的每个模块作用,以及其配置启动方式。

图 1: Nebula Graph 的架构图(来源:https://github.com/vesoft-inc/nebula)

如上图所示,完整的 NebulaGraph 系统是由内核和周边工具组成,包括不限于 nebula-console、nebula-python、nebula-java 等客户端。而其中的内核 Core 部分主要由三大服务组成,分别是:

  • Meta Service:由 nebula-metad 进程提供,负责元数据管理,例如 Schema 操作、集群管理和用户权限管理等。如果集群部署的话,多个 metad 之间通过 raft 保证数据一致性;
  • Graph Service:由 nebula-graphd 进程提供,负责处理计算请求;
  • Storage Service:由 nebula-storaged 进程提供,负责存储数据。

2. 创建集群模板

在这一步,定义下集群拓扑、配置和版本等信息。

KubeBlocks Addon 支持多种扩展方式,目前主流的扩展方式是 Helm。因此,这里采用 Helm 方式来搞定相关部署配置:

创建一个 NebulaGraph 的 Helm Chart,并增加以下模板文件:

  • clusterdefinition.yaml:用来定义集群拓扑、组件配置和组件启动脚本。根据第一步的分析,我们知道 NebulaGraph 集群是一个多组件的形态,如果我们要正常使用图数据的话,需要用到 3 个内核组件,和 1 个客户端组件。因此,在这个文件中,组件配置中需要包括 4 个组件,后面使用实践部分会讲到,这里不做赘述;
  • clusterversion.yaml:用来定义版本信息,例如:每个组件的 Docker Images。在本次实践中,支持的是 NebulaGraph v3.5.0 版本。此外,一个 clusterdefinition.yaml 文件可以关联多个 clusterversion.yaml 文件。因此,后续即使 NebulaGraph 发布了新版本,我们只用添加新的 clusterversion.yaml 文件就好。

搞定模版后,来快速地在本地环境调试下 Helm Chart,来校验正确性。

3. 添加 Addon 配置

最后,只用再添加大约 30 行 YAML 代码,就可以将新添加的 NebulaGraph 配置为 KubeBlocks 的 addon,非常方便。

就这样,三个步骤,就完成了 KubeBlocks 对 NebulaGraph 的集成。

附上相关的 PR 方便你做参考,整个过程非常简单:

  • https://github.com/apecloud/kubeblocks/pull/3716
  • https://github.com/apecloud/kubeblocks/pull/3944

图 2. NebulaGraph Helm Chart PR

图 3. NebulaGraph Addon PR

当然,如果你想在 KubeBlocks 上集成其他数据,一统你的那些数据库们,可以参考上面的思路。按照官方说法:“目前 KubeBlocks 已经支持了非常丰富的数据库架构和部署形态,如 MySQL、Redis、MongoDB 等,包括多种使用主备复制架构和基于 Paxos/Raft 的分布式架构”。

下面,来说说如何在 KubeBlocks 上使用图数据库 NebulaGraph。

如何在 KubeBlocks 上使用 NebulaGraph

你可以通过以下方式在 KubeBlocks 上体验 NebulaGraph 集群。

1. 安装 kbcli 和 KubeBlocks

安装最新版的 kbcli 和 KubeBlocks,下面是参考文档:

  • kbcli:https://kubeblocks.io/docs/preview/user_docs/installation/install-kbcli
  • KubeBlocks:https://kubeblocks.io/docs/preview/user_docs/installation/install-kubeblocks

2. 激活 Addon

安装了最新版本的 KubeBlocks 后,可以看到 NebulaGraph 已经出现在 KubeBlocks 的 addon 列表中。

下面命令可以查看到所有的 addon:

kbcli addon list

执行之后,我们可以看到 nebula 已经出现在列表中,但是它的状态是 Disabled。为了有效地控制服务资源,KubeBlocks 默认不会激活相关 addon 服务,只激活了几个主流数据库。

注: 如果在列表中,没有找到 nebula addon,请检查下你安装的软件版本,确保已安装新版本的 kbcli 和 KubeBlocks。

因为 nebula 服务处于未激活的状态,下面我们来激活下服务:

执行下面命令:

kbcli addon enable nebula

因为网络原因, 激活 Addon 可能需要一点时间, 可通过如下 addon describe 命令查看是否激活成功。

kbcli addon describe nebula
Name:               nebula
Description:        NebulaGraph is an Apache 2.0 licensed distributed graph database.
Labels:             kubeblocks.io/provider=community
Type:               Helm
Status:             Enabled
Auto-install:       false

若状态显示 Enabled 则表示服务已经激活成功。

3. 创建 NebulaGraph 集群

  1. 创建 NebulaGraph 集群

激活我们的 nebula 服务后,我们可以像创建 MySQL、PostgreSQL 集群一样,快速创建一个 NebulaGraph 集群,这里我们管它叫“mynebula”。像下面一样,一行命令搞定集群创建:

kbcli cluster create mynebula --cluster-definition nebula

其中:

  • mynebula 是集群名称, 可以替换为你想要的集群名。
  • --cluster-definition 指定了从哪个预定义的集群模板开始创建,我们选择 nebula。
  1. 查看集群的各个组件

list-components 命令可查看集群的组件信息:

kbcli cluster list-components mynebula

这是执行结果:

 NAME              NAMESPACE   CLUSTER    TYPE              IMAGE
nebula-console    default     mynebula   nebula-console    docker.io/vesoft/nebula-storaged:v3.5.0
nebula-graphd     default     mynebula   nebula-graphd     docker.io/vesoft/nebula-storaged:v3.5.0
nebula-metad      default     mynebula   nebula-metad      docker.io/vesoft/nebula-storaged:v3.5.0
nebula-storaged   default     mynebula   nebula-storaged   docker.io/vesoft/nebula-storaged:v3.5.0

可以看到,一个完整的 NebulaGraph 集群由 4 个组件组成,包括 nebula-console、nebula-graphd、nebula-metad、和 nebula-storaged,这也和前文介绍的 NebulaGraph 服务架构相呼应。

  1. 查看集群的各个实例

list-instances 命令用来查看实例信息:

kbcli cluster list-instances mynebula

可以看到,每个组件各自有多少实例,每个实例是什么配置规格。

NAME                                       NAMESPACE   CLUSTER    COMPONENT         STATUS    ROLE     ACCESSMODE   AZ       CPU(REQUEST/LIMIT)   MEMORY(REQUEST/LIMIT)   STORAGE     NODE                            CREATED-TIME
mynebula-nebula-console-65844d578b-vf9kz   default     mynebula   nebula-console    Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
mynebula-nebula-graphd-0                   default     mynebula   nebula-graphd     Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
mynebula-nebula-metad-0                    default     mynebula   nebula-metad      Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
mynebula-nebula-storaged-0                 default     mynebula   nebula-storaged   Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
  1. 查看集群状态

list 命令用来查看集群整体状态:

kbcli cluster list mynebula
NAME       NAMESPACE   CLUSTER-DEFINITION   VERSION         TERMINATION-POLICY   STATUS    CREATED-TIME
mynebula   default     nebula               nebula-v3.5.0   Delete               Running   Jul 09,2023 17:03 UTC+0800

若显示 Status 为 Running,表示集群已经创建成功并正在运行。

  1. 连接集群后,就可以像其他部署方式一样正常使用 NebulaGraph 的图服务了。像用 SHOW HOSTS 命令,查看当前数据和分布状态:
kbcli cluster connect mynebula

Connect to instance mynebula-nebula-console-65844d578b-vf9kz

Welcome!

(root@nebula) [(none)]> SHOW HOSTS;
+------------------------------------------------------------------------------------------+------+----------+--------------+----------------------+------------------------+---------+
| Host                                                                                     | Port | Status   | Leader count | Leader distribution  | Partition distribution | Version |
+------------------------------------------------------------------------------------------+------+----------+--------------+----------------------+------------------------+---------+
| "mynebula-nebula-storaged-0.mynebula-nebula-storaged-headless.default.svc.cluster.local" | 9779 | "ONLINE" | 0            | "No valid partition" | "No valid partition"   | "3.5.0" |
+------------------------------------------------------------------------------------------+------+----------+--------------+----------------------+------------------------+---------+
Got 1 rows (time spent 7.119ms/9.574125ms)

Sun, 09 Jul 2023 08:53:00 UTC

至此,你已经能正常使用 NebulaGraph 服务了。进阶使用的话,可以参考官方的文档:https://docs.nebula-graph.com.cn/3.5.0/

  1. 运维 Nebula Graph Cluster

当集群状态为 Running 后,你可以登录集群查看信息,并进行常见的运维操作,像是扩缩容、服务启停:hscalevscalevolume-expandstartstop 等操作。

下面,以水平扩缩容 hscale 为例,示范下对 NebulaGraph 集群的运维过程。

通过 kbcli 的hscale 命令,可以对集群的指定组件进行扩缩容。例如,将 nebula-storaged 组件扩展为 3 个节点:

kbcli cluster hscale mynebula --components nebula-storaged --replicas 3

通过 kbcli cluster list mynebula 命令再次查看集群状态,可以看到状态变更为 HorizontalScaling,说明它正在扩节点:

 NAME       NAMESPACE   CLUSTER-DEFINITION   VERSION         TERMINATION-POLICY   STATUS              CREATED-TIME
mynebula   default     nebula               nebula-v3.5.0   Delete               HorizontalScaling   Jul 09,2023 17:03 UTC+0800

等待几十秒后,扩容成功。我们再来查看下实例信息,可以看到已经有 3 个 nebula-storaged 节点:

 kbcli cluster list-instances mynebula
 
 NAME                                       NAMESPACE   CLUSTER    COMPONENT         STATUS    ROLE     ACCESSMODE   AZ       CPU(REQUEST/LIMIT)   MEMORY(REQUEST/LIMIT)   STORAGE     NODE                            CREATED-TIME
mynebula-nebula-console-65844d578b-vf9kz   default     mynebula   nebula-console    Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
mynebula-nebula-graphd-0                   default     mynebula   nebula-graphd     Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
mynebula-nebula-metad-0                    default     mynebula   nebula-metad      Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
mynebula-nebula-storaged-0                 default     mynebula   nebula-storaged   Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:03 UTC+0800
mynebula-nebula-storaged-1                 default     mynebula   nebula-storaged   Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:46 UTC+0800
mynebula-nebula-storaged-2                 default     mynebula   nebula-storaged   Running   <none>   <none>       <none>   1 / 1                1Gi / 1Gi               data:20Gi   kind-control-plane/172.19.0.2   Jul 09,2023 17:47 UTC+0800

再次连接 NebulaGraph 集群,查看存储节点信息,可以看到新增的两个节点也已经可用,状态为 online

kbcli cluster connect mynebula
Connect to instance mynebula-nebula-console-65844d578b-vf9kz

Welcome!

(root@nebula) [(none)]> SHOW HOSTS
+------------------------------------------------------------------------------------------+------+----------+--------------+----------------------+------------------------+---------+
| Host                                                                                     | Port | Status   | Leader count | Leader distribution  | Partition distribution | Version |
+------------------------------------------------------------------------------------------+------+----------+--------------+----------------------+------------------------+---------+
| "mynebula-nebula-storaged-0.mynebula-nebula-storaged-headless.default.svc.cluster.local" | 9779 | "ONLINE" | 0            | "No valid partition" | "No valid partition"   | "3.5.0" |
| "mynebula-nebula-storaged-1.mynebula-nebula-storaged-headless.default.svc.cluster.local" | 9779 | "ONLINE" | 0            | "No valid partition" | "No valid partition"   | "3.5.0" |
| "mynebula-nebula-storaged-2.mynebula-nebula-storaged-headless.default.svc.cluster.local" | 9779 | "ONLINE" | 0            | "No valid partition" | "No valid partition"   | "3.5.0" |
+------------------------------------------------------------------------------------------+------+----------+--------------+----------------------+------------------------+---------+
Got 3 rows (time spent 1.971ms/5.443458ms)

Sun, 09 Jul 2023 10:00:06 UTC

后续,我们还会逐步集成 NebulaGraph 的备份/恢复、监控、参数变更等能力。

如果你想要了解更多 kbcli 支持的运维命令,可翻阅文档:https://kubeblocks.io/docs/preview/user_docs/cli。

丰富 NebulaGraph 生态

熟悉 NebulaGraph 周边生态的小伙伴,可能知道在 KubeBlocks 之前,NebulaGraph 对接了 Spark 和 Flink 生态,主要对接大数据生态,从而方便大家使用大数据的计算引擎。而这次,NebulaGraph 往云原生这边迈了一步,通过在 KubeBlocks 的集成,希望能给社区的大家带来更加丰富的生态环境。
正如本次完成集成工作的内核研发 @xtcylist 所说:“用开源的方式解决开源的问题”,我们希望联合和上下游的开源生态,构建更完善的 NebulaGraph 图生态。而他同样认为“数据库全部容器化部署是大趋势;全部 K8s 化部署也是一个比较热的预言。”。

因此,拥抱未来,NebulaGraph 先在 KubeBlocks 上进行了集成工作。如果你想要加入,完善 NebulaGraph 的生态,欢迎留言交流你的看法。


谢谢你读完本文 (///▽///)

欢迎前往 GitHub 来阅读 NebulaGraph 源码,或是尝试用它解决你的业务问题 yo~ GitHub 地址:https://github.com/vesoft-inc/nebula 想要交流图技术和其他想法,请前往论坛:https://discuss.nebula-graph.com.cn/

想要了解更多 KubeBlocks 和 NebulaGraph 的集成故事,欢迎来本周六的 meetup 同我们线下面对面交流~分享现场更有 NebulaGraph 绕坑秘籍放送 🧐 报名传送门:https://3393206724443.huodongxing.com/event/1711136721400

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/43606.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《面试1v1》如何提高远程用户的吞吐量

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

【单调栈 +前缀和】AcWing 4738. 快乐子数组

原题链接 原题链接 相关算法概念介绍 前缀和&#xff08;Prefix Sum&#xff09; 前缀和是指将数组中从开头位置到当前位置的所有元素累加得到的新数组。通常&#xff0c;我们使用一个额外的数组来保存这些累加和&#xff0c;这个数组被称为前缀和数组。对于原始数组A&…

性能测试Ⅵ(总结)

locust&#xff1a;是基于Python语言的性能测试工具&#xff0c;它是基于协程的思想来进行设计的。Python语言是没有办法利用多核的优势&#xff0c;所以了Python为了解决这个问题&#xff0c;设计了协程&#xff0c;作为协程的任务&#xff0c;遇到IO堵塞就立刻切换。 生命是协…

项目初始化--uniapp--vscode--vue3--ts

HBuilderX 创建 uni-app 项目 注意开启服务端口 目录结构 ├─pages 业务页面文件存放的目录 │ └─index │ └─index.vue index页面 ├─static 存放应用引用的本地静态资源的目录(注意&#xff1a;静态资源只能存放于此) ├─unpackage …

Ceph 应用

Ceph 应用 一、创建 CephFS 文件系统 MDS 接口 1.服务端操作 1&#xff09;在管理节点创建 mds 服务 cd /etc/ceph ceph-deploy mds create node01 node02 node032&#xff09;查看各个节点的 mds 服务 ssh rootnode01 systemctl status ceph-mdsnode01 ssh rootnode02 syst…

代码随想录| 图论02●695岛屿最大面积 ●1020飞地的数量 ●130被围绕的区域 ●417太平洋大西洋水流问题

#695岛屿最大面积 模板题&#xff0c;很快.以下两种dfs&#xff0c;区别是看第一个点放不放到dfs函数中处理&#xff0c;那么初始化的area一个是1一个是0 int dir[4][2]{0,1,0,-1,1,0,-1,0};void dfs(int x, int y,int n, int m, int &area,vector<vector<bool>…

K8S初级入门系列之十一-安全

一、前言 安全是K8S重要的特性&#xff0c;在K8S初级入门系列之四-Namespace/ConfigMap/Secret章节&#xff0c;我们已经已经了解了Namespace&#xff0c;Secret与安全相关的知识。本篇将梳理K8S在安全方面的策略。主要包括两个方面&#xff0c;API安全访问策略以及Pod安全策略…

YOLOv5基础知识

定位和检测: 定位是找到检测图像中带有一个给定标签的单个目标 检测是找到图像中带有给定标签的所有目标 图像分割和目标检测的区别&#xff1a; 图像分割即为检测出物体的完整轮廓&#xff0c;而目标检测则是检测出对应的目标。&#xff08;使用框框把物体框出来&#xff…

Linux:多进程和多线程回环socket服务器和客户端

多进程socket服务器代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> #include <ctype.h> #include <sys/wait.h> #i…

06.计算机网络——IP协议

文章目录 网络层IP协议基本概念协议头格式如何解包如何交付网段划分子网掩码特殊的IP地址IP地址的数量限制私有IP地址和公网IP地址路由 网络层 IP协议 IP协议提供一种将数据从A主机送达到B主机的能力&#xff0c;进行网络层的通信。 ​ IP协议 基本概念 主机 —— 配有IP地址…

SpringCloudAlibaba微服务实战系列(五)Sentinel1.8.5+Nacos持久化

Sentinel数据持久化 前面介绍Sentinel的流控、熔断降级等功能&#xff0c;同时Sentinel应用也在面临着一个问题&#xff1a;我们在Sentinel后台管理界面中配置了一堆流控、降级规则&#xff0c;但是Sentinel一重启&#xff0c;这些规则全部消失了。那么我们就要考虑Sentinel的持…

小程序路由跳转页面重复问题

目标&#xff1a;想要某个页面在历史中&#xff08;页面栈&#xff09;只显示一次 什么是页面栈&#xff1a; 在小程序开发中&#xff0c;页面栈是指小程序当前打开的页面的层级关系堆栈。每当打开一个新页面时&#xff0c;它会被放置在页面栈的顶部&#xff0c;而当前页面就位…

Linux学习之Ubuntu 20.04安装内核模块

参考博客&#xff1a;Ubuntu20.04编译内核教程 sudo lsb_release -a可以看到我当前的系统是Ubuntu 20.04.4&#xff0c;sudo uname -r可以看到我的系统内核版本是5.4.0-100-generic。 sudo apt-get install -y libncurses5-dev flex bison libssl-dev安装所需要的依赖。 su…

交换一个整数二进制位的奇数位和偶数位

目录 一、方案一 1.求待操作数的二进制序列 2.创建一个数组存放待操作数的二进制序列 3.交换二进制序列奇偶位 4.输出奇偶位交换之后的二进制序列 5.代码 二、方案二&#xff08;宏的实现&#xff09; 1.求待操作数二进制序列偶数位 2.求待操作数二进制序列奇数位 3.求待…

手机word文档怎么转换成pdf?分享两种方法

手机word文档怎么转换成pdf&#xff1f;在如今信息化的时代&#xff0c;电子文档已经成为人们日常办公不可或缺的一部分。随着科技的不断进步&#xff0c;电子文档的格式也在不断发展。PDF作为电子文档的一种重要格式&#xff0c;被广泛使用。那么&#xff0c;如何将手机上的Wo…

信息管理系统---Servlet+javaBean+Druid+DButil

这里是学习了Servlet后结合数据库进行增删查改–登录等作为练手项目非常适合 准备工作&#xff1a; 1.数据准备 这张表是用户表&#xff0c;用于登录 CREATE TABLE users (id int NOT NULL AUTO_INCREMENT,username varchar(25) DEFAULT NULL,password varchar(20) DEFAULT…

gazebo simulation

<?xml version"1.0" ?> <!-- --> <!-- | This document was autogenerated by xacro from /home/xrh/ros-project/gazebo_test/src/fmauch_universal_robot/ur_description/urdf/ur3_D455_2f140.urdf.xacro | --> <!-- | EDITING THIS…

C# Yolo+Onnx 号牌识别

参考 https://github.com/missxingwu/net_yolov5_plate https://github.com/ivilson/Yolov7net https://github.com/we0091234/Chinese_license_plate_detection_recognition 效果 项目 VS2022.net 4.8OpenCvSharp4Microsoft.ML.OnnxRuntime 部分代码 using System; using …

基于RASC的keil电子时钟制作(瑞萨RA)(3)----使用J-Link烧写程序到瑞萨芯片

基于RASC的keil电子时钟制作3_使用J-Link烧写程序到瑞萨芯片 概述硬件准备视频教程软件准备hex文件准备J-Link与瑞萨开发板进行SWD方式接线烧录 概述 这一节主要讲解如何使用J-Link对瑞萨RA芯片进行烧录。 硬件准备 首先需要准备一个开发板&#xff0c;这里我准备的是芯片型…

【内网自制无需密码的SSL证书--适用与IP或者localhost】

内网自制无需密码的SSL证书--适用与IP或者localhost 前言步骤确认是否安装openssl自制CA私钥自制csr文件免除密码自制CA证书 验证 前言 搞半死&#xff0c;原来这么简单&#xff0c;今天就把教程分享给大家&#xff0c;本文基于CentOS7环境的openssl生成SSL自制证书&#xff0…