Как я могу получить доступ к вложенному элементу для файла пользовательских значений Helm Chart? - PullRequest
1 голос
/ 08 апреля 2020

Я использую рулевую диаграмму stable/prometheus и настроил файл пользовательских значений, который дополнительно настраивает alertmanager для развертывания диаграммы. Я могу установить график через Helm3 без каких-либо проблем, однако есть одна вещь, которую я не могу понять. Для Slack Reciever/slack_configs/api_url я хочу передать это с помощью команды set, поэтому мне не нужно хранить ее в файле.

Я надеюсь, что я на правильном пути, и вот что я думаю запустить для доступа к значению.

helm install test-release stable/prometheus -f customALM.yml --set alertmanagerFiles.alertmanager.yml.receivers[0].api_url=https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/xxxxxxxxxxxxxxxxxxxxxxxxxxx

customALM.yml

alertmanagerFiles:
  alertmanager.yml:
        route:
          group_wait: 10s
          group_interval: 5m
          repeat_interval: 30m
          receiver: "slack"

          routes:
            - receiver: "slack"
              group_wait: 10s
              match_re:
                severity: error|warning
              continue: true

        receivers:
          - name: "slack"
            slack_configs:
              - api_url: '[howDoIsetThisAtTheCLI?'
                channel: 'someChannel'
                text: "Text message template etc."

Обновление 4/8: Я делаю успехи благодаря Willro! Я могу вставить значение, но оно помещается в root блока alertmanager. Я пробовал несколько разных комбинаций для доступа к receivers / slack_configs, но пока не повезло = /

helm install test-release stable/prometheus -f customALM.yml --set alertmanagerFiles.api_url=PleaseInsertPrettyPlease --dry-run

Обновление 4/9: Я решил переместить блок приемников в отдельный файл, который зашифрован и надежно хранится.

1 Ответ

1 голос
/ 10 апреля 2020

Выполнение команды для изменения URL-адреса после ее развертывания - определенно вариант, который я хочу иметь.

Я хотел бы написать этот ответ, чтобы дать вам эту возможность!

  • Вы можете связать несколько команд с помощью SED для редактирования данных в этом ConfigMap (это очень похоже на то, что делает kubectl edit!)

  • Для этого вам нужно будет использовать строку, развернутую на customALM.yml. Для этого примера я установил параметр как api_url: ChangeMeLater перед развертыванием.

  • Затем я развернул диаграмму с помощью helm install test-release stable/prometheus -f customALM.yml

  • Наконец мы запускаем :

kubectl get cm <CONFIG_MAP_NAME> -o yaml | sed -e "s,<OLD_VALUE>,<NEW_VALUE>,g" | kubectl replace -f -
  • Объяснение происходящего:

    • kubectl get cm <CONFIG_MAP_NAME> -o yaml | = получает развернутую конфигурационную карту в формате yaml и передает ее к следующей команде
    • sed -e "s,<OLD_VALUE>,<NEW_VALUE>,g" | = использовать sed для замены old_value на new_value и передать его на следующую команду
    • kubectl replace -f - = использовать выходные данные из последнего введите команду и замените объект, развернутый в настоящее время, с тем же именем.
  • Я оставлю здесь пример шаг за шагом, чтобы объяснить больше:

$ helm install test-release stable/prometheus -f customALM.yml
Release "test-release" has been installed. Happy Helming!
...

$ kubectl get cm
NAME                                   DATA   AGE
test-release-prometheus-alertmanager   1      44m
test-release-prometheus-server         5      44m

$ kubectl get cm test-release-prometheus-alertmanager -o yaml
apiVersion: v1
data:
  alertmanager.yml: |
    global: {}
    receivers:
    - name: slack
      slack_configs:
      - api_url: ChangeMeLater
        channel: someChannel
        text: Text message template etc.
    route:
      group_interval: 5m
      group_wait: 10s
      receiver: slack
      repeat_interval: 30m
      routes:
      - continue: true
        group_wait: 10s
        match_re:
          severity: error|warning
        receiver: slack
kind: ConfigMap
metadata:
  creationTimestamp: "2020-04-10T13:41:15Z"
  labels:
    app: prometheus
    chart: prometheus-11.0.6
    component: alertmanager
    heritage: Helm
    release: test-release
  name: test-release-prometheus-alertmanager
  namespace: default
  resourceVersion: "218148"
  selfLink: /api/v1/namespaces/default/configmaps/test-release-prometheus-alertmanager
  uid: 323fdd40-2f29-4cde-833c-c6300d5688c0

$ kubectl get cm test-release-prometheus-alertmanager -o yaml | sed -e "s,ChangeMeLater,theurl.com/any,g" | kubectl replace -f -
configmap/test-release-prometheus-alertmanager replaced

$ kubectl get cm test-release-prometheus-alertmanager -o yaml
apiVersion: v1
data:
  alertmanager.yml: |
    global: {}
    receivers:
    - name: slack
      slack_configs:
      - api_url: theurl.com/any
        channel: someChannel
        text: Text message template etc.
    route:
      group_interval: 5m
      group_wait: 10s
      receiver: slack
      repeat_interval: 30m
      routes:
      - continue: true
        group_wait: 10s
        match_re:
          severity: error|warning
        receiver: slack
kind: ConfigMap
metadata:
  creationTimestamp: "2020-04-10T13:41:15Z"
  labels:
    app: prometheus
    chart: prometheus-11.0.6
    component: alertmanager
    heritage: Helm
    release: test-release
  name: test-release-prometheus-alertmanager
  namespace: default
  resourceVersion: "219507"
  selfLink: /api/v1/namespaces/default/configmaps/test-release-prometheus-alertmanager
  uid: 323fdd40-2f29-4cde-833c-c6300d5688c0

Вы можете видеть, что команда изменила ChangeMeLater на theurl.com/any.

Я все еще думаю о вашем первом варианте, но это хороший обходной путь, чтобы иметь под рукой.

Если у вас есть какие-либо сомнения, дайте мне знать!

...