將Cloud Databases部署連接到IBM Cloud Kubernetes Service應用程式

Cloud Databases“Hello World”Kubernetes範例 儲存庫包含範例IBM Cloud®應用程序,這些應用程式是用各種程式語言編寫的,詳細說明如何連接Cloud Databases部署到IBM Cloud Kubernetes Service應用程式。

範例儲存庫的每個 Git 分支對應特定程式語言的範例,這些 JavaScript 語言使用 Node.js C++ 或 Python。 每個資料夾中的檔案對應於資料庫或訊息佇列。

嘗試範例應用程式

克隆您要使用的對應儲存庫。 例如,您可以透過選擇 Node 分支來克隆 Node 儲存庫。 然後,按一下 Clone 或 download,即可使用 SSH 或 HTTPS 取得您需要複製的 URL。 該指令如下圖所示:

git clone -b node git@github.com:IBM-Cloud/clouddatabases-helloworld-kubernetes-examples.git

或者,使用 HTTPS 進行克隆

git clone -b node https://github.com/IBM-Cloud/clouddatabases-helloworld-kubernetes-examples.git

克隆分支後,為您要嘗試的資料庫選擇適當的目錄。 每個資料庫都有自己的這些說明副本,了解如何在IBM Cloud Kubernetes Service上配置和部署資料庫或訊息佇列以及應用程式。

在IBM Cloud上執行

  1. 如果您還沒有IBM Cloud帳戶,請在此註冊。

  2. 下載並安裝IBM Cloud CLI。 IBM Cloud CLI 工具可讓您從控制台或 CLI 與IBM Cloud進行通訊。

  3. 安裝Kubernetes Service CLI 外掛程式和Container Registry CLI 插件

    ibmcloud plugin install container-service
    ibmcloud plugin install container-registry
    

    若要驗證其安裝,請運行

    ibmcloud plugin list
    

    您將收到以下回覆:

    Listing installed plug-ins...
    
    Plugin Name                            Version   Status
    container-registry                     0.1.382
    container-service/kubernetes-service   0.3.34
    
  4. 下載並安裝Kubernetes CLI。

    按照說明下載並安裝適用於您正在使用的平台的Kubernetes CLI。

  5. 在命令列介面工具中連 IBM Cloud 接到,並依照提示登入。

    ibmcloud login
    

    若您擁有聯合用戶識別碼,請使用 ibmcloud login --sso 指令以您的單一登入識別碼登入。

建立您的資料庫

此程序會在您指定的服務中建立標準資料庫實例,該實例可能會在您選擇的計劃中產生額外費用。

  1. 您必須使用以下命令定位資源組:

    ibmcloud target -g <RESOURCE_GROUP>
    

如需更多資訊,請參閱 《使用資源與資源群組》(ibmcloud resource)。

  1. 可以使用 ibmcloud resource service-instance-create 指令從 CLI 建立資料庫。 此指令採用服務實例名稱、服務名稱、計畫名稱和位置。

  2. 服務名稱是下列 Cloud Databases 服務之一 databases-for-mysql``messages-for-rabbitmq``databases-for-redis``databases-for-postgresql``databases-for-elasticsearchdatabases-for-mongodb

    ibmcloud resource service-instance-create <INSTANCE_NAME> <SERVICE_NAME> standard <REGION>
    

請記住資料庫實例名稱。 在此尋找您的區域識別碼

前面的範例配置了一個共享計算實例。 有關更多信息,請參閱 託管模型概述

設定應用程式 Kubernetes

  1. 建立一個Kubernetes Service。 選擇您要在其中設定叢集的位置和資源群組。 請選擇您要使用的叢集類型。 此範例僅需要 lite 計劃,該計劃附帶一個工作節點。 配置叢集後,您將獲得存取叢集並在_「存取」標籤_下設定環境變數的步驟清單。 您也可以驗證您的部署是否已配置並正常運作。

  2. 確保您的目標是IBM Cloud Kubernetes Service } 資源組。

    如果您的資源組的名稱不是 default,請使用下列命令來定位您的叢集資源組:

    ibmcloud target -g <RESOURCE_GROUP_NAME>
    

    此範例使用 default 資源組。

  3. Container Registry 中建立您自己的私有映像儲存庫來儲存應用程式的Docker映像。 由於我們希望圖片是私有的,因此我們需要建立一個命名空間,為您的圖片儲存庫建立唯一的 URL。

    ibmcloud cr namespace-add <YOUR_NAMESPACE>
    
  4. 將Cloud Databases部署新增至您的叢集。

    ibmcloud ks cluster service bind --cluster <YOUR_CLUSTER_NAME> --namespace default    --service <INSTANCE_NAME_OR_CRN>
    

    「預設」命名空間指的是實例 Kubernetes,而非使用者建立的影像儲存命名空間。 同樣,如果您的資料庫同時使用 公共端點和專用端點,則預設使用您的公共端點。 因此,若要選擇私有端點,首先需為您的資料庫建立服務金鑰,Kubernetes 以便在綁定資料庫時使用。 您可以使用以下命令設定服務金鑰:

    ibmcloud resource service-key-create <YOUR-PRIVATE-KEY> --instance-name    <INSTANCE_NAME_OR_CRN> --service-endpoint private  
    

    使用 --service-endpoint private 選擇專用服務端點。 之後,您可以使用以下命令透過專用端點將資料庫綁定到Kubernetes集群

    ibmcloud ks cluster service bind <YOUR_CLUSTER_NAME> default    <INSTANCE_NAME_OR_CRN> --key <YOUR-PRIVATE-KEY>
    
  5. 驗證已在叢集名稱空間中建立 Kubernetes 密碼。 Kubernetes 使用秘密來儲存機密資訊,例如 IBM Cloud Identity and Access Management (IAM) API 金鑰和容器用來取得存取權限的 URL。 若要將叢集設定為此會話的上下文,然後取得用於存取部署執行個體的 API 金鑰,請執行下列命令

    ibmcloud ks cluster config --cluster <CLUSTER_NAME_OR_ID>
    

    kubectl get secrets --namespace=default
    

    將綁定 your_database_name 至 Kubernetes 服務時所產生的秘密名稱儲存起來。

  6. 如果您尚未將應用程式以可用語言從控制台複製到本機環境,請使用下列命令

    git clone -b <LANGUAGE> git@github.com:IBM-Cloud/clouddatabases-helloworld-kubernetes-examples.git
    
  7. cd 進入這個新建立的目錄,並 cd 進入資料庫資料夾。 連接服務、讀取和更新資料庫的程式碼可以在 server.js 中找到。 有關應用程式功能的信息,請參閱 程式碼結構 和程式碼註釋。 public 目錄包含 Web 應用程式的 html、樣式表和JavaScript。 但是,為了讓應用程式正常運作,我們首先需要將此應用程式的Docker映像推送到我們的Container Registry。

  8. 建立應用程式的Docker映像並將其推送到您的Container Registry。 指定適當的區域並為容器命名。

    ibmcloud cr build -t <REGION>.icr.io/<NAMESPACE>/<CONTAINER_NAME> .
    

    您可以使用以下命令查看容器註冊表中的鏡像

    ibmcloud cr images
    

    您會得到類似以下回應

    REPOSITORY                                TAG      DIGEST        NAMESPACE   CREATED       SIZE    SECURITY STATUS
    <region>.icr.io/mynamespace/container_name latest   81c3959ea657  mynamespace 4 hours ago   28 MB   No Issues
    
  9. 更新Kubernetes部署設定檔 clouddb-deployment.yaml.

    image 名稱變更為您從上一個步驟中取得的儲存庫名稱:

    image: "<REGION>.icr.io/mynamespace/<container_name>" # Edit me
    

    現在,在 secretKeyRef 下,更改 <db-secret-name> 的名稱以匹配將資料庫部署綁定到Kubernetes叢集時建立的金鑰名稱。

    secretKeyRef:
       name: <DB-SECRET-NAME> # Edit me
    

    至於文件末尾的 service 配置,nodePort 表示應用程式可以存取的連接埠。 您可以使用 30000 - 32767 範圍內的端口,但我們選擇了 30081。 TCP 連接埠設定為 8080,這是Node.js應用程式在容器中運行的連接埠。

部署您的 Kubernetes 應用程式

  1. 將應用程式部署至 Kubernetes Service. 當您部署應用程式時,它會自動綁定到您的Kubernetes叢集。

    kubectl apply -f clouddb-deployment.yaml
    
  2. 取得應用程式的 IP。

    ibmcloud ks workers -c <CLUSTER_NAME>
    

    結果是這樣的:

    ID                                                 Public IP        PrivateIP      Machine Type   State    Status   Zone    Version
    kube-hou02-pa1a59e9fd92f44af9b4147a27a31db5c4-w1   199.199.99.999   10.76202.188   free           normal   Ready    hou02   1.10.11_1536
    

    現在您可以從連接埠 30082 從公用 IP 存取該應用程式。

    clouddatabases-helloworld 應用程式顯示_範例_資料庫的內容。 為了證明應用程式已連接到您的服務,請在資料庫中添加一些單字。 新增單字時會顯示這些單字,最近新增的單字會先顯示。

程式碼結構

程式碼結構
檔案 說明
server.js 使用 BINDING 中的憑證(我們在Kubernetes部署檔案中建立的用於顯示憑證的名稱)建立與資料庫的連接,並處理資料庫上的建立和讀取操作。
main.js 處理 PUT 命令的使用者輸入並解析 GET 命令的結果以輸出資料庫的內容。

該應用程式使用 PUT 和 GET 操作:

  • PUT

    • 從main.js取得使用者輸入。
    • 將使用者輸入新增至資料庫。
  • GET

    • 檢索資料庫的內容。
    • 將資料庫指令的回應傳回main.js。