Pulumi - 当值不包含要更新的 属性 时,我们如何修补使用 helm chart 创建的部署
Pulumi - How do we patch a deployment created with helm chart, when values do not contain the property to be updated
我已经编写了使用 pulumi
kubernetes 部署 helm chart 的代码。
我想在部署图表后修补 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
,是否有任何其他方法可以覆盖它?
感谢任何帮助。
谢谢,
Pulumi 有一个强大的功能叫做 Transformations which is exactly what you need here(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 资源。虽然这仍然可以通过多个步骤实现。
- Import existing resource
- pulumi up to import
- Make desired changes to imported resource
- pulumi up to apply changes
他们似乎计划支持类似于 kubectl apply -f
的功能来修补资源。
我已经编写了使用 pulumi
kubernetes 部署 helm chart 的代码。
我想在部署图表后修补 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
,是否有任何其他方法可以覆盖它?
感谢任何帮助。
谢谢,
Pulumi 有一个强大的功能叫做 Transformations which is exactly what you need here(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 资源。虽然这仍然可以通过多个步骤实现。
- Import existing resource
- pulumi up to import
- Make desired changes to imported resource
- pulumi up to apply changes
他们似乎计划支持类似于 kubectl apply -f
的功能来修补资源。