0Pricing
Cloud & IT Cert Prep · 课时

Azure Container Apps

通过 Dapr sidecar 集成将微服务应用部署到 Azure Container Apps,配置入口,并使用由 Service Bus 队列深度触发的基于 KEDA 的自动缩放。

Azure Container Apps 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。

什么是 Azure Container Apps?

Azure Container Apps (ACA) 是一种完全托管的无服务器容器托管服务,构建于 Kubernetes 和 KEDA(Kubernetes 事件驱动自动缩放)之上。与 AKS 不同,您无需直接管理控制平面、节点池或 Kubernetes 清单。相反,您可以使用简单的 CLI 或 YAML 定义来部署容器,而 Azure 会负责所有编排工作。ACA 非常适合微服务、API 后端、事件驱动的工作程序和后台处理作业,并且支持动态扩展,包括缩放到零。

Container Apps 环境

Container Apps 环境是一个隔离边界,一个或多个 Container Apps 在其中运行。同一环境中的所有应用共享同一个虚拟网络和 Log Analytics 工作区。环境属于某个区域和资源组。您可以部署多个环境,以隔离不同团队或阶段(生产环境与预演环境)。还可以选择将环境注入 VNet,使其进入您自己的虚拟网络,从而允许 Container Apps 与其他 Azure 服务之间进行私密通信,而无需经过公共互联网。

# Create a Container Apps environment
az containerapp env create \
  --name myACAEnvironment \
  --resource-group myRG \
  --location eastus

部署 Container App

要部署 Container App,您需要指定容器映像(来自 Azure Container Registry 或任何公共 Registry)、副本数以及环境变量。如果启用外部入口,应用就可以通过自动生成的 HTTPS URL 公开访问。入口配置包括目标端口、蓝绿部署的流量拆分,以及是否仅允许 HTTP 或 HTTPS。ACA 会在部署时提取映像;环境必须拥有从 Registry 提取映像的权限。

# Deploy a container app from Azure Container Registry
az containerapp create \
  --name myapi \
  --resource-group myRG \
  --environment myACAEnvironment \
  --image myacr.azurecr.io/myapi:latest \
  --target-port 8080 \
  --ingress external \
  --registry-server myacr.azurecr.io \
  --min-replicas 1 \
  --max-replicas 10

基于 KEDA 的自动缩放

Container Apps 使用基于外部指标触发的 KEDA 缩放器进行缩放。内置的 KEDA 缩放器包括:HTTP 流量(每个副本的并发请求数)、Azure Service Bus 队列深度(等待处理的消息数)、Azure Storage Queue、Cron(基于时间)以及 CPU/Memory。当缩放器指标降至零且 minReplicas 设置为 0 时,Container Apps 会缩放到零——在新请求到达之前不会产生计算成本。缩放到零非常适合工作负载间歇性出现的事件驱动工作程序。

# Scale based on Service Bus queue depth
az containerapp update \
  --name myworker \
  --resource-group myRG \
  --scale-rule-name sbqueue-scaler \
  --scale-rule-type azure-servicebus \
  --scale-rule-metadata 'queueName=orders' 'namespace=myservicebusns' 'messageCount=5' \
  --scale-rule-auth 'connection=servicebus-connection-secret:connection' \
  --min-replicas 0 \
  --max-replicas 20

Dapr 集成

Dapr(分布式应用程序运行时)是一种可移植的事件驱动运行时,可简化微服务的构建。Container Apps 原生集成了 Dapr,您只需通过一个标志即可为每个应用启用它。Dapr 提供以下构建块:服务调用(支持重试和 mTLS)、发布/订阅消息传递(抽象 Service Bus 和 Event Hubs)、状态管理(抽象 Redis 和 Cosmos DB)以及输出绑定。借助 Dapr,微服务可以通过 Dapr sidecar 进行通信,而无需了解底层基础设施的详细信息。

# Enable Dapr on a Container App
az containerapp update \
  --name myapi \
  --resource-group myRG \
  --enable-dapr \
  --dapr-app-id myapi \
  --dapr-app-port 8080 \
  --dapr-app-protocol http

修订和流量拆分

每次部署 Container App 都会创建一个新的修订版本。在多修订版本模式下,您可以在不同修订版本之间拆分流量,以进行蓝绿部署或金丝雀部署。例如,可以将 10% 的流量发送到新的修订版本,将 90% 的流量发送到当前稳定修订版本。在增加新修订版本的流量权重之前,请先监控其错误率和延迟,直到将流量权重提高到 100%。旧修订版本可以停用,但会保留在历史记录中,因此您可以通过将流量权重切回旧版本来立即回滚。

# Set traffic split between two revisions
az containerapp ingress traffic set \
  --name myapi \
  --resource-group myRG \
  --revision-weight myapi--abc123=90 myapi--def456=10

机密和环境变量

Container Apps 支持两种注入配置的方式:环境变量(用于功能标志或 API URL 等非敏感配置)和机密(用于连接字符串等敏感值)。机密存储在 Container App 级别,可通过环境变量或 Dapr 组件引用。为了实现最安全的设置,请使用托管标识从 Azure Key Vault 引用机密,这样机密值会在运行时获取,并且永远不会存储在 Container App 的配置平面中。

# Add a secret to a Container App
az containerapp secret set \
  --name myapi \
  --resource-group myRG \
  --secrets 'db-password=supersecretpassword'

# Reference the secret as an environment variable
az containerapp update \
  --name myapi \
  --resource-group myRG \
  --set-env-vars 'DB_PASSWORD=secretref:db-password'

作业:运行至完成的工作负载

Container Apps Jobs 扩展了平台功能,以支持运行至完成的工作负载——即启动、执行任务并退出的容器。作业支持三种触发类型:手动(通过 API 或 CLI 触发)、按计划(使用 cron 表达式)和事件驱动(KEDA scaler 触发每次执行)。作业仅按实际执行时间计费,非常适合批处理、报告生成、数据库迁移,以及按周期运行或响应事件运行的机器学习推理 pipeline。

# Create a scheduled Container Apps job (run every hour)
az containerapp job create \
  --name my-batch-job \
  --resource-group myRG \
  --environment myACAEnvironment \
  --trigger-type Schedule \
  --cron-expression '0 * * * *' \
  --image myacr.azurecr.io/batchjob:latest \
  --cpu 0.5 --memory 1Gi

可观测性:日志和指标

Container Apps 会将系统日志(修订版本创建、缩放等平台事件)和控制台日志(应用程序的 stdout/stderr)发送到附加到该环境的 Log Analytics 工作区。使用 KQL 查询日志:ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'myapi' | project TimeGenerated, Log_s。内置的Azure Monitor 指标包括每个副本的副本数、请求数、请求延迟以及 CPU/内存利用率,所有这些指标都可以在 Azure 门户中使用,无需任何额外配置。

# Stream live logs from a Container App
az containerapp logs show \
  --name myapi \
  --resource-group myRG \
  --follow

ACA、AKS 与 App Service

选择合适的 Azure 容器平台:对于微服务、事件驱动的工作进程和 API,如果您希望获得 Kubernetes 的优势而无需管理集群,Container Apps 是最佳选择,尤其适合需要缩放到零的场景。当您需要完全控制 Kubernetes、自定义运算符或特定节点配置(GPU、高内存)时,AKS 更合适。对于传统 Web 应用程序和 API,如果开发团队更偏好简单的 PaaS 模型而不想承担容器管理开销,App Service 是最佳选择。三者都支持容器,区别在于管理复杂性与控制程度之间的权衡。

网络:内部和外部入口

Container Apps 支持两种入口模式:外部(通过具有自动 TLS 的负载均衡 HTTPS 终结点从公共网络访问)和内部(只能从同一个 Container Apps 环境内部或 VNet 对等互连的资源访问)。内部入口用于绝不应暴露到互联网的后端服务。在同一环境中,应用可以使用自动生成的内部 DNS 名称 http://myapi 相互调用,从而无需部署 API 网关即可实现简单的服务间通信。

快速检查

测试您对本课中 Microsoft Azure Fundamentals (AZ-900) 概念的理解。

课程回顾

在本课中,您学到了:Azure Container Apps 基于 Kubernetes 和 KEDA 提供无服务器容器托管,无需管理集群;KEDA scalers 可根据队列深度、HTTP 流量或 cron 计划实现缩放到零;Dapr 集成 可简化微服务之间的通信和状态管理。接下来,我们将把所有内容连接起来,构建完整的端到端开发工作流。

常见问题解答

「Azure Container Apps」课时是免费的吗?

是的 — 「Azure Container Apps」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。

「Azure Container Apps」这节课中我会学到什么?

通过 Dapr sidecar 集成将微服务应用部署到 Azure Container Apps,配置入口,并使用由 Service Bus 队列深度触发的基于 KEDA 的自动缩放。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cloud & IT Cert Prep 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「Azure Container Apps」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?

能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 用于无密码身份验证的托管标识
  2. 使用 Azure Service Bus 实现解耦消息传递
  3. Azure Container Apps
  4. 端到端开发者工作流
← 返回 Cloud & IT Cert Prep