This commit is contained in:
Teo Ma 2021-05-03 10:22:56 +08:00
Родитель b65db61954
Коммит 12f087a0a2
6 изменённых файлов: 343 добавлений и 370 удалений

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

@ -119,7 +119,7 @@ az account list
- **后缀:**在整个实验中,后缀应用于使资源独一无二,如电子邮件前缀或您的第一个初始和姓氏。
- **位置:**选择所有 Azure 容器注册处 SKU 必须可用的区域,即当前:加拿大中部、加拿大东部、美国中北部、美国中部、美国中南部、美国东部、美国东部 2、美国西部、美国西部 2、美国中西部、法国中部、英国南部、英国西部、北欧、西欧、澳大利亚东部、澳大利亚东南部、巴西南部、印度中部、印度南部日本东部日本西部韩国中部东南亚东亚并记住这一点为未来的步骤使你在Azure创造的资源都保存在同一区域。
- **位置:**选择所有 Azure 容器注册处 SKU 必须可用的区域,即当前:加拿大中部、加拿大东部、美国中北部、美国中部、美国中南部、美国东部、美国东部 2、美国西部、美国西部 2、美国中西部、法国中部、英国南部、英国西部、北欧、西欧、澳大利亚东部、澳大利亚东南部、巴西南部、印度中部、印度南部日本东部日本西部韩国中部东南亚东亚并记住这一点为未来的步骤使你在AzureCreate的资源都保存在同一区域。
例:
@ -151,7 +151,7 @@ az account list
3. 当被要求将生成的密钥保存到文件时,请输入`.ssh/fabmedical`为Name。
4. 提示时输入密码短语,以及**别忘了**!
4. 提示时输入password以及**记住它**!
5. 因为你输入`.ssh/fabmedical`什基根生成的文件在`.ssh`用户文件夹中的文件夹,默认情况下云外 shell打开的位置。
@ -190,7 +190,7 @@ az account list
3. 更新各种密钥的值,以便它们与您的环境相匹配:
- **Suffix**输入最多3个字符的SUFFIX的缩短版本。
- **VirtualMachineAdminUsernameLinux**Linux生成代理VM管理员用户名(示例:`"adminfabmedical"`).
- **VirtualMachineAdminUsernameLinux**Linux生成代理VM管理员USERNAME(示例:`"adminfabmedical"`).
- **VirtualMachineAdminPublicKeyLinux**Linux生成代理VM管理员sh公钥。您可以在`.ssh/fabmedical.pub`以前创建的文件(示例:`"ssh-rsa AAAAB3N(...)vPiybQV admin@fabmedical"`).
- **CosmosLocation**Azure Cosmos DB的主要位置。使用与之前创建的资源组相同的位置示例`"eastus"`).
- **CosmosLocationName**Azure Cosmos DB的主要位置的Name。使用与之前创建的资源组相同的位置Name示例`"East US"`).
@ -265,7 +265,7 @@ FabMedical为您提供了入门文件。他们为客户 Contoso Neuro 获取了
content-web/
```
9. 设置您的用户名和电子邮件git 用于提交。
9. 设置您的USERNAME和电子邮件git 用于提交。
```bash
git config --global user.email "you@example.com"
@ -301,7 +301,7 @@ FabMedical为您提供了入门文件。他们为客户 Contoso Neuro 获取了
> **注意**如果您具有多重身份验证则在使用Cloud Shell时需要创建个人访问令牌。请参阅以下链接以获取有关设置 GitHub 个人访问令牌以进行身份验证的帮助`git`与您的GitHub帐户<https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token>.
> **注意**:一旦您获得个人访问令牌,请重试上述命令,使用令牌作为密码
> **注意**:一旦您获得个人访问令牌,请重试上述命令,使用令牌作为password
14. 刷新 GitHub 存储库,您现在应该可以看到已发布的代码。
@ -338,7 +338,7 @@ FabMedical为您提供了入门文件。他们为客户 Contoso Neuro 获取了
- `[PRIVATEKEYNAME]`使用私钥Name`.ssh/fabmedical`,创建于上图。
- `[BUILDAGENTUSERNAME]`在默认设置中使用VM的用户名`adminfabmedical`.
- `[BUILDAGENTUSERNAME]`在默认设置中使用VM的USERNAME`adminfabmedical`.
- `[BUILDAGENTIP]`上一步检索的生成代理VM的IP Address。
@ -348,7 +348,7 @@ FabMedical为您提供了入门文件。他们为客户 Contoso Neuro 获取了
4. 当被要求确认是否要连接时,由于无法验证连接的真实性,请键入`yes`.
5. 当要求您之前创建的私人密钥的密码短语时,请输入此值。
5. 当要求您之前创建的私人密钥的password短语时,请输入此值。
6. SSH 连接到 VM 并显示以下命令提示。为下一步保持此Cloud Shell窗口打开
@ -441,7 +441,7 @@ FabMedical为您提供了入门文件。他们为客户 Contoso Neuro 获取了
![In this screenshot of a Cloud Shell window, docker version has been typed and run at the command prompt. Docker version information appears in the window, in addition to server version information.](media/docker-version-server.png "Display Docker version")
13. 运行一些码头命令:
13. 运行一些docker命令:
- 一个看看是否有任何容器目前运行。
@ -463,7 +463,7 @@ FabMedical为您提供了入门文件。他们为客户 Contoso Neuro 获取了
在此任务中,您从 GitHub 克隆存储库,以便您可以在构建代理上与他们合作。
1. 正如您以前在Cloud Shell中所做的那样设置用于 git 提交的用户名和电子邮件。
1. 正如您以前在Cloud Shell中所做的那样设置用于 git 提交的USERNAME和电子邮件。
```bash
git config --global user.email "you@example.com"

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

@ -6,14 +6,14 @@
<!-- TOC -->
- <a href="#cloud-native-applications---infrastructure-edition-hands-on-lab-step-by-step">云原生应用 - 基础架构版动手实验</a>
- <a href="#abstract-and-learning-objectives">抽象和学习目标</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-3-create-docker-images">任务3创建Docker镜像</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>
@ -33,11 +33,11 @@
- <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="#task-4-configure-cosmos-db-autoscale">任务4配置 Cosmos DB自动Scale</a>
- <a href="#task-5-test-cosmos-db-autoscale">任务5测试 Cosmos DB自动Scale</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-2-adjust-cpu-constraints-to-improve-scale">任务2调整CPU约束提高Scale</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>
@ -47,7 +47,7 @@
# <a id="cloud-native-applications---infrastructure-edition-hands-on-lab-step-by-step">云原生应用 - 基础设施版动手实验</a>
## <a id="abstract-and-learning-objectives">抽象和学习目标</a>
## <a id="abstract-and-learning-objectives">学习目标</a>
这个动手实验旨在引导您完成构建和部署 Docker 镜像到 Azure Kubernetes 服务 AKS 托管的 Kubernetes 平台的过程,此外还学习如何处理动态服务发现、服务扩展和高可用性。
@ -55,7 +55,7 @@
## <a id="overview">概述</a>
法布里卡姆医疗会议 FabMedical 提供专为医疗界量身定做的会议网站服务。他们正在根据node.js重新构想其应用程序代码以便它可以作为 Docker 应用程序运行,并希望实施 POC帮助他们熟悉开发过程、部署的生命周期以及托管环境的关键方面。他们将部署他们的应用程序到Azure Kubernetes服务并希望学习如何部署容器在动态负载平衡的方式发现容器并按需缩放它们。
Fabrikam医疗会议 FabMedical 提供专为医疗界量身定做的会议网站服务。他们正在根据node.js重新构想其应用程序代码以便它可以作为 Docker 应用程序运行,并希望实施 POC帮助他们熟悉开发过程、部署的生命周期以及托管环境的关键方面。他们将部署他们的应用程序到Azure Kubernetes服务并希望学习如何部署容器在动态负载平衡的方式发现容器并按需缩放它们。
在这个动手实验中,您将协助完成此 POC 与应用程序代码库的子集。您将创建基于 Linux 的构建代理,以及用于运行已部署应用程序的 Azure Kubernetes 服务集群。您将帮助他们完成应用的 Docker 设置、本地测试、推入镜像存储库、部署到集群以及测试负载平衡和缩放。
@ -71,17 +71,17 @@
每个租户将拥有以下容器:
- **会议网站**SPA应用程序将使用配置设置来处理租户的自定义样式。
- **会议网站:Conference Web site**SPA应用程序将使用配置设置来处理租户的自定义样式。
- **管理网站** 会议所有者用来管理会议配置详细信息、管理与会者注册、管理活动并与与会者沟通的 SPA 应用程序。
- **管理网站:Admin Web site** 会议所有者用来管理会议配置详细信息、管理与会者注册、管理活动并与与会者沟通的 SPA 应用程序。
- **注册服务** 处理所有注册活动的 API使用适当的套餐选择和相关成本创建新的会议注册。
- **注册服务:Registration service** 处理所有注册活动的 API使用适当的套餐选择和相关成本创建新的会议注册。
- **电子邮件服务** 在注册期间或会议所有者选择通过其管理网站与与会者互动时,处理向与会者发送电子邮件通知的 API。
- **电子邮件服务:Email service** 在注册期间或会议所有者选择通过其管理网站与与会者互动时,处理向与会者发送电子邮件通知的 API。
- **配置服务** 处理会议配置设置(如日期、地点、定价表、早起的特价、倒计时等)的 API。
- **配置服务:Config service** 处理会议配置设置(如日期、地点、定价表、早起的特价、倒计时等)的 API。
- **内容服务** 处理会议内容(如演讲者、会议、研讨会和赞助商)的 API。
- **内容服务:Content service** 处理会议内容(如演讲者、会议、研讨会和赞助商)的 API。
## <a id="requirements">要求</a>
@ -207,7 +207,7 @@
sudo chown -R $USER:$(id -gn $USER) /home/adminfabmedical/.config
```
10. 启动 API 作为后端进程。
10. 启动API作为后端进程。
```bash
nodejs ./server.js &
@ -263,7 +263,7 @@
![Edit the app.js file in vim in the build machine to update the API URL.](media/image27.png "Edit the app.js")
然后按下**_ESC_**写**_wq_**以保存更改并关闭文件。
然后按下**_ESC_**写 **_:wq_** 以保存更改并关闭文件。
16. 现在在后台运行内容网络应用程序。
@ -289,7 +289,7 @@
1. 从 Azure 门户中选择您创建的指定资源组`fabmedical-SUFFIX`.
2. 选择命名的生成代理 VM`fabmedical-SUFFIX`从您的可用资源列表。
2. 选择命名的Build agent VM`fabmedical-SUFFIX`从您的可用资源列表。
![In this screenshot of your list of available resources, the first item is selected, which has the following values for Name, Type, and Location: fabmedical-soll (a red arrows points to this name), Virtual machine, and East US 2.](media/image54.png "List of resources")
@ -305,7 +305,7 @@
EXAMPLE: http://13.68.113.176:3000
```
5. 选择标题中的 speakers和会话链接。您将看到页面显示您以前卷曲的 JSON 内容的 HTML 版本。
5. 选择标题中的 speakers和会话链接。您将看到页面显示您以前运行curl的JSON内容的 HTML 版本。
6. 验证应用程序通过浏览器访问后请转到Cloud Shell窗口并停止运行节点进程。
@ -314,12 +314,12 @@
killall node
```
### <a id="task-3-create-docker-images">任务3创建Dockerfile镜像</a>
### <a id="task-3-create-docker-images">任务3创建Docker镜像</a>
在此任务中,您将为应用程序创建 Docker 镜像,---一个用于 API 应用程序,另一个用于 Web 应用程序。每个镜像都将通过依赖于多克档案的 Docker 命令创建。
在此任务中,您将为应用程序创建 Docker 镜像,---一个用于 API 应用程序,另一个用于 Web 应用程序。每个镜像都将通过依赖于docker档案的 Docker 命令创建。
1. 从Cloud Shell连接到构建代理 VM键入以下命令
查看VM上的任何Dockerfile镜像。列表将只包含蒙戈德布
查看VM上的任何Docker镜像。列表将只包含蒙戈德布
镜像下载较早。
```bash
@ -348,7 +348,7 @@
![The node image (node) and your container image (content-api) are visible in this screenshot of the console window.](media/image59.png "List Docker images")
4. 导航到`content-web`文件夹再次列出文件。请注意,此文件夹具有多克文件。
4. 导航到`content-web`文件夹再次列出文件。请注意,此文件夹具有docker文件。
```bash
cd ../content-web
@ -369,7 +369,7 @@
docker image build -t content-web .
```
7. 再次导航到内容-init文件夹并列出文件。请注意此文件夹已具有多克文件。
7. 再次导航到内容-init文件夹并列出文件。请注意此文件夹已具有docker文件。
```bash
cd ../content-init
@ -398,15 +398,15 @@
### <a id="task-4-run-a-containerized-application">任务4运行容器化应用程序</a>
Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应用程序容器将与 mongodb 进行通信。在本练习中,您将在启动 mongodb 时创建的同一桥网络上启动您创建的容器创建的镜像。
Web 应用程序容器将调用 API 应用程序容器暴露的EndpointsAPI 应用程序容器将与 mongodb 进行通信。在本练习中,您将在启动 mongodb 时创建的同一bridge network上启动您创建的容器创建的镜像。
1. 使用以下命令创建并启动 API 应用程序容器。命令如下:
- 命名容器`api`供以后使用Docker命令参考。
- 指示多克发动机使用`fabmedical`网络。
- 指示docker引擎使用`fabmedical`网络。
- 指示码头发动机使用端口`3001`并映射到内部容器端口`3001`.
- 指示docker引擎使用端口`3001`并映射到内部容器端口`3001`.
- 通过指定的镜像(如`content-api`.
@ -414,7 +414,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
docker container run --name api --net fabmedical -p 3001:3001 content-api
```
2. 这`docker container run`命令已失败,因为它被配置为使用本地热URL连接到MongoDB。但是现在内容 api 被隔离在单独的容器中,即使在同一个码头主机上运行,它也不能通过本地主机访问 mongodb。相反API 必须使用桥网连接到Mongo。
2. 这`docker container run`命令已失败,因为它被配置为使用localhost URL连接到MongoDB。但是现在内容 api 被隔离在单独的容器中即使在同一个dockerHOST上运行它也不能通过本地HOST访问 mongodb。相反API 必须使用桥网连接到Mongo。
```text
> content-api@0.0.0 start
@ -437,7 +437,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
npm ERR! /root/.npm/_logs/2020-11-23T03_04_12_948Z-debug.log
```
3. 内容 api 应用程序允许环境变量配置MongoDB连接字符串。删除现有容器然后指示Dockerfile引擎通过添加`-e`切换到`docker container run`命令。此外,使用`-d`切换到运行api作为一个达蒙
3. content-api应用程序允许环境变量配置MongoDBConnection String。删除现有容器然后指示Docker引擎通过添加`-e`切换到`docker container run`命令。此外,使用`-d`切换到运行api作为一个daemon
```bash
docker container rm api
@ -453,7 +453,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot of the console window, docker container ls has been typed and run at the command prompt, and the "api" container is in the list with the following values for Container ID, Image, Command, Created, Status, Ports, and Names: 458d47f2aaf1, content-api, "docker-entrypoint.s...", 37 seconds ago, Up 36 seconds, 0.0.0.0:3001->3001/tcp, and api.](media/image61.png "List Docker containers")
5. 通过卷曲网址来测试API。您将看到 JSON 输出,就像以前测试时一样。
5. 通过curl网址来测试API。您将看到 JSON 输出,就像以前测试时一样。
```bash
curl http://localhost:3001/speakers
@ -481,7 +481,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
### <a id="task-5-setup-environment-variables">任务 5设置环境变量</a>
在此任务中,您将配置`web`容器使用环境变量与 API 容器通信,类似于向 api 提供 mongodb 连接字符串的方式。
在此任务中,您将配置`web`容器使用环境变量与 API 容器通信,类似于向 api 提供 mongodb Connection String的方式。
1. 从连接到构建代理 VM 的Cloud Shell中使用以下命令停止并移除 Web 容器。
@ -545,7 +545,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
docker container ls
```
10. 使用分配给 Web 容器的端口再次卷曲 speakers路径。同样您将看到 HTML 返回,但由于 Curl 不处理 javascript您无法确定 Web 应用程序是否正在与 api 应用程序进行通信。您必须在浏览器中验证此连接。
10. 使用分配给 Web 容器的端口再次curl speakers路径。同样您将看到 HTML 返回,但由于 Curl 不处理 javascript您无法确定 Web 应用程序是否正在与 api 应用程序进行通信。您必须在浏览器中验证此连接。
```bash
curl http://localhost:[PORT]/speakers.html
@ -561,7 +561,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
> **警告:**如果您收到错误,如`Error starting userland proxy: listen tcp4 0.0.0.0:3000: bind: address already in use.`以前的节点实例可能持有端口 3000。跑`sudo pkill node`杀死本地节点实例。
12. 使用端口再次卷曲 speakers路径`3000`.您将看到相同的HTML返回。
12. 使用端口再次curl speakers路径`3000`.您将看到相同的HTML返回。
```bash
curl http://localhost:3000/speakers.html
@ -587,19 +587,19 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
### <a id="task-6-push-images-to-azure-container-registry">任务 6 将镜像推送至 Azure 容器注册处</a>
要在远程环境中运行容器,您通常会将镜像推送至 Docker 注册处在那里您可以存储和分发镜像。每个服务将有一个存储库可以推至和拉从与Docker命令。Azure 容器注册处 ACR 是基于码头注册处 v2 的托管私人码头注册服务。
要在远程环境中运行容器,您通常会将镜像推送至 Docker 注册处在那里您可以存储和分发镜像。每个服务将有一个存储库可以推至和拉从与Docker命令。Azure 容器注册处 ACR 是基于docker注册处 v2 的托管私人docker注册服务。
在此任务中,您将把镜像推送至您的 ACR 帐户、带有标记的版本镜像,并设置持续集成 CI以构建容器的未来版本并自动将其推送至 ACR。
1. 在[Azure门户](https://portal.azure.com/)导航到您在动手实验之前创建的ACR。
2. 选择**访问密钥**下**设置**在左侧菜单上
2. 在左侧菜单**Settings**下选择**Access keys**
![In this screenshot of the left-hand menu, Access keys is highlighted below 设置.](media/image64.png "Access keys")
3. 访问密钥面板显示下一步所需的登录服务器、用户名和密码。在构建 VM 上执行操作时,请保持此方便。
3. Access keys面板显示下一步所需的登录服务器、USERNAME和password。在构建 VM 上执行操作时,请保持此方便。
> **注意**:如果用户名和密码未显示,请选择"在管理员用户选项上启用"。
> **注意**:如果USERNAME和password未显示,请选择"在管理员用户选项上启用"。
4. 从连接到生成 VM 的Cloud Shell会话中通过键入以下命令登录到您的 ACR 帐户。按照说明完成登录。
@ -615,7 +615,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot of the console window, the following has been typed and run at the command prompt: docker login fabmedicalsoll.azurecr.io](media/image65.png "Docker log into container")
> **提示**:请确保指定完全合格的注册表登录服务器(所有小写字母)。
> **提示**:请确保指定完全合格的注册表登录服务器(所有字母小写)。
5. 运行以下命令以正确标记您的镜像以匹配您的 ACR 帐户名。
@ -625,9 +625,9 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
docker image tag content-init [LOGINSERVER]/content-init
```
> **注意**:请务必更换`[LOGINSERVER]`您的ACR实例
> **注意**:请务必替换您的ACR实例`[LOGINSERVER]`
6. 列出您的Dockerfile镜像,并查看存储库和标签。请注意,存储库预缀了您的 ACR 登录服务器Name例如下面的屏幕截图中显示的示例。
6. 列出您的Docker镜像并查看存储库和标签。请注意存储库预缀了您的 ACR 登录服务器Name例如下面的屏幕截图中显示的示例。
```bash
docker image ls
@ -645,7 +645,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot of the console window, an example of images being pushed to an ACR account results from typing and running the following at the command prompt: docker push \[LOGINSERVER\]/content-web.](media/image67.png "Push image to ACR")
8. 在 Azure 门户中,导航到您的 ACR 帐户,然后选择**存储库 1**下**服务业**在左侧菜单上。您现在将看到两个容器**(2)**,每个镜像一个。
8. 在 Azure 门户中,导航到您的 ACR 帐户,然后在左侧菜单**Services**下选择**Repositories (1)**。您现在将看到两个容器**(2)**,每个镜像一个。
![In this screenshot, content-api and content-web each appear on their own lines below Repositories.](media/acr-two-containers.png "Search for repositories")
@ -687,7 +687,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
在此任务中,您将使用 YAML 来定义构建 Docker 的 GitHub 操作工作流
镜像并自动将其推送至您的ACR实例。
1. 在GitHub返回到**Fabmedical**存储库屏幕,并选择**设置**标签。
1. 在GitHub返回到**Fabmedical**存储库屏幕,并选择**Settings**标签。
2. 从左侧菜单中选择**secret**.
@ -695,11 +695,11 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![设置 link, Secrets link, and New secret button are highlighted.](media/2020-08-24-21-45-42.png "GitHub Repository secrets")
4. 在**New secret**形式输入Name`ACR_USERNAME`和价值粘贴在Azure容器注册处**用户名**这是以前复制的。选择**添加secret**.
4. 在**New secret**形式输入Name`ACR_USERNAME`和价值粘贴在Azure容器注册处**USERNAME**这是以前复制的。选择**添加secret**.
![New secret screen with values are entered.](media/2020-08-24-21-48-54.png "New secret screen")
5. 通过输入Name添加另一个secret`ACR_PASSWORD`和价值粘贴在Azure容器注册处**密码**这是以前复制的。
5. 通过输入Name添加另一个secret`ACR_PASSWORD`和价值粘贴在Azure容器注册处**password**这是以前复制的。
![Secrets screen with both the ACR_USERNAME and ACR_PASSWORD secrets created.](media/2020-08-24-21-51-24.png "Secrets screen")
@ -798,15 +798,15 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
12. 在GitHub返回到**Fabmedical**存储库屏幕,并选择**行动**标签。
13. 在**行动**页面,选择**内容网**工作流。
13. 在**Actions**页面,选择**content-web**工作流。
14. 在**内容网**工作流,选择**运行工作流**并手动触发工作流执行。
14. 在**content-web**工作流,选择**Run workflow**并手动触发工作流执行。
![The content-web Action is shown with the Actions, content-web, and Run workflow links highlighted.](media/2020-08-25-15-38-06.png "content-web workflow")
15. 一秒钟后,新触发的工作流执行将显示在列表中。选择新**内容网**执行查看其状态。
15. 一秒钟后,新触发的工作流执行将显示在列表中。选择新**content-web**执行查看其状态。
16. 选择**构建和推送Dockerfile镜像**工作流程的工作将显示其执行状态。
16. 选择**Build and Push Docker Image**工作流程的工作将显示其执行状态。
![Build and Push Docker Image job.](media/2020-08-25-15-42-11.png "Build and Push Docker Image job")
@ -816,9 +816,9 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![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 中的存储库,选择"操作",然后手动运行**内容-阿皮**工作流。
19. 保存文件,然后导航到 GitHub 中的存储库,选择"Actions",然后手动运行**content-api**工作流。
20. 接下来,设置**内容-伊尼特**工作流。遵循与前一步相同的步骤`content-api`工作流`content-init.yml`文件,记得更新`[SHORT_SUFFIX]`价值与您自己的三个字母后缀。
20. 接下来,设置**content-init**工作流。遵循与前一步相同的步骤`content-api`工作流`content-init.yml`文件,记得更新`[SHORT_SUFFIX]`价值与您自己的三个字母后缀。
21. 提交并推动 Git 存储库的更改:
@ -850,15 +850,15 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
在此任务中,您将部署 Azure 数据库迁移服务实例,该实例将用于将数据从 MongoDB 迁移到 Cosmos 数据库。
1. 从 Azure 门户,选择**+ 创建资源**.
1. 从 Azure 门户,选择**+ Create a resource**.
2. 搜索市场**Azure数据库迁移服务**并选择它。
2. 搜索市场**Azure Database Migration Service**并选择它。
3. 选择**创造**.
3. 选择**Create**.
![The screenshot shows the Azure Database Migration Service in the Azure Marketplace.](media/dms-marketplace-create.png "Azure Database Migration Service")
4. 在**基本**选项卡的**创建迁移服务**窗格,输入以下值:
4. 在**Basics**选项卡的**Create Migration Service**窗格,输入以下值:
- 资源组:选择与此实验创建的资源组。
- 迁移服务Name输入Name例如`fabmedical[SUFFIX]`.
@ -866,15 +866,15 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![The screenshot shows the Create Migration Service Basics tab with all values entered.](media/dms-create-basics.png "Create Migration Basics Tab")
5. 选择**下一篇:网络>>**.
5. 选择**Next: Networking >**.
6. 在**联网**选项卡,选择**虚拟网络**在`fabmedical-[SUFFIX]`资源组
6. 在**Networking**选项卡,在`fabmedical-[SUFFIX]`资源组选择**Virtual Network**
![The screenshot shows the Create Migration Service Networking tab with Virtual Network selected.](media/dms-create-networking.png "Create Migration Service Networking tab")
7. 选择**审核 + 创建**.
7. 选择**Review + create**.
8. 选择**创造**创建Azure数据库迁移服务实例。
8. 选择**Create**创建Azure数据库迁移服务实例。
该服务可能需要 5 - 10 分钟才能提供。
@ -888,7 +888,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
2. 在 Azure 门户中,导航到**Azure数据库迁移服务**这是以前提供的。
3. 在 Azure 数据库迁移服务面板上,选择**+ 新迁移项目**在**概述**窗 格。
3. 在 Azure 数据库迁移服务面板上,选择**+ 新迁移项目**在**Overview**窗 格。
4. 在**新的迁移项目**窗格,输入以下值,然后选择**创建和运行活动**:
@ -904,11 +904,11 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
5. 在**MongoDB到 Cosmos 数据库离线迁移向导**窗格,输入以下值的**选择源**标签:
- 模式:**标准模式**
- 源服务器Name输入本实验中使用的生成代理 VM 的私人 IP Address。
- 源服务器Name输入本实验中使用的Build agent VM 的私人 IP Address。
- 服务器端口:`27017`
- 要求 SSL未选中
> **注意:**离开**用户名**和**密码**空白因为此实验的生成代理VM上的MongoDB实例没有打开身份验证。Azure 数据库迁移服务与构建代理 VM 连接到同一 VNet因此它能够在 VNet 内直接与 VM 通信,而不会将 MongoDB 服务暴露到 Internet 中。在生产场景中,您应该始终在 MongoDB 上启用身份验证。
> **注意:**离开**USERNAME**和**password**空白因为此实验的生成代理VM上的MongoDB实例没有打开身份验证。Azure 数据库迁移服务与构建代理 VM 连接到同一 VNet因此它能够在 VNet 内直接与 VM 通信,而不会将 MongoDB 服务暴露到 Internet 中。在生产场景中,您应该始终在 MongoDB 上启用身份验证。
![Select source tab with values selected for the MongoDB server.](media/dms-select-source.png "MongoDB to Azure Database for CosmosDB - Select source")
@ -924,9 +924,9 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![The Select target tab with values selected.](media/dms-select-target.png "MongoDB to Azure Database for CosmosDB - Select target")
通知,**连接字符串**将自动填充与您的Azure Cosmos DB实例的密钥。
通知,**Connection String**将自动填充与您的Azure Cosmos DB实例的密钥。
8. 修改**连接字符串**通过替换`@undefined:`跟`@fabmedical-[SUFFIX].documents.azure.com:`因此DNSName与Azure Cosmos 数据库实例匹配。请务必更换`[SUFFIX]`.
8. 修改**Connection String**通过替换`@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")
@ -938,7 +938,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
11. 选择**下一个:集合设置>>**.
12. 在**收集设置**选项卡,扩展**内容数据库**数据库,并确保这两个**会话**和** speakers**集合被选中用于迁移。此外,更新**吞吐量**自`400`两个集合。
12. 在**收集设置**选项卡,扩展**内容数据库**数据库,并确保这两个**会话**和** speakers**集合被选中用于迁移。此外,更新**Throughput**自`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")
@ -952,7 +952,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![The screenshot shows the MigrateData activity showing the status has completed.](media/dms-migrate-complete.png "MigrateData activity completed")
16. 要验证数据已迁移,请导航到** Cosmos 数据库帐户**对于Azure门户内的实验然后选择**数据资源管理器**.你会看到`speakers`和`sessions`集合内列出`contentdb`数据库,你将能够探索里面的文件。
16. 要验证数据已迁移,请导航到** Cosmos DB account**对于Azure门户内的实验然后选择**Data Explorer**.你会看到`speakers`和`sessions`集合内列出`contentdb`数据库,你将能够探索里面的文件。
![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")
@ -981,7 +981,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
az account set --subscription {id}
```
2. 配置库比特尔以连接到Kubernetes集群
2. 配置kubectl以连接到Kubernetes集群
```bash
az aks get-credentials -a --name fabmedical-SUFFIX --resource-group fabmedical-SUFFIX
@ -999,11 +999,11 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
在此任务中,您将使用 Azure 门户将 API 应用程序部署到 Azure Kubernetes 服务集群。
1. 我们首先需要为我们的 API 定义服务,以便在集群中访问应用程序。在 Azure 门户中的 AKS 面板中选择**服务和入口**并在服务选项卡上选择**+ 添加**.
1. 我们首先需要为我们的 API 定义服务,以便在集群中访问应用程序。在 Azure 门户中的 AKS 面板中选择**Services and ingresses**并在服务选项卡上选择 **+ Add**.
![This is a screenshot of the Azure Portal for AKS showing adding a Service.](media/2021-03-25-17-04-04.png "Add a Service")
2. 在**添加与雅姆勒**屏幕粘贴以下YAML并选择**加**.
2. 在**Add with YAML**屏幕粘贴以下YAML并选择**Add**.
```yaml
apiVersion: v1
@ -1024,15 +1024,15 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
type: ClusterIP
```
3. 现在选择**工作量**下**Kubernetes资源**左导航部分。
3. 现在选择**Workloads**下**Kubernetes资源**左导航部分。
![Select workloads under Kubernetes resources.](media/2021-03-25-17-04-35.png "Select workloads under Kubernetes resources")
4. 从工作负载视图,与**部署**选择(默认值),然后选择**+ 添加**.
4. 从Workloads视图与**部署**选择(默认值),然后选择 **+ Add**.
![Selecting + Add to create a deployment.](media/2021-03-25-17-05-05.png "Selecing + Add to create a deployment")
5. 在**添加与雅姆勒**加载粘贴以下YAML并更新的屏幕`[LOGINSERVER]`具有ACR实例Name的占位符。
5. 在**Add with YAML**加载粘贴以下YAML并更新的屏幕`[LOGINSERVER]`具有ACR实例Name的占位符。
```yaml
apiVersion: apps/v1
@ -1088,7 +1088,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
terminationGracePeriodSeconds: 30
```
6. 选择****启动部署。这可能需要几分钟的时间,之后您将看到列出的部署。
6. 选择**Add**启动部署。这可能需要几分钟的时间,之后您将看到列出的部署。
![Service is showing as unhealthy](media/2021-03-25-17-05-36.png "Service is showing as unhealthy")
@ -1106,21 +1106,21 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![This is a screenshot of the Azure Portal showing the Cosmos DB among existing resources.](media/Ex2-Task1.9.png "Select CosmosDB resource from list")
10. 下**快速启动**选择**node.js**选项卡和复制**node.js 3.0 连接字符串**.
10. 下**快速启动**选择**node.js**选项卡和复制**node.js 3.0 Connection String**.
![This is a screenshot of the Azure Portal showing the quick start for setting up Cosmos DB with MongoDB API. The copy button is highlighted.](media/Ex2-Task1.10.png "Capture CosmosDB connection string")
11. 通过添加数据库修改复制的连接字符串`contentdb`到网址,以及复制集`globaldb`.生成的连接字符串应看起来像下面的示例。请注意,您可能需要修改端点 URL。
11. 通过添加数据库修改复制的Connection String`contentdb`到网址,以及复制集`globaldb`.生成的Connection String应看起来像下面的示例。请注意您可能需要修改Endpoints URL。
> **注意**用户名和密码经过简略编辑。
> **注意**USERNAME和password经过简略编辑。
```text
mongodb://<USERNAME>:<PASSWORD>@fabmedical-<SUFFIX>.documents.azure.com:10255/contentdb?ssl=true&replicaSet=globaldb
```
12. 您将设置一个Kubernetes的secret来存储连接字符串并配置`content-api`申请访问secret。首先您必须根据64编码secret值。打开 Azure Cloud Shell窗口使用以下命令编码连接字符串,然后复制输出。
12. 您将设置一个Kubernetes的secret来存储Connection String并配置`content-api`申请访问secret。首先您必须根据64编码secret值。打开 Azure Cloud Shell窗口使用以下命令编码Connection String,然后复制输出。
> **注意**连接字符串周围的双引号需要成功生成所需的输出。
> **注意**Connection String周围的双引号需要成功生成所需的输出。
```bash
echo -n "[CONNECTION STRING VALUE]" | base64 -w 0 - | echo $(</dev/stdin)
@ -1128,9 +1128,9 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![This is a screenshot of the Azure cloud shell window showing the command to create the base64 encoded secret. The output to copy is highlighted.](media/hol-2019-10-18_07-12-13.png "Show encoded secret")
13. 返回到 Azure 门户中的 AKS 面板并进行选择**配置**下**Kubernetes资源**部分。选择**secret**并选择**+ 添加**.
13. 返回到 Azure 门户中的 AKS 面板并进行选择**配置**下**Kubernetes资源**部分。选择**secret**并选择 **+ Add**.
14. 在**添加与雅姆勒**屏幕粘贴以下YAML并取代占位符从你的剪贴板编码连接字符串并选择**加**.请注意YAML 对位置敏感,因此您必须在键入或粘贴时确保凹痕正确。
14. 在**Add with YAML**屏幕粘贴以下YAML并取代占位符从你的剪贴板编码Connection String并选择**Add**.请注意YAML 对位置敏感,因此您必须在键入或粘贴时确保凹痕正确。
```yaml
apiVersion: v1
@ -1316,7 +1316,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot of the console, kubectl apply -f kubernetes-web.yaml has been typed and run at the command prompt. Messages about web deployment and web service creation appear below.](media/image93.png "kubectl create application")
11. 返回到 Azure 门户中的 AKS 面板。从导航菜单,下**Kubernetes资源**,选择**服务和入口**视图。您应该能够通过外部端点访问网站。
11. 返回到 Azure 门户中的 AKS 面板。从导航菜单,下**Kubernetes资源**,选择**Services and ingresses**视图。您应该能够通过外部Endpoints访问网站。
![AKS services and ingresses shown with External IP highlighted](media/aks-resources-services-ingresses-view.png "AKS services and ingresses shown with External IP highlighted")
@ -1330,15 +1330,15 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
您将配置一个Helm Chart用于部署和配置**内容网**容器镜像到Kubernetes。这是一种可用于更轻松地在 Azure Kubernetes 集群上部署和管理应用程序的技术。
1. 从 Azure 门户中的 AKS 面板,下**Kubernetes资源**选择**工作量**.
1. 从 Azure 门户中的 AKS 面板,下**Kubernetes资源**选择**Workloads**.
2. 选择`web`部署,然后选择**删除**.提示时,请检查**确认删除**并选择**删除**再。
2. 选择`web`部署,然后选择**Delete**.提示时,请检查**确认删除**并选择**Delete**再。
![A screenshot of the Kubernetes management dashboard showing how to delete a deployment.](media/2021-03-26-16-42-03.png "Kubernetes dashboard web deployments")
3. 从 Azure 门户中的 AKS 面板,下**Kubernetes资源**选择**服务和入口**.
3. 从 Azure 门户中的 AKS 面板,下**Kubernetes资源**选择**Services and ingresses**.
4. 选择`web`服务,然后选择**删除**.提示时,请检查**确认删除**并选择**删除**再。
4. 选择`web`服务,然后选择**Delete**.提示时,请检查**确认删除**并选择**Delete**再。
![A screenshot of the Kubernetes management dashboard showing how to delete a deployment.](media/2021-03-26-16-43-29.png "Kubernetes delete deployment")
@ -1350,7 +1350,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
git clone https://github.com/USER_NAME/fabmedical.git
```
7. 我们将使用`helm create`命令脚手架出一个图表实现,我们可以建立。使用以下命令创建名为"新图表"`web`在新的目录中(用克隆创建的目录替换"晶圆厂"
7. 我们将使用`helm create`命令图表出一个图表实现,我们可以建立。使用以下命令创建名为"新图表"`web`在新的目录中(用克隆创建的目录替换"晶圆厂"
```bash
cd fabmedical
@ -1360,7 +1360,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
helm create web
```
8. 我们现在需要更新生成的脚手架,以符合我们的要求。我们将首先更新所命名的文件`values.yaml`.
8. 我们现在需要更新生成的图表,以符合我们的要求。我们将首先更新所命名的文件`values.yaml`.
```bash
cd web
@ -1390,7 +1390,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
port: 80
```
12. 搜索`resources`定义和更新值,以便它们与以下值匹配。您正在删除卷曲的大括号并添加`requests`(请务必删除{}字符后`resource:`节点):
12. 搜索`resources`定义和更新值,以便它们与以下值匹配。您正在删除curl的大括号并添加`requests`(请务必删除{}字符后`resource:`节点):
```yaml
resources:
@ -1494,7 +1494,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot of the console, helm install web ./web has been typed and run at the command prompt. Messages about web deployment and web service creation appear below.](media/Ex2-Task4.24.png "Helm web deployment messages")
24. 返回打开Azure门户的浏览器。从导航菜单中选择**服务和入口**.您将看到部署哪个部署可能需要几分钟的 Web 服务。完成后,您应该能够通过外部端点访问网站。
24. 返回打开Azure门户的浏览器。从导航菜单中选择**Services and ingresses**.您将看到部署哪个部署可能需要几分钟的 Web 服务。完成后,您应该能够通过外部Endpoints访问网站。
![In the AKS Services and ingresses blade in the Azure Portal showing the web service selected.](media/2021-03-26-16-44-18.png "Web service endpoint")
@ -1571,7 +1571,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
cat ~/.kube/config
```
5. 在GitHub返回到**Fabmedical**存储库屏幕,选择**设置**选项卡,选择**secret**从左菜单,然后选择**New secret**按钮。
5. 在GitHub返回到**Fabmedical**存储库屏幕,选择**Settings**选项卡,选择**secret**从左菜单,然后选择**New secret**按钮。
6. 创建一个新的 GitHub secret与Name`KUBECONFIG`并粘贴在内容`~/.kube/config`以前复制的文件。
@ -1656,7 +1656,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot, the various containers information is shown.](media/monitor_1.png "View containers data")
5. 现在按容器Name进行筛选并搜索****容器中您将看到Kubernetes斯集群中创建的所有容器其中带有吊舱Name。
5. 现在按容器Name进行筛选并搜索**web**容器中您将看到Kubernetes斯集群中创建的所有容器其中带有吊舱Name。
![In this screenshot, the containers are filtered by container named web.](media/monitor_3.png "Filter data by container and web")
@ -1688,9 +1688,9 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
在此任务中,您将增加 AKS Azure 门户面板中 API 部署的实例数。在部署时,您将观察不断变化的状态。
1. 在 Azure 门户中的 AKS 面板中选择**工作量**然后选择**应用程序接口**部署。
1. 在 Azure 门户中的 AKS 面板中选择**Workloads**然后选择**应用程序接口**部署。
2. 选择**亚米尔**在窗口中加载并向下滚动,直到您找到**副本**.将复制品数量更改为**2**,然后选择**评论 + 保存**.提示时,请检查**确认显性更改**并选择**Save**.
2. 选择**YAML**在窗口中加载并向下滚动,直到您找到**副本**.将复制品数量更改为**2**,然后选择**Review + save**.提示时,请检查**确认显性更改**并选择**Save**.
![In the edit YAML dialog, 2 is entered in the desired number of replicas.](media/2021-03-26-16-49-32.png "Setting replicas to 2")
@ -1700,7 +1700,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![Replica Sets is selected under Workloads in the navigation menu on the left, and at right, Pods status: 1 pending, 1 running is highlighted. Below that, a red arrow points at the API deployment in the Pods box.](media/api-replica-set.png "View replica details")
4. 从导航菜单中选择**工作量**.请注意api 部署具有警报并显示2个实例中的1个吊舱计数如上所示`1/2`).
4. 从导航菜单中选择**Workloads**.请注意api 部署具有警报并显示2个实例中的1个吊舱计数如上所示`1/2`).
![In the Deployments box, the api service is highlighted with a grey timer icon at left and a pod count of 1/2 listed at right.](media/2021-03-26-16-50-38.png "View api active pods")
@ -1722,7 +1722,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
- **任务Id**API 服务实例的任务标识符。
- **主机名:**API 服务实例的主机名标识符。
- **HOST名**API 服务实例的HOST名标识符。
- **皮德:**API服务实例的进程ID。
@ -1736,11 +1736,11 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
在此任务中,您将解决失败的 API 副本。这些故障的发生是由于集群无法满足所要求的资源。
1. 在 Azure 门户中的 AKS 面板中选择**工作量**然后选择**应用程序接口**部署。选择**亚米尔**导航项目。
1. 在 Azure 门户中的 AKS 面板中选择**Workloads**然后选择**应用程序接口**部署。选择**YAML**导航项目。
2. 在**亚米尔**屏幕向下滚动并更改以下项目:
2. 在**YAML**屏幕向下滚动并更改以下项目:
- 修改**港口**并删除**主机端口**.两个 Pods 无法映射到同一主机端口
- 修改**ports**并删除**hostPort**.两个 Pods 无法映射到同一hostPort
```yaml
ports:
@ -1748,7 +1748,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
protocol: TCP
```
- 修改**中央处理器**并将其设置为**100米**.CPU 在节点上的所有 Pods 之间分配。
- 修改**cpu**并将其设置为**100米**.CPU 在节点上的所有 Pods 之间分配。
```yaml
resources:
@ -1757,11 +1757,11 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
memory: 128Mi
```
选择**评论 + 保存**并且,当提示时,确认更改并选择**Save**.
选择**Review + save**并且,当提示时,确认更改并选择**Save**.
![In the edit YAML dialog, showing two changes required.](media/2021-03-26-16-56-28.png "Modify deployment manifest")
3. 返回到**工作量**AKS Azure 门户上的主要视图,您现在将看到部署是健康的,有两个 Pods 在运行。
3. 返回到**Workloads**AKS Azure 门户上的主要视图,您现在将看到部署是健康的,有两个 Pods 在运行。
![In the Workload view with the API deployment highlighted.](media/healthy-deployment.png "API deployment is now healthy")
@ -1779,17 +1779,17 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
3. 几分钟后,您会发现 API 部署正在成功运行 4 个副本。
4. 加载 Web 应用程序统计页面后返回浏览器选项卡。一遍又一遍地刷新页面。您不会看到任何错误,但您将定期看到两个 api pod 实例之间的 api 主机Name更改。任务 ID 和 pid 也可能在两个 api 吊舱实例之间更改。
4. 加载 Web 应用程序统计页面后返回浏览器选项卡。一遍又一遍地刷新页面。您不会看到任何错误,但您将定期看到两个 api pod 实例之间的 api HOSTName更改。任务 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。
5. 刷新后足够的时间看到,`hostName`值正在改变,服务保持健康,您可以打开**Replica Sets**在Azure门户中查看API。
6. 在此视图中,您可以看到 Web 应用程序统计页面中显示的主机名值与正在运行的吊舱的吊舱Name匹配。
6. 在此视图中,您可以看到 Web 应用程序统计页面中显示的HOST名值与正在运行的吊舱的吊舱Name匹配。
![Viewing replica set in the Azure Portal.](media/2021-03-26-17-31-02.png "Viewing replica set in the Azure Portal")
7. 随机选择两个吊舱并进行选择**删除**.
7. 随机选择两个吊舱并进行选择**Delete**.
![The context menu for a pod in the pod list is expanded with the Delete item selected.](media/2021-03-26-17-31-31.png "Delete running pod instance")
@ -1799,45 +1799,45 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
9. 返回到 API 部署并将其缩减到`1`复制品。有关如果您不确定,请参阅上面的步骤 2了解如何做到这一点。
10. 返回浏览器中的示例网站的统计页面并刷新,同时 Kubernetes 正在缩减 Pods 的数量。您会注意到仅显示一个 API 主机Name即使您可能仍然会在 API 复制器设置视图中看到几个运行吊舱。即使有几个吊舱正在运行Kubernetes 将不再将流量发送到它选择终止的吊舱。稍后API 复制器设置视图中将只显示一个吊舱。
10. 返回浏览器中的示例网站的统计页面并刷新,同时 Kubernetes 正在缩减 Pods 的数量。您会注意到仅显示一个 API HOSTName即使您可能仍然会在 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")
### <a id="task-4-configure-cosmos-db-autoscale">任务4配置 Cosmos DB自动规模</a>
### <a id="task-4-configure-cosmos-db-autoscale">任务4配置 Cosmos DB自动Scale</a>
在此任务中您将在Azure Cosmos 数据库上设置自动缩放
在此任务中您将在Azure Cosmos 数据库上设置Autoscale
1. 在 Azure 门户中,导航到`fabmedical-[SUFFIX]` **Azure Cosmos 数据库帐户**.
1. 在 Azure 门户中,导航到`fabmedical-[SUFFIX]` **Azure Cosmos DB account**.
2. 选择**数据资源管理器**.
2. 选择**Data Explorer**.
3. 在**数据资源管理器**,扩大`contentdb`数据库,然后扩展`sessions`收集。
3. 在**Data Explorer**,扩大`contentdb`数据库,然后扩展`sessions`收集。
4. 下`sessions`收集、选择**缩放和设置**.
4. 下`sessions`收集、选择**Scale & Settings**.
5. 在**缩放和设置**选择**自动缩放**对于**吞吐量**设置下**规模**.
5. 在**Scale & Settings**选择**Autoscale**对于**Throughput**设置下**Scale**.
![The screenshot displays Cosmos DB Scale and 设置 tab with Autoscale selected](media/cosmosdb-autoscale.png "CosmosDB collection scale and 设置")
6. 选择**Save**.
7. 执行相同的任务以启用**自动缩放**吞吐量`speakers`收集。
7. 执行相同的任务以启用**Autoscale**Throughput`speakers`收集。
### <a id="task-5-test-cosmos-db-autoscale">任务5测试 Cosmos DB自动规模</a>
### <a id="task-5-test-cosmos-db-autoscale">任务5测试 Cosmos DB自动Scale</a>
在此任务中,您将运行一个性能测试脚本,将测试 Azure Cosmos DB 的自动规模功能,以便您看到它现在将扩展到大于 400 RU/s。
在此任务中,您将运行一个性能测试脚本,将测试 Azure Cosmos DB 的自动Scale功能,以便您看到它现在将扩展到大于 400 RU/s。
1. 在 Azure 门户中,导航到`fabmedical-[SUFFIX]` ** Cosmos 数据库帐户**.
1. 在 Azure 门户中,导航到`fabmedical-[SUFFIX]` ** Cosmos DB account**.
2. 选择**连接字符串**下**设置**.
2. 选择**Connection String**下**Settings**.
3. 在**连接字符串**窗格,复制**主机**,**用户名**和**主要密码**值。保存这些供以后使用。
3. 在**Connection String**窗格,复制**HOST**,**USERNAME**和**PRIMARY PASSWORD**值。保存这些供以后使用。
![The Cosmos DB account Connection String pane with the fields to copy highlighted.](media/cosmos-connection-string-pane.png "View CosmosDB connection string")
4. 打开AzureCloud Shell**嘘**到**生成代理 VM**.
4. 打开AzureCloud Shell**SSH**到**Build agent VM**.
5. 在**生成代理 VM**,导航到`~/Fabmedical`目录。
5. 在**Build agent VM**,导航到`~/Fabmedical`目录。
```bash
cd ~/Fabmedical
@ -1849,7 +1849,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
vi perftest.sh
```
7. 有几个变量在顶部宣布`perftest.sh`脚本。修改**主机**,**用户名**和**密码**变量通过将其值设置为以前复制的相应 Cosmos DB连接字符串值。
7. 有几个变量在顶部宣布`perftest.sh`脚本。修改**HOST**,**USERNAME**和**password**变量通过将其值设置为以前复制的相应 Cosmos DBConnection String值。
![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")
@ -1863,13 +1863,13 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
> **注意:**脚本需要一分钟才能完成执行。
10. 脚本完成后,导航返回到** Cosmos 数据库帐户**在Azure门户。
10. 脚本完成后,导航返回到** Cosmos DB account**在Azure门户。
11. 向下滚动**概述**窗格的** Cosmos 数据库帐户**面板,并找到**请求费用**图。
11. 向下滚动**Overview**窗格的** Cosmos DB account**面板,并找到**Request charge用**图。
> **注意:** Cosmos DB集合上的活动可能需要2-5分钟才能显示在活动日志中。等待几分钟然后刷新窗格如果最近的请求费用没有出现在现在。
> **注意:** Cosmos DB集合上的活动可能需要2-5分钟才能显示在活动日志中。等待几分钟然后刷新窗格如果最近的Request charge用没有出现在现在。
12. 请注意,**请求费**现在显示有活动上的** Cosmos 数据库帐户**超过了自动刻度打开之前设定的 400 RU/s 限制。
12. 请注意,**Request charge**现在显示有活动上的** Cosmos DB account**超过了自动刻度打开之前设定的 400 RU/s 限制。
![The screenshot shows the Cosmos DB request charge graph showing recent activity from performance test](media/cosmos-request-charge.png "Recent CosmosDB activity graph")
@ -1877,7 +1877,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
**期间**1小时
在之前的练习中,我们对服务的规模属性进行了限制。在本练习中,您将配置 api 部署,以创建使用动态端口映射来消除规模活动期间端口资源限制的吊舱。
在之前的练习中,我们对服务的Scale属性进行了限制。在本练习中,您将配置 api 部署,以创建使用动态端口映射来消除Scale活动期间端口资源限制的吊舱。
Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一代理节点上运行多个吊舱实例,---配置特定静态端口(如 API 服务的 3001时无法实现的状态。
@ -1885,35 +1885,35 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
在此任务中,您将更新 Web 服务,以便它通过 Azure 负载平衡器支持动态发现。
1. 从 AKS**Kubernetes资源**菜单,选择**部署**下**工作量**.从列表中选择**蹼**部署。
1. 从 AKS**Kubernetes资源**菜单,选择**部署**下**Workloads**.从列表中选择**web**部署。
2. 选择**亚米尔**,然后选择**杰森**标签。
2. 选择**YAML**,然后选择**JSON**标签。
3. 首先定位复制节点并更新所需的计数`4`.
4. 接下来,滚动到屏幕截图中显示的 Web 容器规格。删除主机端口条目以进行 Web 容器的端口映射。
4. 接下来,滚动到屏幕截图中显示的 Web 容器规格。删除hostPort条目以进行 Web 容器的端口映射。
![This is a screenshot of the Edit a Deployment dialog box with various displayed information about spec, containers, ports, and env. The ports node, containerPort: 3001 and protocol: TCP are highlighted.](media/2021-03-26-18-22-39.png "Remove web container hostPort entry")
5. 选择**评论 + 保存**然后确认更改和**Save**.
5. 选择**Review + save**然后确认更改和**Save**.
6. 通过刷新 Web 部署的视图来检查扩展的状态。从导航菜单中选择**豆荚**从下工作负载。选择**蹼**豆荚。从此视图中,您应该会看到以下屏幕截图中显示的类似错误。
6. 通过刷新 Web 部署的视图来检查扩展的状态。从导航菜单中选择**Pods**从下Workloads。选择**web**Pods。从此视图中,您应该会看到以下屏幕截图中显示的类似错误。
![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 部署使用固定部署_主机端口_并且您的缩放能力受可用代理节点数量的限制。但是在通过删除_主机端口_设置时由于 CPU 限制Web 部署仍无法缩放过去两个吊舱。部署请求的 CPU 比 Web 应用程序需要的要多,因此您将在下一个任务中修复此限制。
与 API 部署一样Web 部署使用固定部署_hostPort_并且您的缩放能力受可用代理节点数量的限制。但是在通过删除_hostPort_设置时由于 CPU 限制Web 部署仍无法缩放过去两个吊舱。部署请求的 CPU 比 Web 应用程序需要的要多,因此您将在下一个任务中修复此限制。
### <a id="task-2-adjust-cpu-constraints-to-improve-scale">任务2调整CPU约束提高规模</a>
### <a id="task-2-adjust-cpu-constraints-to-improve-scale">任务2调整CPU约束提高Scale</a>
在此任务中,您将修改 Web 服务的 CPU 要求,以便它可以扩展到更多实例。
1. 重新打开用于 Web 部署的 JSON 视图,然后找到**中央处理器**Web容器的资源要求。将此值更改为`125m`.
1. 重新打开用于 Web 部署的 JSON 视图,然后找到**cpu**Web容器的资源要求。将此值更改为`125m`.
![This is a screenshot of the Edit a Deployment dialog box with various displayed information about ports, env, and resources. The resources node, with cpu: 125m selected, is highlighted.](media/2021-03-26-18-24-06.png "Change cpu value")
2. 选择**评论 + 保存**,确认更改,然后选择**Save**更新部署。
2. 选择**Review + save**,确认更改,然后选择**Save**更新部署。
3. 从导航菜单中选择**复制套装**下**工作量**.从视图的复制集列表中选择 Web 副本集。
3. 从导航菜单中选择**Replica Sets**下**Workloads**.从视图的复制集列表中选择 Web 副本集。
4. 部署更新完成后,应以运行状态显示四个 Web 吊舱。
@ -1970,7 +1970,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
8. 当此更新运行时,返回浏览器中的 Azure 门户。
9. 从导航菜单中选择**复制套装**下**工作量**.从此视图中,您将看到为 Web 设置的新副本,该副本可能仍在部署过程中(如下图所示)或已完全部署。
9. 从导航菜单中选择**Replica Sets**下**Workloads**.从此视图中,您将看到为 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")
@ -2017,7 +2017,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
--set controller.admissionWebhooks.patch.nodeSelector."beta\.kubernetes\.io/os"=linux
```
5. 在Azure门户下**服务和入口**复制IP Address**外部 IP**对于`nginx-ingress-RANDOM-nginx-ingress`服务。
5. 在Azure门户下**Services and ingresses**复制IP Address**External IP**对于`nginx-ingress-RANDOM-nginx-ingress`服务。
![A screenshot of the Kubernetes management dashboard showing the ingress controller 设置.](media/2021-03-26-18-26-13.png "Copy ingress controller 设置")
@ -2227,7 +2227,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
kubectl create --save-config=true -f content.ingress.yml
```
21. 刷新浏览器中的入口端点。您应该能够访问 speakers和会话页面并查看所有内容。
21. 刷新浏览器中的入口Endpoints。您应该能够访问 speakers和会话页面并查看所有内容。
22. 直接访问 API通过导航到`/content-api/sessions`在入口终点。
@ -2241,13 +2241,13 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
在此任务中,您将设置 Azure 流量管理器作为多区域负载平衡器。这将使您能够在辅助 Azure 区域中提供应用的 AKS 实例,并在两个区域之间实现负载平衡。
1. 在 Azure 门户内,请选择**+ 创建资源**.
1. 在 Azure 门户内,请选择**+ Create a resource**.
2. 搜索市场**流量管理器配置文件**,选择此资源类型,然后选择**创造**.
2. 搜索市场**Traffic Manager profile**,选择此资源类型,然后选择**Create**.
![The screenshot shows Traffic Manager profile in the Azure marketplace.](media/tm-marketplace.png "Traffic Manager profile")
3. 在**创建流量管理器配置文件**面板,输入以下值,然后选择**创造**.
3. 在**创建Traffic Manager profile**面板,输入以下值,然后选择**Create**.
- Name'法布医疗-[后缀]'
- 路由方法:**性能**
@ -2255,15 +2255,15 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
![The screenshot shows the Create Traffic Manager profile blade with all values entered.](media/tm-create.png "Create Traffic Manager profile configuration")
4. 导航到新创建的`fabmedical-[SUFFIX]` **流量管理器配置文件**.
4. 导航到新创建的`fabmedical-[SUFFIX]` **Traffic Manager profile**.
5. 在**流量管理器配置文件**面板,选择**端点**下**设置**.
5. 在**Traffic Manager profile**面板,选择**Endpoints**下**Settings**.
6. 在**端点**窗格,选择**+ 添加**添加一个新的端点进行负载平衡。
6. 在**Endpoints**窗格,选择 **+ Add**添加一个新的Endpoints进行负载平衡。
7. 在**添加端点**窗格,输入新端点的以下值,然后选择**加**.
7. 在**添加Endpoints**窗格输入新Endpoints的以下值然后选择**Add**.
- 类型:**外部端点**
- 类型:**External endpoint**
- 名字:`primary`
- 完全合格的域名 FQDN 或 IP`fabmedical-[SUFFIX]-ingress.[AZURE-REGION].cloudapp.azure.com`
- 位置:选择与 AKS 相同的Azure区域。
@ -2272,15 +2272,15 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
![Add endpoint configuration pane with values entered.](media/tm-add-endpoint-primary.png "Add endpoint configuration")
8. 请注意列表**端点**现在显示**主要**已添加的端点
8. 请注意列表**Endpoints**现在显示**primary**已添加的Endpoints
9. 在**流量管理器配置文件**面板,选择**概述**.
9. 在**Traffic Manager profile**面板,选择**Overview**.
10. 在**概述**窗格,复制**DNSName**用于流量管理器配置文件
10. 在**Overview**窗格,复制**DNSName**用于Traffic Manager profile
![The Traffic Manager profile overview pane with the DNS name highlighted](media/tm-overview.png "fabmedical Traffic Manager profile DNS name")
11. 导航回AzureCloud Shell。打开`content.ingress.yml`您以前创建的文件。将以下 YAML 代码附加到文件中。请保持适当的凹痕。这些 YAML 语句将确保将来自流量管理器配置文件的请求路由到正确的服务。
11. 导航回AzureCloud Shell。打开`content.ingress.yml`您以前创建的文件。将以下 YAML 代码附加到文件中。请保持适当的凹痕。这些 YAML 语句将确保将来自Traffic Manager profile的请求路由到正确的服务。
```yaml
- host: fabmedical-cnr.trafficmanager.net
@ -2296,11 +2296,11 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
servicePort: 3001
```
12. 打开新的 Web 浏览器选项卡并导航到流量管理器配置文件**DNSName**只是复制。
12. 打开新的 Web 浏览器选项卡并导航到Traffic Manager profile**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 中设置多区域托管应用程序时,您将在另一个 Azure 区域设置辅助 AKS然后将其终点添加到其流量管理器配置文件中以实现负载平衡。
13. 在 AKS 中设置多区域托管应用程序时,您将在另一个 Azure 区域设置辅助 AKS然后将其终点添加到其Traffic Manager profile中以实现负载平衡。
> **注意:**如果您愿意,您可以自行设置辅助 AKS 和康托索神经网站实例。设置该步骤的步骤与您在此实验中为设置主 AKS 和应用实例而经历的大多数步骤相同。
@ -2312,7 +2312,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
1. 删除您放置所有 Azure 资源的资源组。
- 从门户,导航到您的面板**资源集团**然后选择**删除**在顶部的命令栏中。
- 从门户,导航到您的面板**Resource Group**然后选择**Delete**在顶部的命令栏中。
- 通过重新键入资源组Name并选择"删除"来确认删除。

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

@ -1,33 +1,9 @@
![](media/logo.jpg)
<div class="MCWHeader1">
Cloud-native applications - Developer edition
</div>
<div class="MCWHeader2">
Hands-on lab step-by-step
</div>
<div class="MCWHeader3">
November 2020
</div>
本文档中的信息(包括 URL 和其他互联网网站参考)可能会在未通知的情况下更改。除非另有说明,否则此处描述的示例公司、组织、产品、域名、电子邮件 Address、徽标、人员、地点和事件均为虚构的并且不与任何真实公司、组织、产品、域名、电子邮件 Address、徽标、人、地点或事件关联或应推断。遵守所有适用的版权法是用户的责任。在不限制版权保护的情况下未经微软公司明确书面许可不得复制、存储或引入检索系统也不得以任何形式或以任何方式电子、机械、影印、录音或其他方式传输本文件的任何部分。
Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、商标、版权或其他知识产权。除非 Microsoft 的任何书面许可协议中明确规定,否则本文档的提供不会为您提供这些专利、商标、版权或其他知识产权的任何许可。
制造商、产品或 URL 的Name仅供参考Microsoft 不会就这些制造商或使用 Microsoft 任何技术的产品进行任何陈述和保修,无论是表达、暗示还是法定。包括制造商或产品并不意味着微软对制造商或产品的认可。链接可提供给第三方网站。此类站点不在 Microsoft 的控制之下Microsoft 不负责链接站点中包含的任何链接站点的内容或链接的内容也不对链接站点的任何更改或更新负责。Microsoft 不负责从任何链接站点接收的网络广播或任何其他形式的传输。微软只为方便而向您提供这些链接,包含任何链接并不意味着微软对该网站或其中包含的产品的认可。
©2020年微软公司。保留所有权利。
微软和列出的商标<https://www.microsoft.com/en-us/legal/intellectualproperty/Trademarks/Usage/General.aspx>是微软集团公司的商标。所有其他商标均为其各自所有者的财产。
**内容**
<!-- TOC -->
- <a href="cloud-native-applications---infrastructure-edition-hands-on-lab-step-by-step">云原生应用 - 开发人员版动手实验</a>
- <a href="abstract-and-learning-objectives">抽象和学习目标</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>
@ -35,7 +11,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
- <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-4-create-docker-images">任务4创建Docker镜像</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>
@ -55,11 +31,11 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
- <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="#task-4-configure-cosmos-db-autoscale">任务4配置 Cosmos DB自动Scale</a>
- <a href="#task-5-test-cosmos-db-autoscale">任务5测试 Cosmos DB自动Scale</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-2-adjust-cpu-constraints-to-improve-scale">任务2调整CPU约束提高Scale</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>
@ -69,7 +45,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
# <a id="cloud-native-applications---infrastructure-edition-hands-on-lab-step-by-step">云原生应用 - 开发人员版动手实验</a>
## <a id="abstract-and-learning-objectives">抽象和学习目标</a>
## <a id="abstract-and-learning-objectives">学习目标</a>
这个动手实验旨在引导您完成构建和部署 Docker 镜像到 Azure Kubernetes 服务 AKS 托管的 Kubernetes 平台的过程,此外还学习如何处理动态服务发现、服务扩展和高可用性。
@ -77,7 +53,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
## <a id="overview">概述</a>
法布里卡姆医疗会议 FabMedical 提供专为医疗界量身定做的会议网站服务。他们正在根据node.js重新构想其应用程序代码以便它可以作为 Docker 应用程序运行,并希望实施 POC帮助他们熟悉开发过程、部署的生命周期以及托管环境的关键方面。他们将部署他们的应用程序到Azure Kubernetes服务并希望学习如何部署容器在动态负载平衡的方式发现容器并按需缩放它们。
Fabrikam医疗会议 FabMedical 提供专为医疗界量身定做的会议网站服务。他们正在根据node.js重新构想其应用程序代码以便它可以作为 Docker 应用程序运行,并希望实施 POC帮助他们熟悉开发过程、部署的生命周期以及托管环境的关键方面。他们将部署他们的应用程序到Azure Kubernetes服务并希望学习如何部署容器在动态负载平衡的方式发现容器并按需缩放它们。
在这个动手实验中,您将协助完成此 POC 与应用程序代码库的子集。您将创建基于 Linux 的构建代理,以及用于运行已部署应用程序的 Azure Kubernetes 服务集群。您将帮助他们完成应用的 Docker 设置、本地测试、推入镜像存储库、部署到集群以及测试负载平衡和缩放。
@ -285,7 +261,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
![Edit the app.js file in vim in the build machine to update the API URL.](media/image27.png "Edit the app.js")
然后按下**_ESC_**写**_wq_**以保存更改并关闭文件。
然后按下**_ESC_**写**_:wq_**以保存更改并关闭文件。
16. 现在在后台运行内容网络应用程序。
@ -311,7 +287,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
1. 从 Azure 门户中选择您创建的指定资源组`fabmedical-SUFFIX`.
2. 选择命名的生成代理 VM`fabmedical-SUFFIX`从您的可用资源列表。
2. 选择命名的Build agent VM`fabmedical-SUFFIX`从您的可用资源列表。
![In this screenshot of your list of available resources, the first item is selected, which has the following values for Name, Type, and Location: fabmedical-soll (a red arrows points to this name), Virtual machine, and East US 2.](media/image54.png "List of resources")
@ -327,7 +303,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
EXAMPLE: http://13.68.113.176:3000
```
5. 选择标题中的 speakers和会话链接。您将看到页面显示您以前卷曲的 JSON 内容的 HTML 版本。
5. 选择标题中的 speakers和会话链接。您将看到页面显示您以前curl的 JSON 内容的 HTML 版本。
6. 验证应用程序通过浏览器访问后请转到Cloud Shell窗口并停止运行节点进程。
@ -351,9 +327,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`并注意Name中的外 shell。使用
按照Vim命令创建新文件。Cloud Shell窗口应
如下图所示。
2. 创建名为`Dockerfile`的新文件并注意字母大小写。使用Vim命令创建新文件。Cloud Shell窗口应如下图所示。
```bash
vi Dockerfile
@ -365,7 +339,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
![INSERT appears at the bottom of the Dockerfile window.](media/image57.png "Insert mode")
4. 在文件中键入以下文件。这些陈述生成了一个多克档案,其中描述了以下情况:
4. 在文件中键入以下文件。这些陈述生成了一个docker档案,其中描述了以下情况:
- 基本阶段包括环境设置,我们期望很少改变,如果有的话。
@ -375,7 +349,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
- 在可复制应用程序文件的镜像上创建目录。
- 暴露应用端口`3001`到容器环境,以便可以在港口达到应用程序`3001`.
- 暴露应用端口`3001`到容器环境,以便可以在ports达到应用程序`3001`.
- 构建阶段包含创建应用程序所需的所有工具和中间文件。
@ -445,7 +419,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
### <a id="task-4-create-docker-images">任务4创建Dockerfile镜像</a>
在此任务中,您将为应用程序创建 Docker 镜像,---一个用于 API 应用程序,另一个用于 Web 应用程序。每个镜像都将通过依赖于多克档案的 Docker 命令创建。
在此任务中,您将为应用程序创建 Docker 镜像,---一个用于 API 应用程序,另一个用于 Web 应用程序。每个镜像都将通过依赖于docker档案的 Docker 命令创建。
1. 从连接到构建代理 VM 的Cloud Shell中键入以下命令以查看 VM 上的任何 Docker 镜像。该列表将仅包含之前下载的MongoDB镜像。
@ -485,7 +459,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
如果提示,请输入凭据。
5. 再次导航到内容网络文件夹并列出文件。请注意,此文件夹已具有多克文件。
5. 再次导航到内容网络文件夹并列出文件。请注意,此文件夹已具有docker文件。
```bash
cd ../content-web
@ -506,7 +480,7 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
docker image build -t content-web .
```
8. 再次导航到内容-init文件夹并列出文件。请注意此文件夹已具有多克文件。
8. 再次导航到内容-init文件夹并列出文件。请注意此文件夹已具有docker文件。
```bash
cd ../content-init
@ -535,15 +509,15 @@ Microsoft 可能拥有本文件中涉及主题事项的专利、专利申请、
### <a id="task-5-run-a-containerized-application">任务 5运行容器化应用程序</a>
Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应用程序容器将与 mongodb 进行通信。在本练习中,您将在启动 mongodb 时创建的同一桥网络上启动您创建的容器创建的镜像。
Web 应用程序容器将调用 API 应用程序容器暴露的EndpointsAPI 应用程序容器将与 mongodb 进行通信。在本练习中,您将在启动 mongodb 时创建的同一桥网络上启动您创建的容器创建的镜像。
1. 使用以下命令创建并启动 API 应用程序容器。命令如下:
- 命名容器`api`供以后使用Docker命令参考。
- 指示多克发动机使用`fabmedical`网络。
- 指示docker引擎使用`fabmedical`网络。
- 指示码头发动机使用端口`3001`并映射到内部容器端口`3001`.
- 指示docker引擎使用端口`3001`并映射到内部容器端口`3001`.
- 通过指定的镜像(如`content-api`.
@ -551,7 +525,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
docker container run --name api --net fabmedical -p 3001:3001 content-api
```
2. 这`docker container run`命令已失败因为它被配置为使用本地热URL连接到MongoDB。但是现在内容 api 被隔离在单独的容器中,即使在同一个码头主机上运行,它也不能通过本地主机访问 mongodb。相反API 必须使用桥网连接到Mongo。
2. 这`docker container run`命令已失败因为它被配置为使用本地热URL连接到MongoDB。但是现在内容 api 被隔离在单独的容器中,即使在同一个dockerHOST上运行它也不能通过本地HOST访问 mongodb。相反API 必须使用桥网连接到Mongo。
```text
> content-api@0.0.0 start
@ -574,7 +548,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
npm ERR! /root/.npm/_logs/2020-11-23T03_04_12_948Z-debug.log
```
3. 内容 api 应用程序允许环境变量配置MongoDB连接字符串。删除现有容器然后指示Dockerfile引擎通过添加`-e`切换到`docker container run`命令。此外,使用`-d`切换到运行api作为一个达蒙
3. 内容 api 应用程序允许环境变量配置MongoDBConnection String。删除现有容器然后指示Dockerfile引擎通过添加`-e`切换到`docker container run`命令。此外,使用`-d`切换到运行api作为一个daemon
```bash
docker container rm api
@ -590,7 +564,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot of the console window, docker container ls has been typed and run at the command prompt, and the "api" container is in the list with the following values for Container ID, Image, Command, Created, Status, Ports, and Names: 458d47f2aaf1, content-api, "docker-entrypoint.s...", 37 seconds ago, Up 36 seconds, 0.0.0.0:3001->3001/tcp, and api.](media/image61.png "List Docker containers")
5. 通过卷曲网址来测试API。您将看到 JSON 输出,就像以前测试时一样。
5. 通过curl来测试API。您将看到 JSON 输出,就像以前测试时一样。
```bash
curl http://localhost:3001/speakers
@ -618,7 +592,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
### <a id="task-6-setup-environment-variables">任务6设置环境变量</a>
在此任务中,您将配置`web`容器使用环境变量与 API 容器通信,类似于向 api 提供 mongodb 连接字符串的方式。
在此任务中,您将配置`web`容器使用环境变量与 API 容器通信,类似于向 api 提供 mongodb Connection String的方式。
1. 从连接到构建代理 VM 的Cloud Shell中使用以下命令停止并移除 Web 容器。
@ -682,7 +656,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
docker container ls
```
10. 使用分配给 Web 容器的端口再次卷曲 speakers路径。同样您将看到 HTML 返回,但由于 Curl 不处理 javascript您无法确定 Web 应用程序是否正在与 api 应用程序进行通信。您必须在浏览器中验证此连接。
10. 使用分配给 Web 容器的端口再次curl speakers路径。同样您将看到 HTML 返回,但由于 Curl 不处理 javascript您无法确定 Web 应用程序是否正在与 api 应用程序进行通信。您必须在浏览器中验证此连接。
```bash
curl http://localhost:[PORT]/speakers.html
@ -698,7 +672,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
> **警告:**如果您收到错误,如`Error starting userland proxy: listen tcp4 0.0.0.0:3000: bind: address already in use.`以前的节点实例可能持有端口 3000。跑`sudo pkill node`杀死本地节点实例。
12. 使用端口再次卷曲 speakers路径`3000`.您将看到相同的HTML返回。
12. 使用端口再次curl speakers路径`3000`.您将看到相同的HTML返回。
```bash
curl http://localhost:3000/speakers.html
@ -722,9 +696,9 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
如果提示,请输入凭据。
### <a id="task-7-push-images-to-azure-container-registry">任务 7 将镜像推送至 Azure 容器注册处</a>
### <a id="task-7-push-images-to-azure-container-registry">任务 7 将镜像推送至 Azure容器注册处</a>
要在远程环境中运行容器,您通常会将镜像推送至 Docker 注册处在那里您可以存储和分发镜像。每个服务将有一个存储库可以推至和拉从与Docker命令。Azure 容器注册处 ACR 是基于码头注册处 v2 的托管私人码头注册服务。
要在远程环境中运行容器,您通常会将镜像推送至 Docker 注册处在那里您可以存储和分发镜像。每个服务将有一个存储库可以推至和拉从与Docker命令。Azure 容器注册处 ACR 是基于docker注册处 v2 的托管私人docker注册服务。
在此任务中,您将把镜像推送至您的 ACR 帐户、带有标记的版本镜像,并设置持续集成 CI以构建容器的未来版本并自动将其推送至 ACR。
@ -734,9 +708,9 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot of the left-hand menu, Access keys is highlighted below 设置.](media/image64.png "Access keys")
3. 访问密钥面板显示下一步所需的登录服务器、用户名和密码。在构建 VM 上执行操作时,请保持此方便。
3. Access keys面板显示下一步所需的登录服务器、USERNAME和password。在构建 VM 上执行操作时,请保持此方便。
> **注意**:如果用户名和密码未显示,请选择"在管理员用户选项上启用"。
> **注意**:如果USERNAME和password未显示,请选择"在管理员用户选项上启用"。
4. 从连接到生成 VM 的Cloud Shell会话中通过键入以下命令登录到您的 ACR 帐户。按照说明完成登录。
@ -761,7 +735,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
docker image tag content-api [LOGINSERVER]/content-api
```
> **注意**:请务必更换`[LOGINSERVER]`您的ACR实例。
> **注意**:请务必更换`[LOGINSERVER]`您的ACR实例
6. 列出您的Dockerfile镜像并查看存储库和标签。请注意存储库预缀了您的 ACR 登录服务器Name例如下面的屏幕截图中显示的示例。
@ -780,7 +754,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot of the console window, an example of images being pushed to an ACR account results from typing and running the following at the command prompt: docker push \[LOGINSERVER\]/content-web.](media/image67.png "Push image to ACR")
8. 在 Azure 门户中,导航到您的 ACR 帐户,然后选择**存储 库**下**服务业**在左侧菜单上。您现在将看到两个容器**(2)**,每个镜像一个。
8. 在 Azure 门户中,导航到您的 ACR 帐户,然后在左侧菜单上**Services**下选择**Repositories**。您现在将看到两个容器**(2)**,每个镜像一个。
![In this screenshot, content-api and content-web each appear on their own lines below Repositories.](media/acr-two-containers.png "Search for repositories")
@ -821,7 +795,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
在此任务中,您将使用 YAML 来定义构建 Docker 的 GitHub 操作工作流
镜像并自动将其推送至您的ACR实例。
1. 在GitHub返回到**Fabmedical**存储库屏幕,并选择**设置**标签。
1. 在GitHub返回到**Fabmedical**存储库屏幕,并选择**Settings**标签。
2. 从左侧菜单中选择**secret**.
@ -829,11 +803,11 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![设置 link, Secrets link, and New secret button are highlighted.](media/2020-08-24-21-45-42.png "GitHub Repository secrets")
4. 在**New secret**形式输入Name`ACR_USERNAME`和价值粘贴在Azure容器注册处**用户名**这是以前复制的。选择**添加secret**.
4. 在**New secret**形式输入Name`ACR_USERNAME`和价值粘贴在Azure容器注册处**Username**这是以前复制的。选择**Add secret**.
![New secret screen with values are entered.](media/2020-08-24-21-48-54.png "New secret screen")
5. 通过输入Name添加另一个secret`ACR_PASSWORD`和价值粘贴在Azure容器注册处**密码**这是以前复制的。
5. 添加另一个secret输入Name `ACR_PASSWORD`和它的值粘贴在Azure容器注册处**Password**这是以前复制的。
![Secrets screen with both the ACR_USERNAME and ACR_PASSWORD secrets created.](media/2020-08-24-21-51-24.png "Secrets screen")
@ -934,7 +908,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
13. 在**Actions**页面,选择**content-web**工作流。
14. 在**内容网**工作流,选择**运行工作流**并手动触发工作流执行。
14. 在***content-web**工作流,选择**Run workflow**并手动触发工作流执行。
![The content-web Action is shown with the Actions, content-web, and Run workflow links highlighted.](media/2020-08-25-15-38-06.png "content-web workflow")
@ -950,7 +924,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![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 中的存储库,选择"操作",然后手动运行**内容-阿皮**工作流。
19. 保存文件,然后导航到 GitHub 中的存储库,选择"操作",然后手动运行**content-api**工作流。
20. 提交并推动 Git 存储库的更改:
@ -982,9 +956,9 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
在此任务中,您将部署 Azure 数据库迁移服务实例,该实例将用于将数据从 MongoDB 迁移到 Cosmos 数据库。
1. 从 Azure 门户,选择**+ 创建资源**.
1. 从 Azure 门户,选择**+ Create a resourc**.
2. 搜索市场**Azure数据库迁移服务**并选择它。
2. 搜索市场**Azure Database Migration Service**并选择它。
3. 选择**Create**.
@ -1036,11 +1010,11 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
5. 在**MongoDB to Azure Database for CosmosDB Offline Migration Wizard**窗格,输入以下值的**Select source**标签:
- 模式:**Standard mode**
- 源服务器Name输入本实验中使用的生成代理 VM 的私人 IP Address。
- 源服务器Name输入本实验中使用的Build agent VM 的私人 IP Address。
- 服务器端口:`27017`
- 要求 SSL未选中
> **注意:**离开**用户名**和**密码**空白因为此实验的生成代理VM上的MongoDB实例没有打开身份验证。Azure 数据库迁移服务与构建代理 VM 连接到同一 VNet因此它能够在 VNet 内直接与 VM 通信,而不会将 MongoDB 服务暴露到 Internet 中。在生产场景中,您应该始终在 MongoDB 上启用身份验证。
> **注意:**离开**USERNAME**和**password**空白因为此实验的生成代理VM上的MongoDB实例没有打开身份验证。Azure 数据库迁移服务与构建代理 VM 连接到同一 VNet因此它能够在 VNet 内直接与 VM 通信,而不会将 MongoDB 服务暴露到 Internet 中。在生产场景中,您应该始终在 MongoDB 上启用身份验证。
![Select source tab with values selected for the MongoDB server.](media/dms-select-source.png "MongoDB to Azure Database for CosmosDB - Select source")
@ -1070,27 +1044,27 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
11. 选择**Next: Collection setting >>**.
12. 在**Collection setting**选项卡,扩展**内容数据库**数据库,并确保这两个**会话**和** speakers**集合被选中用于迁移。此外,更新**吞吐量**自`400`两个集合。
12. 在**Collection setting**选项卡,扩展**内容数据库**数据库,并确保这两个**会话**和** speakers**集合被选中用于迁移。此外,更新**Throughput**自`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. 选择**下一篇:移民摘要>>**.
13. 选择**Next: Migration summary >>**.
14. 在**迁移摘要**选项卡,输入`MigrateData`在**活动Name**字段,然后选择**开始迁移**启动MongoDB数据迁移到Azure Cosmos 数据库。
14. 在**Migration summary**选项卡,输入`MigrateData`在**Activity name**字段,然后选择**Start migration**启动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")
15. 将显示迁移活动的状态。迁移只需几秒钟就完成。选择**刷新**重新加载状态,以确保它显示一个**地位**之**完成**.
15. 将显示迁移活动的状态。迁移只需几秒钟就完成。选择**Refresh**重新加载状态,以确保它的**Status**显示**Complete**.
![The screenshot shows the MigrateData activity showing the status has completed.](media/dms-migrate-complete.png "MigrateData activity completed")
16. 要验证数据已迁移,请导航到** Cosmos 数据库帐户**对于Azure门户内的实验然后选择**数据资源管理器**.你会看到`speakers`和`sessions`集合内列出`contentdb`数据库,你将能够探索里面的文件。
16. 要验证数据已迁移,请导航到**Cosmos DB Account**对于Azure门户内的实验然后选择**Data Explorer**.你会看到`speakers`和`sessions`集合内列出`contentdb`数据库,你将能够探索里面的文件。
![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")
## <a id="exercise-3-deploy-the-solution-to-azure-kubernetes-service">练习 3 将解决方案部署到Azure Kubernetes 服务</a>
**间**30分钟
**间**30分钟
在本练习中,您将连接到您在动手实验之前创建的 Azure Kubernetes 服务集群,并使用 Kubernetes 将 Docker 应用程序部署到集群中。
@ -1113,7 +1087,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
az account set --subscription {id}
```
2. 配置库比特尔以连接到Kubernetes集群
2. 配置kubectl以连接到Kubernetes集群
```bash
az aks get-credentials -a --name fabmedical-SUFFIX --resource-group fabmedical-SUFFIX
@ -1131,11 +1105,11 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
在此任务中,您将使用 Azure 门户将 API 应用程序部署到 Azure Kubernetes 服务集群。
1. 我们首先需要为我们的 API 定义服务,以便在集群中访问应用程序。在 Azure 门户中的 AKS 面板中选择**服务和入口**并在服务选项卡上选择**+ 添加**.
1. 我们首先需要为我们的 API 定义服务,以便在集群中访问应用程序。在 Azure 门户中的 AKS 面板中选择**Services and ingresses**并在服务选项卡上选择**+ Add**.
![This is a screenshot of the Azure Portal for AKS showing adding a Service.](media/2021-03-25-17-04-04.png "Add a Service")
2. 在**添加与雅姆勒**屏幕粘贴以下YAML并选择**加**.
2. 在**Add with YAML**屏幕粘贴以下YAML并选择**Add**.
```yaml
apiVersion: v1
@ -1156,15 +1130,15 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
type: ClusterIP
```
3. 现在选择**工作量**下**Kubernetes资源**左导航部分
3. 现在左导航部分选择**Kubernetes resources**下**Workloads**
![Select workloads under Kubernetes resources.](media/2021-03-25-17-04-35.png "Select workloads under Kubernetes resources")
4. 从工作负载视图,与**部署**选择(默认值),然后选择**+ 添加**.
4. 从Workloads视图与**Deployments**选择(默认值),然后选择**+ Add**.
![Selecting + Add to create a deployment.](media/2021-03-25-17-05-05.png "Selecing + Add to create a deployment")
5. 在**添加与雅姆勒**加载粘贴以下YAML并更新的屏幕`[LOGINSERVER]`具有ACR实例Name的占位符。
5. 在**Add with YAML**加载粘贴以下YAML并更新的屏幕`[LOGINSERVER]`具有ACR实例Name的占位符。
```yaml
apiVersion: apps/v1
@ -1220,11 +1194,11 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
terminationGracePeriodSeconds: 30
```
6. 选择****启动部署。这可能需要几分钟的时间,之后您将看到列出的部署。
6. 选择**Add**启动部署。这可能需要几分钟的时间,之后您将看到列出的部署。
![Service is showing as unhealthy](media/2021-03-25-17-05-36.png "Service is showing as unhealthy")
7. 选择**应用程序接口**部署以打开部署,选择**实时日志**然后从下降的池。过了一会儿,实时日志应该会出现。
7. 选择**api**部署以打开部署,接着选择**Live logs**然后从下拉菜单选择Pod。过了一会儿,实时日志应该会出现。
![Service is showing as unhealthy](media/2021-03-25-17-06-09.png "Service is showing as unhealthy")
@ -1238,21 +1212,21 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![This is a screenshot of the Azure Portal showing the Cosmos DB among existing resources.](media/Ex2-Task1.9.png "Select CosmosDB resource from list")
10. 下**快速启动**选择**node.js**选项卡和复制**node.js 3.0 连接字符串**.
10. 在**Quick Start**下选择**Node.j**选项卡,复制**Node.js 3.0 connection string**.
![This is a screenshot of the Azure Portal showing the quick start for setting up Cosmos DB with MongoDB API. The copy button is highlighted.](media/Ex2-Task1.10.png "Capture CosmosDB connection string")
11. 通过添加数据库修改复制的连接字符串`contentdb`到网址,以及复制集`globaldb`.生成的连接字符串应看起来像下面的示例。请注意,您可能需要修改端点 URL。
11. 通过添加数据库修改复制的Connection String`contentdb`到网址,以及复制集`globaldb`.生成的Connection String应看起来像下面的示例。请注意您可能需要修改Endpoints URL。
> **注意**用户名和密码经过简略编辑。
> **注意**USERNAME和password经过简略编辑。
```text
mongodb://<USERNAME>:<PASSWORD>@fabmedical-<SUFFIX>.documents.azure.com:10255/contentdb?ssl=true&replicaSet=globaldb
```
12. 您将设置一个Kubernetes的secret来存储连接字符串并配置`content-api`申请访问secret。首先您必须根据64编码secret值。打开 Azure Cloud Shell窗口使用以下命令编码连接字符串,然后复制输出。
12. 您将设置一个Kubernetes的secret来存储Connection String并配置`content-api`申请访问secret。首先您必须根据64编码secret值。打开 Azure Cloud Shell窗口使用以下命令编码Connection String,然后复制输出。
> **注意**连接字符串周围的双引号需要成功生成所需的输出。
> **注意**Connection String周围的双引号需要成功生成所需的输出。
```bash
echo -n "[CONNECTION STRING VALUE]" | base64 -w 0 - | echo $(</dev/stdin)
@ -1260,9 +1234,9 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![This is a screenshot of the Azure cloud shell window showing the command to create the base64 encoded secret. The output to copy is highlighted.](media/hol-2019-10-18_07-12-13.png "Show encoded secret")
13. 返回到 Azure 门户中的 AKS 面板并进行选择**配置**下**Kubernetes资源**部分。选择**secret**并选择**+ 添加**.
13. 返回到 Azure 门户中的 AKS 面板并在**Kubernetes资源**部分选择**Configuration**。选择**secret**并选择**+ Add**.
14. 在**添加与雅姆勒**屏幕粘贴以下YAML并取代占位符从你的剪贴板编码连接字符串并选择**加**.请注意YAML 对位置敏感,因此您必须在键入或粘贴时确保凹痕正确。
14. 在**Add with YAML**屏幕粘贴以下YAML并取代占位符从你的剪贴板编码Connection String并选择**Add**.请注意YAML 对位置敏感,因此您必须在键入或粘贴时确保凹痕正确。
```yaml
apiVersion: v1
@ -1280,7 +1254,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![This is a screenshot of the Azure Portal for AKS showing secrets.](media/find-cosmosdb-secret.png "Manage Kubernetes secrets")
16. 查看详情** Cosmos 德布**secret通过选择它在列表中
16. 通过在列表中选择**cosmosdb**来查看它的密钥的详细信息。
![This is a screenshot of the Azure Portal for AKS showing the value of a secret.](media/2021-03-25-17-08-54.png "View cosmosdb secret")
@ -1328,9 +1302,9 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
在此任务中,使用部署 Web 服务`kubectl`.
1. 打开一个**new**AzureCloud Shell控制台。
1. 打开一个**新**的AzureCloud Shell控制台。
2. 创建一个名为"文本文件"的文件`web.deployment.yml`使用AzureCloud Shell
2. 使用AzureCloud Shell创建一个名为`web.deployment.yml`的"文本文件"
编辑 器。
```bash
@ -1400,16 +1374,15 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
4. 更新`[LOGINSERVER]`条目以匹配您的ACR登录服务器的Name。
5. 选择**...**按钮并选择**Save**.
5. 选择 **...** 按钮并选择**Save**.
![In this screenshot of an Azure Cloud Shell editor window, the ... button has been selected and the Save option is highlighted.](media/b4-image62.png "Save Azure Cloud Shell changes")
6. 选择**...**再次按钮并选择**Close Editor**.
6. 选择 **...**再次按钮并选择**Close Editor**.
![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 "Close Azure Cloud Editor")
7. 创建一个名为"文本文件"的文件`web.service.yml`使用AzureCloud Shell
编辑 器。
7. 使用AzureCloud Shell创建一个名为`web.service.yml`的"文本文件"。
```bash
code web.service.yml
@ -1448,7 +1421,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot of the console, kubectl apply -f kubernetes-web.yaml has been typed and run at the command prompt. Messages about web deployment and web service creation appear below.](media/image93.png "kubectl create application")
11. 返回到 Azure 门户中的 AKS 面板。从导航菜单,下**Kubernetes资源**,选择**服务和入口**视图。您应该能够通过外部端点访问网站。
11. 返回到 Azure 门户中的 AKS 面板。从导航菜单,**Kubernetes resources**下,选择**Services and ingresses**视图。您应该能够通过外部Endpoints访问网站。
![AKS services and ingresses shown with External IP highlighted](media/aks-resources-services-ingresses-view.png "AKS services and ingresses shown with External IP highlighted")
@ -1462,27 +1435,27 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
您将配置一个Helm Chart用于部署和配置**内容网**容器镜像到Kubernetes。这是一种可用于更轻松地在 Azure Kubernetes 集群上部署和管理应用程序的技术。
1. 从 Azure 门户中的 AKS 面板,下**Kubernetes资源**选择**工作量**.
1. 从 Azure 门户中的 AKS 面板,下**Kubernetes资源**选择**Workloads**.
2. 选择`web`部署,然后选择**删除**.提示时,请检查**确认删除**并选择**删除**再
2. 选择`web`部署,然后选择**Delete**.提示时,请检查**Confirm delete**并再选择**Delete**
![A screenshot of the Kubernetes management dashboard showing how to delete a deployment.](media/2021-03-26-16-42-03.png "Kubernetes dashboard web deployments")
3. 从 Azure 门户中的 AKS 面板,下**Kubernetes资源**选择**服务和入口**.
3. 从 Azure 门户中的 AKS 面板,**Kubernetes resources**下选择**ervices and ingresses**.
4. 选择`web`服务,然后选择**删除**.提示时,请检查**确认删除**并选择**删除**再。
4. 选择`web`服务,然后选择**Delete**.提示时,请检查**Confirm delete**并选择**Delete**再。
![A screenshot of the Kubernetes management dashboard showing how to delete a deployment.](media/2021-03-26-16-43-29.png "Kubernetes delete deployment")
5. 打开一个**new**AzureCloud Shell。
5. 打开一个*新**的AzureCloud Shell。
6. 克隆您的晶圆厂医学存储库(用存储库的 URL 替换 URL
6. 克隆您的fabmedical存储库用您的存储库的 URL 替换 下列URL
```bash
git clone https://github.com/USER_NAME/fabmedical.git
```
7. 我们将使用`helm create`命令脚手架出一个图表实现,我们可以建立。使用以下命令创建名为"新图表"`web`在新的目录中(用克隆创建的目录替换"晶圆厂"
7. 我们将使用“ helm create”命令来构建图表实现。 使用以下命令在新目录中创建一个名为“ web”的新图表用克隆创建的目录替换“ fabmedical”
```bash
cd fabmedical
@ -1492,7 +1465,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
helm create web
```
8. 我们现在需要更新生成的脚手架,以符合我们的要求。我们将首先更新所命名的文件`values.yaml`.
8. 我们现在需要更新图表,以符合我们的要求。我们将首先更新所命名的文件`values.yaml`.
```bash
cd web
@ -1507,7 +1480,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
pullPolicy: Always
```
10. 寻找`nameOverride`和`fullnameOverride`条目并更新值,以便它们匹配以下内容:
10. 寻找`nameOverride`和`fullnameOverride`条目并更新它的值,以便它们匹配以下内容:
```yaml
nameOverride: "web"
@ -1522,7 +1495,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
port: 80
```
12. 搜索`resources`定义和更新值,以便它们与以下值匹配。您正在删除卷曲的大括号并添加`requests`(请务必删除{}字符后`resource:`节点
12. 搜索`resources`定义和更新值,以便它们与以下值匹配。您正在删除curl的大括号并添加`requests`(请务必删除{}字符后`resource:`node
```yaml
resources:
@ -1626,7 +1599,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot of the console, helm install web ./web has been typed and run at the command prompt. Messages about web deployment and web service creation appear below.](media/Ex2-Task4.24.png "Helm web deployment messages")
24. 返回打开Azure门户的浏览器。从导航菜单中选择**服务和入口**.您将看到部署哪个部署可能需要几分钟的 Web 服务。完成后,您应该能够通过外部端点访问网站。
24. 返回打开Azure门户的浏览器。从导航菜单中选择**Services and ingresses**.您将看到部署哪个部署可能需要几分钟的 Web 服务。完成后,您应该能够通过外部Endpoints访问网站。
![In the AKS Services and ingresses blade in the Azure Portal showing the web service selected.](media/2021-03-26-16-44-18.png "Web service endpoint")
@ -1703,7 +1676,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
cat ~/.kube/config
```
5. 在GitHub返回到**Fabmedical**存储库屏幕,选择**设置**选项卡,选择**secret**从左菜单,然后选择**New secret**按钮。
5. 在GitHub返回到**Fabmedical**存储库屏幕,选择**Settings**选项卡,选择**secret**从左菜单,然后选择**New secret**按钮。
6. 创建一个新的 GitHub secret与Name`KUBECONFIG`并粘贴在内容`~/.kube/config`以前复制的文件。
@ -1760,7 +1733,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
10. 切换回GitHub。
11. 在**内容网**工作流,选择**运行工作流**并手动触发工作流执行。
11. 在**content-web**工作流,选择**Run workflow**并手动触发工作流执行。
![The content-web Action is shown with the Actions, content-web, and Run workflow links highlighted.](media/2020-08-25-15-38-06.png "content-web workflow")
@ -1768,7 +1741,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")
### <a id="task-6-review-azure-monitor-for-containers">任务 6审查容器的Azure监视器</a>
### <a id="task-6-review-azure-monitor-for-containers">任务 6查看Azure Monitor 关于容器的信息</a>
在此任务中,您将访问和查看 Azure 监视器为容器提供的各种日志和仪表板。
@ -1776,7 +1749,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot, the resource group was previously selected and the AKS cluster is selected.](media/Ex2-Task8.1.png "Select fabmedical resource group")
2. 从监控面板中选择**见解**.
2. 从监控面板中选择**Insights**.
![In the Monitoring blade, Insights is highlighted.](media/Ex2-Task8.2.png "Select Insights link")
@ -1784,11 +1757,11 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot, the dashboards and blades are shown. Cluster metrics can be reviewed.](media/Ex2-Task8.3.png "Review the dashboard metrics")
4. 要查看容器仪表板并查看有关每个容器的详细信息,请选择**器皿**标签。
4. 要查看容器仪表板并查看有关每个容器的详细信息,请选择**Containers**标签。
![In this screenshot, the various containers information is shown.](media/monitor_1.png "View containers data")
5. 现在按容器Name进行筛选并搜索****容器中您将看到Kubernetes斯集群中创建的所有容器其中带有吊舱Name。
5. 现在按容器Name进行筛选并搜索**web**容器中您将看到Kubernetes斯集群中创建的所有容器其中带有吊舱Name。
![In this screenshot, the containers are filtered by container named web.](media/monitor_3.png "Filter data by container and web")
@ -1800,7 +1773,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![In this screenshot, the pod cpu usage details are shown.](media/monitor_4.png "POD CPU details")
8. 要显示任何容器的日志,只需选择它并查看正确的面板,您就会找到"查看容器日志"选项,该选项将列出此特定容器的所有日志。
8. 要显示任何容器的日志,只需选择它并查看正确的面板,您就会找到"View container logs"选项,该选项将列出此特定容器的所有日志。
![In the View in Analytics dropdown, the View container logs item is selected.](media/monitor_5.png "View container logs menu option")
@ -1820,9 +1793,9 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
在此任务中,您将增加 AKS Azure 门户面板中 API 部署的实例数。在部署时,您将观察不断变化的状态。
1. 在 Azure 门户中的 AKS 面板中选择**工作量**然后选择**应用程序接口**部署。
1. 在 Azure 门户中的 AKS 面板中选择**Workloads**然后选择**应用程序接口**部署。
2. 选择**亚米尔**在窗口中加载并向下滚动,直到您找到**副本**.将复制品数量更改为**2**,然后选择**评论 + 保存**.提示时,请检查**确认显性更改**并选择**Save**.
2. 选择**YAML**在窗口中加载并向下滚动,直到您找到**副本**.将复制品数量更改为**2**,然后选择**Review + save**.提示时,请检查**确认显性更改**并选择**Save**.
![In the edit YAML dialog, 2 is entered in the desired number of replicas.](media/2021-03-26-16-49-32.png "Setting replicas to 2")
@ -1832,11 +1805,11 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
![Replica Sets is selected under Workloads in the navigation menu on the left, and at right, Pods status: 1 pending, 1 running is highlighted. Below that, a red arrow points at the API deployment in the Pods box.](media/api-replica-set.png "View replica details")
4. 从导航菜单中选择**工作量**.请注意api 部署具有警报并显示2个实例中的1个吊舱计数如上所示`1/2`).
4. 从导航菜单中选择**Workloads**.请注意api 部署具有警报并显示2个实例中的1个吊舱计数如上所示`1/2`).
![In the Deployments box, the api service is highlighted with a grey timer icon at left and a pod count of 1/2 listed at right.](media/2021-03-26-16-50-38.png "View api active pods")
> **注意**如果您收到有关CPU不足的错误则可以。我们将在下一个任务中查看如何处理此问题(提示:您可以使用**见解**选项在 AKS Azure门户中查看**节点**状态并查看Kubernetes事件日志
> **注意**如果您收到有关CPU不足的错误没关系。我们将在下一个任务中查看如何处理此问题(提示:您可以使用**见解**选项在 AKS Azure门户中查看**节点**状态并查看Kubernetes事件日志
此时,以下是环境的健康概述:
@ -1846,33 +1819,33 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
- 在"默认"Name空间中两个吊舱是健康的。
5. 打开康托索神经会议网络应用程序。当您导航到" speakers"和"会话"页面时,应用程序仍应不出现任何错误。
5. 打开Contoso Neuro Conference网络应用程序。当您导航到" speakers"和"Sessions"页面时,应用程序仍应不出现任何错误。
- 导航到`/stats`页。您将看到有关托管环境的信息,包括:
- **网络塔斯凯德:**Web服务实例的任务标识符。
- **webTaskId:** Web服务实例的任务标识符。
- **任务Id**API 服务实例的任务标识符。
- **taskId:** API 服务实例的任务标识符。
- **主机名:**API 服务实例的主机名标识符。
- **hostName:** API 服务实例的HOST名标识符。
- **皮德:**API服务实例的进程ID。
- **pid:** API服务实例的进程ID。
- **模名:**从 API 服务实例返回的某些内存指标。
- **mem:** 从 API 服务实例返回的某些内存指标。
- **计数器:**服务本身的计数器,如 API 服务实例返回的计数器。
- **counters:** 服务本身的计数器,如 API 服务实例返回的计数器。
- **运行时间:**API服务的备份时间。
- **uptime:** API服务的备份时间。
### <a id="task-2-resolve-failed-provisioning-of-replicas">任务 2 解决replicas配置失败问题</a>
在此任务中,您将解决失败的 API 副本。这些故障的发生是由于集群无法满足所要求的资源。
1. 在 Azure 门户中的 AKS 面板中选择**工作量**然后选择**应用程序接口**部署。选择**亚米尔**导航项目。
1. 在 Azure 门户中的 AKS 面板中选择**Workloads**然后选择**API**部署。选择**YAML**导航项目。
2. 在**亚米尔**屏幕向下滚动并更改以下项目:
2. 在**YAML**屏幕向下滚动并更改以下项目:
- 修改**港口**并删除**主机端口**.两个 Pods 无法映射到同一主机端口
- 修改**ports**并删除**hostPort**.两个 Pods 无法映射到同一hostPort
```yaml
ports:
@ -1880,7 +1853,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
protocol: TCP
```
- 修改**中央处理器**并将其设置为**100米**.CPU 在节点上的所有 Pods 之间分配。
- 修改**cpu**并将其设置为**100m**.CPU 在节点上的所有 Pods 之间分配。
```yaml
resources:
@ -1889,11 +1862,11 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
memory: 128Mi
```
选择**评论 + 保存**并且,当提示时,确认更改并选择**Save**.
选择**Review + save** 并且,当提示时,确认更改并选择**Save**.
![In the edit YAML dialog, showing two changes required.](media/2021-03-26-16-56-28.png "Modify deployment manifest")
3. 返回到**工作量**AKS Azure 门户上的主要视图,您现在将看到部署是健康的,有两个 Pods 在运行。
3. 在AKS Azure 门户上返回到**Workloads**的主要视图,您现在将看到部署是健康的,有两个 Pods 在运行。
![In the Workload view with the API deployment highlighted.](media/healthy-deployment.png "API deployment is now healthy")
@ -1901,7 +1874,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
在此任务中,您将重新启动容器并验证重新启动不会影响运行服务。
1. 打开示例 Web 应用程序并导航到如所示的"统计"页面。
1. 打开示例 Web 应用程序并导航到如所示的"Stats"页面。
![The Stats page is visible in this screenshot of the Contoso Neuro web application.](media/image123.png "Contoso web task details")
@ -1911,17 +1884,17 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
3. 几分钟后,您会发现 API 部署正在成功运行 4 个副本。
4. 加载 Web 应用程序统计页面后返回浏览器选项卡。一遍又一遍地刷新页面。您不会看到任何错误,但您将定期看到两个 api pod 实例之间的 api 主机Name更改。任务 ID 和 pid 也可能在两个 api 吊舱实例之间更改。
4. 加载 Web 应用程序统计页面后返回浏览器选项卡。一遍又一遍地刷新页面。您不会看到任何错误,但您将定期看到两个 api pod 实例之间的 api HOSTName更改。任务 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。
5. 刷新后足够的时间看到,`hostName`值正在改变,服务保持健康,您可以打开**Replica Sets**在Azure门户中查看API。
6. 在此视图中,您可以看到 Web 应用程序统计页面中显示的主机名值与正在运行的吊舱的吊舱Name匹配。
6. 在此视图中,您可以看到 Web 应用程序统计页面中显示的HOST名值与正在运行的吊舱的吊舱Name匹配。
![Viewing replica set in the Azure Portal.](media/2021-03-26-17-31-02.png "Viewing replica set in the Azure Portal")
7. 随机选择两个吊舱并进行选择**删除**.
7. 随机选择两个吊舱并进行选择**Delete**.
![The context menu for a pod in the pod list is expanded with the Delete item selected.](media/2021-03-26-17-31-31.png "Delete running pod instance")
@ -1931,45 +1904,45 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
9. 返回到 API 部署并将其缩减到`1`复制品。有关如果您不确定,请参阅上面的步骤 2了解如何做到这一点。
10. 返回浏览器中的示例网站的统计页面并刷新,同时 Kubernetes 正在缩减 Pods 的数量。您会注意到仅显示一个 API 主机Name即使您可能仍然会在 API 复制器设置视图中看到几个运行吊舱。即使有几个吊舱正在运行Kubernetes 将不再将流量发送到它选择终止的吊舱。稍后API 复制器设置视图中将只显示一个吊舱。
10. 返回浏览器中的示例网站的统计页面并刷新,同时 Kubernetes 正在缩减 Pods 的数量。您会注意到仅显示一个 API HOSTName即使您可能仍然会在 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")
### <a id="task-4-configure-cosmos-db-autoscale">任务4配置 Cosmos DB自动规模</a>
### <a id="task-4-configure-cosmos-db-autoscale">任务4配置 Cosmos DB自动Scale</a>
在此任务中您将在Azure Cosmos 数据库上设置自动缩放
在此任务中您将在Azure Cosmos 数据库上设置Autoscale
1. 在 Azure 门户中,导航到`fabmedical-[SUFFIX]` **Azure Cosmos 数据库帐户**.
1. 在 Azure 门户中,导航到`fabmedical-[SUFFIX]` **Azure Cosmos DB account**.
2. 选择**数据资源管理器**.
2. 选择**Data Explorer**.
3. 在**数据资源管理器**,扩大`contentdb`数据库,然后扩展`sessions`收集。
3. 在**Data Explorer**,扩大`contentdb`数据库,然后扩展`sessions`收集。
4. 下`sessions`收集、选择**缩放和设置**.
4. 下`sessions`收集、选择**Scale & Settings**.
5. 在**缩放和设置**选择**自动缩放**对于**吞吐量**设置下**规模**.
5. 在**Scale & Settings**选择**Autoscale**,对于**Throughput**Settings**Scale**.
![The screenshot displays Cosmos DB Scale and 设置 tab with Autoscale selected](media/cosmosdb-autoscale.png "CosmosDB collection scale and 设置")
6. 选择**Save**.
7. 执行相同的任务以启用**自动缩放**吞吐量`speakers`收集。
7. 执行相同的任务以启用**Autoscale**Throughput`speakers`收集。
### <a id="task-5-test-cosmos-db-autoscale">任务5测试 Cosmos DB自动规模</a>
### <a id="task-5-test-cosmos-db-autoscale">任务5测试 Cosmos DB自动Scale</a>
在此任务中,您将运行一个性能测试脚本,将测试 Azure Cosmos DB 的自动规模功能,以便您看到它现在将扩展到大于 400 RU/s。
在此任务中,您将运行一个性能测试脚本,将测试 Azure Cosmos DB 的自动Scale功能,以便您看到它现在将扩展到大于 400 RU/s。
1. 在 Azure 门户中,导航到`fabmedical-[SUFFIX]` ** Cosmos 数据库帐户**.
1. 在 Azure 门户中,导航到`fabmedical-[SUFFIX]` ** Cosmos DB account**.
2. 选择**连接字符串**下**设置**.
2. 选择**Connection String**下**Settings**.
3. 在**连接字符串**窗格,复制**主机**,**用户名**和**主要密码**值。保存这些供以后使用。
3. 在**Connection String**窗格,复制**HOST**,**USERNAME**和**PRIMARY PASSWORD**值。保存这些供以后使用。
![The Cosmos DB account Connection String pane with the fields to copy highlighted.](media/cosmos-connection-string-pane.png "View CosmosDB connection string")
4. 打开AzureCloud Shell**嘘**到**生成代理 VM**.
4. 打开AzureCloud Shell**SSH**到**Build agent VM**.
5. 在**生成代理 VM**,导航到`~/Fabmedical`目录。
5. 在**Build agent VM**,导航到`~/Fabmedical`目录。
```bash
cd ~/Fabmedical
@ -1981,7 +1954,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
vi perftest.sh
```
7. 有几个变量在顶部宣布`perftest.sh`脚本。修改**主机**,**用户名**和**密码**变量通过将其值设置为以前复制的相应 Cosmos DB连接字符串值。
7. 有几个变量在顶部宣布`perftest.sh`脚本。修改**HOST**,**USERNAME**和**password**变量通过将其值设置为以前复制的相应 Cosmos DBConnection String值。
![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")
@ -1995,13 +1968,13 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
> **注意:**脚本需要一分钟才能完成执行。
10. 脚本完成后,导航返回到** Cosmos 数据库帐户**在Azure门户
10. 脚本完成后, 在Azure门户导航返回到 **Cosmos DB account**
11. 向下滚动**概述**窗格的** Cosmos 数据库帐户**面板,并找到**请求费用**图。
11. 向下滚动**Overview**窗格的**Cosmos DB account**面板,并找到**Request Charge**图。
> **注意:** Cosmos DB集合上的活动可能需要2-5分钟才能显示在活动日志中。等待几分钟然后刷新窗格如果最近的请求费用没有出现在现在。
> **注意:** Cosmos DB集合上的活动可能需要2-5分钟才能显示在活动日志中。等待几分钟然后刷新窗格如果最近的Request charge用没有出现在现在。
12. 请注意,**请求费**现在显示有活动上的** Cosmos 数据库帐户**超过了自动刻度打开之前设定的 400 RU/s 限制。
12. 请注意,**Request charge**现在显示有活动上的**Cosmos DB account**超过了自动刻度打开之前设定的 400 RU/s 限制。
![The screenshot shows the Cosmos DB request charge graph showing recent activity from performance test](media/cosmos-request-charge.png "Recent CosmosDB activity graph")
@ -2009,7 +1982,7 @@ Web 应用程序容器将调用 API 应用程序容器暴露的端点API 应
**期间**1小时
在之前的练习中,我们对服务的规模属性进行了限制。在本练习中,您将配置 api 部署,以创建使用动态端口映射来消除规模活动期间端口资源限制的吊舱。
在之前的练习中,我们对服务的Scale属性进行了限制。在本练习中,您将配置 api 部署,以创建使用动态端口映射来消除Scale活动期间端口资源限制的吊舱。
Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一代理节点上运行多个吊舱实例,---配置特定静态端口(如 API 服务的 3001时无法实现的状态。
@ -2017,35 +1990,35 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
在此任务中,您将更新 Web 服务,以便它通过 Azure 负载平衡器支持动态发现。
1. 从 AKS**Kubernetes资源**菜单,选择**部署**下**工作量**.从列表中选择**蹼**部署。
1. 从 AKS**Kubernetes资源**菜单,选择**部署**下**Workloads**.从列表中选择**web**部署。
2. 选择**亚米尔**,然后选择**杰森**标签。
2. 选择**YAML**,然后选择**JSON**标签。
3. 首先定位复制节点并更新所需的计数`4`.
4. 接下来,滚动到屏幕截图中显示的 Web 容器规格。删除主机端口条目以进行 Web 容器的端口映射。
4. 接下来,滚动到屏幕截图中显示的 Web 容器规格。删除hostPort条目以进行 Web 容器的端口映射。
![This is a screenshot of the Edit a Deployment dialog box with various displayed information about spec, containers, ports, and env. The ports node, containerPort: 3001 and protocol: TCP are highlighted.](media/2021-03-26-18-22-39.png "Remove web container hostPort entry")
5. 选择**评论 + 保存**然后确认更改和**Save**.
5. 选择**Review + save**然后确认更改和**Save**.
6. 通过刷新 Web 部署的视图来检查扩展的状态。从导航菜单中选择**豆荚**从下工作负载。选择**蹼**豆荚。从此视图中,您应该会看到以下屏幕截图中显示的类似错误。
6. 通过刷新 Web 部署的视图来检查扩展的状态。从导航菜单Workloads下中选择**Pods**。选择**web**Pods。从此视图中,您应该会看到以下屏幕截图中显示的类似错误。
![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 部署使用固定部署_主机端口_并且您的缩放能力受可用代理节点数量的限制。但是在通过删除_主机端口_设置时由于 CPU 限制Web 部署仍无法缩放过去两个吊舱。部署请求的 CPU 比 Web 应用程序需要的要多,因此您将在下一个任务中修复此限制。
与 API 部署一样Web 部署使用固定部署_hostPort_并且您的缩放能力受可用代理节点数量的限制。但是在通过删除_hostPort_设置时由于 CPU 限制Web 部署仍无法缩放过去两个吊舱。部署请求的 CPU 比 Web 应用程序需要的要多,因此您将在下一个任务中修复此限制。
### <a id="task-2-adjust-cpu-constraints-to-improve-scale">任务2调整CPU约束提高规模</a>
### <a id="task-2-adjust-cpu-constraints-to-improve-scale">任务2调整CPU约束提高Scale</a>
在此任务中,您将修改 Web 服务的 CPU 要求,以便它可以扩展到更多实例。
1. 重新打开用于 Web 部署的 JSON 视图,然后找到**中央处理器**Web容器的资源要求。将此值更改为`125m`.
1. 重新打开用于 Web 部署的 JSON 视图,然后找到**cpu**Web容器的资源要求。将此值更改为`125m`.
![This is a screenshot of the Edit a Deployment dialog box with various displayed information about ports, env, and resources. The resources node, with cpu: 125m selected, is highlighted.](media/2021-03-26-18-24-06.png "Change cpu value")
2. 选择**评论 + 保存**,确认更改,然后选择**Save**更新部署。
2. 选择**Review + save**,确认更改,然后选择**Save**更新部署。
3. 从导航菜单中选择**复制套装**下**工作量**.从视图的复制集列表中选择 Web 副本集。
3. 从导航菜单中选择**Replica Sets**下**Workloads**.从视图的复制集列表中选择 Web 副本集。
4. 部署更新完成后,应以运行状态显示四个 Web 吊舱。
@ -2102,7 +2075,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
8. 当此更新运行时,返回浏览器中的 Azure 门户。
9. 从导航菜单中选择**复制套装**下**工作量**.从此视图中,您将看到为 Web 设置的新副本,该副本可能仍在部署过程中(如下图所示)或已完全部署。
9. 从导航菜单中选择**Replica Sets**下**Workloads**.从此视图中,您将看到为 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")
@ -2149,7 +2122,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
--set controller.admissionWebhooks.patch.nodeSelector."beta\.kubernetes\.io/os"=linux
```
5. 在Azure门户下**服务和入口**复制IP Address**外部 IP**对于`nginx-ingress-RANDOM-nginx-ingress`服务。
5. 在Azure门户下**Services and ingresses**复制IP Address**External IP**对于`nginx-ingress-RANDOM-nginx-ingress`服务。
![A screenshot of the Kubernetes management dashboard showing the ingress controller 设置.](media/2021-03-26-18-26-13.png "Copy ingress controller 设置")
@ -2359,7 +2332,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
kubectl create --save-config=true -f content.ingress.yml
```
21. 刷新浏览器中的入口端点。您应该能够访问 speakers和会话页面并查看所有内容。
21. 刷新浏览器中的入口Endpoints。您应该能够访问 speakers和会话页面并查看所有内容。
22. 直接访问 API通过导航到`/content-api/sessions`在入口终点。
@ -2373,13 +2346,13 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
在此任务中,您将设置 Azure 流量管理器作为多区域负载平衡器。这将使您能够在辅助 Azure 区域中提供应用的 AKS 实例,并在两个区域之间实现负载平衡。
1. 在 Azure 门户内,请选择**+ 创建资源**.
1. 在 Azure 门户内,请选择**+ Create a resource**.
2. 搜索市场**流量管理器配置文件**,选择此资源类型,然后选择**创造**.
2. 搜索市场**Traffic Manager profile**,选择此资源类型,然后选择**Create**.
![The screenshot shows Traffic Manager profile in the Azure marketplace.](media/tm-marketplace.png "Traffic Manager profile")
3. 在**创建流量管理器配置文件**面板,输入以下值,然后选择**创造**.
3. 在**创建Traffic Manager profile**面板,输入以下值,然后选择**Create**.
- Name'法布医疗-[后缀]'
- 路由方法:**性能**
@ -2387,32 +2360,32 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
![The screenshot shows the Create Traffic Manager profile blade with all values entered.](media/tm-create.png "Create Traffic Manager profile configuration")
4. 导航到新创建的`fabmedical-[SUFFIX]` **流量管理器配置文件**.
4. 导航到新创建的`fabmedical-[SUFFIX]` **Traffic Manager profile**.
5. 在**流量管理器配置文件**面板,选择**端点**下**设置**.
5. 在**Traffic Manager profile**面板,选择**Endpoints**下**Settings**.
6. 在**端点**窗格,选择**+ 添加**添加一个新的端点进行负载平衡。
6. 在**Endpoints**窗格,选择 **+ Add**添加一个新的Endpoints进行负载平衡。
7. 在**添加端点**窗格,输入新端点的以下值,然后选择**加**.
7. 在**添加Endpoints**窗格输入新Endpoints的以下值然后选择**Add**.
- 类型:**外部端点**
- 名字`primary`
- 完全合格的域名 FQDN 或 IP`fabmedical-[SUFFIX]-ingress.[AZURE-REGION].cloudapp.azure.com`
- 位置:选择与 AKS 相同的Azure区域。
- Type**External endpoint**
- Name`primary`
- Fully-qualified domain name (FQDN) 或 IP`fabmedical-[SUFFIX]-ingress.[AZURE-REGION].cloudapp.azure.com`
- Location:选择与 AKS 相同的Azure区域。
请务必更换`[SUFFIX]`和`[AZURE-REGION]`占位符。
![Add endpoint configuration pane with values entered.](media/tm-add-endpoint-primary.png "Add endpoint configuration")
8. 请注意列表**端点**现在显示**主要**已添加的端点
8. 请注意列表**Endpoints**现在显示**primary**已添加的Endpoints
9. 在**流量管理器配置文件**面板,选择**概述**.
9. 在**Traffic Manager profile**面板,选择**Overview**.
10. 在**概述**窗格,复制**DNSName**用于流量管理器配置文件
10. 在**Overview**窗格,复制**DNSName**用于Traffic Manager profile
![The Traffic Manager profile overview pane with the DNS name highlighted](media/tm-overview.png "fabmedical Traffic Manager profile DNS name")
11. 导航回AzureCloud Shell。打开`content.ingress.yml`您以前创建的文件。将以下 YAML 代码附加到文件中。请保持适当的凹痕。这些 YAML 语句将确保将来自流量管理器配置文件的请求路由到正确的服务。
11. 导航回AzureCloud Shell。打开`content.ingress.yml`您以前创建的文件。将以下 YAML 代码附加到文件中。请保持适当的凹痕。这些 YAML 语句将确保将来自Traffic Manager profile的请求路由到正确的服务。
```yaml
- host: fabmedical-cnr.trafficmanager.net
@ -2428,11 +2401,11 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
servicePort: 3001
```
12. 打开新的 Web 浏览器选项卡并导航到流量管理器配置文件**DNSName**只是复制。
12. 打开新的 Web 浏览器选项卡并导航到Traffic Manager profile**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 中设置多区域托管应用程序时,您将在另一个 Azure 区域设置辅助 AKS然后将其终点添加到其流量管理器配置文件中以实现负载平衡。
13. 在 AKS 中设置多区域托管应用程序时,您将在另一个 Azure 区域设置辅助 AKS然后将其终点添加到其Traffic Manager profile中以实现负载平衡。
> **注意:**如果您愿意,您可以自行设置辅助 AKS 和康托索神经网站实例。设置该步骤的步骤与您在此实验中为设置主 AKS 和应用实例而经历的大多数步骤相同。
@ -2444,7 +2417,7 @@ Kubernetes 服务可以发现分配给每个吊舱的端口,允许您在同一
1. 删除您放置所有 Azure 资源的资源组。
- 从门户,导航到您的面板**资源集团**然后选择**删除**在顶部的命令栏中。
- 从门户,导航到您的面板**Resource Group**然后选择**Delete**在顶部的命令栏中。
- 通过重新键入资源组Name并选择"删除"来确认删除。

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

@ -4,7 +4,7 @@
# 云原生应用
法布里卡姆医疗会议提供会议网站服务,专为医疗界量身定做。他们的业务已经增长,许多情况下的代码基础和每个租户的变化周期的管理已经失控。
Fabrikam医疗会议提供会议网站服务,专为医疗界量身定做。他们的业务已经增长,许多情况下的代码基础和每个租户的变化周期的管理已经失控。
本研讨会的目标是帮助他们建立一个概念验证 POC将他们的代码迁移到一个更易于管理的过程包括租户代码的容器化、更好的 DevOps 工作流程以及数据库后端的简单提升和移位故事。

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

@ -68,7 +68,7 @@ Fabrikam的工程VP Arthur Block拥有一个由12名开发人员组成的团队
* 他们每年都会在每个会议上继续使用此管理站点。
* 他们可以添加每个新事件并在每个会议之间隔离发言人,会议,研讨会和其他详细信息。
* 租户的应用代码会议和管理网站被部署到一组特定的负载平衡Linux服务器。每组服务器托管一组特定的租户并且根据租户的规模要求进行分配。
* 租户的应用代码会议和管理网站被部署到一组特定的负载平衡Linux服务器。每组服务器托管一组特定的租户并且根据租户的Scale要求进行分配。
* 新会议流程被启用后,不可避免的要求更改网站页面,样式,注册要求以及任意数量的自定义请求。
Arthur痛苦地意识到这家小企业已经发展成为更大的企业已经有机地发展成为应该用于会议的完全多租户应用程序套件。但是团队很难达到这个目标。他们会不断地为每个租户更新代码并尽最大努力将改进内容合并到核心代码中以便用于召开新会议。变革的步伐很快预算很紧而且他们根本没有时间停止和重组核心代码库来支持客户所需的所有灵活性。
@ -84,7 +84,7 @@ Arthur希望朝着这个方向迈出一步并牢记以下目标
* 改善DevOps生命周期。
* 在会议的整个生命周期中,招募新租户,为现有租户启动新站点以及管理所有实时租户所花费的时间非常低效。
* 通过减速客户招募,管理已部署站点和监视运行状况的工作量,随着公司不断增长,公司可以控制成本和开销。这可能会留出时间来改善他们希望为长期增长而构建的多租户平台。
* 通过减速客户招募,管理已部署站点和监视运行状况的Workloads,随着公司不断增长,公司可以控制成本和开销。这可能会留出时间来改善他们希望为长期增长而构建的多租户平台。
* 增加对系统操作和运行状况的可见性。
@ -100,7 +100,7 @@ Arthur希望朝着这个方向迈出一步并牢记以下目标
* 使部署和管理基础架构变得容易。
* 提供工具以帮助他们监视和管理容器的运行状况和安全性。
* 使管理不同租户的可变规模要求变得更加容易,从而使他们不再需要将租户分配给特定的负载平衡机器集。
* 使管理不同租户的可变Scale要求变得更加容易,从而使他们不再需要将租户分配给特定的负载平衡机器集。
* 提供平台中立的解决方案,以使特定的内部部署或云环境不会成为新的依赖项。
5. 以最小的应用程序代码更改将数据从本地MongoDB迁移到Azure Cosmos DB。
@ -120,7 +120,7 @@ Arthur希望朝着这个方向迈出一步并牢记以下目标
**客户异议**
1. 有多种方法可以在Azure上部署Docker容器。这些选择如何比较每种选择的动机是什么
2. Azure中是否有一个选项可以提供易于管理和迁移到的容器编排平台功能还可以满足我们的规模和管理工作流要求?
2. Azure中是否有一个选项可以提供易于管理和迁移到的容器编排平台功能还可以满足我们的Scale和管理工作流要求?
3. 我们听说Azure Cosmos DB与MongoDB兼容。这将提供最小化代码更改的迁移吗
4. 我们知道Microsoft提供带有预先构建的AI模型的认知服务。哪些型号提供了我们希望用于增强会议网站的功能
@ -186,7 +186,7 @@ _容器发现和负载平衡_
_可伸缩性注意事项_
1. 向客户说明Azure Kubernetes服务AKS及其预先配置的缩放集如何支持群集自动缩放
1. 向客户说明Azure Kubernetes服务AKS及其预先配置的缩放集如何支持群集Autoscale
_自动化__DevOps__工作流程_
@ -247,11 +247,11 @@ AKS常见问题
[https://docs.microsoft.com/azure/aks/faq](https://docs.microsoft.com/azure/aks/faq)
自动缩放AKS
AutoscaleAKS
[https://github.com/kubernetes/autoscaler](https://github.com/kubernetes/autoscaler)
AKS群集自动缩放
AKS群集Autoscale
[https://docs.microsoft.com/azure/aks/cluster-autoscaler](https://docs.microsoft.com/azure/aks/cluster-autoscaler)

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

@ -210,7 +210,7 @@ o 他们每年都会在每个会议上继续使用此管理站点。
o 他们可以添加新事件并隔离发言人,会议,研讨会和其他详细信息。
· 租户的代码会议和管理网站被部署到专用于一个或多个租户的一组特定的负载平衡Linux服务器。每组计算机托管一组特定的租户并且根据租户的规模要求进行分配。
· 租户的代码会议和管理网站被部署到专用于一个或多个租户的一组特定的负载平衡Linux服务器。每组计算机托管一组特定的租户并且根据租户的Scale要求进行分配。
· 会议现场启用后,不可避免的要求更改网站页面,样式,注册要求以及任意数量的自定义请求。
@ -230,7 +230,7 @@ o 理想情况下,对单个区域的更改将不再需要对该站点进行完
o 在会议的整个生命周期中,招募新租户,为现有租户启动新站点以及管理所有实时租户所花费的时间非常低效。
o 通过减少吸引客户,管理已部署站点和监视运行状况的工作量,随着公司不断增长,公司可以控制成本和开销。这可能会留出时间来改善他们希望为长期增长而构建的多租户平台。
o 通过减少吸引客户,管理已部署站点和监视运行状况的Workloads,随着公司不断增长,公司可以控制成本和开销。这可能会留出时间来改善他们希望为长期增长而构建的多租户平台。
· 增加对系统操作和运行状况的可见性。
@ -250,7 +250,7 @@ o 使部署和管理基础架构变得容易。
o 提供工具以帮助他们监视和管理容器的运行状况和安全性。
o 使管理不同租户的可变规模要求变得更加容易,从而使他们不再需要将租户分配给特定的负载平衡机器集。
o 使管理不同租户的可变Scale要求变得更加容易,从而使他们不再需要将租户分配给特定的负载平衡机器集。
o 提供与供应商无关的解决方案,以使特定的内部部署或云环境不会成为新的依赖项。
@ -280,7 +280,7 @@ o 容器图像扫描。
1. 有多种方法可以在Azure上部署Docker容器。这些选择如何比较每种选择的动机是什么
2. Azure中是否有一个选项可以提供易于管理和迁移到的容器编排平台功能还可以满足我们的规模和管理工作流要求?
2. Azure中是否有一个选项可以提供易于管理和迁移到的容器编排平台功能还可以满足我们的Scale和管理工作流要求?
3. 我们听说Azure Cosmos DB与MongoDB兼容。这将提供最小化代码更改的迁移吗
@ -358,7 +358,7 @@ o 使用Kubernetes仪表板运行容器。
_可伸缩性注意事项_
1. 向客户说明Azure Kubernetes服务AKS及其预先配置的缩放集如何支持群集自动缩放
1. 向客户说明Azure Kubernetes服务AKS及其预先配置的缩放集如何支持群集Autoscale
_自动化__DevOps__工作流程_
@ -431,11 +431,11 @@ AKS常见问题
[https://docs.microsoft.com/azure/aks/faq](https://docs.microsoft.com/azure/aks/faq)
自动缩放AKS
AutoscaleAKS
[https://github.com/kubernetes/autoscaler](https://github.com/kubernetes/autoscaler)
AKS群集自动缩放
AKS群集Autoscale
[https://docs.microsoft.com/azure/aks/cluster-autoscaler](https://docs.microsoft.com/azure/aks/cluster-autoscaler)
@ -566,7 +566,7 @@ Azure Kubernetes服务AKS是在Azure上管理Kubernetes群集的最简单
**Azure****容器实例**
Azure容器实例提供了一种无服务器方法来按需并按比例运行容器从而为虚拟化管理程序隔离提供了安全性从而为选定的工作负载提供了额外的计算能力和弹性。
Azure容器实例提供了一种无服务器方法来按需并按比例运行容器从而为虚拟化管理程序隔离提供了安全性从而为选定的Workloads提供了额外的计算能力和弹性。
**容器的****Azure Web****应用**
@ -642,13 +642,13 @@ Kubernetes还无缝支持负载均衡服务而无需使其公开访问。来
4. 说明Azure Kubernetes服务AKS如何将请求路由到位于端口80/443上的同一节点上的多个网站容器
容器在Azure Kubernetes服务AKS群集中所有节点上的位置与调用客户端无关。客户端应用程序会将请求发送到特定的端点URL并期望它找到正确的容器实例来为该请求提供服务。容器路由是其中的重要组成部分。
容器在Azure Kubernetes服务AKS群集中所有节点上的位置与调用客户端无关。客户端应用程序会将请求发送到特定的EndpointsURL并期望它找到正确的容器实例来为该请求提供服务。容器路由是其中的重要组成部分。
Web应用程序和api服务容器绑定到其主机节点上的随机端口从而允许每个节点多个实例。Kubernetes支持动态服务端口发现并将在跨节点的所有实例之间进行选择以路由请求。
Web应用程序和api服务容器绑定到其HOST节点上的随机端口从而允许每个节点多个实例。Kubernetes支持动态服务端口发现并将在跨节点的所有实例之间进行选择以路由请求。
_可伸缩性注意事项_
1. 向客户说明Azure Kubernetes服务AKS如何支持群集自动缩放
1. 向客户说明Azure Kubernetes服务AKS如何支持群集Autoscale
从Kubernetes 1.10开始您可以使用Kubernetes Autoscaler扩展集群中的代理节点。
@ -681,7 +681,7 @@ o kubectl命令行工具用于使用远程Kubernetes API并协助自动化。
o 内置的动态服务发现简化了将新容器实例部署到负载平衡环境的过程。
2. Azure中是否有一个选项可以提供易于管理和迁移到的容器编排平台功能还可以满足我们的规模和管理工作流要求?
2. Azure中是否有一个选项可以提供易于管理和迁移到的容器编排平台功能还可以满足我们的Scale和管理工作流要求?
在Azure上迁移到容器的最简单方法是将容器部署到App Service的Linux自订阅容器。但是此选项不提供具有高度可定制的负载平衡动态服务发现以及用于容器监视的整体方法的全功能容器编排平台。