在 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:容器注册表登录用户名
    • imageReleaseVersionOracle 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 地址。