将Cloud Databases部署连接到IBM Cloud Kubernetes Service应用程序
The Cloud Databases "Hello World" Kubernetes examples repository holds sample IBM Cloud® applications, which are written in various programming languages, that detail how to connect a Cloud Databases deployment to an IBM Cloud Kubernetes Service application.
示例库的每个Git分支都对应一种特定编程语言的示例,可以是使用Node.js 的JavaScript,也可以是 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上运行
-
如果您还没有IBM Cloud账户,请 在此注册。
-
下载并安装IBM CloudCLI. 通过IBM CloudCLI 工具可让您通过控制台或 CLI 与IBM Cloud通信。
-
安装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
-
请按照说明下载并安装所使用平台的KubernetesCLI。
-
在 CLI 工具中连接到IBM Cloud并按提示登录。
ibmcloud login
如果您有联合用户 ID,请使用 "
ibmcloud login --sso
命令以单点登录 ID 登录。
创建数据库
此过程会在您指定的服务中创建一个标准数据库实例,在您选择的计划中可能会产生额外费用。
-
您必须使用以下命令锁定一个资源组:
ibmcloud target -g <RESOURCE_GROUP>
有关详细信息,请参阅 使用资源和资源组(ibmcloud资源)。
-
可以使用
ibmcloud resource service-instance-create
命令从 CLI 创建数据库。 该命令需要服务实例名称、服务名称、计划名称和位置。 -
The service name is one of the Cloud Databases services,
databases-for-elasticsearch
,databases-for-enterprisedb
,databases-for-etcd
,databases-for-mongodb
,databases-for-postgresql
,databases-for-redis
,messages-for-rabbitmq
, ordatabases-for-mysql
.ibmcloud resource service-instance-create <INSTANCE_NAME> <SERVICE_NAME> standard <REGION>
记住数据库实例名称。 找到你的 区域标识符。
上一个示例提供了一个共享计算实例。 更多信息,请参阅 托管模式概述。
配置Kubernetes应用程序
-
创建Kubernetes Service。 选择要设置群集的位置和资源组。 选择要使用的群集类型。 本示例只需要精简版计划,该计划只配备一个工作节点。 群集配置完成后,您将收到访问群集的步骤列表,并在“访问”选项卡下设置环境变量。 您还可以验证部署是否已调配并正常运行。
-
Make sure that you are targeting the correct IBM Cloud resource group of your 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
into this newly created directory, andcd
into the database folder. 连接服务、读取和更新数据库的代码见server.js
。 有关应用程序功能的信息,请参阅 代码结构 和代码注释。 目录public
包含网络应用程序的 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
现在,您可以通过公共 IP 从 30082 端口访问应用程序。
clouddatabases-helloworld 应用程序显示_示例_数据库的内容。 为了证明应用程序已连接到您的服务,请在数据库中添加一些单词。 单词会在您添加时显示,最近添加的单词会显示在最前面。
代码结构
文件 | 描述 |
---|---|
server.js | 使用来自 BINDING 的凭据(我们在Kubernetes部署文件中创建的名称,用于显示凭据)建立与数据库的连接,并处理数据库上的创建和读取操作。 |
main.js | 处理 PUT 命令的用户输入,并解析 GET 命令的结果以输出数据库内容。 |
应用程序使用 PUT 和 GET 操作:
-
PUT
- 从main.js 获取用户输入。
- 将用户输入添加到数据库中。
-
GET
- 读取数据库内容。
- 向main.js 返回数据库命令的响应。