You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pulumi中从多个Kubernetes配置中选用单个配置部署EKS资源

实现Pulumi仅部署资源到指定EKS集群的操作方案

1. Pulumi代码侧添加集群筛选逻辑

你可以通过Pulumi配置项或者栈名做条件判断,仅为目标集群实例化资源:

  • 方案1:通过自定义配置项指定目标集群(推荐,灵活性更高)
import * as pulumi from "@pulumi/pulumi";
import * as k8s from "@pulumi/kubernetes";

const config = new pulumi.Config();
// 读取运行时传入的目标集群标识
const targetCluster = config.require("targetCluster");

// 保持你现有所有集群的Provider定义不变
const clusterProviders = {
  "eks-prod-1": new k8s.Provider("eks-prod-1", { kubeconfig: "集群1的kubeconfig配置" }),
  "eks-prod-2": new k8s.Provider("eks-prod-2", { kubeconfig: "集群2的kubeconfig配置" }),
  "eks-staging-1": new k8s.Provider("eks-staging-1", { kubeconfig: "集群3的kubeconfig配置" }),
  "eks-dev-1": new k8s.Provider("eks-dev-1", { kubeconfig: "集群4的kubeconfig配置" }),
  "eks-dev-2": new k8s.Provider("eks-dev-2", { kubeconfig: "集群5的kubeconfig配置" }),
};

// 校验集群参数合法性
if (!Object.keys(clusterProviders).includes(targetCluster)) {
  throw new Error(`无效集群标识,可选值为:${Object.keys(clusterProviders).join(", ")}`);
}

// 仅选中目标集群的Provider,后续所有资源都绑定该Provider
const activeProvider = clusterProviders[targetCluster];

// 示例资源创建,必须指定provider参数
const demoDeployment = new k8s.apps.v1.Deployment("demo-nginx", {
  spec: {
    replicas: 2,
    selector: { matchLabels: { app: "demo" } },
    template: {
      metadata: { labels: { app: "demo" } },
      spec: { containers: [{ name: "nginx", image: "nginx:alpine" }] }
    }
  }
}, { provider: activeProvider });
  • 方案2:通过栈名匹配(适合栈和集群一一对应的场景)
const currentStack = pulumi.getStack();
// 如果当前栈名和目标集群不匹配,直接退出不创建任何资源
if (currentStack !== "需要部署的目标集群对应栈名") {
  process.exit(0);
}
// 后续照常写资源创建逻辑即可

2. 调整GitHub Actions工作流配置

原有通用栈路径配置不需要改,新增目标集群参数传递逻辑即可:

on:
  # 支持手动触发时选择集群
  workflow_dispatch:
    inputs:
      target_cluster:
        description: "待部署的目标集群"
        required: true
        type: choice
        options:
          - eks-prod-1
          - eks-prod-2
          - eks-staging-1
          - eks-dev-1
          - eks-dev-2
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 执行Pulumi部署
        uses: pulumi/actions@v5
        with:
          command: up
          stack-name: your-common-stack # 原有通用栈名保持不变
          work-dir: ./your-common-stack-path # 原有通用栈路径保持不变
        env:
          PULUMI_CONFIG_PASSPHRASE: ${{ secrets.PULUMI_CONFIG_PASSPHRASE }}
          # 把选中的集群标识传入Pulumi配置
          PULUMI_CONFIG_targetCluster: ${{ inputs.target_cluster }}
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

如果不需要手动选择,也可以通过分支名、标签名自动匹配集群,把inputs.target_cluster替换为分支/标签提取的集群标识即可。

3. 验证方法

  • 本地测试:执行pulumi config set targetCluster eks-prod-1指定集群,运行pulumi preview确认只有目标集群的资源变更。
  • 工作流测试:手动触发工作流选择对应集群,查看预览步骤确认无其他集群的资源操作。

内容的提问来源于stack exchange,提问作者Madhu. Krishna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:15:03