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

部署 Oracle Blockchain Platform Enterprise Edition 之前,您必須先執行 Kubernetes 叢集並安裝數個先決條件。

如需 Oracle Kubernetes 引擎的詳細資訊,請參閱 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 的暫時資料,因為臨時儲存有限。
  • 我們建議將 Private workers 用於 Kubernetes 工作節點,以提高安全性
  • 確定工作者節點可以存取網際網路,這是在 Oracle Blockchain Platform 執行處理上安裝鏈碼所必需的。

本節將逐步介紹如何在 OCI 上建立 Oracle Kubernetes Engine 範例。如需其他選項和詳細資訊,請參閱使用主控台工作流程建立 Kubernetes 叢集

  1. 登入您的 OCI 租用戶,選取您的區域和區間。
  2. 開啟導覽功能表,然後按一下開發人員服務。在容器和使用者自建物件底下,按一下 Kubernetes 叢集 (OKE)
  3. 叢集清單頁面上,按一下建立叢集
  4. 建立叢集對話方塊中,選取快速建立,然後按一下送出
  5. 建立叢集頁面中,只要接受新叢集的預設組態詳細資訊,或指定替代方法,如下所示:
    • 名稱:新叢集的名稱。接受預設名稱或輸入您選擇的名稱。
    • 區間: 要在其中建立新叢集的區間和關聯的網路資源。
    • Kubernetes 版本:要在叢集的控制層節點和工作節點上執行的 Kubernetes 版本。v1.29.1 已使用 Oracle Blockchain Platform Enterprise Edition 進行測試。
    • Kubernetes API 端點:叢集 Kubernetes API 端點的存取類型。選取公用 (可直接從網際網路存取)。系統會建立公用區域子網路,並且會在該子網路中代管 Kubernetes API 端點。Kubernetes API 端點會被指定一個公用 IP 位址以及一個專用 IP 位址。

    • 節點類型:指定叢集中第一個節點集區中的工作節點類型。選取受管理。您必須負責管理節點集區中的工作節點。受管理節點會在您租用戶的運算執行處理 (裸機或虛擬機器) 上執行。由於您負責管理受管理節點,因此可以靈活地進行設定,以符合特定需求。您必須負責升級受管理節點上的 Kubernetes,以及管理叢集容量。
    • Kubernetes 工作節點:對叢集工作節點的存取類型。選取專用 (可透過其他 VCN 子網路存取)。建立專用區域子網路以代管工作節點。工作節點會被指定一個專用 IP 位址。
    • 節點資源配置:節點集區中每個節點所使用的資源配置。資源配置決定了 CPU 數目和配置給每個節點的記憶體大小。此清單只會顯示 Container Engine for Kubernetes 支援之租用戶中可用的資源配置。Oracle Blockchain Platform Enterprise Edition 已通過 VM.Standard.E3 測試。Flex 和 VM.Standard.E4。彈性資源配置。
    • 映像檔:要在受管理節點集區中的工作節點上使用的映像檔。映像檔是虛擬硬碟的樣板,可決定受管理節點集區的作業系統和其他軟體。Oracle Blockchain Platform Enterprise Edition 已通過 Oracle Linux 8 的測試。
    • 節點數目:要在節點集區中建立的工作節點數目,位於為叢集建立的區域子網路中。選取 3 或更多。
    選取下列「進階選項」:
    • 開機磁碟區:設定工作節點之開機磁碟區的大小和加密選項。50GB 的預設開機磁碟區可能不足以保存 Oracle Blockchain Platform Enterprise Edition 映像檔和鏈碼 Pod 的暫時資料,因為臨時儲存有限。如果您打算部署數個鏈碼 (超過 5 個),建議您將開機磁碟區增加到大約 100 GB。
  6. 複查您選取的選項,然後按一下建立叢集
  7. 確定您的工作節點和節點集區都在執行中:
    • 資源下,選取節點。對於每個工作節點,請確定節點已就緒、作用中,並且與 Kubernetes 叢集版本相符。
    • 資源下,選取節點集區。若為您的節點集區,請確定集區為作用中狀態,而且與 Kubernetes 叢集版本相同。

安裝 OCI 命令行介面

本節提供安裝 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

建立安裝啟動器系統

設定叢集的本機存取

請參閱下列章節以瞭解其他資訊:設定叢集的本機存取

  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. 如果設定正確,此命令將會輸出您叢集中所有的工作節點。
  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 和更新版本。您必須先完成安裝 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:容器登錄登入使用者名稱
    • imageReleaseVersion - Oracle Blockchain Platform Enterprise Edition 發行版本
    • controlPlaneStorage.storageClassName:用於 PVC 的 Kubernetes 儲存類別 (PersistentVolumeClaim)。如果空白,則使用預設 storageClass
    • controlPlaneStorage.size :區塊鏈平台管理程式 (控制層) 服務的 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 認證伺服器的管理員使用者密碼。
    • 輸入預設控制層管理員使用者密碼 (不會顯示密碼):這是用來設定區塊鏈平台管理程式管理員使用者的密碼。
    • 如果 runme-input.yaml 中未提供 StorageClass,系統將會檢查是否已設定預設儲存類別,並詢問您是否要使用它。
    • 確認 Istio 傳入閘道服務類型:預設為 LoadBalancer,也支援 NodePort。請注意,存取 NodePorts 時,必須使用 public worker 節點建立 Kubernetes 叢集。請參閱安裝 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

存取區塊鏈平台管理程式

安裝之後,請為產生的區塊鏈平台管理程式主機名稱設定主機名稱解析。
  1. 執行此命令以取得已設定的主機名稱清單:
    kubectl get virtualservice -n obp-cp -o json | jq -r .items[].spec.hosts[0]
  2. 根據為 istio-ingressgateway 選擇的服務類型,這些產生的主機名稱必須根據下列項目解析為 IPv4 位址:
    • LoadBalancer:解析為針對 istio-ingressgateway 服務產生的外部 IP 位址
    • NodePort:解析為工作節點的 IP 位址