在 Oracle Kubernetes Engine 上部署 Oracle Blockchain Platform Enterprise Edition

在部署 Oracle Blockchain Platform Enterprise Edition 之前,必须运行并安装多个先决条件 Kubernetes 集群。

有关 Oracle Kubernetes Engine 的详细信息,请参阅 Oracle Cloud Infrastructure Container Engine for Kubernetes

在 OCI 上创建 Oracle Kubernetes 引擎集群

建议的最低 Oracle Kubernetes 引擎集群规范:
  开发 具有高可用性的生产
最低版本 v1.29.1 v1.29.1
节点类型 托管 托管
节点映像 Oracle Linux 8 Oracle Linux 8
节点 CPU 2 个或更多 OCPU 4 个 OCPU 或更高版本
节点内存 24 GB 或更大 32 GB 或更大
节点计数 1 或更高版本 3 或更高版本
引导卷大小 100GB 或更高。默认的 50GB 引导卷可能不足以存储 Oracle Blockchain Platform Enterprise Edition 容器映像和链代码 pod 的临时数据,因为临时存储有限。 100GB 或更高。默认的 50GB 引导卷可能不足以存储 Oracle Blockchain Platform Enterprise Edition 容器映像和链代码 pod 的临时数据,因为临时存储有限。
  • 我们建议对 Kubernetes worker 节点使用 Private workers 以增加安全性
  • 确保 worker 节点可以访问 Internet,这是在 Oracle Blockchain Platform 实例上安装链代码所必需的。

本部分将介绍如何在 OCI 上创建 Oracle Kubernetes 引擎示例。有关其他选项和详细信息,请参阅使用控制台工作流创建 Kubernetes 集群

  1. 登录到您的 OCI 租户,选择您的区域和区间。
  2. 打开导航菜单,然后单击开发人员服务。在 Containers & Artifacts 下,单击 Kubernetes Clusters (OKE)
  3. Cluster List(集群列表)页面上,单击 Create cluster(创建集群)
  4. Create cluster(创建集群)对话框中,选择 Quick create(快速创建)并单击 Submit(提交)
  5. 创建集群页上,只需接受新集群的默认配置详细信息,或者按如下方式指定替代方案:
    • 名称:新集群的名称。接受默认名称或输入您选择的名称。
    • 区间:在其中创建新集群和关联网络资源的区间。
    • Kubernetes 版本:要在集群的控制层节点和 worker 节点上运行的 Kubernetes 版本。使用 Oracle Blockchain Platform Enterprise Edition 测试了 v1.29.1。
    • Kubernetes API 端点:对集群的 Kubernetes API 端点的访问类型。选择公共(可直接从 Internet 访问)。创建公共区域子网,并且 Kubernetes API 端点托管在该子网中。Kubernetes API 端点分配有一个公共 IP 地址和一个专用 IP 地址。

    • 节点类型:指定集群中第一个节点池中的 worker 节点类型。选择已管理。您负责管理节点池中的 worker 节点。托管节点在租户中的计算实例(裸金属或虚拟机)上运行。在您负责管理托管节点时,您可以灵活地进行配置以满足特定需求。您负责升级托管节点上的 Kubernetes 以及管理集群容量。
    • Kubernetes worker 节点:对集群的 worker 节点的访问类型。选择专用(可通过其他 VCN 子网访问)。创建专用区域子网来托管 worker 节点。为 worker 节点分配一个专用 IP 地址。
    • 节点配置:要用于节点池中每个节点的配置。配置确定分配给每个节点的 CPU 数量和内存量。该列表仅显示您的租户中 Kubernetes 容器引擎支持的配置。Oracle Blockchain Platform Enterprise Edition 已通过 VM.Standard.E3 进行测试。Flex 和 VM.Standard.E4。弹性配置。
    • 映像:要在托管节点池中的 worker 节点上使用的映像。映像是虚拟硬盘驱动器模板,用于确定受管理节点池的操作系统和其他软件。Oracle Blockchain Platform Enterprise Edition 在 Oracle Linux 8 中进行了测试。
    • 节点计数:要在节点池中创建的 worker 节点数,置于为集群创建的区域子网中。选择 3 或更多。
    选择以下高级选项:
    • 引导卷:为 worker 节点的引导卷配置大小和加密选项。默认的 50GB 引导卷可能不足以存储 Oracle Blockchain Platform Enterprise Edition 映像和链代码 pod 的临时数据,因为临时存储有限。如果您打算部署多个链代码(超过 5 个),我们建议将引导卷增加到大约 100 GB。
  6. 查看您选择的选项,然后单击创建集群
  7. 确保您的 worker 节点和节点池正在运行:
    • 资源下,选择节点。对于每个 worker 节点,确保该节点已准备就绪、处于活动状态并且与 Kubernetes 集群版本匹配。
    • 资源下,选择节点池。对于节点池,请确保池处于活动状态并且与 Kubernetes 集群版本匹配。

安装 OCI Command Line Interface

本节提供了安装 OCI 命令行接口的示例演练。Oracle Blockchain Platform Enterprise Edition 已使用 v3.42.0 进行测试。有关其他信息,请参阅 OCI 命令行界面

# Install:
    sudo dnf -y install oraclelinux-developer-release-el8
    sudo dnf -y install python36-oci-cli
 
# Verify:
    $ oci --version
    3.42.0
# Install:

    brew update && brew install oci-cli

## If this fails with "Error: python@3.12: the bottle needs the Apple Command Line Tools to be installed.", run below command:

    xcode-select --install

# Verify:
   oci --version
   3.43.1

创建安装启动器系统

为群集设置本地访问

有关其他信息,请参见以下内容: Setting Up Local Access to Clusters

  1. 将 RSA 密钥复制到安装了先决条件的 Oracle Linux 或 macOS 计算机。可以在 OCI 控制台中找到您的密钥:身份OracleIdentityCloudService 域用户用户名API 密钥。保护密钥:chmod 400 your_rsa.key

    如果需要,可以创建新密钥。请参见 How to Generate an API Signing Key

  2. 在 OCI 控制台中,转到您的集群并打开集群详细信息页。
  3. 依次选择访问集群本地访问
    1. 创建一个目录以包含 kubeconfig 文件:mkdir -p $HOME/.kube
    2. 复制通过 VCN 本机公共端点访问您的集群的 kubeconfig 命令。
    3. 在 Linux 或 macOS 计算机上运行该命令。由于配置文件尚不存在,系统将提示您输入以下内容:
      • 是否要创建新的配置文件?[Y/n]:y
      • 是否要通过浏览器登录来创建配置文件?[Y/n]:n
      • 输入配置 [/home/opc/.oci/config] 的位置:选择一个位置
      • 输入用户 OCID:可以在 OCI 控制台中找到
      • 输入租户 OCID:可以在 OCI 控制台中找到
      • 按索引或名称输入区域:输入与租户所在区域对应的编号,例如 12
      • 是否要生成新的 API 签名 RSA 密钥对?如果您拒绝,系统将要求您提供现有密钥的路径。[Y/n]:n
      • 输入 API 签名私钥文件的位置:上面创建的 RSA 密钥文件的位置
      这将创建一个配置文件,允许 Kubernetes 控制层 VM 访问 OCI 上托管的集群。
    4. 创建 OCI 配置文件后,必须重新运行复制的要通过 VCN 本机公共端点命令访问集群的 kubeconfig。它将使用您刚才创建的配置文件。
  4. 验证是否可以访问 Oracle Kubernetes 引擎集群:kubectl get nodes。如果设置正确,该命令将输出集群中的所有 worker 节点。
  5. 限制对配置文件的访问:chmod 600 $HOME/.kube/config
  6. 将 KUBECONFIG 环境变量设置为此群集的文件:export KUBECONFIG=$HOME/.kube/config

注意:

如果您的 OCI 配置文件具有多个类似如下的配置文件:
[OCI_PROFILE_A]
fingerprint = .............
key_file = .............
tenancy = .............
region = .............
user = .............

[OCI_PROFILE_B] 
fingerprint = ............. 
key_file = .............
tenancy = .............
region = .............
user = ............. 
您需要定制 kubeconfig 文件,或者尝试安装 Oracle Blockchain Platform Enterprise Edition 时会收到授权错误。在 kubeconfig 文件的用户部分,添加一行以指定要在 OCI 配置文件中使用的用户。例如:
users:
- name: user-c3xxxxxq
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1beta1
      args:
      - ce
      - cluster
      - generate-token
      - --cluster-id
      - ocid1.cluster.oc1.eu-frankfurt-1.aaaaaaxxxxxxxxxyyyyyy
      - --region
      - eu-frankfurt-1
      - --profile
      - <OCI_PROFILE_NAME>
      command: oci
      env: []
      interactiveMode: IfAvailable
      provideClusterInfo: false
其中 <OCI_PROFILE_NAME>OCI_PROFILE_A

完成 Istio 安装

Oracle Blockchain Platform Enterprise Edition 支持 1.20.2 版及更高版本。必须先完成 Install Istio 中的步骤,然后才能完成以下操作。


# Install
    istioctl install --set profile=default --set values.pilot.env.ENABLE_TLS_ON_SIDECAR_INGRESS=true --set components.cni.enabled=true --set values.cni.repair.deletePods="true"
    ## Enter "y" when prompted for "Proceed? (y/N)"
 
# Verify:
    $ istioctl version
    client version: 1.22.1
    control plane version: 1.22.1
    data plane version: 1.22.1 (1 proxies)

为您的用户设置授权令牌

为您的管理用户创建验证令牌,以便您可以从 OCI 注册表提取映像:生成验证令牌以启用登录 Oracle Cloud Infrastructure Registry

安装 Oracle Blockchain Platform Enterprise Edition

  1. Oracle Blockchain Platform Enterprise Edition 页面上,单击下载并按照以下步骤下载 Oracle Blockchain Platform Enterprise Edition 程序包。解压缩该软件包,然后从下载的归档文件中提取该软件包。
    tar -xzf <distribution-package-file>
    # example tar -xzf obpee_package_24.1.3-20240723083137.tgz
  2. 使用所需值更新 runme-input.yaml。下面是一个示例 runme-input.yaml,可用作参考:
    imageRegistryConfiguration:
      registry: <container_registry_name>
      imageTagPrefix: <container-image-repository-prefix>
      username: <container-registry-username>
     
    imageReleaseVersion: 24.1.3-20240723083137
     
    # storageClassName should be set to create a dynamic persistent volume. If empty, default storageClass is used.
     
    controlPlaneStorage:
      storageClassName: 
      # Example 500Mi, 5Gi
      size: 4Gi
      
    parentDomainName: example.com
    #imagePullTimeout: Use this field to customize the wait time (in seconds) for pulling the required container images from the repository. Default is 1800 seconds.
        imagePullTimeout: 1800
    其中:
    • imageRegistryConfiguration.registry:要使用的容器注册表服务器。示例:iad.ocir.io
    • imageRegistryConfiguration.imageTagPrefix :包含注册表的容器基本资料档案库路径,其中映像应推送(拉入)到(从)。示例:iad.ocir.io/obpee/bcs
    • imageRegistryConfiguration.username:容器注册表登录用户名
    • imageReleaseVersionOracle Blockchain Platform Enterprise Edition 发行版
    • controlPlaneStorage.storageClassName:要用于 PVC 的 Kubernetes 存储类 (PersistentVolumeClaim )。如果为空,则使用缺省 storageClass
    • controlPlaneStorage.size :Blockchain Platform Manager (control plane) 服务的 PVC 大小
    • parentDomainName:用于区块链平台管理器服务的域名。示例:example.com
    • imagePullTimeout:在 Oracle Blockchain Platform Enterprise Edition 安装期间,映像提取等待超时(秒)。默认值为 1800 秒。
  3. 在提示后运行 runme_oke.sh [--publish-images]

    注意:

    可选的 --publish-images 命令使用 runme-input.yaml 中指定的详细信息将容器上载到容器映像注册表,例如 Oracle Cloud Infrastructure Registry
    • 输入默认的 LDAP 管理口令(不会显示口令):这用于为内置 LDAP 验证服务器设置管理员用户的口令。
    • 输入默认控制层管理员用户密码(不会显示密码):这用于设置 Blockchain Platform Manager 管理员用户的密码。
    • 如果 runme-input.yaml 中未提供 StorageClass,系统将检查是否设置了默认存储类,并询问您是否要使用它。
    • 确认 Istio 入站网关服务类型:LoadBalancer 为默认值,还支持 NodePort。请注意,访问 NodePorts 需要使用公共 worker 节点创建 Kubernetes 集群。请参见 Install Istio
    • 确认 Istio 入站网关服务 https 端口:LoadBalancer 服务类型的默认值为 443。
    • 输入注册表 <registry name> 密码:这用于连接到容器映像注册表(在 runme-input.yaml 中指定)以下载映像。
  4. 作为脚本输出的一部分,它将列出 Istio-ingressgateway URL。记录列出的 IP 地址。
  5. 安装脚本将继续在 obp-cp 名称空间下安装以下服务:
    • control-plane
    • openldap
    • obp-auth-server
    • obp-operator
    • hlf-operator

访问区块链平台管理器

安装后,为生成的 Blockchain Platform Manager 主机名配置主机名解析。
  1. 执行此命令可获取已配置的主机名列表:
    kubectl get virtualservice -n obp-cp -o json | jq -r .items[].spec.hosts[0]
  2. 根据为 istio-ingressgateway 选择的服务类型,需要根据以下内容将这些生成的主机名解析为 IPv4 地址:
    • LoadBalancer:解析为 istio-ingressgateway 服务生成的外部 IP 地址
    • NodePort:解析为 worker 节点的 IP 地址