在 Oracle Kubernetes 引擎上部署 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 或更高版本
引导卷大小 100 GB 或更大。50 GB 的默认引导卷可能不足以存储 Oracle Blockchain Platform Enterprise Edition 容器映像和链代码云池的临时数据,因为临时存储有限。 100 GB 或更大。50 GB 的默认引导卷可能不足以存储 Oracle Blockchain Platform Enterprise Edition 容器映像和链代码云池的临时数据,因为临时存储有限。
  • 要提高安全性,请为 Kubernetes worker 节点选择 Private workers。
  • 确保 Worker 节点可以访问 Internet,这是在 Oracle Blockchain Platform 实例上安装链代码所必需的。

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

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

    • 节点类型:指定集群中第一个节点池中的 worker 节点类型。选择 Managed 。您负责管理节点池中的 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 节点数,这些节点位于为集群创建的区域子网中。选择三个或更多。
    选择以下高级选项:
    • 引导卷:配置 worker 节点的引导卷的大小和加密选项。由于临时存储有限,默认引导卷 50 GB 可能不足以存储链代码云池的 Oracle Blockchain Platform Enterprise Edition 映像和临时数据。如果您计划部署多个链代码(五个以上),请将引导卷增加到大约 100 GB。
  6. 查看您选择的选项,然后单击创建集群。
  7. 确保 Worker 节点和节点池正在运行:
    • 在资源下,选择节点。对于每个 worker 节点,请确保节点已就绪、处于活动状态并且与 Kubernetes 集群版本匹配。
    • 在资源下,选择节点池。对于节点池,请确保池处于活动状态并且与 Kubernetes 集群版本匹配。

安装 OCI 命令行界面

本部分演示了如何安装 OCI 命令行界面。Oracle Blockchain Platform Enterprise Edition 使用 v3.42.0 进行测试。有关其他信息,请参阅 OCI Command Line Interface 。

# 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 配置文件后,必须重新运行复制的 To access the kubeconfig for your cluster via the VCN-Native public endpoint 命令。它将使用您刚刚创建的配置文件。
  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 软件包。从 .zip 文件中提取软件包,然后从下载的归档文件中提取软件包。
    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:容器注册表登录用户名
    • imageReleaseVersion — Oracle Blockchain Platform Enterprise Edition 版本
    • controlPlaneStorage.storageClassName:要用于 PVC 的 Kubernetes 存储类 (PersistentVolumeClaim )。如果为空,则使用缺省 storageClass
    • controlPlaneStorage.size :Blockchain Platform Manager(控制平面)服务的 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 地址。运行以下命令以获取 IP 地址。
      kubectl get svc/istio-ingressgateway -n istio-system
      将以下行添加到用于连接到 Blockchain Platform Manager 控制台的主机上的 /etc/hosts 文件(Linux、macOS)或 C:\Windows\system32\drivers\etc\hosts 文件 (Microsoft Windows)。
      <public_svc_ip> controlplane.<parentDomainName> openldap.<parentDomainName> auth.<parentDomainName>
    • NodePort:解析为 worker 节点的 IP 地址。