{"id":13488858,"url":"https://github.com/IBM/blockchain-network-on-kubernetes","last_synced_at":"2025-03-28T02:31:13.735Z","repository":{"id":40636985,"uuid":"120620915","full_name":"IBM/blockchain-network-on-kubernetes","owner":"IBM","description":"Demonstrates the steps involved in setting up your business network on Hyperledger Fabric using Kubernetes APIs on IBM Cloud Kubernetes Service. ","archived":true,"fork":false,"pushed_at":"2021-02-10T08:45:43.000Z","size":6924,"stargazers_count":318,"open_issues_count":4,"forks_count":182,"subscribers_count":33,"default_branch":"master","last_synced_at":"2024-12-20T23:33:05.040Z","etag":null,"topics":["blockchain","blockchain-network","blockchain-platform","cloud","containers","hyperledger-fabric","hyperledger-fabric-network","kubernetes","kubernetes-cluster"],"latest_commit_sha":null,"homepage":"https://developer.ibm.com/patterns/deploy-hyperledger-fabric-network-on-ibm-cloud/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IBM.png","metadata":{"files":{"readme":"README-cn.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-02-07T13:48:29.000Z","updated_at":"2024-11-05T20:21:10.000Z","dependencies_parsed_at":"2022-08-26T12:34:14.117Z","dependency_job_id":null,"html_url":"https://github.com/IBM/blockchain-network-on-kubernetes","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2Fblockchain-network-on-kubernetes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2Fblockchain-network-on-kubernetes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2Fblockchain-network-on-kubernetes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2Fblockchain-network-on-kubernetes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IBM","download_url":"https://codeload.github.com/IBM/blockchain-network-on-kubernetes/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245957651,"owners_count":20700312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","blockchain-network","blockchain-platform","cloud","containers","hyperledger-fabric","hyperledger-fabric-network","kubernetes","kubernetes-cluster"],"created_at":"2024-07-31T18:01:23.103Z","updated_at":"2025-03-28T02:31:12.994Z","avatar_url":"https://github.com/IBM.png","language":"Shell","funding_links":[],"categories":["Shell"],"sub_categories":[],"readme":"_本文讲解内容是基于 2018-04-06 版本，了解后续更新内容，请参考 [English](README.md)。_\r\n\r\n# 使用 IBM Cloud 上的 Kubernetes API 部署区块链网络\r\n\r\n区块链是一个不可改变的共享分类账，用于记录交易历史信息。Linux 基金会的 Hyperledger Fabric 是 IBM 致力于的区块链软件实现，是一种许可网络。无论开发何种区块链用例，首先都要为创建和部署应用建立一个 Hyperledger Fabric 开发环境。Hyperledger Fabric 网络可通过多种方式进行设置。 \r\n* [Hyperledger Fabric 网络内部部署](http://hyperledger-fabric.readthedocs.io/en/release-1.0/build_network.html)\r\n* 使用托管在 [IBM Cloud](https://console.bluemix.net/) 上的[区块链即服务](https://console.bluemix.net/catalog/services/blockchain)。IBM Cloud 通过 Starter Membership Plan 和 Enterprise Membership Plan 为您提供区块链即服务。\r\n* 使用 [IBM Cloud Container Service](https://console.bluemix.net/containers-kubernetes/catalog/cluster) 上的 Kubernetes API 的 Hyperledger Fabric 网络\r\n\r\n本 Code Pattern 演示**使用 IBM Cloud Container Service 上的 Kubernetes API 在 Hyperledger Fabric 上**设置业务网络所涉及的步骤。 \r\n\r\n在 IBM Cloud 上托管 Hyperledger Fabric 网络可为您提供诸多好处，比如，多个用户可以在同一设置下工作，该设置可以用于不同的区块链应用，以及可以重复使用设置等等。请注意，Kubernetes 上的区块链网络设置适用于演示方案，但是对于生产，推荐使用 IBM Cloud 上托管的 IBM 区块链即服务。\r\n\r\n#### Kubernetes 集群\r\n\r\n[IBM Cloud Container Service](https://console.bluemix.net/containers-kubernetes/catalog/cluster) 支持创建免费集群，配备 2 个 CPU、4 GB 内存和 1 个工作节点。可用于熟悉并测试 Kubernetes 功能。但是，它们缺乏 NFS 文件持久存储以及持久卷等功能。\r\n\r\n要设置集群以获得最大的可用性和容量，IBM Cloud 支持您创建完全可定制的生产就绪型集群，即 _标准集群_。_标准集群_ 支持高度可用的集群配置，比如，在不同地区运行两个集群，每个集群设有多个工作节点。请访问 https://console.bluemix.net/docs/containers/cs_planning.html#cs_planning_cluster_config， 查看其他高度可用的集群配置选项。\r\n\r\n本 Code Pattern 使用 IBM Cloud 提供的 _免费集群_，可用于进行概念验证。它还为您提供了脚本，可自动执行使用 IBM Cloud 上的 Kubernetes API 设置 Hyperledger Fabric 网络的流程。\r\n\r\n读者完成本 Code Pattern 之后，将会掌握如何：\r\n\r\n* 根据网络拓扑结构修改配置文件\r\n* 在 Kubernetes 集群上部署 Hyperledger Fabric 网络\r\n\r\n## 操作流程\r\n\r\n  ![](images/architecture.png)\r\n\r\n1. 登录到 IBM Cloud CLI，对 IBM Cloud Container Service 插件进行初始化。\r\n2. 利用 CLI 设置 Kubernetes 集群环境，下载 Kubernetes 配置文件。下载完配置文件后，设置 KUBECONFIG 环境变量。\r\n3. 运行脚本以在 Kubernetes 集群上部署 Hyperledger Fabric 网络。\r\n4. 访问 Kubernetes 仪表板。\r\n\r\n## 包含的组件\r\n\r\n* [Hyperledger Fabric](https://hyperledger-fabric.readthedocs.io/)：Hyperledger Fabric 是适用于分布式分类账解决方案的平台，由模块化的架构提供支持，可交付高水平的机密性、灾备能力、灵活性和可扩展性。\r\n\r\n* [IBM Cloud Container Service](https://console.bluemix.net/containers-kubernetes/catalog/cluster)：IBM Container Service 支持编排智能调度、自我修复以及水平伸缩功能。\r\n\r\n## 包含的技术\r\n\r\n* [区块链](https://en.wikipedia.org/wiki/Blockchain)：区块链是一种数字化、去中心化的公共分类账，涵盖网络中的所有交易。\r\n\r\n* [Kubernetes 集群](https://kubernetes.io/docs)：在 Kubernetes 引擎中，容器集群包含至少一个集群主节点和多个工作节点。容器集群是 Kubernetes 引擎的基础。\r\n\r\n## 观看视频\r\n\r\n[![](http://img.youtube.com/vi/DFYk6XaMHc0/0.jpg)](http://v.youku.com/v_show/id_XMzY0NDg0OTU1Ng==.html)\r\n\r\n## 使用的 Kubernetes 概念\r\n* [Kubernetes Pod](https://kubernetes.io/docs/concepts/workloads/pods/pod/) - Pod 表示 Kubernetes 集群中可部署的最小单元，用于对必须被视为单个单元的容器进行分组。\r\n* [Kubernetes 作业](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/) - 一个作业可创建一个或多个 Pod，并确保成功终止指定数量的 Pod。Pod 成功完成之后，该作业会跟踪成功完成情况。\r\n* [Kubernetes 部署](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) - 部署是一种 Kubernetes 资源，您可以在此指定运行应用所需的容器和其他 Kubernetes 资源，比如持久存储、服务或注释。\r\n* [Kubernetes 服务](https://kubernetes.io/docs/concepts/services-networking/service/) - Kubernetes 服务集合了一系列的 Pod，并为集群中面向其他服务的 Pod 提供网络连接，无需公开每个 Pod 的真实私有 IP 地址。\r\n* [Kubernetes 持久卷 (PV)](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) - 持久卷是用户*请求获得*持久存储（比如 NFS 文件存储）的一种方式。\r\n\r\n## 步骤\r\n\r\n按照这些步骤来设置并运行本 Code Pattern。 \r\n\r\n1. [在 IBM Cloud 上创建 Kubernetes 集群](#1-create-a-kubernetes-cluster-on-ibm-cloud)\r\n2. [设置 CLI](#2-setting-up-clis)\r\n3. [获得 Kubernetes 集群访问权限](#3-gain-access-to-your-kubernetes-cluster)\r\n4. [将 Hyperledger Fabric 网络部署到 Kubernetes 集群](#4-deploy-hyperledger-fabric-network-into-kubernetes-cluster)\r\n5. [测试已部署的网络](#5-test-the-deployed-network)\r\n6. [查看 Kubernetes 仪表板](#6-view-the-kubernetes-dashboard)\r\n\r\n### 1. 在 IBM Cloud 上创建 Kubernetes 集群\r\n\r\n* 使用 GUI 通过 [IBM Cloud Container Service](https://console.bluemix.net/containers-kubernetes/catalog/cluster) 创建 Kubernetes 集群。本 Code Pattern 使用 _免费集群_。\r\n\r\n  ![](images/create-service.png)\r\n  \r\n  注意：设置和配置集群最长需要 15 分钟。\r\n\r\n\r\n### 2. 设置 CLI\r\n\r\n* 安装 [IBM Cloud CLI](https://console.bluemix.net/docs/cli/reference/bluemix_cli/get_started.html#getting-started)。使用 IBM Cloud CLI 运行命令的前缀为 `bx`。\r\n\r\n* 安装 [Kubernetes CLI](https://kubernetes.io/docs/tasks/tools/install-kubectl/)。使用 Kubernetes CLI 运行命令的前缀为 `kubectl`。\r\n\r\n* 使用以下命令安装容器服务插件。\r\n  ```\r\n  bx plugin install container-service -r Bluemix```\r\n\r\n### 3. 获得 Kubernetes 集群访问权限\r\n  \r\n  访问 [IBM Cloud Dashboard](https://console.bluemix.net/dashboard/apps)。选择创建集群所在的 Cloud Foundry 组织和 Cloud Foundry 空间。\r\n  \r\n  * 检查集群的状态：`IBM Cloud Dashboard -\u003e \u003cyour cluster\u003e -\u003e Worker Nodes`。如果状态不是 `ready`，那么您需要等待一段时间才能继续。\r\n    \r\n    ![](images/cluster-status.png)\r\n    \r\n  * 集群准备就绪之后，打开 Access 选项卡：`IBM Cloud Dashboard -\u003e \u003cyour cluster\u003e -\u003e Access`，如快照所示。\r\n  \r\n    ![](images/gain-access-to-cluster.png)\r\n  \r\n  * 执行 `Gain access to your cluster` 部分提供的步骤。\r\n\r\n  * 通过检查 Kubernetes CLI 服务器版本，验证是否对您的集群正确运行了 kubectl 命令。\r\n  \r\n    ```\r\n    $ kubectl version  --short\r\n    Client Version: v1.9.2\r\n    Server Version: v1.8.6-4+9c2a4c1ed1ee7e\r\n    ```\r\n    \r\n### 4. 将 Hyperledger Fabric 网络部署到 Kubernetes 集群\r\n\r\n#### 了解网络拓扑结构\r\n\r\n本 Code Pattern 提供一个可自动配置 Hyperledger Fabric 样本网络的脚本，该网络包含四个组织，每个组织维护一个对等节点和一个单独的订购服务。同时，该脚本还会创建一个名为 `channel1` 的通道，将所有对等节点连接到 `channel1` 通道上，在所有对等节点上安装链码，并对通道上的链码进行实例化。本 Code Pattern 也会帮助推动根据已部署的链码执行交易。\r\n\r\n#### 复制 Kubernetes 配置脚本\r\n\r\n克隆 Kubernetes 配置脚本或将其下载到用户主目录。\r\n  ```\r\n  $ git clone https://github.com/IBM/blockchain-network-on-kubernetes.git\r\n  ```\r\n\r\n浏览至源目录。\r\n  ```\r\n  $ cd blockchain-network-on-kubernetes\r\n  $ ls\r\n  ```\r\n在源目录中，\r\n  * `configFiles` 包含 Kubernetes 配置文件\r\n  * `artifacts` 包含网络配置文件\r\n  * `*.sh` 脚本用于部署和删除网络\r\n  \r\n#### 修改 Kubernetes 配置脚本\r\n\r\n如果网络拓扑结构中存在任何变更，就需要相应地修改配置文件（.yaml 文件）。配置文件位于 `artifacts` 和 `configFiles` 目录中。例如，如果决定增加/减少持久卷的容量，那么就需要修改 `createVolume.yaml`。  \r\n\r\n#### 运行脚本以部署 Hyperledger Fabric 网络\r\n\r\n完成配置文件变更（如有）之后，您即准备好部署网络。执行脚本以部署 Hyperledger Fabric 网络。\r\n\r\n  ```\r\n  $ chmod +x setup_blockchainNetwork.sh\r\n  $ ./setup_blockchainNetwork.sh\r\n  ```\r\n\r\n注意：在运行脚本前，请检查您的环境。您应当能够按照第 3 步所述，对您的集群正确运行 `kubectl 命令`。 \r\n\r\n#### 删除网络\r\n\r\n如有需要，您可以使用 `deleteNetwork.sh` 脚本删除 Hyperledger Fabric 网络。该脚本将从 Kubernetes 集群中删除您的所有 Pod、作业、部署等等。\r\n\r\n  ```\r\n  $ chmod +x deleteNetwork.sh\r\n  $ ./deleteNetwork.sh\r\n  ```\r\n\r\n### 5. 测试已部署的网络\r\n\r\n`setup_blockchainNetwork.sh` 脚本成功执行之后，检查 Pod 的状态。\r\n\r\n  ```\r\n  $ kubectl get pods\r\n  NAME                                    READY     STATUS    RESTARTS   AGE\r\n  blockchain-ca-7848c48d64-2cxr5          1/1       Running   0          4m\r\n  blockchain-orderer-596ccc458f-thdgn     1/1       Running   0          4m\r\n  blockchain-org1peer1-747d6bdff4-4kzts   1/1       Running   0          4m\r\n  blockchain-org2peer1-7794d9b8c5-sn2qf   1/1       Running   0          4m\r\n  blockchain-org3peer1-59b6d99c45-dhtbp   1/1       Running   0          4m\r\n  blockchain-org4peer1-6b6c99c45-wz9wm    1/1       Running   0          4m\r\n  ```\r\n\r\n如上所述，该脚本将所有对等节点连接到一个通道 `channel1` 上，在所有对等节点上安装链码，并对通道上的链码进行实例化。这意味着，我们可以在任何对等节点上执行调用/查询命令，并且所有对等节点上的响应均应相同。请注意，为避免复杂性，在本 Code Pattern 中禁用 TLS 证书。在本 Code Pattern 中，CLI 命令用于测试网络。为了针对任何对等节点运行查询，需要进入对等节点的 Bash Shell，运行查询并从对等容器中退出。\r\n\r\n使用以下命令进入对等节点的 Bash Shell：\r\n\r\n  ```\r\n  $ kubectl exec -it \u003cblockchain-org1peer1 pod name\u003e bash\r\n  ```\r\n\r\n用于从对等容器中退出的命令为：\r\n\r\n  ```\r\n  # exit\r\n  ```\r\n\r\n**查询**\r\n\r\n使用值将链码实例化为 `{ a: 100, b: 200 }`。我们对 `org1peer1` 进行查询，获取 `a` 的值，确保链码已被正确实例化。\r\n\r\n  ![](images/first-query.png)\r\n\r\n**调用**\r\n\r\n现在，我们向 `org2peer1` 提交请求，要求从 `a` 向 `b` 移动 20。新的交易将会生成，交易成功完成之后，将会更新状态。\r\n\r\n  ![](images/invoke.png)\r\n\r\n**查询**\r\n\r\n我们来确认下前面的调用已正确执行。我们使用值 100 对关键字 `a` 进行实例化，并且通过前面的调用仅移除 20。因此，针对 `a` 的查询应当显示 80，而针对 `b` 的查询应当显示 220。现在，向 `org3peer1` 和 `org4peer1` 发出查询请求，如下所示。\r\n\r\n  ![](images/second-query.png)\r\n\r\n  ![](images/third-query.png)\r\n\r\n### 6. 查看 Kubernetes 仪表板\r\n\r\n使用以下命令获取令牌，针对 Kubernetes 仪表板进行认证。\r\n\r\n  ```\r\n  $ kubectl config view -o jsonpath='{.users[0].user.auth-provider.config.id-token}'\r\n  ```\r\n\r\n复制令牌。通过缺省端口 8001 启动 Kubernetes 仪表板。\r\n\r\n  ```\r\n  $ kubectl proxy\r\n  ```\r\n\r\n在 Web 浏览器中打开 URL http://localhost:8001/ui， 查看 Kubernetes 仪表板。系统会提示需要认证。\r\n\r\n  ![](images/provide-token-for-dashboard.png)\r\n\r\n提供令牌和 `SIGN-IN`。在 Workloads 选项卡中，您可以看到通过脚本创建的资源。\r\n\r\n  ![](images/kubernetes-dashboard.png)\r\n\r\nHyperledger Fabric 网络可供使用。您可以使用节点 SDK 或 Hyperledger Composer，开始为这个部署的网络开发区块链应用。\r\n\r\n## 故障排除\r\n\r\n[参见 DEBUGGING.md。](DEBUGGING.md)\r\n\r\n## 许可\r\n\r\n[Apache 2.0](LICENSE)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FIBM%2Fblockchain-network-on-kubernetes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FIBM%2Fblockchain-network-on-kubernetes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FIBM%2Fblockchain-network-on-kubernetes/lists"}