如何在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
相关产品推荐
相关产品推荐

