This commit is contained in:
Teo Ma 2021-04-27 13:45:13 +08:00
Родитель 68e96b00d1
Коммит 0c7cdcfa6d
7 изменённых файлов: 314 добавлений и 335 удалений

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 156 KiB

После

Ширина:  |  Высота:  |  Размер: 142 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 156 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 142 KiB

Просмотреть файл

@ -1,6 +1,6 @@
![](media/logo.jpg)
# 云原生应用动手实验之前的准备
# <a id="cloud-native-applications-before-the-hands-on-lab-setup-guide">云原生应用动手实验之前的准备</a>
<!-- TOC -->
@ -19,7 +19,7 @@
<!-- /TOC -->
# <a id="cloud-native-applications-before-the-hands-on-lab-setup-guide">云原生应用动手实验之前的准备</a>
## <a id="requirements">要求</a>
@ -119,7 +119,7 @@ az account list
- **后缀:**在整个实验中,后缀应用于使资源独一无二,如电子邮件前缀或您的第一个初始和姓氏。
- **位置:**选择所有 Azure 集装箱注册处 SKU 必须可用的区域,即当前:加拿大中部、加拿大东部、美国中北部、美国中部、美国中南部、美国东部、美国东部 2、美国西部、美国西部 2、美国中西部、法国中部、英国南部、英国西部、北欧、西欧、澳大利亚东部、澳大利亚东南部、巴西南部、印度中部、印度南部日本东部日本西部韩国中部东南亚东亚并记住这一点为未来的步骤使你在Azure创造的资源都保存在同一区域。
- **位置:**选择所有 Azure 容器注册处 SKU 必须可用的区域,即当前:加拿大中部、加拿大东部、美国中北部、美国中部、美国中南部、美国东部、美国东部 2、美国西部、美国西部 2、美国中西部、法国中部、英国南部、英国西部、北欧、西欧、澳大利亚东部、澳大利亚东南部、巴西南部、印度中部、印度南部日本东部日本西部韩国中部东南亚东亚并记住这一点为未来的步骤使你在Azure创造的资源都保存在同一区域。
例:
@ -143,13 +143,13 @@ az account list
mkdir .ssh
```
2. 从Cloud Shell命令行输入以下命令生成 SSH 键对。您可以替换`admin`与您的首选名称或句柄。
2. 从Cloud Shell命令行输入以下命令生成 SSH 键对。您可以替换`admin`与您的首选Name或句柄。
```bash
ssh-keygen -t RSA -b 2048 -C admin@fabmedical
```
3. 当被要求将生成的密钥保存到文件时,请输入`.ssh/fabmedical`为名称
3. 当被要求将生成的密钥保存到文件时,请输入`.ssh/fabmedical`为Name
4. 提示时输入密码短语,以及**别忘了**!
@ -193,9 +193,9 @@ az account list
- **VirtualMachineAdminUsernameLinux**Linux生成代理VM管理员用户名示例`"adminfabmedical"`).
- **VirtualMachineAdminPublicKeyLinux**Linux生成代理VM管理员sh公钥。您可以在`.ssh/fabmedical.pub`以前创建的文件(示例:`"ssh-rsa AAAAB3N(...)vPiybQV admin@fabmedical"`).
- **CosmosLocation**Azure Cosmos DB的主要位置。使用与之前创建的资源组相同的位置示例`"eastus"`).
- **CosmosLocationName**Azure Cosmos DB的主要位置的名称。使用与之前创建的资源组相同的位置名称(示例:`"East US"`).
- **CosmosLocationName**Azure Cosmos DB的主要位置的Name。使用与之前创建的资源组相同的位置Name(示例:`"East US"`).
- **CosmosPairedLocation**Azure Cosmos DB的次要位置。下面的链接可用于帮助查找您主要位置的 Azure 区域对。(示例:`"westus"`).
- **CosmosPairedLocationName**Azure Cosmos DB的次要位置的名称。使用与上一密钥中定义的辅助位置匹配的位置名称(示例:`"West US"`).
- **CosmosPairedLocationName**Azure Cosmos DB的次要位置的Name。使用与上一密钥中定义的辅助位置匹配的位置Name(示例:`"West US"`).
> **注意**:可在此处找到 Azure 区域对的列表:<https://docs.microsoft.com/en-us/azure/best-practices-availability-paired-regions#azure-regional-pairs>.
@ -207,7 +207,7 @@ az account list
![In this screenshot of the Azure Cloud Shell editor window, the ... button has been selected, and the Close Editor option is highlighted.](media/b4-image63.png "Azure Cloud Shell Close")
6. 通过键入以下指令(区分大小写),用以前创建的资源组的名称替换 \[资源组]来创建所需的资源:
6. 通过键入以下指令(区分大小写),用以前创建的资源组的Name替换 \[资源组]来创建所需的资源:
```bash
az deployment group create --resource-group {resourceGroup} --template-file azuredeploy.json --parameters azuredeploy.parameters.json
@ -215,7 +215,7 @@ az account list
此命令部署所有实验资源需要 30 到 60 分钟。您可以在部署运行时继续执行设置 GitHub 的下一个任务。
> **注意**如果你得到一个关于 Cosmos DB名称的错误,确保你键入`ComsosLocation`和`CosmosPairedLocation`没有任何空间。更正名称后重新运行上述命令。
> **注意**如果你得到一个关于 Cosmos DBName的错误确保你键入`ComsosLocation`和`CosmosPairedLocation`没有任何空间。更正Name后重新运行上述命令。
### <a id="task-6-create-a-github-repository">任务 6 创建 GitHub 存储库</a>
@ -336,7 +336,7 @@ FabMedical为您提供了入门文件。他们为客户 Contoso Neuro 获取了
替换命令中的括号值如下:
- `[PRIVATEKEYNAME]`:使用私钥名称`.ssh/fabmedical`,创建于上图。
- `[PRIVATEKEYNAME]`:使用私钥Name`.ssh/fabmedical`,创建于上图。
- `[BUILDAGENTUSERNAME]`在默认设置中使用VM的用户名`adminfabmedical`.
@ -501,6 +501,6 @@ FabMedical为您提供了入门文件。他们为客户 Contoso Neuro 获取了
> sudo chown -R $USER:$(id -gn $USER) /home/adminfabmedical/.config
> ```
开始正式动手实验之前,您应该完成以上的所有步骤。
参加动手练习后,您应该按照提供的所有步骤进行操作。
[logo]: https://github.com/Microsoft/MCW-Template-Cloud-Workshop/raw/master/Media/ms-cloud-workshop.png

Просмотреть файл

@ -1,88 +1,67 @@
![](media/logo.jpg)
<div class="MCWHeader1">
Cloud-native applications - Infrastructure edition
</div>
<div class="MCWHeader2">
Hands-on lab step-by-step
</div>
<div class="MCWHeader3">
November 2020
</div>
本文档中的信息(包括 URL 和其他互联网网站参考)可能会在未通知的情况下更改。除非另有说明,否则此处描述的示例公司、组织、产品、域名、电子邮件 Address、徽标、人员、地点和事件均为虚构的并且不与任何真实公司、组织、产品、域名、电子邮件 Address、徽标、人、地点或事件关联或应推断。遵守所有适用的版权法是用户的责任。在不限制版权保护的情况下未经微软公司明确书面许可不得复制、存储或引入检索系统也不得以任何形式或以任何方式电子、机械、影印、录音或其他方式传输本文件的任何部分。
Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、商标、版权或其他知识产权。除非 Microsoft 的任何书面许可协议中明确规定,否则本文档的提供不会为您提供这些专利、商标、版权或其他知识产权的任何许可。
制造商、产品或 URL 的名称仅供参考Microsoft 不会就这些制造商或使用 Microsoft 任何技术的产品进行任何陈述和保修,无论是表达、暗示还是法定。包括制造商或产品并不意味着微软对制造商或产品的认可。链接可提供给第三方网站。此类站点不在 Microsoft 的控制之下Microsoft 不负责链接站点中包含的任何链接站点的内容或链接的内容也不对链接站点的任何更改或更新负责。Microsoft 不负责从任何链接站点接收的网络广播或任何其他形式的传输。微软只为方便而向您提供这些链接,包含任何链接并不意味着微软对该网站或其中包含的产品的认可。
©2020年微软公司。保留所有权利。
微软和列出的商标<https://www.microsoft.com/en-us/legal/intellectualproperty/Trademarks/Usage/General.aspx>是微软集团公司的商标。所有其他商标均为其各自所有者的财产。
**内容**
<!-- TOC -->
- [云原生应用 - 基础设施版动手实验一步一步](#cloud-native-applications---infrastructure-edition-hands-on-lab-step-by-step)
- [抽象和学习目标](#abstract-and-learning-objectives)
- [概述](#overview)
- [解决方案架构](#solution-architecture)
- [要求](#requirements)
- [练习1创建并运行Docker应用程序](#exercise-1-create-and-run-a-docker-application)
- [任务1测试应用程序](#task-1-test-the-application)
- [任务2浏览到 Web 应用程序](#task-2-browsing-to-the-web-application)
- [任务3创建Dockerfile镜像](#task-3-create-docker-images)
- [任务4运行容器化应用程序](#task-4-run-a-containerized-application)
- [任务 5Settings环境变量](#task-5-setup-environment-variables)
- [任务 6 将镜像推送至 Azure 容器注册处](#task-6-push-images-to-azure-container-registry)
- [任务 7Settings CI 管道以推送镜像](#task-7-setup-ci-pipeline-to-push-images)
- [练习 2 使用 Azure 数据库迁移服务将MongoDB迁移到 Cosmos 数据库](#exercise-2-migrate-mongodb-to-cosmos-db-using-azure-database-migration-service)
- [任务1启用Microsoft.DataMigration资源provider](#task-1-enable-microsoftdatamigration-resource-provider)
- [任务2提供Azure数据库迁移服务](#task-2-provision-azure-database-migration-service)
- [任务3将数据迁移到Azure Cosmos 数据库](#task-3-migrate-data-to-azure-cosmos-db)
- [练习 3 将解决方案部署到Azure Kubernetes 服务](#exercise-3-deploy-the-solution-to-azure-kubernetes-service)
- [任务 1 隧道进入AzureKubernetes服务集群](#task-1-tunnel-into-the-azure-kubernetes-service-cluster)
- [任务 2使用 Azure 门户部署服务](#task-2-deploy-a-service-using-the-azure-portal)
- [任务 3 使用kubectl部署服务](#task-3-deploy-a-service-using-kubectl)
- [任务 4 使用Helm Chart部署服务](#task-4-deploy-a-service-using-a-helm-chart)
- [任务 5配置持续交付到Kubernetes集群](#task-5-configure-continuous-delivery-to-the-kubernetes-cluster)
- [任务 6审查集装箱的Azure监视器](#task-6-review-azure-monitor-for-containers)
- [练习4扩展应用并测试HA](#exercise-4-scale-the-application-and-test-ha)
- [任务 1从 Azure 门户增加服务实例](#task-1-increase-service-instances-from-the-azure-portal)
- [任务 2 解决replicas配置失败问题](#task-2-resolve-failed-provisioning-of-replicas)
- [任务3重新启动容器并测试HA](#task-3-restart-containers-and-test-ha)
- [任务4配置 Cosmos DB自动规模](#task-4-configure-cosmos-db-autoscale)
- [任务5测试 Cosmos DB自动规模](#task-5-test-cosmos-db-autoscale)
- [练习 5处理服务和路由应用程序流量](#exercise-5-working-with-services-and-routing-application-traffic)
- [任务 1 更新外部服务,用负载平衡器支持动态发现](#task-1-update-an-external-service-to-support-dynamic-discovery-with-a-load-balancer)
- [任务2调整CPU约束提高规模](#task-2-adjust-cpu-constraints-to-improve-scale)
- [任务 3执行滚动更新](#task-3-perform-a-rolling-update)
- [任务4配置Kubernetes入口](#task-4-configure-kubernetes-ingress)
- [任务 5与流量管理器进行多区域负载平衡](#task-5-multi-region-load-balancing-with-traffic-manager)
- [动手实验后](#after-the-hands-on-lab)
- <a href="#cloud-native-applications---infrastructure-edition-hands-on-lab-step-by-step">云原生应用 - 基础设施版动手实验</a>
- <a href="#abstract-and-learning-objectives">抽象和学习目标</a>
- <a href="#overview">概述</a>
- <a href="#exercise-1-create-and-run-a-docker-application">解决方案架构</a>
- <a href="#requirements">要求</a>
- <a href="#exercise-1-create-and-run-a-docker-application">练习1创建并运行Docker应用程序</a>
- <a href="#task-1-test-the-application">任务1测试应用程序</a>
- <a href="#task-2-browsing-to-the-web-application">任务2浏览到 Web 应用程序</a>
- <a href="#task-3-create-docker-images">任务3创建Dockerfile镜像</a>
- <a href="#task-4-run-a-containerized-application">任务4运行容器化应用程序</a>
- <a href="#task-5-setup-environment-variables">任务 5设置环境变量</a>
- <a href="#task-6-push-images-to-azure-container-registry">任务 6 将镜像推送至 Azure 容器注册处</a>
- <a href="#task-7-setup-ci-pipeline-to-push-images">任务 7设置 CI 管道以推送镜像</a>
- <a href="#exercise-2-migrate-mongodb-to-cosmos-db-using-azure-database-migration-service">练习 2 使用 Azure 数据库迁移服务将MongoDB迁移到 Cosmos 数据库</a>
- <a href="#task-1-enable-microsoftdatamigration-resource-provider">任务1启用Microsoft.DataMigration资源provider</a>
- <a href="#task-2-provision-azure-database-migration-service">任务2提供Azure数据库迁移服务</a>
- <a href="#task-3-migrate-data-to-azure-cosmos-db">任务3将数据迁移到Azure Cosmos 数据库</a>
- <a href="#exercise-3-deploy-the-solution-to-azure-kubernetes-service">练习 3 将解决方案部署到Azure Kubernetes 服务</a>
- <a href="#task-1-tunnel-into-the-azure-kubernetes-service-cluster">任务 1 隧道进入AzureKubernetes服务集群</a>
- <a href="#task-2-deploy-a-service-using-the-azure-portal">任务 2使用 Azure 门户部署服务</a>
- <a href="#task-3-deploy-a-service-using-kubectl">任务 3 使用kubectl部署服务</a>
- <a href="#task-4-deploy-a-service-using-a-helm-chart">任务 4 使用Helm Chart部署服务</a>
- <a href="#task-5-configure-continuous-delivery-to-the-kubernetes-cluster">任务 5配置持续交付到Kubernetes集群</a>
- <a href="#task-6-review-azure-monitor-for-containers">任务 6审查容器的Azure监视器</a>
- <a href="#exercise-4-scale-the-application-and-test-ha">练习4扩展应用并测试HA</a>
- <a href="#task-1-increase-service-instances-from-the-azure-portal">任务 1从 Azure 门户增加服务实例</a>
- <a href="#task-2-resolve-failed-provisioning-of-replicas">任务 2 解决replicas配置失败问题</a>
- <a href="#task-3-restart-containers-and-test-ha">任务3重新启动容器并测试HA</a>
- <a href="#task-4-configure-cosmos-db-autoscale">任务4配置 Cosmos DB自动规模</a>
- <a href="#task-5-test-cosmos-db-autoscale">任务5测试 Cosmos DB自动规模</a>
- <a href="#exercise-5-working-with-services-and-routing-application-traffic">练习 5处理服务和路由应用程序流量</a>
- <a href="#task-1-update-an-external-service-to-support-dynamic-discovery-with-a-load-balancer">任务 1 更新外部服务,用负载平衡器支持动态发现</a>
- <a href="#task-2-adjust-cpu-constraints-to-improve-scale">任务2调整CPU约束提高规模</a>
- <a href="#task-3-perform-a-rolling-update">任务 3执行滚动更新</a>
- <a href="#task-4-configure-kubernetes-ingress">任务4配置Kubernetes入口</a>
- <a href="#task-5-multi-region-load-balancing-with-traffic-manager">任务 5与流量管理器进行多区域负载平衡</a>
- <a href="#after-the-hands-on-lab">动手实验后</a>
<!-- /TOC -->
# 云原生应用 - 基础设施版动手实验一步一步
# <a id="cloud-native-applications---infrastructure-edition-hands-on-lab-step-by-step">云原生应用 - 基础设施版动手实验</a>
## 抽象和学习目标
## <a id="abstract-and-learning-objectives">抽象和学习目标</a>
这个动手实验旨在引导您完成构建和部署 Docker 镜像到 Azure Kubernetes 服务 AKS 托管的 Kubernetes 平台的过程,此外还学习如何处理动态服务发现、服务扩展和高可用性。
在此实验结束时,您将能够更好地构建和部署容器化应用程序到 Azure Kubernetes 服务,并执行常见的 DevOps 程序。
## 概述
## <a id="overview">概述</a>
法布里卡姆医疗会议 FabMedical 提供专为医疗界量身定做的会议网站服务。他们正在根据节点.js重新构想其应用程序代码以便它可以作为 Docker 应用程序运行,并希望实施 POC帮助他们熟悉开发过程、部署的生命周期以及托管环境的关键方面。他们将部署他们的应用程序到Azure Kubernetes服务并希望学习如何部署集装箱在动态负载平衡的方式,发现容器,并按需缩放它们。
法布里卡姆医疗会议 FabMedical 提供专为医疗界量身定做的会议网站服务。他们正在根据节点.js重新构想其应用程序代码以便它可以作为 Docker 应用程序运行,并希望实施 POC帮助他们熟悉开发过程、部署的生命周期以及托管环境的关键方面。他们将部署他们的应用程序到Azure Kubernetes服务并希望学习如何部署容器在动态负载平衡的方式,发现容器,并按需缩放它们。
在这个动手实验中,您将协助完成此 POC 与应用程序代码库的子集。您将创建基于 Linux 的构建代理,以及用于运行已部署应用程序的 Azure Kubernetes 服务集群。您将帮助他们完成应用的 Docker Settings、本地测试、推入镜像存储库、部署到集群以及测试负载平衡和缩放。
在这个动手实验中,您将协助完成此 POC 与应用程序代码库的子集。您将创建基于 Linux 的构建代理,以及用于运行已部署应用程序的 Azure Kubernetes 服务集群。您将帮助他们完成应用的 Docker 设置、本地测试、推入镜像存储库、部署到集群以及测试负载平衡和缩放。
> **重要**大多数Azure资源都需要独特的名称。在整个步骤中,您将看到"SUFFIX"一词作为资源名称的一部分。您应该用唯一的句柄(如 Microsoft 帐户电子邮件前缀)替换此操作,以确保资源的独特名称
> **重要**大多数Azure资源都需要独特的Name。在整个步骤中您将看到"SUFFIX"一词作为资源Name的一部分。您应该用唯一的句柄(如 Microsoft 帐户电子邮件前缀)替换此操作,以确保资源的独特Name
## 解决方案架构
## <a id="exercise-1-create-and-run-a-docker-application">解决方案架构</a>
以下是您将在此实验中构建的解决方案架构的图表。请仔细研究这一点,以便您了解整个解决方案,因为您正在研究各种组件。
@ -92,7 +71,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
每个租户将拥有以下容器:
- **会议网站**SPA应用程序将使用配置Settings来处理租户的自定义样式。
- **会议网站**SPA应用程序将使用配置设置来处理租户的自定义样式。
- **管理网站** 会议所有者用来管理会议配置详细信息、管理与会者注册、管理活动并与与会者沟通的 SPA 应用程序。
@ -100,11 +79,11 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
- **电子邮件服务** 在注册期间或会议所有者选择通过其管理网站与与会者互动时,处理向与会者发送电子邮件通知的 API。
- **配置服务** 处理会议配置Settings(如日期、地点、定价表、早起的特价、倒计时等)的 API。
- **配置服务** 处理会议配置设置(如日期、地点、定价表、早起的特价、倒计时等)的 API。
- **内容服务** 处理会议内容(如演讲者、会议、研讨会和赞助商)的 API。
## 要求
## <a id="requirements">要求</a>
1. 微软 Azure 订阅必须是即用即付或 MSDN。
@ -127,13 +106,13 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
> **非常重要**:您应该键入指南中显示的所有命令。当指示输入本文档中显示的信息时,请勿尝试复制并粘贴到您的命令窗口或其他文档中,除非本文档中明确说明。复制和粘贴可能会出现导致错误、执行说明或创建文件内容的问题。
## 练习1创建并运行Docker应用程序
## <a id="exercise-1-create-and-run-a-docker-application">练习1创建并运行Docker应用程序</a>
**期间**40分钟
在此练习中,您将采用入门文件并运行节点.js应用程序作为Docker应用程序。您将创建一个Dockerfile构建Docker镜像并运行容器来执行应用程序。
### 任务1测试应用程序
### <a id="task-1-test-the-application">任务1测试应用程序</a>
此任务的目的是确保您可以在应用更改以作为 Docker 应用程序运行应用程序之前成功运行应用程序。
@ -304,7 +283,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
19. 如果您收到 JSON 对 /speakers内容请求的响应和来自 Web 应用程序的 HTML 响应,您的环境将按预期工作。
### 任务2浏览到 Web 应用程序
### <a id="task-2-browsing-to-the-web-application">任务2浏览到 Web 应用程序</a>
在此任务中,您将浏览到 Web 应用程序进行测试。
@ -335,7 +314,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
killall node
```
### 任务3创建Dockerfile镜像
### <a id="task-3-create-docker-images">任务3创建Dockerfile镜像</a>
在此任务中,您将为应用程序创建 Docker 镜像,---一个用于 API 应用程序,另一个用于 Web 应用程序。每个镜像都将通过依赖于多克档案的 Docker 命令创建。
@ -351,9 +330,9 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
- 执行 Docker 生成命令以生成镜像
- 用名称内容(-t标记生成的镜像
- 用Name内容(-t标记生成的镜像
- 最后一个点(`.`表示在此当前目录上下文中使用Dockerfile。默认情况下此文件预计将有名称`Dockerfile`(案件敏感)。
- 最后一个点(`.`表示在此当前目录上下文中使用Dockerfile。默认情况下此文件预计将有Name`Dockerfile`(案件敏感)。
```bash
docker image build -t content-api .
@ -417,7 +396,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
![Three images are now visible in this screenshot of the console window: content-init, content-web, content-api, and node.](media/vm-list-containers.PNG "View content images")
### 任务4运行容器化应用程序
### <a id="task-4-run-a-containerized-application">任务4运行容器化应用程序</a>
Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应用程序容器将与 mongodb 进行通信。在本练习中,您将在启动 mongodb 时创建的同一桥网络上启动您创建的容器创建的镜像。
@ -427,7 +406,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
- 指示多克发动机使用`fabmedical`网络。
- 指示码头发动机使用端口`3001`并映射到内部集装箱端口`3001`.
- 指示码头发动机使用端口`3001`并映射到内部容器端口`3001`.
- 通过指定的镜像(如`content-api`.
@ -486,7 +465,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
docker container run --name web --net fabmedical -P -d content-web
```
7. 输入命令以再次显示正在运行的容器,您将观察到 API 和 Web 容器都在列表中。Web 容器显示其内部集装箱端口的动态分配端口映射`3000`.
7. 输入命令以再次显示正在运行的容器,您将观察到 API 和 Web 容器都在列表中。Web 容器显示其内部容器端口的动态分配端口映射`3000`.
```bash
docker container ls
@ -500,7 +479,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
curl http://localhost:[PORT]/speakers.html
```
### 任务 5Settings环境变量
### <a id="task-5-setup-environment-variables">任务 5设置环境变量</a>
在此任务中,您将配置`web`容器使用环境变量与 API 容器通信,类似于向 api 提供 mongodb 连接字符串的方式。
@ -524,7 +503,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
cat app.js
```
4. 观察`contentApiUrl`变量可以Settings为环境变量。
4. 观察`contentApiUrl`变量可以设置为环境变量。
```javascript
const contentApiUrl = process.env.CONTENT_API_URL || "http://[VM IP]:3001";
@ -537,7 +516,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
<i>
```
6. 定位`EXPOSE`如下图所示行,并在上面添加一行,用于Settings环境变量的默认值,如屏幕截图所示。
6. 定位`EXPOSE`如下图所示行,并在上面添加一行,用于设置环境变量的默认值,如屏幕截图所示。
```Dockerfile
ENV CONTENT_API_URL http://localhost:3001
@ -559,7 +538,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
docker image build -t content-web .
```
9. 创建并启动将正确的 URI 传递给 API 容器作为环境变量的镜像。此变量将通过您创建的 Docker 网络使用其容器名称解决 API 应用程序。运行容器后,检查容器是否运行,并记下下一步的动态端口分配。
9. 创建并启动将正确的 URI 传递给 API 容器作为环境变量的镜像。此变量将通过您创建的 Docker 网络使用其容器Name解决 API 应用程序。运行容器后,检查容器是否运行,并记下下一步的动态端口分配。
```bash
docker container run --name web --net fabmedical -P -d -e CONTENT_API_URL=http://api:3001 content-web
@ -572,7 +551,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
curl http://localhost:[PORT]/speakers.html
```
11. 您将无法在临时端口上浏览 Web 应用程序,因为 VM 只暴露了有限的端口范围。现在,您将停止 Web 容器,并使用端口 3000 重新启动它,以便在浏览器中进行测试。键入以下命令以停止容器、取出容器,并使用端口的显式Settings再次运行它。
11. 您将无法在临时端口上浏览 Web 应用程序,因为 VM 只暴露了有限的端口范围。现在,您将停止 Web 容器,并使用端口 3000 重新启动它,以便在浏览器中进行测试。键入以下命令以停止容器、取出容器,并使用端口的显式设置再次运行它。
```bash
docker container stop web
@ -606,17 +585,17 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
如果提示,请输入凭据。
### 任务 6 将镜像推送至 Azure 容器注册处
### <a id="task-6-push-images-to-azure-container-registry">任务 6 将镜像推送至 Azure 容器注册处</a>
要在远程环境中运行容器,您通常会将镜像推送至 Docker 注册处在那里您可以存储和分发镜像。每个服务将有一个存储库可以推至和拉从与Docker命令。Azure 集装箱注册处 ACR 是基于码头注册处 v2 的托管私人码头注册服务。
要在远程环境中运行容器,您通常会将镜像推送至 Docker 注册处在那里您可以存储和分发镜像。每个服务将有一个存储库可以推至和拉从与Docker命令。Azure 容器注册处 ACR 是基于码头注册处 v2 的托管私人码头注册服务。
在此任务中,您将把镜像推送至您的 ACR 帐户、带有标记的版本镜像,并Settings持续集成 CI以构建容器的未来版本并自动将其推送至 ACR。
在此任务中,您将把镜像推送至您的 ACR 帐户、带有标记的版本镜像,并设置持续集成 CI以构建容器的未来版本并自动将其推送至 ACR。
1. 在[Azure门户](https://portal.azure.com/)导航到您在动手实验之前创建的ACR。
2. 选择**访问密钥**下**Settings**在左侧菜单上。
2. 选择**访问密钥**下**设置**在左侧菜单上。
![In this screenshot of the left-hand menu, Access keys is highlighted below Settings.](media/image64.png "Access keys")
![In this screenshot of the left-hand menu, Access keys is highlighted below 设置.](media/image64.png "Access keys")
3. 访问密钥面板显示下一步所需的登录服务器、用户名和密码。在构建 VM 上执行操作时,请保持此方便。
@ -648,7 +627,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
> **注意**:请务必更换`[LOGINSERVER]`您的ACR实例。
6. 列出您的Dockerfile镜像并查看存储库和标签。请注意存储库预缀了您的 ACR 登录服务器名称,例如下面的屏幕截图中显示的示例。
6. 列出您的Dockerfile镜像并查看存储库和标签。请注意存储库预缀了您的 ACR 登录服务器Name,例如下面的屏幕截图中显示的示例。
```bash
docker image ls
@ -703,24 +682,24 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
docker image pull [LOGINSERVER]/content-web:v1
```
### 任务 7Settings CI 管道以推送镜像
### <a id="task-7-setup-ci-pipeline-to-push-images">任务 7设置 CI 管道以推送镜像</a>
在此任务中,您将使用 YAML 来定义构建 Docker 的 GitHub 操作工作流
镜像并自动将其推送至您的ACR实例。
1. 在GitHub返回到**Fabmedical**存储库屏幕,并选择**Settings**标签。
1. 在GitHub返回到**Fabmedical**存储库屏幕,并选择**设置**标签。
2. 从左侧菜单中选择**secret**.
3. 选择**New repository secret**按钮。
![Settings link, Secrets link, and New secret button are highlighted.](media/2020-08-24-21-45-42.png "GitHub Repository secrets")
![设置 link, Secrets link, and New secret button are highlighted.](media/2020-08-24-21-45-42.png "GitHub Repository secrets")
4. 在**New secret**形式,输入名称`ACR_USERNAME`和价值粘贴在Azure容器注册处**用户名**这是以前复制的。选择**添加secret**.
4. 在**New secret**形式,输入Name`ACR_USERNAME`和价值粘贴在Azure容器注册处**用户名**这是以前复制的。选择**添加secret**.
![New secret screen with values are entered.](media/2020-08-24-21-48-54.png "New secret screen")
5. 通过输入名称添加另一个secret`ACR_PASSWORD`和价值粘贴在Azure容器注册处**密码**这是以前复制的。
5. 通过输入Name添加另一个secret`ACR_PASSWORD`和价值粘贴在Azure容器注册处**密码**这是以前复制的。
![Secrets screen with both the ACR_USERNAME and ACR_PASSWORD secrets created.](media/2020-08-24-21-51-24.png "Secrets screen")
@ -730,7 +709,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
cd ~/Fabmedical
```
7. 在 GitHub 操作工作流可以Settings之前,`.github/workflows`目录需要创建,如果它还不存在。通过运行以下命令来做到这一点:
7. 在 GitHub 操作工作流可以设置之前,`.github/workflows`目录需要创建,如果它还不存在。通过运行以下命令来做到这一点:
```bash
mkdir ~/Fabmedical/.github
@ -831,15 +810,15 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![Build and Push Docker Image job.](media/2020-08-25-15-42-11.png "Build and Push Docker Image job")
17. 接下来,Settings`content-api`工作流。此存储库已包含`content-api.yml`位于`.github/workflows`目录。打开`.github/workflows/content-api.yml`文件编辑。
17. 接下来,设置`content-api`工作流。此存储库已包含`content-api.yml`位于`.github/workflows`目录。打开`.github/workflows/content-api.yml`文件编辑。
18. 编辑`resourceGroupName`和`containerRegistry`环境值以取代`[SHORT_SUFFIX]`与您自己的三个字母后缀,以便它匹配您的容器注册表的名称和资源组。
18. 编辑`resourceGroupName`和`containerRegistry`环境值以取代`[SHORT_SUFFIX]`与您自己的三个字母后缀,以便它匹配您的容器注册表的Name和资源组。
![The screenshot shows the content-api.yml with the environment variables highlighted.](media/2020-08-25-15-59-56.png "content-api.yml environment variables highlighted")
19. 保存文件,然后导航到 GitHub 中的存储库,选择"操作",然后手动运行**内容-阿皮**工作流。
20. 接下来,Settings**内容-伊尼特**工作流。遵循与前一步相同的步骤`content-api`工作流`content-init.yml`文件,记得更新`[SHORT_SUFFIX]`价值与您自己的三个字母后缀。
20. 接下来,设置**内容-伊尼特**工作流。遵循与前一步相同的步骤`content-api`工作流`content-init.yml`文件,记得更新`[SHORT_SUFFIX]`价值与您自己的三个字母后缀。
21. 提交并推动 Git 存储库的更改:
@ -849,13 +828,13 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
git push
```
## 练习 2 使用 Azure 数据库迁移服务将MongoDB迁移到 Cosmos 数据库
## <a id="exercise-2-migrate-mongodb-to-cosmos-db-using-azure-database-migration-service">练习 2 使用 Azure 数据库迁移服务将MongoDB迁移到 Cosmos 数据库</a>
**期间**20分钟
此时,您有在 Docker 实例VM - 生成代理)中运行的 Web 和 API 应用程序。下一步是将MongoDB数据库数据迁移到Azure Cosmos 数据库。这项工作将利用Azure数据库迁移服务将MongoDB数据库的数据迁移到Azure Cosmos 数据库。
### 任务1启用Microsoft.DataMigration资源provider
### <a id="task-1-enable-microsoftdatamigration-resource-provider">任务1启用Microsoft.DataMigration资源provider</a>
在此任务中,您将通过注册 Azure 订阅,启用 Azure 数据库迁移服务`Microsoft.DataMigration`资源provider。
@ -867,7 +846,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
az provider register --namespace Microsoft.DataMigration
```
### 任务2提供Azure数据库迁移服务
### <a id="task-2-provision-azure-database-migration-service">任务2提供Azure数据库迁移服务</a>
在此任务中,您将部署 Azure 数据库迁移服务实例,该实例将用于将数据从 MongoDB 迁移到 Cosmos 数据库。
@ -882,7 +861,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
4. 在**基本**选项卡的**创建迁移服务**窗格,输入以下值:
- 资源组:选择与此实验创建的资源组。
- 迁移服务名称:输入名称,例如`fabmedical[SUFFIX]`.
- 迁移服务Name输入Name,例如`fabmedical[SUFFIX]`.
- 位置选择资源组使用的Azure区域。
![The screenshot shows the Create Migration Service Basics tab with all values entered.](media/dms-create-basics.png "Create Migration Basics Tab")
@ -899,7 +878,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
该服务可能需要 5 - 10 分钟才能提供。
### 任务3将数据迁移到Azure Cosmos 数据库
### <a id="task-3-migrate-data-to-azure-cosmos-db">任务3将数据迁移到Azure Cosmos 数据库</a>
在此任务中,您将创建**迁移项目**在Azure数据库迁移服务中然后将数据从MongoDB迁移到Azure Cosmos 数据库。
@ -913,7 +892,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
4. 在**新的迁移项目**窗格,输入以下值,然后选择**创建和运行活动**:
- 项目名称`fabmedical`
- 项目Name`fabmedical`
- 源服务器类型:`MongoDB`
- 目标服务器类型:`CosmosDB (MongoDB API)`
- 选择活动类型:`Offline data migration`
@ -925,7 +904,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
5. 在**MongoDB到 Cosmos 数据库离线迁移向导**窗格,输入以下值的**选择源**标签:
- 模式:**标准模式**
- 源服务器名称:输入本实验中使用的生成代理 VM 的私人 IP Address。
- 源服务器Name:输入本实验中使用的生成代理 VM 的私人 IP Address。
- 服务器端口:`27017`
- 要求 SSL未选中
@ -941,31 +920,31 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
- 订阅:选择您为此实验使用的 Azure 订阅。
- 选择 Cosmos 数据库名称:选择`fabmedical-[SUFFIX]` Cosmos 数据库实例。
- 选择 Cosmos 数据库Name:选择`fabmedical-[SUFFIX]` Cosmos 数据库实例。
![The Select target tab with values selected.](media/dms-select-target.png "MongoDB to Azure Database for CosmosDB - Select target")
通知,**连接字符串**将自动填充与您的Azure Cosmos DB实例的密钥。
8. 修改**连接字符串**通过替换`@undefined:`跟`@fabmedical-[SUFFIX].documents.azure.com:`因此DNS名称与Azure Cosmos 数据库实例匹配。请务必更换`[SUFFIX]`.
8. 修改**连接字符串**通过替换`@undefined:`跟`@fabmedical-[SUFFIX].documents.azure.com:`因此DNSName与Azure Cosmos 数据库实例匹配。请务必更换`[SUFFIX]`.
![The screenshot shows the Connection string with the @undefined: value replaced with the correct DNS name.](media/dms-select-target-connection-string.png "Setting the Connection string")
9. 选择**下一篇:数据库Settings>>**.
9. 选择**下一篇:数据库设置>>**.
10. 在**数据库Settings**选项卡,选择`contentdb` **源数据库**因此这个数据库将从MongoDB迁移到Azure Cosmos 数据库。
10. 在**数据库设置**选项卡,选择`contentdb` **源数据库**因此这个数据库将从MongoDB迁移到Azure Cosmos 数据库。
![The screenshot shows the Database setting tab with the contentdb source database selected.](media/dms-database-setting.png "Database setting tab")
11. 选择**下一个:集合Settings>>**.
11. 选择**下一个:集合设置>>**.
12. 在**收集Settings**选项卡,扩展**内容数据库**数据库,并确保这两个**会话**和** speakers**集合被选中用于迁移。此外,更新**吞吐量**自`400`两个集合。
12. 在**收集设置**选项卡,扩展**内容数据库**数据库,并确保这两个**会话**和** speakers**集合被选中用于迁移。此外,更新**吞吐量**自`400`两个集合。
![The screenshot shows the Collection setting tab with both sessions and speakers collections selected with Throughput RU/s set to 400 for both collections.](media/dms-collection-setting.png "Throughput RU")
13. 选择**下一篇:移民摘要>>**.
14. 在**迁移摘要**选项卡,输入`MigrateData`在**活动名称**字段,然后选择**开始迁移**启动MongoDB数据迁移到Azure Cosmos 数据库。
14. 在**迁移摘要**选项卡,输入`MigrateData`在**活动Name**字段,然后选择**开始迁移**启动MongoDB数据迁移到Azure Cosmos 数据库。
![The screenshot shows the Migration summary is shown with MigrateData entered in the Activity name field.](media/dms-migration-summary.png "Migration summary")
@ -977,13 +956,13 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![The screenshot shows the Cosmos DB is open in the Azure Portal with Data Explorer open showing the data has been migrated.](media/dms-confirm-data-in-cosmosdb.png "Cosmos DB is open")
## 练习 3 将解决方案部署到Azure Kubernetes 服务
## <a id="exercise-3-deploy-the-solution-to-azure-kubernetes-service">练习 3 将解决方案部署到Azure Kubernetes 服务</a>
**期间**30分钟
在本练习中,您将连接到您在动手实验之前创建的 Azure Kubernetes 服务集群,并使用 Kubernetes 将 Docker 应用程序部署到集群中。
### 任务 1 隧道进入AzureKubernetes服务集群
### <a id="task-1-tunnel-into-the-azure-kubernetes-service-cluster">任务 1 隧道进入AzureKubernetes服务集群</a>
在此任务中,您将收集有关 Azure Kubernetes 服务集群所需的信息以便连接到集群并执行命令从Cloud Shell连接到 Kubernetes 管理仪表板。
@ -995,7 +974,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
az account show
```
- 如果您未连接到正确的订阅,请列出您的订阅,然后通过其 ID Settings订阅并下列命令类似于您在实验前的Cloud Shell中所做的
- 如果您未连接到正确的订阅,请列出您的订阅,然后通过其 ID 设置订阅并下列命令类似于您在实验前的Cloud Shell中所做的
```bash
az account list
@ -1016,7 +995,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot of the console, kubectl get nodes has been typed and run at the command prompt, which produces a list of nodes.](media/image75.png "kubectl get nodes")
### 任务 2使用 Azure 门户部署服务
### <a id="task-2-deploy-a-service-using-the-azure-portal">任务 2使用 Azure 门户部署服务</a>
在此任务中,您将使用 Azure 门户将 API 应用程序部署到 Azure Kubernetes 服务集群。
@ -1053,7 +1032,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![Selecting + Add to create a deployment.](media/2021-03-25-17-05-05.png "Selecing + Add to create a deployment")
5. 在**添加与雅姆勒**加载粘贴以下YAML并更新的屏幕`[LOGINSERVER]`具有ACR实例名称的占位符。
5. 在**添加与雅姆勒**加载粘贴以下YAML并更新的屏幕`[LOGINSERVER]`具有ACR实例Name的占位符。
```yaml
apiVersion: apps/v1
@ -1139,7 +1118,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
mongodb://<USERNAME>:<PASSWORD>@fabmedical-<SUFFIX>.documents.azure.com:10255/contentdb?ssl=true&replicaSet=globaldb
```
12. 您将Settings一个库伯内特的secret来存储连接字符串并配置`content-api`申请访问secret。首先您必须根据64编码secret值。打开 Azure Cloud Shell窗口使用以下命令编码连接字符串然后复制输出。
12. 您将设置一个库伯内特的secret来存储连接字符串并配置`content-api`申请访问secret。首先您必须根据64编码secret值。打开 Azure Cloud Shell窗口使用以下命令编码连接字符串然后复制输出。
> **注意**:连接字符串周围的双引号需要成功生成所需的输出。
@ -1165,7 +1144,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![This is a screenshot of the Azure Portal for AKS howing the YAML file for creating a deployment.](media/2021-03-25-17-08-06.png "Upload YAML data")
15. 按名称对机密列表进行排序,您现在应该可以看到显示的新机密。
15. 按Name对机密列表进行排序,您现在应该可以看到显示的新机密。
![This is a screenshot of the Azure Portal for AKS showing secrets.](media/find-cosmosdb-secret.png "Manage Kubernetes secrets")
@ -1213,7 +1192,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![This is a screenshot of the Kubernetes management dashboard showing logs output.](media/2021-03-25-17-09-24.png "API Logs")
### 任务 3 使用kubectl部署服务
### <a id="task-3-deploy-a-service-using-kubectl">任务 3 使用kubectl部署服务</a>
在此任务中,使用部署 Web 服务`kubectl`.
@ -1287,7 +1266,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
terminationGracePeriodSeconds: 30
```
4. 更新`[LOGINSERVER]`条目以匹配您的ACR登录服务器的名称
4. 更新`[LOGINSERVER]`条目以匹配您的ACR登录服务器的Name
5. 选择**...**按钮并选择**Save**.
@ -1345,7 +1324,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![A screenshot of the web site showing no data displayed.](media/Ex2-Task3.11.png "Web site home page")
### 任务 4 使用Helm Chart部署服务
### <a id="task-4-deploy-a-service-using-a-helm-chart">任务 4 使用Helm Chart部署服务</a>
在此任务中,您将使用[掌舵](https://helm.sh/)简化 Azure Kubernetes 集群上基于容器的应用程序的安装和管理的图表。
@ -1506,7 +1485,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
22. 保存更改并Close Editor。
23. 该图表现在已Settings为部署我们的 Web 容器。键入以下命令以部署Helm Chart描述的应用程序。您将收到一条消息表明掌舵人创建了 Web 部署和 Web 服务。
23. 该图表现在已设置为部署我们的 Web 容器。键入以下命令以部署Helm Chart描述的应用程序。您将收到一条消息表明掌舵人创建了 Web 部署和 Web 服务。
```bash
cd ../..
@ -1531,7 +1510,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
git push
```
### 任务 5配置持续交付到Kubernetes集群
### <a id="task-5-configure-continuous-delivery-to-the-kubernetes-cluster">任务 5配置持续交付到Kubernetes集群</a>
在此任务中,您将使用 GitHub 操作工作流自动将 Web 镜像部署到 AKS 集群的过程。您将更新工作流程并配置作业,以便当新镜像被推入 ACR 时,管道将镜像部署到 AKS 集群。
@ -1592,9 +1571,9 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
cat ~/.kube/config
```
5. 在GitHub返回到**Fabmedical**存储库屏幕,选择**Settings**选项卡,选择**secret**从左菜单,然后选择**New secret**按钮。
5. 在GitHub返回到**Fabmedical**存储库屏幕,选择**设置**选项卡,选择**secret**从左菜单,然后选择**New secret**按钮。
6. 创建一个新的 GitHub secret与名称`KUBECONFIG`并粘贴在内容`~/.kube/config`以前复制的文件。
6. 创建一个新的 GitHub secret与Name`KUBECONFIG`并粘贴在内容`~/.kube/config`以前复制的文件。
![The screenshot displays the KUBECONFIG secret](media/2020-08-25-22-34-04.png "Edit KUBECONFIG secret")
@ -1657,7 +1636,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![The screenshot shows workflow is running and the current status.](media/2020-08-25-22-15-39.png "Workflow is running")
### 任务 6审查集装箱的Azure监视器
### <a id="task-6-review-azure-monitor-for-containers">任务 6审查容器的Azure监视器</a>
在此任务中,您将访问和查看 Azure 监视器为容器提供的各种日志和仪表板。
@ -1677,7 +1656,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot, the various containers information is shown.](media/monitor_1.png "View containers data")
5. 现在按容器名称进行筛选并搜索**蹼**容器中,您将看到库伯内特斯集群中创建的所有容器,其中带有吊舱名称
5. 现在按容器Name进行筛选并搜索**蹼**容器中,您将看到库伯内特斯集群中创建的所有容器,其中带有吊舱Name
![In this screenshot, the containers are filtered by container named web.](media/monitor_3.png "Filter data by container and web")
@ -1699,13 +1678,13 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![The container log query results are displayed, one log entry is expanded in the results view with its details shown.](media/monitor_7.png "Expand the results")
## 练习4扩展应用并测试HA
## <a id="exercise-4-scale-the-application-and-test-ha">练习4扩展应用并测试HA</a>
**期间**20分钟
此时,您已部署了 Web 和 API 服务容器的单一实例。在此练习中,您将增加 Web 服务的容器实例数量,并在现有集群上缩放前端。
### 任务 1从 Azure 门户增加服务实例
### <a id="task-1-increase-service-instances-from-the-azure-portal">任务 1从 Azure 门户增加服务实例</a>
在此任务中,您将增加 AKS Azure 门户面板中 API 部署的实例数。在部署时,您将观察不断变化的状态。
@ -1733,7 +1712,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
- api 部署和复制集处于警告状态。
- 在"默认"名称空间中,两个吊舱是健康的。
- 在"默认"Name空间中,两个吊舱是健康的。
5. 打开康托索神经会议网络应用程序。当您导航到" speakers"和"会话"页面时,应用程序仍应不出现任何错误。
@ -1753,7 +1732,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
- **运行时间:**API服务的备份时间。
### 任务 2 解决replicas配置失败问题
### <a id="task-2-resolve-failed-provisioning-of-replicas">任务 2 解决replicas配置失败问题</a>
在此任务中,您将解决失败的 API 副本。这些故障的发生是由于集群无法满足所要求的资源。
@ -1769,7 +1748,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
protocol: TCP
```
- 修改**中央处理器**并将其Settings为**100米**.CPU 在节点上的所有 Pods 之间分配。
- 修改**中央处理器**并将其设置为**100米**.CPU 在节点上的所有 Pods 之间分配。
```yaml
resources:
@ -1786,7 +1765,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In the Workload view with the API deployment highlighted.](media/healthy-deployment.png "API deployment is now healthy")
### 任务3重新启动容器并测试HA
### <a id="task-3-restart-containers-and-test-ha">任务3重新启动容器并测试HA</a>
在此任务中,您将重新启动容器并验证重新启动不会影响运行服务。
@ -1800,13 +1779,13 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
3. 几分钟后,您会发现 API 部署正在成功运行 4 个副本。
4. 加载 Web 应用程序统计页面后返回浏览器选项卡。一遍又一遍地刷新页面。您不会看到任何错误,但您将定期看到两个 api pod 实例之间的 api 主机名称更改。任务 ID 和 pid 也可能在两个 api 吊舱实例之间更改。
4. 加载 Web 应用程序统计页面后返回浏览器选项卡。一遍又一遍地刷新页面。您不会看到任何错误,但您将定期看到两个 api pod 实例之间的 api 主机Name更改。任务 ID 和 pid 也可能在两个 api 吊舱实例之间更改。
![On the Stats page in the Contoso Neuro web application, two different api host name values are highlighted.](media/image126.png "View web task hostname")
5. 刷新后足够的时间看到,`hostName`值正在改变,服务保持健康,您可以打开**复制套装**在Azure门户中查看API。
6. 在此视图中,您可以看到 Web 应用程序统计页面中显示的主机名值与正在运行的吊舱的吊舱名称匹配。
6. 在此视图中,您可以看到 Web 应用程序统计页面中显示的主机名值与正在运行的吊舱的吊舱Name匹配。
![Viewing replica set in the Azure Portal.](media/2021-03-26-17-31-02.png "Viewing replica set in the Azure Portal")
@ -1820,13 +1799,13 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
9. 返回到 API 部署并将其缩减到`1`复制品。有关如果您不确定,请参阅上面的步骤 2了解如何做到这一点。
10. 返回浏览器中的示例网站的统计页面并刷新,同时 Kubernetes 正在缩减 Pods 的数量。您会注意到仅显示一个 API 主机名称,即使您可能仍然会在 API 复制器Settings视图中看到几个运行吊舱。即使有几个吊舱正在运行Kubernetes 将不再将流量发送到它选择终止的吊舱。稍后API 复制器Settings视图中将只显示一个吊舱。
10. 返回浏览器中的示例网站的统计页面并刷新,同时 Kubernetes 正在缩减 Pods 的数量。您会注意到仅显示一个 API 主机Name即使您可能仍然会在 API 复制器设置视图中看到几个运行吊舱。即使有几个吊舱正在运行Kubernetes 将不再将流量发送到它选择终止的吊舱。稍后API 复制器设置视图中将只显示一个吊舱。
![Replica Sets is selected under Workloads in the navigation menu on the left. On the right are the Details and Pods boxes. Only one API host name, which has a green check mark and is listed as running, appears in the Pods box.](media/2021-03-26-17-32-24.png "View replica details")
### 任务4配置 Cosmos DB自动规模
### <a id="task-4-configure-cosmos-db-autoscale">任务4配置 Cosmos DB自动规模</a>
在此任务中您将在Azure Cosmos 数据库上Settings自动缩放。
在此任务中您将在Azure Cosmos 数据库上设置自动缩放。
1. 在 Azure 门户中,导航到`fabmedical-[SUFFIX]` **Azure Cosmos 数据库帐户**.
@ -1834,23 +1813,23 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
3. 在**数据资源管理器**,扩大`contentdb`数据库,然后扩展`sessions`收集。
4. 下`sessions`收集、选择**缩放和Settings**.
4. 下`sessions`收集、选择**缩放和设置**.
5. 在**缩放和Settings**选择**自动缩放**对于**吞吐量**Settings下**规模**.
5. 在**缩放和设置**选择**自动缩放**对于**吞吐量**设置下**规模**.
![The screenshot displays Cosmos DB Scale and Settings tab with Autoscale selected](media/cosmosdb-autoscale.png "CosmosDB collection scale and settings")
![The screenshot displays Cosmos DB Scale and 设置 tab with Autoscale selected](media/cosmosdb-autoscale.png "CosmosDB collection scale and 设置")
6. 选择**Save**.
7. 执行相同的任务以启用**自动缩放**吞吐量`speakers`收集。
### 任务5测试 Cosmos DB自动规模
### <a id="task-5-test-cosmos-db-autoscale">任务5测试 Cosmos DB自动规模</a>
在此任务中,您将运行一个性能测试脚本,将测试 Azure Cosmos DB 的自动规模功能,以便您看到它现在将扩展到大于 400 RU/s。
1. 在 Azure 门户中,导航到`fabmedical-[SUFFIX]` ** Cosmos 数据库帐户**.
2. 选择**连接字符串**下**Settings**.
2. 选择**连接字符串**下**设置**.
3. 在**连接字符串**窗格,复制**主机**,**用户名**和**主要密码**值。保存这些供以后使用。
@ -1870,7 +1849,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
vi perftest.sh
```
7. 有几个变量在顶部宣布`perftest.sh`脚本。修改**主机**,**用户名**和**密码**变量通过将其值Settings为以前复制的相应 Cosmos DB连接字符串值。
7. 有几个变量在顶部宣布`perftest.sh`脚本。修改**主机**,**用户名**和**密码**变量通过将其值设置为以前复制的相应 Cosmos DB连接字符串值。
![The screenshot shows Vim with perftest.sh file open and variables set to Cosmos DB Connection String values.](media/cosmos-perf-test-variables.png "Modify the connection information in Vim")
@ -1894,7 +1873,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![The screenshot shows the Cosmos DB request charge graph showing recent activity from performance test](media/cosmos-request-charge.png "Recent CosmosDB activity graph")
## 练习 5处理服务和路由应用程序流量
## <a id="exercise-5-working-with-services-and-routing-application-traffic">练习 5处理服务和路由应用程序流量</a>
**期间**1小时
@ -1902,7 +1881,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一代理节点上运行多个吊舱实例,---配置特定静态端口(如 API 服务的 3001时无法实现的状态。
### 任务 1 更新外部服务,用负载平衡器支持动态发现
### <a id="task-1-update-an-external-service-to-support-dynamic-discovery-with-a-load-balancer">任务 1 更新外部服务,用负载平衡器支持动态发现</a>
在此任务中,您将更新 Web 服务,以便它通过 Azure 负载平衡器支持动态发现。
@ -1922,9 +1901,9 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
![Deployments is selected under Workloads in the navigation menu on the left. On the right are the Details and New Replica Set boxes. The web deployment is highlighted in the New Replica Set box, indicating an error.](media/2021-03-26-18-23-38.png "View Pod deployment events")
与 API 部署一样Web 部署使用固定部署_主机端口_并且您的缩放能力受可用代理节点数量的限制。但是在通过删除_主机端口_Settings时,由于 CPU 限制Web 部署仍无法缩放过去两个吊舱。部署请求的 CPU 比 Web 应用程序需要的要多,因此您将在下一个任务中修复此限制。
与 API 部署一样Web 部署使用固定部署_主机端口_并且您的缩放能力受可用代理节点数量的限制。但是在通过删除_主机端口_设置时,由于 CPU 限制Web 部署仍无法缩放过去两个吊舱。部署请求的 CPU 比 Web 应用程序需要的要多,因此您将在下一个任务中修复此限制。
### 任务2调整CPU约束提高规模
### <a id="task-2-adjust-cpu-constraints-to-improve-scale">任务2调整CPU约束提高规模</a>
在此任务中,您将修改 Web 服务的 CPU 要求,以便它可以扩展到更多实例。
@ -1940,7 +1919,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
![Four web pods are listed in the Pods box, and all have green check marks and are listed as Running.](media/2021-03-26-18-24-35.png "Four pods running")
### 任务 3执行滚动更新
### <a id="task-3-perform-a-rolling-update">任务 3执行滚动更新</a>
在此任务中,您将编辑 Web 应用程序源代码以添加应用程序洞察并更新部署所使用的 Docker 镜像。然后,您将执行滚动更新,以演示如何部署代码更改。
@ -1991,7 +1970,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
8. 当此更新运行时,返回浏览器中的 Azure 门户。
9. 从导航菜单中选择**复制套装**下**工作量**.从此视图中,您将看到为 Web Settings的新副本,该副本可能仍在部署过程中(如下图所示)或已完全部署。
9. 从导航菜单中选择**复制套装**下**工作量**.从此视图中,您将看到为 Web 设置的新副本,该副本可能仍在部署过程中(如下图所示)或已完全部署。
![At the top of the list, a new web replica set is listed as a pending deployment in the Replica Set box.](media/2021-03-26-18-25-30.png "Pod deployment is in progress")
@ -1999,7 +1978,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
![On the Stats page, the hostName is highlighted.](media/image145.png "On Stats page hostName is displayed")
### 任务4配置Kubernetes入口
### <a id="task-4-configure-kubernetes-ingress">任务4配置Kubernetes入口</a>
在此任务中,您将使用[n金克斯代理服务器](https://nginx.org/en/)利用基于路径的路由和 TLS 终止。
@ -2040,7 +2019,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
5. 在Azure门户下**服务和入口**复制IP Address**外部 IP**对于`nginx-ingress-RANDOM-nginx-ingress`服务。
![A screenshot of the Kubernetes management dashboard showing the ingress controller settings.](media/2021-03-26-18-26-13.png "Copy ingress controller settings")
![A screenshot of the Kubernetes management dashboard showing the ingress controller 设置.](media/2021-03-26-18-26-13.png "Copy ingress controller 设置")
> **注意**:可能需要几分钟时间刷新,交替,您可以在 Azure Cloud Shell中使用以下命令查找 IP。
>
@ -2052,7 +2031,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
6. 打开[Azure门户资源组面板](https://portal.azure.com/?feature.customPortal=false#blade/HubsExtension/BrowseResourceGroups)并定位自动创建以托管 AKS 节点池的资源组。它将具有命名格式`MC_fabmedical-[SUFFIX]_fabmedical-[SUFFIX]_[REGION]`.
7. 在 Azure Cloud Shell中创建一个脚本来更新入口外部 IP 的公共 DNS 名称
7. 在 Azure Cloud Shell中创建一个脚本来更新入口外部 IP 的公共 DNS Name
```bash
code update-ip.sh
@ -2061,7 +2040,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
将以下内容粘贴。请务必替换脚本中的以下占位符:
- `[INGRESS PUBLIC IP]`用从第5步复制的IP Address替换此 Address。
- `[AKS NODEPOOL RESOURCE GROUP]` 替换为从第 6 步复制的资源组名称
- `[AKS NODEPOOL RESOURCE GROUP]` 替换为从第 6 步复制的资源组Name
- `[SUFFIX]`:用以前用于此实验的相同 SUFFIX 值替换此值。
```bash
@ -2164,7 +2143,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
code certificate.yml
```
使用以下内容并更新`[SUFFIX]`和`[AZURE-REGION]`以匹配您的入口DNS名称
使用以下内容并更新`[SUFFIX]`和`[AZURE-REGION]`以匹配您的入口DNSName
```yaml
apiVersion: cert-manager.io/v1
@ -2208,7 +2187,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
code content.ingress.yml
```
使用以下内容并更新`[SUFFIX]`和`[AZURE-REGION]`以匹配您的入口DNS名称
使用以下内容并更新`[SUFFIX]`和`[AZURE-REGION]`以匹配您的入口DNSName
```yaml
apiVersion: networking.k8s.io/v1beta1
@ -2258,9 +2237,9 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
> SSL 站点可用可能需要 5 到 30 分钟。这是由于延迟提供 Tls 证书从让敏感。
### 任务 5与流量管理器进行多区域负载平衡
### <a id="task-5-multi-region-load-balancing-with-traffic-manager">任务 5与流量管理器进行多区域负载平衡</a>
在此任务中,您将Settings Azure 流量管理器作为多区域负载平衡器。这将使您能够在辅助 Azure 区域中提供应用的 AKS 实例,并在两个区域之间实现负载平衡。
在此任务中,您将设置 Azure 流量管理器作为多区域负载平衡器。这将使您能够在辅助 Azure 区域中提供应用的 AKS 实例,并在两个区域之间实现负载平衡。
1. 在 Azure 门户内,请选择**+ 创建资源**.
@ -2270,7 +2249,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
3. 在**创建流量管理器配置文件**面板,输入以下值,然后选择**创造**.
- 名称'法布医疗-[后缀]'
- Name'法布医疗-[后缀]'
- 路由方法:**性能**
- 资源组:`fabmedical-[SUFFIX]`
@ -2278,7 +2257,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
4. 导航到新创建的`fabmedical-[SUFFIX]` **流量管理器配置文件**.
5. 在**流量管理器配置文件**面板,选择**端点**下**Settings**.
5. 在**流量管理器配置文件**面板,选择**端点**下**设置**.
6. 在**端点**窗格,选择**+ 添加**添加一个新的端点进行负载平衡。
@ -2297,7 +2276,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
9. 在**流量管理器配置文件**面板,选择**概述**.
10. 在**概述**窗格,复制**DNS名称**用于流量管理器配置文件。
10. 在**概述**窗格,复制**DNSName**用于流量管理器配置文件。
![The Traffic Manager profile overview pane with the DNS name highlighted](media/tm-overview.png "fabmedical Traffic Manager profile DNS name")
@ -2317,15 +2296,15 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
servicePort: 3001
```
12. 打开新的 Web 浏览器选项卡并导航到流量管理器配置文件**DNS名称**只是复制。
12. 打开新的 Web 浏览器选项卡并导航到流量管理器配置文件**DNSName**只是复制。
![The screenshot shows the Contoso Neuro website using the Traffic Manager profile DNS name](media/tm-endpoint-website.png "Traffic Manager show Contoso home page")
13. 在 AKS 中Settings多区域托管应用程序时您将在另一个 Azure 区域Settings辅助 AKS然后将其终点添加到其流量管理器配置文件中以实现负载平衡。
13. 在 AKS 中设置多区域托管应用程序时,您将在另一个 Azure 区域设置辅助 AKS然后将其终点添加到其流量管理器配置文件中以实现负载平衡。
> **注意:**如果您愿意,您可以自行Settings辅助 AKS 和康托索神经网站实例。Settings该步骤的步骤与您在此实验中为Settings主 AKS 和应用实例而经历的大多数步骤相同。
> **注意:**如果您愿意,您可以自行设置辅助 AKS 和康托索神经网站实例。设置该步骤的步骤与您在此实验中为设置主 AKS 和应用实例而经历的大多数步骤相同。
## 动手实验后
## <a id="after-the-hands-on-lab">动手实验后</a>
**期间**10分钟
@ -2335,9 +2314,9 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
- 从门户,导航到您的面板**资源集团**然后选择**删除**在顶部的命令栏中。
- 通过重新键入资源组名称并选择"删除"来确认删除。
- 通过重新键入资源组Name并选择"删除"来确认删除。
您应该遵循提供的所有步骤_后_参加动手实验
参加动手练习后,您应该按照提供的所有步骤进行操作
[logo]: https://github.com/Microsoft/MCW-Template-Cloud-Workshop/raw/master/Media/ms-cloud-workshop.png

Просмотреть файл

@ -16,7 +16,7 @@ November 2020
Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、商标、版权或其他知识产权。除非 Microsoft 的任何书面许可协议中明确规定,否则本文档的提供不会为您提供这些专利、商标、版权或其他知识产权的任何许可。
制造商、产品或 URL 的名称仅供参考Microsoft 不会就这些制造商或使用 Microsoft 任何技术的产品进行任何陈述和保修,无论是表达、暗示还是法定。包括制造商或产品并不意味着微软对制造商或产品的认可。链接可提供给第三方网站。此类站点不在 Microsoft 的控制之下Microsoft 不负责链接站点中包含的任何链接站点的内容或链接的内容也不对链接站点的任何更改或更新负责。Microsoft 不负责从任何链接站点接收的网络广播或任何其他形式的传输。微软只为方便而向您提供这些链接,包含任何链接并不意味着微软对该网站或其中包含的产品的认可。
制造商、产品或 URL 的Name仅供参考Microsoft 不会就这些制造商或使用 Microsoft 任何技术的产品进行任何陈述和保修,无论是表达、暗示还是法定。包括制造商或产品并不意味着微软对制造商或产品的认可。链接可提供给第三方网站。此类站点不在 Microsoft 的控制之下Microsoft 不负责链接站点中包含的任何链接站点的内容或链接的内容也不对链接站点的任何更改或更新负责。Microsoft 不负责从任何链接站点接收的网络广播或任何其他形式的传输。微软只为方便而向您提供这些链接,包含任何链接并不意味着微软对该网站或其中包含的产品的认可。
©2020年微软公司。保留所有权利。
@ -26,64 +26,64 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
<!-- TOC -->
- [云原生应用 - 开发人员版动手实验一步一步](#cloud-native-applications---developer-edition-hands-on-lab-step-by-step)
- [抽象和学习目标](#abstract-and-learning-objectives)
- [概述](#overview)
- [解决方案架构](#solution-architecture)
- [要求](#requirements)
- [练习1创建并运行Docker应用程序](#exercise-1-create-and-run-a-docker-application)
- [任务1测试应用程序](#task-1-test-the-application)
- [任务2浏览到 Web 应用程序](#task-2-browsing-to-the-web-application)
- [任务3创建一个Dockerfile](#task-3-create-a-dockerfile)
- [任务4创建Dockerfile镜像](#task-4-create-docker-images)
- [任务 5运行容器化应用程序](#task-5-run-a-containerized-application)
- [任务6Settings环境变量](#task-6-setup-environment-variables)
- [任务 7 将镜像推送至 Azure 容器注册处](#task-7-push-images-to-azure-container-registry)
- [任务 8Settings CI 管道以推送镜像](#task-8-setup-ci-pipeline-to-push-images)
- [练习 2 使用 Azure 数据库迁移服务将MongoDB迁移到 Cosmos 数据库](#exercise-2-migrate-mongodb-to-cosmos-db-using-azure-database-migration-service)
- [任务1启用Microsoft.DataMigration资源provider](#task-1-enable-microsoftdatamigration-resource-provider)
- [任务2提供Azure数据库迁移服务](#task-2-provision-azure-database-migration-service)
- [任务3将数据迁移到Azure Cosmos 数据库](#task-3-migrate-data-to-azure-cosmos-db)
- [练习 3 将解决方案部署到Azure Kubernetes 服务](#exercise-3-deploy-the-solution-to-azure-kubernetes-service)
- [任务 1 隧道进入AzureKubernetes服务集群](#task-1-tunnel-into-the-azure-kubernetes-service-cluster)
- [任务 2使用 Azure 门户部署服务](#task-2-deploy-a-service-using-the-azure-portal)
- [任务 3 使用kubectl部署服务](#task-3-deploy-a-service-using-kubectl)
- [任务 4 使用Helm Chart部署服务](#task-4-deploy-a-service-using-a-helm-chart)
- [任务 5配置持续交付到Kubernetes集群](#task-5-configure-continuous-delivery-to-the-kubernetes-cluster)
- [任务 6审查集装箱的Azure监视器](#task-6-review-azure-monitor-for-containers)
- [练习4扩展应用并测试HA](#exercise-4-scale-the-application-and-test-ha)
- [任务 1从 Azure 门户增加服务实例](#task-1-increase-service-instances-from-the-azure-portal)
- [任务 2 解决replicas配置失败问题](#task-2-resolve-failed-provisioning-of-replicas)
- [任务3重新启动容器并测试HA](#task-3-restart-containers-and-test-ha)
- [任务4配置 Cosmos DB自动规模](#task-4-configure-cosmos-db-autoscale)
- [任务5测试 Cosmos DB自动规模](#task-5-test-cosmos-db-autoscale)
- [练习 5处理服务和路由应用程序流量](#exercise-5-working-with-services-and-routing-application-traffic)
- [任务 1 更新外部服务,用负载平衡器支持动态发现](#task-1-update-an-external-service-to-support-dynamic-discovery-with-a-load-balancer)
- [任务2调整CPU约束提高规模](#task-2-adjust-cpu-constraints-to-improve-scale)
- [任务 3执行滚动更新](#task-3-perform-a-rolling-update)
- [任务4配置Kubernetes入口](#task-4-configure-kubernetes-ingress)
- [任务 5与流量管理器进行多区域负载平衡](#task-5-multi-region-load-balancing-with-traffic-manager)
- [动手实验后](#after-the-hands-on-lab)
- <a href="cloud-native-applications---infrastructure-edition-hands-on-lab-step-by-step">云原生应用 - 开发人员版动手实验</a>
- <a href="abstract-and-learning-objectives">抽象和学习目标</a>
- <a href="overview">概述</a>
- <a href="#exercise-1-create-and-run-a-docker-application">解决方案架构</a>
- <a href="requirements">要求</a>
- <a href="#exercise-1-create-and-run-a-docker-application">练习1创建并运行Docker应用程序</a>
- <a href="#task-1-test-the-application">任务1测试应用程序</a>
- <a href="#task-2-browsing-to-the-web-application">任务2浏览到 Web 应用程序</a>
- <a href="#task-3-create-a-dockerfile">任务3创建一个Dockerfile</a>
- <a href="#task-4-create-docker-images">任务4创建Dockerfile镜像</a>
- <a href="#task-5-run-a-containerized-application">任务 5运行容器化应用程序</a>
- <a href="#task-6-setup-environment-variables">任务6设置环境变量</a>
- <a href="#task-7-push-images-to-azure-container-registry">任务 7 将镜像推送至 Azure 容器注册处</a>
- <a href="#task-8-setup-ci-pipeline-to-push-images">任务 8设置 CI 管道以推送镜像</a>
- <a href="#exercise-2-migrate-mongodb-to-cosmos-db-using-azure-database-migration-service">练习 2 使用 Azure 数据库迁移服务将MongoDB迁移到 Cosmos 数据库</a>
- <a href="#task-1-enable-microsoftdatamigration-resource-provider">任务1启用Microsoft.DataMigration资源provider</a>
- <a href="#task-2-provision-azure-database-migration-service">任务2提供Azure数据库迁移服务</a>
- <a href="#task-3-migrate-data-to-azure-cosmos-db">任务3将数据迁移到Azure Cosmos 数据库</a>
- <a href="#exercise-3-deploy-the-solution-to-azure-kubernetes-service">练习 3 将解决方案部署到Azure Kubernetes 服务</a>
- <a href="#task-1-tunnel-into-the-azure-kubernetes-service-cluster">任务 1 隧道进入AzureKubernetes服务集群</a>
- <a href="#task-2-deploy-a-service-using-the-azure-portal">任务 2使用 Azure 门户部署服务</a>
- <a href="#task-3-deploy-a-service-using-kubectl">任务 3 使用kubectl部署服务</a>
- <a href="#task-4-deploy-a-service-using-a-helm-chart">任务 4 使用Helm Chart部署服务</a>
- <a href="#task-5-configure-continuous-delivery-to-the-kubernetes-cluster">任务 5配置持续交付到Kubernetes集群</a>
- <a href="#task-6-review-azure-monitor-for-containers">任务 6审查容器的Azure监视器</a>
- <a href="#exercise-4-scale-the-application-and-test-ha">练习4扩展应用并测试HA</a>
- <a href="#task-1-increase-service-instances-from-the-azure-portal">任务 1从 Azure 门户增加服务实例</a>
- <a href="#task-2-resolve-failed-provisioning-of-replicas">任务 2 解决replicas配置失败问题</a>
- <a href="#task-3-restart-containers-and-test-ha">任务3重新启动容器并测试HA</a>
- <a href="#task-4-configure-cosmos-db-autoscale">任务4配置 Cosmos DB自动规模</a>
- <a href="#task-5-test-cosmos-db-autoscale">任务5测试 Cosmos DB自动规模</a>
- <a href="#exercise-5-working-with-services-and-routing-application-traffic">练习 5处理服务和路由应用程序流量</a>
- <a href="#task-1-update-an-external-service-to-support-dynamic-discovery-with-a-load-balancer">任务 1 更新外部服务,用负载平衡器支持动态发现</a>
- <a href="#task-2-adjust-cpu-constraints-to-improve-scale">任务2调整CPU约束提高规模</a>
- <a href="#task-3-perform-a-rolling-update">任务 3执行滚动更新</a>
- <a href="#task-4-configure-kubernetes-ingress">任务4配置Kubernetes入口</a>
- <a href="#task-5-multi-region-load-balancing-with-traffic-manager">任务 5与流量管理器进行多区域负载平衡</a>
- <a href="after-the-hands-on-lab">动手实验后</a>
<!-- /TOC -->
# 云原生应用 - 开发人员版动手实验一步一步
# <a id="cloud-native-applications---infrastructure-edition-hands-on-lab-step-by-step">云原生应用 - 开发人员版动手实验</a>
## 抽象和学习目标
## <a id="abstract-and-learning-objectives">抽象和学习目标</a>
这个动手实验旨在引导您完成构建和部署 Docker 镜像到 Azure Kubernetes 服务 AKS 托管的 Kubernetes 平台的过程,此外还学习如何处理动态服务发现、服务扩展和高可用性。
在此实验结束时,您将能够更好地构建和部署容器化应用程序到 Azure Kubernetes 服务,并执行常见的 DevOps 程序。
## 概述
## <a id="overview">概述</a>
法布里卡姆医疗会议 FabMedical 提供专为医疗界量身定做的会议网站服务。他们正在根据节点.js重新构想其应用程序代码以便它可以作为 Docker 应用程序运行,并希望实施 POC帮助他们熟悉开发过程、部署的生命周期以及托管环境的关键方面。他们将部署他们的应用程序到Azure Kubernetes服务并希望学习如何部署集装箱在动态负载平衡的方式,发现容器,并按需缩放它们。
法布里卡姆医疗会议 FabMedical 提供专为医疗界量身定做的会议网站服务。他们正在根据节点.js重新构想其应用程序代码以便它可以作为 Docker 应用程序运行,并希望实施 POC帮助他们熟悉开发过程、部署的生命周期以及托管环境的关键方面。他们将部署他们的应用程序到Azure Kubernetes服务并希望学习如何部署容器在动态负载平衡的方式,发现容器,并按需缩放它们。
在这个动手实验中,您将协助完成此 POC 与应用程序代码库的子集。您将创建基于 Linux 的构建代理,以及用于运行已部署应用程序的 Azure Kubernetes 服务集群。您将帮助他们完成应用的 Docker Settings、本地测试、推入镜像存储库、部署到集群以及测试负载平衡和缩放。
在这个动手实验中,您将协助完成此 POC 与应用程序代码库的子集。您将创建基于 Linux 的构建代理,以及用于运行已部署应用程序的 Azure Kubernetes 服务集群。您将帮助他们完成应用的 Docker 设置、本地测试、推入镜像存储库、部署到集群以及测试负载平衡和缩放。
> **重要**大多数Azure资源都需要独特的名称。在整个步骤中,您将看到"SUFFIX"一词作为资源名称的一部分。您应该用唯一的句柄(如 Microsoft 帐户电子邮件前缀)替换此操作,以确保资源的独特名称
> **重要**大多数Azure资源都需要独特的Name。在整个步骤中您将看到"SUFFIX"一词作为资源Name的一部分。您应该用唯一的句柄(如 Microsoft 帐户电子邮件前缀)替换此操作,以确保资源的独特Name
## 解决方案架构
## <a id="exercise-1-create-and-run-a-docker-application">解决方案架构</a>
以下是您将在此实验中构建的解决方案架构的图表。请仔细研究这一点,以便您了解整个解决方案,因为您正在研究各种组件。
@ -93,7 +93,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
每个租户将拥有以下容器:
- **Conference Web site**SPA应用程序将使用配置Settings来处理租户的自定义样式。
- **Conference Web site**SPA应用程序将使用配置设置来处理租户的自定义样式。
- **Admin Web site** 会议所有者用来管理会议配置详细信息、管理与会者注册、管理活动并与与会者沟通的 SPA 应用程序。
@ -101,11 +101,11 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
- **Email service** 在注册期间或会议所有者选择通过其管理网站与与会者互动时,处理向与会者发送电子邮件通知的 API。
- **Config service** 处理会议配置Settings(如日期、地点、定价表、早起的特价、倒计时等)的 API。
- **Config service** 处理会议配置设置(如日期、地点、定价表、早起的特价、倒计时等)的 API。
- **Content service** 处理会议内容(如演讲者、会议、研讨会和赞助商)的 API。
## 要求
## <a id="requirements">要求</a>
1. 微软 Azure 订阅必须是即用即付或 MSDN。
@ -128,13 +128,13 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
> **非常重要**:您应该键入指南中显示的所有命令。当指示输入本文档中显示的信息时,请勿尝试复制并粘贴到您的命令窗口或其他文档中,除非本文档中明确说明。复制和粘贴可能会出现导致错误、执行说明或创建文件内容的问题。
## 练习1创建并运行Docker应用程序
## <a id="exercise-1-create-and-run-a-docker-application">练习1创建并运行Docker应用程序</a>
**期间**40分钟
在此练习中,您将采用入门文件并运行节点.js应用程序作为Docker应用程序。您将创建一个Dockerfile构建Docker镜像并运行容器来执行应用程序。
### 任务1测试应用程序
### <a id="task-1-test-the-application">任务1测试应用程序</a>
此任务的目的是确保您可以在应用更改以作为 Docker 应用程序运行应用程序之前成功运行应用程序。
@ -305,7 +305,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
19. 如果您收到 JSON 对 /speakers内容请求的响应和来自 Web 应用程序的 HTML 响应,您的环境将按预期工作。
### 任务2浏览到 Web 应用程序
### <a id="task-2-browsing-to-the-web-application">任务2浏览到 Web 应用程序</a>
在此任务中,您将浏览到 Web 应用程序进行测试。
@ -336,7 +336,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
killall node
```
### 任务3创建一个Dockerfile
### <a id="task-3-create-a-dockerfile">任务3创建一个Dockerfile</a>
在此任务中,您将创建一个新的 Dockerfile用于将 API 应用程序作为容器化应用程序运行。
@ -351,7 +351,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
![In this screenshot of the console window, ll has been typed and run at the command prompt. The files in the folder are listed in the window. At this time, we are unable to capture all of the information in the window. Future versions of this course should address this.](media/image55.png "List the files")
2. 创建名为"新文件"的新文件`Dockerfile`并注意名称中的外 shell。使用
2. 创建名为"新文件"的新文件`Dockerfile`并注意Name中的外 shell。使用
按照Vim命令创建新文件。Cloud Shell窗口应
如下图所示。
@ -367,7 +367,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
4. 在文件中键入以下文件。这些陈述生成了一个多克档案,其中描述了以下情况:
- 基本阶段包括环境Settings,我们期望很少改变,如果有的话。
- 基本阶段包括环境设置,我们期望很少改变,如果有的话。
- 从基本镜像节点创建新的 Docker 镜像:阿尔卑斯。此基础镜像具有节点.js并针对小尺寸进行优化。
@ -375,7 +375,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
- 在可复制应用程序文件的镜像上创建目录。
- 暴露应用端口`3001`到集装箱环境,以便可以在港口达到应用程序`3001`.
- 暴露应用端口`3001`到容器环境,以便可以在港口达到应用程序`3001`.
- 构建阶段包含创建应用程序所需的所有工具和中间文件。
@ -391,7 +391,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
- 最后阶段将基础镜像与构建阶段的生成输出相结合。
- 将工作目录Settings为应用程序文件位置。
- 将工作目录设置为应用程序文件位置。
- 从构建阶段复制应用文件。
@ -443,7 +443,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
cat Dockerfile
```
### 任务4创建Dockerfile镜像
### <a id="task-4-create-docker-images">任务4创建Dockerfile镜像</a>
在此任务中,您将为应用程序创建 Docker 镜像,---一个用于 API 应用程序,另一个用于 Web 应用程序。每个镜像都将通过依赖于多克档案的 Docker 命令创建。
@ -457,9 +457,9 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
- 执行 Docker 生成命令以生成镜像
- 用名称标记生成的镜像`content-api`-t
- 用Name标记生成的镜像`content-api`-t
- 最后一个点(`.`表示在此当前目录上下文中使用Dockerfile。默认情况下此文件预计将有名称`Dockerfile`(案件敏感)。
- 最后一个点(`.`表示在此当前目录上下文中使用Dockerfile。默认情况下此文件预计将有Name`Dockerfile`(案件敏感)。
```bash
docker image build -t content-api .
@ -533,7 +533,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
![Three images are now visible in this screenshot of the console window: content-init, content-web, content-api, and node.](media/vm-list-containers.PNG "View content images")
### 任务 5运行容器化应用程序
### <a id="task-5-run-a-containerized-application">任务 5运行容器化应用程序</a>
Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应用程序容器将与 mongodb 进行通信。在本练习中,您将在启动 mongodb 时创建的同一桥网络上启动您创建的容器创建的镜像。
@ -543,7 +543,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
- 指示多克发动机使用`fabmedical`网络。
- 指示码头发动机使用端口`3001`并映射到内部集装箱端口`3001`.
- 指示码头发动机使用端口`3001`并映射到内部容器端口`3001`.
- 通过指定的镜像(如`content-api`.
@ -602,7 +602,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
docker container run --name web --net fabmedical -P -d content-web
```
7. 输入命令以再次显示正在运行的容器,您将观察到 API 和 Web 容器都在列表中。Web 容器显示其内部集装箱端口的动态分配端口映射`3000`.
7. 输入命令以再次显示正在运行的容器,您将观察到 API 和 Web 容器都在列表中。Web 容器显示其内部容器端口的动态分配端口映射`3000`.
```bash
docker container ls
@ -616,7 +616,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
curl http://localhost:[PORT]/speakers.html
```
### 任务6Settings环境变量
### <a id="task-6-setup-environment-variables">任务6设置环境变量</a>
在此任务中,您将配置`web`容器使用环境变量与 API 容器通信,类似于向 api 提供 mongodb 连接字符串的方式。
@ -640,7 +640,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
cat app.js
```
4. 观察`contentApiUrl`变量可以Settings为环境变量。
4. 观察`contentApiUrl`变量可以设置为环境变量。
```javascript
const contentApiUrl = process.env.CONTENT_API_URL || "http://[VM IP]:3001";
@ -653,7 +653,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
<i>
```
6. 定位`EXPOSE`如下图所示行,并在上面添加一行,用于Settings环境变量的默认值,如屏幕截图所示。
6. 定位`EXPOSE`如下图所示行,并在上面添加一行,用于设置环境变量的默认值,如屏幕截图所示。
```Dockerfile
ENV CONTENT_API_URL http://localhost:3001
@ -675,7 +675,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
docker image build -t content-web .
```
9. 创建并启动将正确的 URI 传递给 API 容器作为环境变量的镜像。此变量将通过您创建的 Docker 网络使用其容器名称解决 API 应用程序。运行容器后,检查容器是否运行,并记下下一步的动态端口分配。
9. 创建并启动将正确的 URI 传递给 API 容器作为环境变量的镜像。此变量将通过您创建的 Docker 网络使用其容器Name解决 API 应用程序。运行容器后,检查容器是否运行,并记下下一步的动态端口分配。
```bash
docker container run --name web --net fabmedical -P -d -e CONTENT_API_URL=http://api:3001 content-web
@ -688,7 +688,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
curl http://localhost:[PORT]/speakers.html
```
11. 您将无法在临时端口上浏览 Web 应用程序,因为 VM 只暴露了有限的端口范围。现在,您将停止网络容器并使用端口重新启动它`3000`在浏览器中进行测试。键入以下命令以停止容器、取出容器,并使用端口的显式Settings再次运行它。
11. 您将无法在临时端口上浏览 Web 应用程序,因为 VM 只暴露了有限的端口范围。现在,您将停止网络容器并使用端口重新启动它`3000`在浏览器中进行测试。键入以下命令以停止容器、取出容器,并使用端口的显式设置再次运行它。
```bash
docker container stop web
@ -722,17 +722,17 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
如果提示,请输入凭据。
### 任务 7 将镜像推送至 Azure 容器注册处
### <a id="task-7-push-images-to-azure-container-registry">任务 7 将镜像推送至 Azure 容器注册处</a>
要在远程环境中运行容器,您通常会将镜像推送至 Docker 注册处在那里您可以存储和分发镜像。每个服务将有一个存储库可以推至和拉从与Docker命令。Azure 集装箱注册处 ACR 是基于码头注册处 v2 的托管私人码头注册服务。
要在远程环境中运行容器,您通常会将镜像推送至 Docker 注册处在那里您可以存储和分发镜像。每个服务将有一个存储库可以推至和拉从与Docker命令。Azure 容器注册处 ACR 是基于码头注册处 v2 的托管私人码头注册服务。
在此任务中,您将把镜像推送至您的 ACR 帐户、带有标记的版本镜像,并Settings持续集成 CI以构建容器的未来版本并自动将其推送至 ACR。
在此任务中,您将把镜像推送至您的 ACR 帐户、带有标记的版本镜像,并设置持续集成 CI以构建容器的未来版本并自动将其推送至 ACR。
1. 在[Azure门户](https://portal.azure.com/)导航到您在动手实验之前创建的ACR。
2. 选择**访问密钥**下**Settings**在左侧菜单上。
2. 选择**访问密钥**下**设置**在左侧菜单上。
![In this screenshot of the left-hand menu, Access keys is highlighted below Settings.](media/image64.png "Access keys")
![In this screenshot of the left-hand menu, Access keys is highlighted below 设置.](media/image64.png "Access keys")
3. 访问密钥面板显示下一步所需的登录服务器、用户名和密码。在构建 VM 上执行操作时,请保持此方便。
@ -763,7 +763,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
> **注意**:请务必更换`[LOGINSERVER]`您的ACR实例。
6. 列出您的Dockerfile镜像并查看存储库和标签。请注意存储库预缀了您的 ACR 登录服务器名称,例如下面的屏幕截图中显示的示例。
6. 列出您的Dockerfile镜像并查看存储库和标签。请注意存储库预缀了您的 ACR 登录服务器Name,例如下面的屏幕截图中显示的示例。
```bash
docker image ls
@ -816,24 +816,24 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
docker image pull [LOGINSERVER]/content-web:v1
```
### 任务 8Settings CI 管道以推送镜像
### <a id="task-8-setup-ci-pipeline-to-push-images">任务 8设置 CI 管道以推送镜像</a>
在此任务中,您将使用 YAML 来定义构建 Docker 的 GitHub 操作工作流
镜像并自动将其推送至您的ACR实例。
1. 在GitHub返回到**Fabmedical**存储库屏幕,并选择**Settings**标签。
1. 在GitHub返回到**Fabmedical**存储库屏幕,并选择**设置**标签。
2. 从左侧菜单中选择**secret**.
3. 选择**New repository secret**按钮。
![Settings link, Secrets link, and New secret button are highlighted.](media/2020-08-24-21-45-42.png "GitHub Repository secrets")
![设置 link, Secrets link, and New secret button are highlighted.](media/2020-08-24-21-45-42.png "GitHub Repository secrets")
4. 在**New secret**形式,输入名称`ACR_USERNAME`和价值粘贴在Azure容器注册处**用户名**这是以前复制的。选择**添加secret**.
4. 在**New secret**形式,输入Name`ACR_USERNAME`和价值粘贴在Azure容器注册处**用户名**这是以前复制的。选择**添加secret**.
![New secret screen with values are entered.](media/2020-08-24-21-48-54.png "New secret screen")
5. 通过输入名称添加另一个secret`ACR_PASSWORD`和价值粘贴在Azure容器注册处**密码**这是以前复制的。
5. 通过输入Name添加另一个secret`ACR_PASSWORD`和价值粘贴在Azure容器注册处**密码**这是以前复制的。
![Secrets screen with both the ACR_USERNAME and ACR_PASSWORD secrets created.](media/2020-08-24-21-51-24.png "Secrets screen")
@ -843,7 +843,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
cd ~/Fabmedical
```
7. 在 GitHub 操作工作流可以Settings之前,`.github/workflows`目录需要创建,如果它还不存在。通过运行以下命令来做到这一点:
7. 在 GitHub 操作工作流可以设置之前,`.github/workflows`目录需要创建,如果它还不存在。通过运行以下命令来做到这一点:
```bash
mkdir ~/Fabmedical/.github
@ -944,9 +944,9 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![Build and Push Docker Image job.](media/2020-08-25-15-42-11.png "Build and Push Docker Image job")
17. 接下来,Settings`content-api`工作流。此存储库已包含`content-api.yml`位于`.github/workflows`目录。打开`.github/workflows/content-api.yml`文件编辑。
17. 接下来,设置`content-api`工作流。此存储库已包含`content-api.yml`位于`.github/workflows`目录。打开`.github/workflows/content-api.yml`文件编辑。
18. 编辑`resourceGroupName`和`containerRegistry`环境值以取代`[SHORT_SUFFIX]`与您自己的三个字母后缀,以便它匹配您的容器注册表的名称和资源组。
18. 编辑`resourceGroupName`和`containerRegistry`环境值以取代`[SHORT_SUFFIX]`与您自己的三个字母后缀,以便它匹配您的容器注册表的Name和资源组。
![The screenshot shows the content-api.yml with the environment variables highlighted.](media/2020-08-25-15-59-56.png "content-api.yml environment variables highlighted")
@ -960,13 +960,13 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
git push
```
## 练习 2 使用 Azure 数据库迁移服务将MongoDB迁移到 Cosmos 数据库
## <a id="exercise-2-migrate-mongodb-to-cosmos-db-using-azure-database-migration-service">练习 2 使用 Azure 数据库迁移服务将MongoDB迁移到 Cosmos 数据库</a>
**期间**20分钟
此时,您有在 Docker 实例VM - 生成代理)中运行的 Web 和 API 应用程序。下一步是将MongoDB数据库数据迁移到Azure Cosmos 数据库。这项工作将利用Azure数据库迁移服务将MongoDB数据库的数据迁移到Azure Cosmos 数据库。
### 任务1启用Microsoft.DataMigration资源provider
### <a id="task-1-enable-microsoftdatamigration-resource-provider">任务1启用Microsoft.DataMigration资源provider</a>
在此任务中,您将通过注册 Azure 订阅,启用 Azure 数据库迁移服务`Microsoft.DataMigration`资源provider。
@ -978,7 +978,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
az provider register --namespace Microsoft.DataMigration
```
### 任务2提供Azure数据库迁移服务
### <a id="task-2-provision-azure-database-migration-service">任务2提供Azure数据库迁移服务</a>
在此任务中,您将部署 Azure 数据库迁移服务实例,该实例将用于将数据从 MongoDB 迁移到 Cosmos 数据库。
@ -993,7 +993,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
4. 在**基本**选项卡的**创建迁移服务**窗格,输入以下值:
- 资源组:选择与此实验创建的资源组。
- 迁移服务名称:输入名称,例如`fabmedical[SUFFIX]`.
- 迁移服务Name输入Name,例如`fabmedical[SUFFIX]`.
- 位置选择资源组使用的Azure区域。
![The screenshot shows the Create Migration Service Basics tab with all values entered.](media/dms-create-basics.png "Create Migration Basics Tab")
@ -1010,7 +1010,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
该服务可能需要 5 - 10 分钟才能提供。
### 任务3将数据迁移到Azure Cosmos 数据库
### <a id="task-3-migrate-data-to-azure-cosmos-db">任务3将数据迁移到Azure Cosmos 数据库</a>
在此任务中,您将创建**迁移项目**在Azure数据库迁移服务中然后将数据从MongoDB迁移到Azure Cosmos 数据库。
@ -1024,7 +1024,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
4. 在**新的迁移项目**窗格,输入以下值,然后选择**创建和运行活动**:
- 项目名称`fabmedical`
- 项目Name`fabmedical`
- 源服务器类型:`MongoDB`
- 目标服务器类型:`CosmosDB (MongoDB API)`
- 选择活动类型:`Offline data migration`
@ -1036,7 +1036,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
5. 在**MongoDB到 Cosmos 数据库离线迁移向导**窗格,输入以下值的**选择源**标签:
- 模式:**标准模式**
- 源服务器名称:输入本实验中使用的生成代理 VM 的私人 IP Address。
- 源服务器Name:输入本实验中使用的生成代理 VM 的私人 IP Address。
- 服务器端口:`27017`
- 要求 SSL未选中
@ -1052,31 +1052,31 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
- 订阅:选择您为此实验使用的 Azure 订阅。
- 选择 Cosmos 数据库名称:选择`fabmedical-[SUFFIX]` Cosmos 数据库实例。
- 选择 Cosmos 数据库Name:选择`fabmedical-[SUFFIX]` Cosmos 数据库实例。
![The Select target tab with values selected.](media/dms-select-target.png "MongoDB to Azure Database for CosmosDB - Select target")
通知,**连接字符串**将自动填充与您的Azure Cosmos DB实例的密钥。
8. 修改**连接字符串**通过替换`@undefined:`跟`@fabmedical-[SUFFIX].documents.azure.com:`因此DNS名称与Azure Cosmos 数据库实例匹配。请务必更换`[SUFFIX]`.
8. 修改**连接字符串**通过替换`@undefined:`跟`@fabmedical-[SUFFIX].documents.azure.com:`因此DNSName与Azure Cosmos 数据库实例匹配。请务必更换`[SUFFIX]`.
![The screenshot shows the Connection string with the @undefined: value replaced with the correct DNS name.](media/dms-select-target-connection-string.png "Setting the Connection string")
9. 选择**下一篇:数据库Settings>>**.
9. 选择**下一篇:数据库设置>>**.
10. 在**数据库Settings**选项卡,选择`contentdb` **源数据库**因此这个数据库将从MongoDB迁移到Azure Cosmos 数据库。
10. 在**数据库设置**选项卡,选择`contentdb` **源数据库**因此这个数据库将从MongoDB迁移到Azure Cosmos 数据库。
![The screenshot shows the Database setting tab with the contentdb source database selected.](media/dms-database-setting.png "Database setting tab")
11. 选择**下一个:集合Settings>>**.
11. 选择**下一个:集合设置>>**.
12. 在**收集Settings**选项卡,扩展**内容数据库**数据库,并确保这两个**会话**和** speakers**集合被选中用于迁移。此外,更新**吞吐量**自`400`两个集合。
12. 在**收集设置**选项卡,扩展**内容数据库**数据库,并确保这两个**会话**和** speakers**集合被选中用于迁移。此外,更新**吞吐量**自`400`两个集合。
![The screenshot shows the Collection setting tab with both sessions and speakers collections selected with Throughput RU/s set to 400 for both collections.](media/dms-collection-setting.png "Throughput RU")
13. 选择**下一篇:移民摘要>>**.
14. 在**迁移摘要**选项卡,输入`MigrateData`在**活动名称**字段,然后选择**开始迁移**启动MongoDB数据迁移到Azure Cosmos 数据库。
14. 在**迁移摘要**选项卡,输入`MigrateData`在**活动Name**字段,然后选择**开始迁移**启动MongoDB数据迁移到Azure Cosmos 数据库。
![The screenshot shows the Migration summary is shown with MigrateData entered in the Activity name field.](media/dms-migration-summary.png "Migration summary")
@ -1088,13 +1088,13 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![The screenshot shows the Cosmos DB is open in the Azure Portal with Data Explorer open showing the data has been migrated.](media/dms-confirm-data-in-cosmosdb.png "Cosmos DB is open")
## 练习 3 将解决方案部署到Azure Kubernetes 服务
## <a id="exercise-3-deploy-the-solution-to-azure-kubernetes-service">练习 3 将解决方案部署到Azure Kubernetes 服务</a>
**期间**30分钟
在本练习中,您将连接到您在动手实验之前创建的 Azure Kubernetes 服务集群,并使用 Kubernetes 将 Docker 应用程序部署到集群中。
### 任务 1 隧道进入AzureKubernetes服务集群
### <a id="task-1-tunnel-into-the-azure-kubernetes-service-cluster">任务 1 隧道进入AzureKubernetes服务集群</a>
在此任务中,您将收集有关 Azure Kubernetes 服务集群所需的信息以便连接到集群并执行命令从Cloud Shell连接到 Kubernetes 管理仪表板。
@ -1106,7 +1106,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
az account show
```
- 如果您未连接到正确的订阅,请列出您的订阅,然后通过其 ID Settings订阅并下列命令类似于您在实验前的Cloud Shell中所做的
- 如果您未连接到正确的订阅,请列出您的订阅,然后通过其 ID 设置订阅并下列命令类似于您在实验前的Cloud Shell中所做的
```bash
az account list
@ -1127,7 +1127,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot of the console, kubectl get nodes has been typed and run at the command prompt, which produces a list of nodes.](media/image75.png "kubectl get nodes")
### 任务 2使用 Azure 门户部署服务
### <a id="task-2-deploy-a-service-using-the-azure-portal">任务 2使用 Azure 门户部署服务</a>
在此任务中,您将使用 Azure 门户将 API 应用程序部署到 Azure Kubernetes 服务集群。
@ -1164,7 +1164,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![Selecting + Add to create a deployment.](media/2021-03-25-17-05-05.png "Selecing + Add to create a deployment")
5. 在**添加与雅姆勒**加载粘贴以下YAML并更新的屏幕`[LOGINSERVER]`具有ACR实例名称的占位符。
5. 在**添加与雅姆勒**加载粘贴以下YAML并更新的屏幕`[LOGINSERVER]`具有ACR实例Name的占位符。
```yaml
apiVersion: apps/v1
@ -1250,7 +1250,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
mongodb://<USERNAME>:<PASSWORD>@fabmedical-<SUFFIX>.documents.azure.com:10255/contentdb?ssl=true&replicaSet=globaldb
```
12. 您将Settings一个库伯内特的secret来存储连接字符串并配置`content-api`申请访问secret。首先您必须根据64编码secret值。打开 Azure Cloud Shell窗口使用以下命令编码连接字符串然后复制输出。
12. 您将设置一个库伯内特的secret来存储连接字符串并配置`content-api`申请访问secret。首先您必须根据64编码secret值。打开 Azure Cloud Shell窗口使用以下命令编码连接字符串然后复制输出。
> **注意**:连接字符串周围的双引号需要成功生成所需的输出。
@ -1276,7 +1276,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![This is a screenshot of the Azure Portal for AKS howing the YAML file for creating a deployment.](media/2021-03-25-17-08-06.png "Upload YAML data")
15. 按名称对机密列表进行排序,您现在应该可以看到显示的新机密。
15. 按Name对机密列表进行排序,您现在应该可以看到显示的新机密。
![This is a screenshot of the Azure Portal for AKS showing secrets.](media/find-cosmosdb-secret.png "Manage Kubernetes secrets")
@ -1324,7 +1324,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![This is a screenshot of the Kubernetes management dashboard showing logs output.](media/2021-03-25-17-09-24.png "API Logs")
### 任务 3 使用kubectl部署服务
### <a id="task-3-deploy-a-service-using-kubectl">任务 3 使用kubectl部署服务</a>
在此任务中,使用部署 Web 服务`kubectl`.
@ -1398,7 +1398,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
terminationGracePeriodSeconds: 30
```
4. 更新`[LOGINSERVER]`条目以匹配您的ACR登录服务器的名称
4. 更新`[LOGINSERVER]`条目以匹配您的ACR登录服务器的Name
5. 选择**...**按钮并选择**Save**.
@ -1456,7 +1456,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![A screenshot of the web site showing no data displayed.](media/Ex2-Task3.11.png "Web site home page")
### 任务 4 使用Helm Chart部署服务
### <a id="task-4-deploy-a-service-using-a-helm-chart">任务 4 使用Helm Chart部署服务</a>
在此任务中,您将使用[掌舵](https://helm.sh/)简化 Azure Kubernetes 集群上基于容器的应用程序的安装和管理的图表。
@ -1617,7 +1617,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
22. 保存更改并Close Editor。
23. 该图表现在已Settings为部署我们的 Web 容器。键入以下命令以部署Helm Chart描述的应用程序。您将收到一条消息表明掌舵人创建了 Web 部署和 Web 服务。
23. 该图表现在已设置为部署我们的 Web 容器。键入以下命令以部署Helm Chart描述的应用程序。您将收到一条消息表明掌舵人创建了 Web 部署和 Web 服务。
```bash
cd ../..
@ -1642,7 +1642,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
git push
```
### 任务 5配置持续交付到Kubernetes集群
### <a id="task-5-configure-continuous-delivery-to-the-kubernetes-cluster">任务 5配置持续交付到Kubernetes集群</a>
在此任务中,您将使用 GitHub 操作工作流自动将 Web 镜像部署到 AKS 集群的过程。您将更新工作流程并配置作业,以便当新镜像被推入 ACR 时,管道将镜像部署到 AKS 集群。
@ -1703,9 +1703,9 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
cat ~/.kube/config
```
5. 在GitHub返回到**Fabmedical**存储库屏幕,选择**Settings**选项卡,选择**secret**从左菜单,然后选择**New secret**按钮。
5. 在GitHub返回到**Fabmedical**存储库屏幕,选择**设置**选项卡,选择**secret**从左菜单,然后选择**New secret**按钮。
6. 创建一个新的 GitHub secret与名称`KUBECONFIG`并粘贴在内容`~/.kube/config`以前复制的文件。
6. 创建一个新的 GitHub secret与Name`KUBECONFIG`并粘贴在内容`~/.kube/config`以前复制的文件。
![The screenshot displays the KUBECONFIG secret](media/2020-08-25-22-34-04.png "Edit KUBECONFIG secret")
@ -1768,7 +1768,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![The screenshot shows workflow is running and the current status.](media/2020-08-25-22-15-39.png "Workflow is running")
### 任务 6审查集装箱的Azure监视器
### <a id="task-6-review-azure-monitor-for-containers">任务 6审查容器的Azure监视器</a>
在此任务中,您将访问和查看 Azure 监视器为容器提供的各种日志和仪表板。
@ -1788,7 +1788,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot, the various containers information is shown.](media/monitor_1.png "View containers data")
5. 现在按容器名称进行筛选并搜索**蹼**容器中,您将看到库伯内特斯集群中创建的所有容器,其中带有吊舱名称
5. 现在按容器Name进行筛选并搜索**蹼**容器中,您将看到库伯内特斯集群中创建的所有容器,其中带有吊舱Name
![In this screenshot, the containers are filtered by container named web.](media/monitor_3.png "Filter data by container and web")
@ -1810,13 +1810,13 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![The container log query results are displayed, one log entry is expanded in the results view with its details shown.](media/monitor_7.png "Expand the results")
## 练习4扩展应用并测试HA
## <a id="exercise-4-scale-the-application-and-test-ha">练习4扩展应用并测试HA</a>
**期间**20分钟
此时,您已部署了 Web 和 API 服务容器的单一实例。在此练习中,您将增加 Web 服务的容器实例数量,并在现有集群上缩放前端。
### 任务 1从 Azure 门户增加服务实例
### <a id="task-1-increase-service-instances-from-the-azure-portal">任务 1从 Azure 门户增加服务实例</a>
在此任务中,您将增加 AKS Azure 门户面板中 API 部署的实例数。在部署时,您将观察不断变化的状态。
@ -1844,7 +1844,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
- api 部署和复制集处于警告状态。
- 在"默认"名称空间中,两个吊舱是健康的。
- 在"默认"Name空间中,两个吊舱是健康的。
5. 打开康托索神经会议网络应用程序。当您导航到" speakers"和"会话"页面时,应用程序仍应不出现任何错误。
@ -1864,7 +1864,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
- **运行时间:**API服务的备份时间。
### 任务 2 解决replicas配置失败问题
### <a id="task-2-resolve-failed-provisioning-of-replicas">任务 2 解决replicas配置失败问题</a>
在此任务中,您将解决失败的 API 副本。这些故障的发生是由于集群无法满足所要求的资源。
@ -1880,7 +1880,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
protocol: TCP
```
- 修改**中央处理器**并将其Settings为**100米**.CPU 在节点上的所有 Pods 之间分配。
- 修改**中央处理器**并将其设置为**100米**.CPU 在节点上的所有 Pods 之间分配。
```yaml
resources:
@ -1897,7 +1897,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In the Workload view with the API deployment highlighted.](media/healthy-deployment.png "API deployment is now healthy")
### 任务3重新启动容器并测试HA
### <a id="task-3-restart-containers-and-test-ha">任务3重新启动容器并测试HA</a>
在此任务中,您将重新启动容器并验证重新启动不会影响运行服务。
@ -1911,13 +1911,13 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
3. 几分钟后,您会发现 API 部署正在成功运行 4 个副本。
4. 加载 Web 应用程序统计页面后返回浏览器选项卡。一遍又一遍地刷新页面。您不会看到任何错误,但您将定期看到两个 api pod 实例之间的 api 主机名称更改。任务 ID 和 pid 也可能在两个 api 吊舱实例之间更改。
4. 加载 Web 应用程序统计页面后返回浏览器选项卡。一遍又一遍地刷新页面。您不会看到任何错误,但您将定期看到两个 api pod 实例之间的 api 主机Name更改。任务 ID 和 pid 也可能在两个 api 吊舱实例之间更改。
![On the Stats page in the Contoso Neuro web application, two different api host name values are highlighted.](media/image126.png "View web task hostname")
5. 刷新后足够的时间看到,`hostName`值正在改变,服务保持健康,您可以打开**复制套装**在Azure门户中查看API。
6. 在此视图中,您可以看到 Web 应用程序统计页面中显示的主机名值与正在运行的吊舱的吊舱名称匹配。
6. 在此视图中,您可以看到 Web 应用程序统计页面中显示的主机名值与正在运行的吊舱的吊舱Name匹配。
![Viewing replica set in the Azure Portal.](media/2021-03-26-17-31-02.png "Viewing replica set in the Azure Portal")
@ -1931,13 +1931,13 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
9. 返回到 API 部署并将其缩减到`1`复制品。有关如果您不确定,请参阅上面的步骤 2了解如何做到这一点。
10. 返回浏览器中的示例网站的统计页面并刷新,同时 Kubernetes 正在缩减 Pods 的数量。您会注意到仅显示一个 API 主机名称,即使您可能仍然会在 API 复制器Settings视图中看到几个运行吊舱。即使有几个吊舱正在运行Kubernetes 将不再将流量发送到它选择终止的吊舱。稍后API 复制器Settings视图中将只显示一个吊舱。
10. 返回浏览器中的示例网站的统计页面并刷新,同时 Kubernetes 正在缩减 Pods 的数量。您会注意到仅显示一个 API 主机Name即使您可能仍然会在 API 复制器设置视图中看到几个运行吊舱。即使有几个吊舱正在运行Kubernetes 将不再将流量发送到它选择终止的吊舱。稍后API 复制器设置视图中将只显示一个吊舱。
![Replica Sets is selected under Workloads in the navigation menu on the left. On the right are the Details and Pods boxes. Only one API host name, which has a green check mark and is listed as running, appears in the Pods box.](media/2021-03-26-17-32-24.png "View replica details")
### 任务4配置 Cosmos DB自动规模
### <a id="task-4-configure-cosmos-db-autoscale">任务4配置 Cosmos DB自动规模</a>
在此任务中您将在Azure Cosmos 数据库上Settings自动缩放。
在此任务中您将在Azure Cosmos 数据库上设置自动缩放。
1. 在 Azure 门户中,导航到`fabmedical-[SUFFIX]` **Azure Cosmos 数据库帐户**.
@ -1945,23 +1945,23 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
3. 在**数据资源管理器**,扩大`contentdb`数据库,然后扩展`sessions`收集。
4. 下`sessions`收集、选择**缩放和Settings**.
4. 下`sessions`收集、选择**缩放和设置**.
5. 在**缩放和Settings**选择**自动缩放**对于**吞吐量**Settings下**规模**.
5. 在**缩放和设置**选择**自动缩放**对于**吞吐量**设置下**规模**.
![The screenshot displays Cosmos DB Scale and Settings tab with Autoscale selected](media/cosmosdb-autoscale.png "CosmosDB collection scale and settings")
![The screenshot displays Cosmos DB Scale and 设置 tab with Autoscale selected](media/cosmosdb-autoscale.png "CosmosDB collection scale and 设置")
6. 选择**Save**.
7. 执行相同的任务以启用**自动缩放**吞吐量`speakers`收集。
### 任务5测试 Cosmos DB自动规模
### <a id="task-5-test-cosmos-db-autoscale">任务5测试 Cosmos DB自动规模</a>
在此任务中,您将运行一个性能测试脚本,将测试 Azure Cosmos DB 的自动规模功能,以便您看到它现在将扩展到大于 400 RU/s。
1. 在 Azure 门户中,导航到`fabmedical-[SUFFIX]` ** Cosmos 数据库帐户**.
2. 选择**连接字符串**下**Settings**.
2. 选择**连接字符串**下**设置**.
3. 在**连接字符串**窗格,复制**主机**,**用户名**和**主要密码**值。保存这些供以后使用。
@ -1981,7 +1981,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
vi perftest.sh
```
7. 有几个变量在顶部宣布`perftest.sh`脚本。修改**主机**,**用户名**和**密码**变量通过将其值Settings为以前复制的相应 Cosmos DB连接字符串值。
7. 有几个变量在顶部宣布`perftest.sh`脚本。修改**主机**,**用户名**和**密码**变量通过将其值设置为以前复制的相应 Cosmos DB连接字符串值。
![The screenshot shows Vim with perftest.sh file open and variables set to Cosmos DB Connection String values.](media/cosmos-perf-test-variables.png "Modify the connection information in Vim")
@ -2005,7 +2005,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![The screenshot shows the Cosmos DB request charge graph showing recent activity from performance test](media/cosmos-request-charge.png "Recent CosmosDB activity graph")
## 练习 5处理服务和路由应用程序流量
## <a id="exercise-5-working-with-services-and-routing-application-traffic">练习 5处理服务和路由应用程序流量</a>
**期间**1小时
@ -2013,7 +2013,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一代理节点上运行多个吊舱实例,---配置特定静态端口(如 API 服务的 3001时无法实现的状态。
### 任务 1 更新外部服务,用负载平衡器支持动态发现
### <a id="task-1-update-an-external-service-to-support-dynamic-discovery-with-a-load-balancer">任务 1 更新外部服务,用负载平衡器支持动态发现</a>
在此任务中,您将更新 Web 服务,以便它通过 Azure 负载平衡器支持动态发现。
@ -2033,9 +2033,9 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
![Deployments is selected under Workloads in the navigation menu on the left. On the right are the Details and New Replica Set boxes. The web deployment is highlighted in the New Replica Set box, indicating an error.](media/2021-03-26-18-23-38.png "View Pod deployment events")
与 API 部署一样Web 部署使用固定部署_主机端口_并且您的缩放能力受可用代理节点数量的限制。但是在通过删除_主机端口_Settings时,由于 CPU 限制Web 部署仍无法缩放过去两个吊舱。部署请求的 CPU 比 Web 应用程序需要的要多,因此您将在下一个任务中修复此限制。
与 API 部署一样Web 部署使用固定部署_主机端口_并且您的缩放能力受可用代理节点数量的限制。但是在通过删除_主机端口_设置时,由于 CPU 限制Web 部署仍无法缩放过去两个吊舱。部署请求的 CPU 比 Web 应用程序需要的要多,因此您将在下一个任务中修复此限制。
### 任务2调整CPU约束提高规模
### <a id="task-2-adjust-cpu-constraints-to-improve-scale">任务2调整CPU约束提高规模</a>
在此任务中,您将修改 Web 服务的 CPU 要求,以便它可以扩展到更多实例。
@ -2051,7 +2051,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
![Four web pods are listed in the Pods box, and all have green check marks and are listed as Running.](media/2021-03-26-18-24-35.png "Four pods running")
### 任务 3执行滚动更新
### <a id="task-3-perform-a-rolling-update">任务 3执行滚动更新</a>
在此任务中,您将编辑 Web 应用程序源代码以添加应用程序洞察并更新部署所使用的 Docker 镜像。然后,您将执行滚动更新,以演示如何部署代码更改。
@ -2102,7 +2102,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
8. 当此更新运行时,返回浏览器中的 Azure 门户。
9. 从导航菜单中选择**复制套装**下**工作量**.从此视图中,您将看到为 Web Settings的新副本,该副本可能仍在部署过程中(如下图所示)或已完全部署。
9. 从导航菜单中选择**复制套装**下**工作量**.从此视图中,您将看到为 Web 设置的新副本,该副本可能仍在部署过程中(如下图所示)或已完全部署。
![At the top of the list, a new web replica set is listed as a pending deployment in the Replica Set box.](media/2021-03-26-18-25-30.png "Pod deployment is in progress")
@ -2110,7 +2110,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
![On the Stats page, the hostName is highlighted.](media/image145.png "On Stats page hostName is displayed")
### 任务4配置Kubernetes入口
### <a id="task-4-configure-kubernetes-ingress">任务4配置Kubernetes入口</a>
在此任务中,您将使用[n金克斯代理服务器](https://nginx.org/en/)利用基于路径的路由和 TLS 终止。
@ -2151,7 +2151,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
5. 在Azure门户下**服务和入口**复制IP Address**外部 IP**对于`nginx-ingress-RANDOM-nginx-ingress`服务。
![A screenshot of the Kubernetes management dashboard showing the ingress controller settings.](media/2021-03-26-18-26-13.png "Copy ingress controller settings")
![A screenshot of the Kubernetes management dashboard showing the ingress controller 设置.](media/2021-03-26-18-26-13.png "Copy ingress controller 设置")
> **注意**:可能需要几分钟时间刷新,交替,您可以在 Azure Cloud Shell中使用以下命令查找 IP。
>
@ -2163,7 +2163,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
6. 打开[Azure门户资源组面板](https://portal.azure.com/?feature.customPortal=false#blade/HubsExtension/BrowseResourceGroups)并定位自动创建以托管 AKS 节点池的资源组。它将具有命名格式`MC_fabmedical-[SUFFIX]_fabmedical-[SUFFIX]_[REGION]`.
7. 在 Azure Cloud Shell中创建一个脚本来更新入口外部 IP 的公共 DNS 名称
7. 在 Azure Cloud Shell中创建一个脚本来更新入口外部 IP 的公共 DNS Name
```bash
code update-ip.sh
@ -2172,7 +2172,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
将以下内容粘贴。请务必替换脚本中的以下占位符:
- `[INGRESS PUBLIC IP]`用从第5步复制的IP Address替换此 Address。
- `[AKS NODEPOOL RESOURCE GROUP]` 替换为从第 6 步复制的资源组名称
- `[AKS NODEPOOL RESOURCE GROUP]` 替换为从第 6 步复制的资源组Name
- `[SUFFIX]`:用以前用于此实验的相同 SUFFIX 值替换此值。
```bash
@ -2275,7 +2275,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
code certificate.yml
```
使用以下内容并更新`[SUFFIX]`和`[AZURE-REGION]`以匹配您的入口DNS名称
使用以下内容并更新`[SUFFIX]`和`[AZURE-REGION]`以匹配您的入口DNSName
```yaml
apiVersion: cert-manager.io/v1
@ -2319,7 +2319,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
code content.ingress.yml
```
使用以下内容并更新`[SUFFIX]`和`[AZURE-REGION]`以匹配您的入口DNS名称
使用以下内容并更新`[SUFFIX]`和`[AZURE-REGION]`以匹配您的入口DNSName
```yaml
apiVersion: networking.k8s.io/v1beta1
@ -2369,9 +2369,9 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
> SSL 站点可用可能需要 5 到 30 分钟。这是由于延迟提供 Tls 证书从让敏感。
### 任务 5与流量管理器进行多区域负载平衡
### <a id="task-5-multi-region-load-balancing-with-traffic-manager">任务 5与流量管理器进行多区域负载平衡</a>
在此任务中,您将Settings Azure 流量管理器作为多区域负载平衡器。这将使您能够在辅助 Azure 区域中提供应用的 AKS 实例,并在两个区域之间实现负载平衡。
在此任务中,您将设置 Azure 流量管理器作为多区域负载平衡器。这将使您能够在辅助 Azure 区域中提供应用的 AKS 实例,并在两个区域之间实现负载平衡。
1. 在 Azure 门户内,请选择**+ 创建资源**.
@ -2381,7 +2381,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
3. 在**创建流量管理器配置文件**面板,输入以下值,然后选择**创造**.
- 名称'法布医疗-[后缀]'
- Name'法布医疗-[后缀]'
- 路由方法:**性能**
- 资源组:`fabmedical-[SUFFIX]`
@ -2389,7 +2389,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
4. 导航到新创建的`fabmedical-[SUFFIX]` **流量管理器配置文件**.
5. 在**流量管理器配置文件**面板,选择**端点**下**Settings**.
5. 在**流量管理器配置文件**面板,选择**端点**下**设置**.
6. 在**端点**窗格,选择**+ 添加**添加一个新的端点进行负载平衡。
@ -2408,7 +2408,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
9. 在**流量管理器配置文件**面板,选择**概述**.
10. 在**概述**窗格,复制**DNS名称**用于流量管理器配置文件。
10. 在**概述**窗格,复制**DNSName**用于流量管理器配置文件。
![The Traffic Manager profile overview pane with the DNS name highlighted](media/tm-overview.png "fabmedical Traffic Manager profile DNS name")
@ -2428,15 +2428,15 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
servicePort: 3001
```
12. 打开新的 Web 浏览器选项卡并导航到流量管理器配置文件**DNS名称**只是复制。
12. 打开新的 Web 浏览器选项卡并导航到流量管理器配置文件**DNSName**只是复制。
![The screenshot shows the Contoso Neuro website using the Traffic Manager profile DNS name](media/tm-endpoint-website.png "Traffic Manager show Contoso home page")
13. 在 AKS 中Settings多区域托管应用程序时您将在另一个 Azure 区域Settings辅助 AKS然后将其终点添加到其流量管理器配置文件中以实现负载平衡。
13. 在 AKS 中设置多区域托管应用程序时,您将在另一个 Azure 区域设置辅助 AKS然后将其终点添加到其流量管理器配置文件中以实现负载平衡。
> **注意:**如果您愿意,您可以自行Settings辅助 AKS 和康托索神经网站实例。Settings该步骤的步骤与您在此实验中为Settings主 AKS 和应用实例而经历的大多数步骤相同。
> **注意:**如果您愿意,您可以自行设置辅助 AKS 和康托索神经网站实例。设置该步骤的步骤与您在此实验中为设置主 AKS 和应用实例而经历的大多数步骤相同。
## 动手实验后
## <a id="after-the-hands-on-lab">动手实验后</a>
**期间**10分钟
@ -2446,10 +2446,10 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
- 从门户,导航到您的面板**资源集团**然后选择**删除**在顶部的命令栏中。
- 通过重新键入资源组名称并选择"删除"来确认删除。
- 通过重新键入资源组Name并选择"删除"来确认删除。
参加动手练习后,您应该按照提供的所有步骤进行操作。
您应该遵循提供的所有步骤_后_参加动手实验。
[logo]: https://github.com/Microsoft/MCW-Template-Cloud-Workshop/raw/master/Media/ms-cloud-workshop.png
[portal]: https://portal.azure.com

Просмотреть файл

@ -23,7 +23,7 @@
在这个研讨会结束时,您将能够通过经过时间测试的 DevOps 实践,更好地提高基于容器的应用程序的可靠性和增加释放节奏。
### 白板设计会话
### 白板设计章节
在此白板设计会话中,您将了解与在 Azure 中构建和部署容器化应用程序相关的选择、围绕此做出的关键决策以及解决方案的其他方面,包括如何提升和转移应用程序的部件以减少应用程序更改。
@ -38,7 +38,7 @@
## Azure服务及相关产品
- 阿祖尔· Kubernetes 服务 AKS
- Azure集装箱注册处
- Azure容器注册处
- GitHub
- Dockerfile
- Cosmos 数据库包括MongoDBAPI
@ -49,7 +49,7 @@
## 相关参考文献
- [麦克瓦](https://github.com/Microsoft/MCW)
- [MCW](https://github.com/Microsoft/MCW)
## 帮助和支持