【问题标题】:Pulumi - How do we patch a deployment created with helm chart, when values do not contain the property to be updatedPulumi - 当值不包含要更新的属性时,我们如何修补使用 helm chart 创建的部署
【发布时间】:2021-06-19 21:15:58
【问题描述】:

我已经编写了使用pulumi kubernetes 部署掌舵图的代码。 我想在部署图表后修补StatefulSet(更改serviceAccountName)。 Chart 没有为StatefulSet 指定服务帐户的选项。

这是我的代码

// install psmdb database chart
const psmdbChart = new k8s.helm.v3.Chart(psmdbChartName, {
  namespace: namespace.metadata.name,
  path: './percona-helm-charts/charts/psmdb-db',
  // chart: 'psmdb-db',
  // version: '1.7.0',
  // fetchOpts: {
  //   repo: 'https://percona.github.io/percona-helm-charts/'
  // },
  values: psmdbChartValues
}, {
  dependsOn: psmdbOperator
})

const set = psmdbChart.getResource('apps/v1/StatefulSet', `${psmdbChartName}-${psmdbChartValues.replsets[0].name}`);

我正在使用Percona Server for MongoDB Operator 舵图。它使用 Operator 来管理 StatefulSet,同时也定义了 CRD。

我尝试过 pulumi 转换。在我的例子中,Chart 不包含 StatefulSet 资源,而是 CRD。

如果无法使用转换更新 StatefulSet 上的 ServiceAccountName,是否有其他方法可以覆盖它?

感谢任何帮助。

谢谢,

【问题讨论】:

  • 您可以编辑标签或标题吗?此外,对于基本的 helm 使用,helm 具有升级功能,可以比较当前部署和新要求并相应地升级部署。当与 helm 的 diff 插件结合使用时,这将创建一个强大的策略。您可以使用或考虑它们。

标签: pulumi


【解决方案1】:

Pulumi 有一个名为Transformations 的强大功能,这正是您需要的(Example)。转换是由 Pulumi 运行时调用的回调,可用于在创建资源之前修改资源输入属性。

我没有测试过代码,但你应该明白了:

import * as k8s from "@pulumi/kubernetes";

// install psmdb database chart
const psmdbChart = new k8s.helm.v3.Chart(psmdbChartName, {
    namespace: namespace.metadata.name,
    path: './percona-helm-charts/charts/psmdb-db',
    // chart: 'psmdb-db',
    // version: '1.7.0',
    // fetchOpts: {
    //   repo: 'https://percona.github.io/percona-helm-charts/'
    // },
    values: psmdbChartValues,
    transformations: [
        // Set name of StatefulSet
        (obj: any, opts: pulumi.CustomResourceOptions) => {
            if (obj.kind === "StatefulSet" && obj.metadata.name === `${psmdbChartName}-${psmdbChartValues.replsets[0].name}`) {
                obj.spec.template.spec.serviceAccountName = "customServiceAccount"
            }
        },
    ],
}, {
    dependsOn: psmdbOperator
})

【讨论】:

  • 感谢您的回答。我已经尝试过了,但没有成功。即使转换也设置了默认服务帐户
【解决方案2】:

似乎 Pulumi 没有直接的方法来修补现有的 kubernetes 资源。虽然这仍然可以通过多个步骤来实现。

来自Github Comment

  1. 导入现有资源
  2. pulumi 即将导入
  3. 对导入的资源进行所需的更改
  4. pulumi 可以应用更改

他们似乎计划支持类似于kubectl apply -f 的功能来修补资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 2021-08-31
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多