Pulumi - Как мы исправляем развертывание, созданное с помощью диаграммы управления, когда значения не содержат свойства, которое нужно обновить

У меня есть код для развертывания схемы управления с использованием 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.

Я пробовал трансформации пулуми. В моем случае Chart не содержит ресурса StatefulSet вместо CRD.

Если невозможно обновить ServiceAccountName на StatefulSet с помощью преобразований, могу ли я как-то изменить это?

любая помощь приветствуется.

Спасибо,


person Hari Prasad    schedule 23.03.2021    source источник
comment
Не могли бы вы отредактировать теги или заголовок? Кроме того, для базового использования helm в helm есть функция обновления, которая сравнивает текущее развертывание и новые требования и соответственно обновляет развертывание. В сочетании с надстройкой diff для helm это создает сильную стратегию. Вы можете их использовать или рассматривать.   -  person Catastrophe    schedule 23.03.2021


Ответы (2)


В Pulumi есть мощная функция под названием Transformations, которая вам и нужна. здесь (пример ). Преобразование - это обратный вызов, который вызывается средой выполнения 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
})
person M. Scho.    schedule 25.03.2021
comment
Спасибо за ответ. Я пробовал это уже безуспешно. Учетная запись службы по умолчанию устанавливается даже с преобразованием - person Hari Prasad; 25.03.2021

Кажется, у Pulumi нет прямого способа исправить существующий ресурс Kubernetes. Хотя это все еще возможно с несколькими шагами.

Из комментария Github

  1. Импортировать существующий ресурс
  2. Pulumi до импорта
  3. Внесите желаемые изменения в импортированный ресурс
  4. Pulumi вверх, чтобы применить изменения

Похоже, они планируют поддерживать функциональность, аналогичную kubectl apply -f, для исправления ресурсов.

person Hari Prasad    schedule 30.03.2021