Skip to content

Kubernetes 部署 ​

更新: 2026-10-16 15:20:09   字数: 0 字   时长: 0 分钟

Aspire 可以把应用部署到 Kubernetes:既支持自管理的集群,也支持 Azure Kubernetes Service(AKS)。Aspire 会根据 AppHost 中声明的 Kubernetes 环境,决定每个计算资源如何映射为 Kubernetes 对象,然后生成 Helm Chart 或直接完成基础设施预配。

选择目标 ​

目标说明
Kubernetes(自有集群)从 AppHost 模型生成 Helm Chart,部署到任意已有集群。
Azure Kubernetes Service完整预配:Aspire 负责创建集群、容器注册表与所需的 Azure 资源。

前置条件 ​

  • 已完成 环境准备。
  • 已安装 Aspire CLI。
  • 已安装 kubectl 并在 PATH 中可用。
  • 已安装 Helm 4.2.0 或更高版本,并在 PATH 中可用。

Helm 版本要求

Helm 版本过低会导致发布失败。请先执行 helm version 确认。

声明部署目标 ​

csharp
var builder = DistributedApplication.CreateBuilder(args);

builder.AddKubernetesEnvironment("env");

var cache = builder.AddRedis("cache");

builder.AddProject<Projects.Api>("api")
    .WithReference(cache)
    .WithExternalHttpEndpoints();

builder.Build().Run();

资源如何映射到 Kubernetes ​

Aspire 资源Kubernetes 对象
项目 / 容器 / 可执行文件Deployment + Service
端点Service 端口与 Ingress
数据卷PersistentVolumeClaim
参数与机密Secret / ConfigMap
环境变量注入容器的 env(来自 Service 与 Secret)

服务发现仍然成立

被引用的资源会通过 Kubernetes 的 Service DNS 名称注入。如果 Service 是 Headless(clusterIP: None),还可以启用 DNS SRV 解析来访问命名端点,见服务发现。

发布与部署 ​

bash
# 只生成 Helm Chart 与相关产物
aspire publish

# 生成产物并部署到当前 kubectl 上下文所在的集群
aspire deploy

# 拆除
aspire destroy

产物结构大致如下:

text
aspire-output/
├── chart/
│   ├── Chart.yaml
│   ├── values.yaml
│   └── templates/
│       ├── api-deployment.yaml
│       ├── api-service.yaml
│       └── ...
└── ...

持久卷 ​

数据卷会映射为 PersistentVolumeClaim。在 values.yaml 中可以调整:

配置项说明
storageClass使用的存储类(云上通常是默认 StorageClass)。
size容量。
accessModes访问模式,例如 ReadWriteOnce。

生产环境请显式指定 StorageClass

依赖集群默认 StorageClass 在不同环境之间迁移时容易出问题。

入口与网关 ​

对外暴露的端点需要 Ingress 或 Gateway 资源。Aspire 提供了对应的托管 API:

API说明
AddKubernetesIngress(name)添加 Ingress 资源。
AddKubernetesGateway(name)添加 Gateway API 资源。
csharp
var builder = DistributedApplication.CreateBuilder(args);

builder.AddKubernetesEnvironment("env");

var ingress = builder.AddKubernetesIngress("ingress");

builder.AddProject<Projects.Web>("web")
    .WithExternalHttpEndpoints()
    .WithReference(ingress);

Helm Chart 自定义 ​

生成的 Chart 可以通过 values.yaml 覆盖。推荐做法:

  1. 用 aspire publish 生成 Chart。
  2. 把 Chart 纳入 Git 仓库。
  3. 在 CI 中用 helm upgrade --install -f values.prod.yaml 部署。

这样可以把「Aspire 生成的结构」与「环境特定的值」分离。

CI/CD 集成 ​

bash
aspire publish
helm upgrade --install my-app ./aspire-output/chart \
  --namespace my-app --create-namespace \
  -f values.prod.yaml

详见 CI/CD。

常见问题 ​

部署后 Pod 一直 CrashLoopBackOff
  1. 先看 kubectl logs <pod>,通常能直接找到原因。
  2. 检查机密是否已正确注入(kubectl get secret)。
  3. 检查依赖资源(数据库、缓存)是否在同一命名空间且已就绪。
服务之间调不通
  1. 确认被引用资源确实生成了 Service。
  2. 确认消费方使用了服务发现而不是硬编码地址。
  3. 检查是否遗漏 WaitFor 导致启动竞态。

下一步 ​

你觉得这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度