部署数据库服务¶

我们将学习哪些 Knative 功能?¶
- 使用 Knative Service 的好用例是什么
最终交付成果是什么样的?¶
- 运行一个包含表和一些示例数据的 PostgreSQL StatefulSet
概念学习¶

Knative 服务 是 Knative 生态系统中一个强大的功能,旨在处理各种用例,尤其是在现代云原生应用程序中。它可以由 Knative Serving 控制,并实现缩减到 0。以下是何时以及为何应考虑使用 Knative 服务的扩展解释。
无状态工作负载
- 定义: 无状态应用程序在请求之间不存储任何本地数据。每个请求都是独立的,不依赖于任何先前的交互。
- 用例: 例如,Web 服务器、API 和微服务,其中状态由外部管理,例如数据库或缓存。
- 优势: 简化了缩放和故障转移,因为任何实例都可以处理任何请求,而无需会话持久性。
事件驱动工作负载
- 定义: 事件驱动架构响应事件或触发器,例如 HTTP 请求、队列中的消息或数据库更改。
- 用例: 使用 Knative 服务部署响应事件的函数,例如处理传入数据、触发工作流或与第三方 API 集成。
- 优势: 高效的资源利用,因为服务在不处理事件时可以缩减到零,从而降低成本并提高性能。

尝试在 Knative Slack 社区 #knative 中询问这是否是最佳用例。
实施¶
步骤 1: 应用所有配置 yaml 文件¶

在本节中,我们将简单地运行一个 PostgreSQL 服务。我们已经准备好了所有配置文件。只需运行以下命令即可一次性应用所有 yaml 文件。
kubectl apply -f db-service
警告
请等待几分钟,直到一切就绪。如果您看到一些 job pod 失败并出现错误,没关系。继续等待。
验证
您应该会看到以下输出
configmap/sql-configmap created
secret/postgresql-secret created
persistentvolumeclaim/postgresql-pvc created
statefulset.apps/postgresql created
service/postgresql created
job.batch/postgresql-job created
稍等片刻,直到所有 pod 都可用并且数据库迁移作业完成。如果您看到一些 job pod 失败并**出现错误,请不要担心**,请等到至少有一个 job 变为“**已完成**”。
NAME READY STATUS RESTARTS AGE
bookstore-frontend-7b879ffb78-9bln6 1/1 Running 0 6h53m
camel-k-operator-7989475884-7wk6z 1/1 Running 0 5h26m
event-display-55967c745d-bxrgh 1/1 Running 0 5h26m
node-server-644795d698-r9zlr 1/1 Running 0 5h26m
postgresql-0 1/1 Running 0 5h23m
postgresql-job-55dlv 0/1 Completed 0 10s
postgresql-job-fnv8m 0/1 Error 0 73s
验证¶

使用以下命令获取前端服务的 IP 地址: kubectl get svc -o=jsonpath='{.status.loadBalancer.ingress[0].ip}' bookstore-frontend-svc
在 http://${IP} 打开 UI 页面,您应该会在页面底部看到一些新评论弹出。
故障排除
如果您看到“没有可用的评论”,则表示您的数据库尚未初始化。检查数据库服务 pod 的运行状况,找出发生了什么。

下一步¶

您已成功设置数据库服务,它已准备好接收请求并存储用户评论。
接下来,我们将通过连接您创建的所有组件来完成我们的事件驱动架构。这就是神奇发生的地方。