微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pulumi - 当值不包含要更新的属性时,我们如何修补使用 Helm Chart 创建的部署

如何解决Pulumi - 当值不包含要更新的属性时,我们如何修补使用 Helm Chart 创建的部署

我编写了使用 pulumi kubernetes 部署舵图的代码。 我想在部署图表后修补 StatefulSet(更改 serviceAccountName)。图表没有为 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。

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

感谢任何帮助。

谢谢,

解决方法

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
})
,

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

来自Github Comment

  1. 导入现有资源
  2. puumi up 导入
  3. 对导入的资源进行所需的更改
  4. puumi up 以应用更改

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。