本系列教程适用于想要部署、运行和管理在 Google Kubernetes Engine (GKE) 上运行的现代应用环境的 IT 管理员和运维人员。在学习本系列教程的过程中,您将学习如何使用 Cymbal Bank 示例微服务应用配置监控和提醒、扩缩工作负载以及模拟故障。
- 创建集群并部署示例应用(本教程)
- 使用 Google Cloud Managed Service for Prometheus 进行监控
- 扩缩工作负载
- 模拟故障
概览和目标
Cymbal Bank 使用 Python 和 Java 运行各种服务,并且包含一个 PostgreSQL 后端。您无需具备这些语言或数据库平台方面的经验便可完成本系列教程,因为 Cymbal Bank 只是一个示例应用,用于展示 GKE 如何为您的业务需求提供支持。
在本教程中,您将学习如何创建单个 GKE 集群,以及如何将基于微服务的示例应用 Cymbal Bank 部署到 GKE 集群。您将学习如何完成以下任务:
创建使用 Autopilot 的 GKE 集群。
部署基于微服务的示例应用 Cymbal Bank。
使用 Google Cloud 控制台探索 Cymbal Bank 示例应用使用的 GKE 资源。
费用
您将为本系列教程启用 GKE 并部署 Cymbal Bank 示例应用,这意味着您需要按照我们价格页面中列出的价格,按集群为 GKE on Google Cloud 付费,直到您停用 GKE 或删除项目。
您还需要负责运行 Cymbal Bank 示例应用时产生的其他 Google Cloud 费用,例如 Compute Engine 虚拟机和负载均衡器的费用。
准备工作
在本系列的第一个教程中,请在开始之前完成以下所有“准备工作”设置步骤。您只需完成以下“准备工作”步骤一次。
配置 shell 和工具
在本系列教程中,您将使用以下工具来部署和管理环境:
- gcloud CLI:创建和管理 GKE 集群和舰队以及其他 Google Cloud 服务。
kubectl
:管理 Kubernetes(即 GKE 使用的集群编排系统)。
如需运行此页面中的命令,请在以下开发环境之一中设置 Google Cloud CLI 和 kubectl
:
Cloud Shell
如需使用已设置 gcloud CLI 和 kubectl
的在线终端,请激活 Cloud Shell:
Cloud Shell 会话会在页面底部启动,并显示命令行提示符。该会话可能需要几秒钟来完成初始化。
本地 shell
如需使用本地开发环境,请按照以下步骤操作:
- 安装 gcloud CLI。
- 初始化 gcloud CLI。
安装
kubectl
gcloud CLI:gcloud components install kubectl
设置项目
请按照以下步骤设置 Google Cloud 项目,包括启用结算功能和 GKE 服务。这是您将在其中启用 GKE 的项目。
您可能需要组织中的 Google Cloud 管理员授予您创建或使用项目以及启用 API 的权限。
在 Google Cloud 控制台中,转到 Google Kubernetes Engine 页面:
创建或选择项目。 这是您在其中启用 GKE 的项目。
如果出现提示,请启用 GKE API。
稍作等待,让 API 和相关服务完成启用过程。 此过程可能耗时几分钟。
授予 IAM 角色
如果您是项目所有者(例如,如果您自己创建了项目),那么您已拥有完成这些教程所需的所有权限。如果您不是所有者,请确保您的 Google Cloud 账号具有您在这组教程中选择的项目所需的 IAM 角色。同样,您可能需要组织中的 Google Cloud 管理员来帮助授予所需角色。
在以下命令中,将 PROJECT_ID
替换为您在上一部分创建或选择的项目的自动生成 ID。项目 ID 通常与项目名称不同。例如,您的项目可能是 scalable-appsscalable-apps,但项目 ID 可能是 scalable-apps-567123scalable-apps。
Grant roles to your user account. Run the following command once for each of the following
IAM roles:
roles/resourcemanager.projectIamAdmin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/iam.securityAdmin, roles/serviceusage.serviceUsageAdmin, roles/container.admin, roles/logging.logWriter, roles/gkehub.admin, roles/viewer, roles/monitoring.viewer
$ gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
克隆示例应用
克隆包含 Cymbal Bank 的所有示例清单的 Git 代码库:
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos
cd bank-of-anthos/
创建集群
完成前面部分中的所有前提步骤后,您现在可以开始创建 GKE 集群并部署示例应用。
GKE 是一种托管式 Kubernetes 服务,可用于部署和操作容器化应用。GKE 环境由节点组成,节点是 Compute Engine 虚拟机 (VM),它们组合在一起构成集群。
创建一个您将在本系列教程的其余部分中使用的 GKE 集群:
gcloud container clusters create-auto scalable-apps \ --project=PROJECT_ID \ --region=REGION
请替换以下内容:
- 将
PROJECT_ID
替换为您在上一部分中创建的项目的自动生成 ID。项目 ID 通常与项目名称不同。例如,您的项目可能是 scalable-appsscalable-apps,但项目 ID 可能是 scalable-apps-567123scalable-apps。 - 将
REGION
替换为要在其中创建集群的区域,例如us-central1
。
创建集群并验证一切是否正常运行需要几分钟时间。
- 将
在本系列教程中,您将在创建集群时使用 Autopilot 模式集群和一些默认 IP 地址范围。您自己的应用的生产部署需要更仔细的 IP 地址规划。在 Autopilot 模式下,Google 会管理您的集群配置,包括自动扩缩、安全性和其他预配置的设置。Autopilot 模式中的集群经过优化,可运行大多数生产工作负载并根据 Kubernetes 清单预配计算资源。
部署 Cymbal Bank
您将应用(也称为工作负载)打包到容器中。您可以将多个容器作为 Pod 部署到节点。
在本系列教程中,您需要将基于微服务的示例应用 Cymbal Bank 部署到一个或多个 GKE 集群。Cymbal Bank 使用 Python 和 Java 运行各种服务,并且包含一个 PostgreSQL 后端。您无需具备这些语言或数据库平台方面的经验便可完成本系列教程。Cymbal Bank 只是一个示例应用,用于展示 GKE 如何支持您的业务需求。
在本系列教程中使用 Cymbal Bank 时,以下服务会部署到 GKE 集群中:
服务 | 语言 | 说明 |
---|---|---|
frontend |
Python | 公开 HTTP 服务器以为网站提供服务。包含登录页面、注册页面和首页。 |
ledger-writer |
Java | 接受并验证传入的交易,然后再将其写入账目。 |
balance-reader |
Java | 提供从 ledger-db 读取的用户余额的高效可读缓存。 |
transaction-history |
Java | 提供从 ledger-db 读取的历史交易的高效可读缓存。 |
ledger-db |
PostgreSQL | 所有交易的账本。用于为演示用户预填充交易的选项。 |
user-service |
Python | 管理用户账号和身份验证。为用于其他服务进行身份验证的 JWT 签名。 |
contacts |
Python | 存储与用户关联的其他账号列表。用于“发送付款”和“存款”表单中的下拉菜单。 |
accounts-db |
PostgreSQL | 用于存储用户账号和关联数据的数据库。用于使用演示用户预先填充数据的选项。 |
loadgenerator |
Python / Locust | 将模拟用户的请求持续发送到前端。定期创建新账号并模拟新账号之间的交易。 |
如需将 Cymbal Bank 部署到 GKE 集群,请完成以下步骤:
Cymbal Bank 使用 JSON Web 令牌 (JWT) 处理用户身份验证。JWT 使用非对称密钥对来签名和验证令牌。在 Cymbal Bank 中,
userservice
在用户登录时使用 RSA 私钥创建令牌并进行签名,其他服务使用相应的公钥来验证用户。创建一个强度为 4,096 位的 RS256 JWT:
openssl genrsa -out jwtRS256.key 4096 openssl rsa -in jwtRS256.key -outform PEM -pubout -out jwtRS256.key.pub
如果需要,请下载并安装适用于您的平台的 OpenSSL 工具。
Kubernetes Secret 可以存储密钥或密码等敏感数据。然后,在集群中运行的工作负载便可以访问 Secret 以获取敏感数据,而无需在应用中对其进行硬编码。
使用您在上一步创建的密钥文件为 Cymbal Bank 创建一个 Kubernetes Secret,以便在身份验证请求中使用:
kubectl create secret generic jwt-key --from-file=./jwtRS256.key --from-file=./jwtRS256.key.pub
将 Cymbal Bank 部署到您的集群。以下命令会部署
kubernetes-manifests
目录中的所有清单文件。每个清单文件都会部署和配置其中一种服务:kubectl apply -f kubernetes-manifests/accounts-db.yaml kubectl apply -f kubernetes-manifests/balance-reader.yaml kubectl apply -f kubernetes-manifests/config.yaml kubectl apply -f kubernetes-manifests/contacts.yaml kubectl apply -f extras/postgres-hpa/kubernetes-manifests/frontend.yaml kubectl apply -f kubernetes-manifests/ledger-db.yaml kubectl apply -f kubernetes-manifests/ledger-writer.yaml kubectl apply -f extras/postgres-hpa/loadgenerator.yaml kubectl apply -f kubernetes-manifests/transaction-history.yaml kubectl apply -f kubernetes-manifests/userservice.yaml
当清单应用于您的集群时,您可能会在
kubectl
输出中看到有关 Autopilot 限制的消息。Autopilot 使用您在工作负载配置中指定的资源请求来配置运行工作负载的节点。Autopilot 会根据工作负载使用的计算类或硬件配置强制执行最小和最大资源请求。如果您没有为某些容器指定请求,则 Autopilot 会分配默认值以使这些容器正常运行。查看
frontend
Service 的以下示例清单:此清单用于 CPU 和
64Mi
的frontend
服务请求100m
,并设置每个 Pod 的 CPU 和128Mi
的250m
限制。在 Autopilot 集群中部署工作负载时,GKE 会根据所选计算类或硬件配置(例如 GPU)允许的最小值和最大值来验证工作负载配置。如果请求小于最小值,则 Autopilot 会自动修改工作负载配置,以使请求在允许的范围内。这些消息表示系统会自动分配适当的限制。
等待 Pod 准备就绪。使用
kubectl
检查 Pod 的状态:kubectl get pods
STATUS
列从Pending
更改为ContainerCreating
。需要几分钟才能使所有 Pod 都处于Running
状态,如以下示例输出中所示:NAME READY STATUS RESTARTS AGE accounts-db-6f589464bc-6r7b7 1/1 Running 0 99s balancereader-797bf6d7c5-8xvp6 1/1 Running 0 99s contacts-769c4fb556-25pg2 1/1 Running 0 98s frontend-7c96b54f6b-zkdbz 1/1 Running 0 98s ledger-db-5b78474d4f-p6xcb 1/1 Running 0 98s ledgerwriter-84bf44b95d-65mqf 1/1 Running 0 97s loadgenerator-559667b6ff-4zsvb 1/1 Running 0 97s transactionhistory-5569754896-z94cn 1/1 Running 0 97s userservice-78dc876bff-pdhtl 1/1 Running 0 96s
当所有 Pod 都处于
Running
状态时,继续执行下一步。同样,需要几分钟才能使所有 Pod 都处于Running
状态。在 Cymbal Bank 准备好正确处理流量之前,某些 Pod 报告READY
状态为0/1
是正常情况。frontend
服务会公开一个 HTTP 服务器,用于为 Cymbal Bank 网站提供服务,包括登录页面、注册页面和首页。Ingress 对象定义了使用 Google Cloud HTTP(S) 负载均衡器将 HTTP(S) 流量路由到集群中运行的应用的规则。获取
frontend
Ingress 的外部 IP 地址:kubectl get ingress frontend | awk '{print $4}'
在网络浏览器窗口中,打开
kubectl get ingress
命令输出中显示的 IP 地址以访问 Cymbal Bank 实例。系统会自动填充默认凭据,因此您可以登录该应用并浏览一些示例交易和余额。除了确认 Cymbal Bank 成功运行之外,您无需执行任何具体操作。所有服务可能需要一两分钟才能正确通信,让您能够登录。
探索您的部署
创建 GKE 集群并部署工作负载后,您可能需要更改设置或查看应用的性能。在本部分中,您将了解如何使用 Google Cloud 控制台查看集群和 Cymbal Bank 示例应用中的资源。
集群
在本教程中,您创建了一个 GKE 集群并部署了 Cymbal Bank 工作负载。
在 Google Cloud 控制台中的 Google Kubernetes Engine 页面中,前往集群页面。
点击新部署的 scalable-apps 集群。在打开的集群详情页面中,您可以查看基本集群详细信息以及集群的网络和安全配置。您还可以在功能部分中查看此集群中启用了哪些 GKE 功能。
可观测性
您可以查看有关集群的健康状况和性能的基本指标。在本系列教程的下一篇中,您将启用 Google Cloud Managed Service for Prometheus,以实现更精细的监控和可观测性。
从 Google Cloud 控制台的 Google Kubernetes Engine 集群页面中选择您的集群,然后前往可观测性标签页。
检查一些指标图形,例如 CPU 和内存的指标图形。借助此视图,您无需部署额外的监控功能,即可监控集群工作负载的不同部分的性能。
如需查看从集群中流式传输的日志,请选择日志标签页。您可以按日志的严重级别进行过滤,也可以创建自己的过滤条件来查看特定的命名空间、服务或 Pod。与 Pod 警告和事件一样,集群日志的汇总视图有助于您使用 Google Cloud 控制台快速调试问题。
如果某些服务还无法通信,则在首次部署 Cymbal Bank 时看到日志条目属于正常现象。
选择应用错误标签页。在工作负载运行期间,您可以在 Google Cloud 控制台中查看汇总的警告和事件。此方法有助于调试问题,而无需单独连接到集群、节点或 Pod。
同样,如果某些服务还无法通信,则在首次部署 Cymbal Bank 时看到记录的事件属于正常现象。
工作负载
Google Cloud 控制台的 GKE 页面有一个工作负载部分,用于显示在所有 GKE 集群上运行的工作负载的汇总视图。
在 Google Cloud 控制台的 Google Kubernetes Engine 页面中,前往工作负载页面。
概览标签页显示 GKE 集群中的工作负载和命名空间的列表。您可以按命名空间过滤以查看每个命名空间中运行的工作负载。
服务和入站流量
Service 和 Ingress 视图显示项目的 Service 和 Ingress 资源。Service 通过端点将一组 Pod 公开为网络服务,而 Ingress 管理对集群中服务的外部访问权限。
在 Google Cloud 控制台的 Google Kubernetes Engine 页面中,前往网关、服务和入站流量页面。
如需查找 Cymbal Bank Ingress,请点击 Ingress 的标签页,然后找到名为
frontend
的 Ingress。Ingress 管理应用的入站流量。您可以查看有关负载均衡器、端口和外部端点的信息。点击
frontend
Ingress 的 IP 地址,例如198.51.100.143:80
。此地址指向 Cymbal Bank 网页界面。
清理
本系列针对 Cymbal Bank 的教程设计为逐一完成。在完成本系列教程的过程中,您将学习新技能并使用其他 Google Cloud 产品和服务。
如果您想在继续学习下一个教程之前休息一下,并避免系统因本教程中使用的资源向您的 Google Cloud 账号收取费用,请删除您创建的项目。
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
后续步骤
在下一个教程中,了解如何使用 Google Cloud Managed Service for Prometheus 和 Cloud Monitoring 监控 GKE 中的工作负载。