48  
Qubernetes
作者: 姜天雨 于 2021年07月23日 发布在分类 / 底层框架资料 / GoQuorum 下,并于 2021年07月23日 编辑

Qubernetes

Qubernetes  是一个用于生成 GoQuorum 网络资源、 Kubernetes GoQuorum 资源以及管理 GoQuorum Kubernetes 部署并与之交互的项目。 

Qubernetes 具有启用快速设置和易用性的默认设置。 Qubernetes 可针对更高级的 Kubernetes 部署进行定制。例如,具有可配置的入口、网络策略、安全环境和存储 大小。 Qubernetes 包括对 Cakeshop 、监控和验收测试的支持。

构建容器

qubernetes build container:

  • 以最少的配置工作。在以下示例中,最小配置称为 qubernetes.yaml
  • 生成 GoQuorum 资源,包括配置和密钥。
  • GoQuorum 网络生成 Kubernetes 资源。
  • 可以被其他需要生成 GoQuorum 资源的项目利用。例如, GoQuorum向导 使用构建容器生成 GoQuorum 网络资源,并运行 Kubernetes

运行 qubernetes docker 容器时,必须使用 -v标志将最小配置文件和 out目录挂载到容器中。容器退出后,生成的资源已安装在out主机上的目录中。

使用 Qubernetes 容器生成 GoQuorum K8s 资源的示例: 粘贴图片

低配置

Qubernetes 将配置实现为代码,并运行名为 qubernetes.yaml qubernetes-generated.yaml的最小配置文件。 可以创建和修改配置文件:

  • 手动

  • 使用 qctl 命令行工具。 qctl使用户能够生成和操作配置文件。 

单个集群部署的最小配置文件示例包括创世文件以及集群中每个节点所需的参数。 节点之间的共识和版本可以根据 Kubernetes 中运行的内容进行更改。 每个节点代表一个部署,管理一个 Pod (即 Kubernetes 中的最小单元)。 每个节点用于为 GoQuorum 生成必要的配置文件。 例如permissioned-nodes.json, static-nodes.json, istanbul-validator.toml,加载账户值,设置测试合约。

粘贴图片

节点

最小配置的nodes部分表示在单个集群中运行的节点。 在单个集群中运行节点时,该节点定义:

  • 集群中节点的键

  • 要使用的版本

  • 哪里获取 docker 镜像

  • 共识

粘贴图片

qctl 命令行工具

qctl是一个 golang 命令行工具,用于创建和操作最小配置,并与正在运行的 Kubernetes 网络进行交互。

遵循 Unix 哲学,这些命令有意只做一件事。 将命令添加到脚本中以自动完成网络创建和其他任务。

粘贴图片

用于多集群网络的 Qubernetes

多集群网络支持高可用性并连接不同的业务部门和公司。 下面概述了使用 Qubernetes 管理和启用跨集群 GoQuorum Kubernetes 部署的初始方法。 

节点

 minimal configuration nodes部分表示在单个集群中运行的节点。

粘贴图片

外部节点

外部节点是集群外部节点的多集群概念。 外部节点需要网络路由到必要的服务(GoQuorum p2p Tessera p2p ),如果使用istanbul 共识,则需要节点地址。 添加外部节点时,必须通过K8s_Node_IP:Node_Port外部集群向外界暴露一个pod来获取这些信息。

qctl 命令用于导出添加外部节点所需的信息。 在部署节点之前,无法始终知道所需的信息。 例如,端口由 Kubernetes 提供,并且在部署节点之前无法知道。

粘贴图片

二集群多集群示例

粘贴图片

要添加外部节点,必须有一个初始集群在运行。 此示例假设两个实体管理自己的 Kubernetes 集群 A B

1. A 启动初始集群并部署其初始节点。

粘贴图片

2. 集群运行后, A 运行qctl 以外部格式获取其集群节点。

粘贴图片

3. A 通过复制和粘贴上一个命令的输出以及与 B genesis.json 来共享外部节点信息。

4. B 使用内部节点和由其集群拥有的节点生成其初始 Qubernetes 配置文件。

粘贴图片

B A 的外部节点添加到他们的配置文件中,以及从 A 获取的 genesis.json 到他们的配置中,并重新生成 Kuberenetes 网络资源。

粘贴图片

6. B 部署网络。 网络已启动但无法连接到 A ,因为 A 尚未添加来自 B 的外部节点。

粘贴图片

7. B 运行 qctl 从其运行的集群中获取外部节点信息。

粘贴图片

8. B 通过复制和粘贴上述输出并将其发送给 A ,与 A 共享其外部节点。

9. A 将来自 B 的外部节点信息添加到 A 配置文件中。

A 的更新配置 :

粘贴图片

10. A Kubernetes 网络资源生成更新。 更新保持当前节点不变,只生成差异,并根据需要更新配置文件。

粘贴图片

11. A 将更新后的资源部署到其集群。

粘贴图片

集群现在可以连接,并且有一个跨越多个集群的 GoQuorum Kubernetes 网络。

使用 NodePorts 跨命名空间的多集群 

Kubernetes 中的命名空间是同一个正在运行的 Kubernetes 实例中的一个隔离集群。 您可以通过 NodePort 服务公开服务来跨命名空间添加节点。

A NodePort service in Kubernetes 通过 K8s_Node_IP:Node_Port  pod 暴露给外界。

NodePort 直到部署时才知道。 在部署 GoQuorum 集群时, NodePort 已分配,可从 Kubernetes 获取。

粘贴图片

节点端口表示为对 <Internal_Port:External_Port> 在下面的示例中,8545表示集群使用的内部端口,31346表示外部端口。

粘贴图片

要通过 NodePort 访问服务,还必须知道 Kubernetes 节点 IP Kubernetes 节点 IP 是运行 Kubernetes 节点的主机。

粘贴图片





 推荐知识

 历史版本

修改日期 修改人 备注
2021-07-23 18:10:58[当前版本] 姜天雨 创建版本

 附件

附件类型

PNGPNG

  目录
    区块链服务网络发展联盟