將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上執行
-
如果您還沒有IBM Cloud帳戶,請在此註冊。
-
下載並安裝IBM Cloud CLI。 IBM Cloud CLI 工具可讓您從控制台或 CLI 與IBM Cloud進行通訊。
-
安裝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 -
按照說明下載並安裝適用於您正在使用的平台的Kubernetes CLI。
-
在命令列介面工具中連 IBM Cloud 接到,並依照提示登入。
ibmcloud login若您擁有聯合用戶識別碼,請使用
ibmcloud login --sso指令以您的單一登入識別碼登入。
建立您的資料庫
此程序會在您指定的服務中建立標準資料庫實例,該實例可能會在您選擇的計劃中產生額外費用。
-
您必須使用以下命令定位資源組:
ibmcloud target -g <RESOURCE_GROUP>
如需更多資訊,請參閱 《使用資源與資源群組》(ibmcloud resource)。
-
可以使用
ibmcloud resource service-instance-create指令從 CLI 建立資料庫。 此指令採用服務實例名稱、服務名稱、計畫名稱和位置。 -
服務名稱是下列 Cloud Databases 服務之一
databases-for-mysql``messages-for-rabbitmq``databases-for-redis``databases-for-postgresql``databases-for-elasticsearch:databases-for-mongodbibmcloud resource service-instance-create <INSTANCE_NAME> <SERVICE_NAME> standard <REGION>
請記住資料庫實例名稱。 在此尋找您的區域識別碼。
前面的範例配置了一個共享計算實例。 有關更多信息,請參閱 託管模型概述。
設定應用程式 Kubernetes
-
建立一個Kubernetes Service。 選擇您要在其中設定叢集的位置和資源群組。 請選擇您要使用的叢集類型。 此範例僅需要 lite 計劃,該計劃附帶一個工作節點。 配置叢集後,您將獲得存取叢集並在_「存取」標籤_下設定環境變數的步驟清單。 您也可以驗證您的部署是否已配置並正常運作。
-
確保您的目標是IBM Cloud Kubernetes Service } 資源組。
如果您的資源組的名稱不是
default,請使用下列命令來定位您的叢集資源組:ibmcloud target -g <RESOURCE_GROUP_NAME>此範例使用
default資源組。 -
在 Container Registry 中建立您自己的私有映像儲存庫來儲存應用程式的Docker映像。 由於我們希望圖片是私有的,因此我們需要建立一個命名空間,為您的圖片儲存庫建立唯一的 URL。
ibmcloud cr namespace-add <YOUR_NAMESPACE> -
將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> -
驗證已在叢集名稱空間中建立 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 服務時所產生的秘密名稱儲存起來。 -
如果您尚未將應用程式以可用語言從控制台複製到本機環境,請使用下列命令
git clone -b <LANGUAGE> git@github.com:IBM-Cloud/clouddatabases-helloworld-kubernetes-examples.git -
cd進入這個新建立的目錄,並cd進入資料庫資料夾。 連接服務、讀取和更新資料庫的程式碼可以在server.js中找到。 有關應用程式功能的信息,請參閱 程式碼結構 和程式碼註釋。public目錄包含 Web 應用程式的 html、樣式表和JavaScript。 但是,為了讓應用程式正常運作,我們首先需要將此應用程式的Docker映像推送到我們的Container Registry。 -
建立應用程式的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 -
更新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 應用程式
-
將應用程式部署至 Kubernetes Service. 當您部署應用程式時,它會自動綁定到您的Kubernetes叢集。
kubectl apply -f clouddb-deployment.yaml -
取得應用程式的 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。