IBM Cloud Docs
将Cloud Databases部署连接到IBM Cloud Kubernetes Service应用程序

将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 仓库。 然后,点击克隆或下载,通过 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 CloudCLI. 通过IBM CloudCLI 工具可让您通过控制台或 CLI 与IBM Cloud通信。

  3. 安装Kubernetes ServiceCLI 插件和Container RegistryCLI 插件

    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. 下载并安装KubernetesCLI。

    请按照说明下载并安装所使用平台的KubernetesCLI。

  5. 在命令行工具中连接 IBM Cloud 到,并按照提示登录。

    ibmcloud login
    

    若您拥有联合用户ID,请使用 ibmcloud login --sso 命令通过您的单点登录ID登录。

创建数据库

此过程会在您指定的服务中创建一个标准数据库实例,在您选择的计划中可能会产生额外费用。

  1. 您必须使用以下命令锁定一个资源组:

    ibmcloud target -g <RESOURCE_GROUP>
    

有关更多信息,请参阅 《使用资源和资源组(ibmcloud 资源)》。

  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。 选择要设置群集的位置和资源组。 选择您要使用的集群类型。 本示例只需要精简版计划,该计划只配备一个工作节点。 群集配置完成后,您将收到访问群集的步骤列表,并在“访问”选项卡下设置环境变量。 您还可以验证部署是否已调配并正常运行。

  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 包含网络应用程序的 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
    

    现在,您可以通过公共 IP 从 30082 端口访问应用程序。

    clouddatabases-helloworld 应用程序显示_示例_数据库的内容。 为了证明应用程序已连接到您的服务,请在数据库中添加一些单词。 单词会在您添加时显示,最近添加的单词会显示在最前面。

代码结构

代码结构
文件 描述
server.js 使用来自 BINDING 的凭据(我们在Kubernetes部署文件中创建的名称,用于显示凭据)建立与数据库的连接,并处理数据库上的创建和读取操作。
main.js 处理 PUT 命令的用户输入,并解析 GET 命令的结果以输出数据库内容。

应用程序使用 PUT 和 GET 操作:

  • PUT

    • 从main.js 获取用户输入。
    • 将用户输入添加到数据库中。
  • GET

    • 读取数据库内容。
    • 向main.js 返回数据库命令的响应。