Диспетчер развертывания не может обновлять шаблоны экземпляров - NO_METHOD_TO_UPDATE_FIELD

У меня есть развертывание, состоящее из группы управляемых экземпляров и двух шаблонов экземпляров (A и B). Изначально развертывание было создано с помощью группы экземпляров, ссылающейся на шаблон экземпляра A.

Я попытался обновить sourceImage в шаблоне экземпляра B с помощью диспетчера развертывания (gcloud beta deployment-manager deployments update my-deployment --template ...), но получил следующую ошибку:

ERROR: (gcloud.beta.deployment-manager.deployments.update) Error in 
Operation [operation-1538798895713-57787898f4ae9-8b478716-0bb72a09]: 
errors:
- code: NO_METHOD_TO_UPDATE_FIELD
  message: No method found to update field 'properties' on 
  resource 'fwp-app-preprod-instance-template-a' of type 
  'compute.v1.instanceTemplate'. The resource may need to be
  recreated with the new field.

Я должен прояснить, что единственное изменение, которое я внес в исходное развертывание, - это sourceImage шаблона экземпляра.

Можно ли выполнить обновление шаблона экземпляра через диспетчер развертывания, чтобы он ссылался на обновленный sourceImage?

В ошибке четко указано, что ресурс (шаблон экземпляра) может потребоваться воссоздать, и я рад, что это сделал менеджер развертывания. Но я понятия не имею, как проинструктировать / заставить диспетчер развертывания выполнить это действие.

Я не сомневаюсь, что это можно сделать вне диспетчера развертывания, но я хочу избежать дрейфа конфигурации.

Моя app.jinja.schema:

imports:
- path: instance-group.jinja
- path: instance-template.jinja

Мой app.jinja:

resources:
- name: instance-template-a
  type: instance-template.jinja
  properties:
    name: {{ env["deployment"] }}-instance-template-a
    machineType: g1-small
    sourceImage: "projects/my-project/global/images/my-image"
    diskSizeGb: '30'

- name: instance-template-b
  type: instance-template.jinja
  properties:
    name: {{ env["deployment"] }}-instance-template-b
    machineType: g1-small
    sourceImage: "projects/my-project/global/images/my-image"
    diskSizeGb: '30'

- name: fwp-instance-group
  type: instance-group.jinja

Мой instance-group.jinja:

resources:
- name: 'instance-group-{{ env["deployment"] }}'
  type: compute.v1.regionInstanceGroupManager
  properties:
    baseInstanceName: ig-instance-{{ env["deployment"] }}
    instanceTemplate: '$(ref.{{ env["deployment"] }}-instance-template-a.selfLink)'
    targetSize: 1
    region: australia-southeast1

- name: 'autoscaler-{{ env["deployment"] }}'
  type: compute.v1.regionAutoscalers
  properties:
    autoscalingPolicy:
      coolDownPeriodSec: 60
      loadBalancingUtilization:
        utilizationTarget: 0.9
      maxNumReplicas: 10
      minNumReplicas: 2
    target: $(ref.instance-group-{{ env["deployment"] }}.selfLink)
    region: australia-southeast1

И мой instance-template.jinja

resources:
- name: {{ properties["name"] }}
  type: compute.v1.instanceTemplate
  properties:
    name: {{ properties["name"] }}
    description: ''
    properties:
      machineType: {{ properties["machineType"] }}
      tags:
        items:
        - no-ip
        - web-server
        - http-server
        - https-server
      disks:
      - type: 'PERSISTENT'
        boot: true
        mode: 'READ_WRITE'
        autoDelete: true
        deviceName: instance-device
        initializeParams:
          sourceImage: {{ properties["sourceImage"] }}
          diskType: 'pd-standard'
          diskSizeGb: {{ properties["diskSizeGb"] }}
      canIpForward: false
      networkInterfaces:
      - network: projects/my-project/global/networks/vpc-fwp-nonprod
        subnetwork: projects/my-project/regions/australia-southeast1/subnetworks/subnet-private-fwp-nonprod
        aliasIpRanges: []
      labels: { environment: {{ env["deployment"] }}, tenancy: "fwp-nonprod" }
      scheduling:
        preemptible: false
        onHostMaintenance: MIGRATE
        automaticRestart: true
        nodeAffinities: []
      serviceAccounts:
      - email: [email protected]
        scopes:
        - https://www.googleapis.com/auth/cloud-platform

person Poo Bah    schedule 06.10.2018    source источник
comment
можете ли вы предоставить файл конфигурации (с удаленной личной информацией)   -  person Patrick W    schedule 09.10.2018
comment
Первоначально думали, что это слишком много кода, но после удаления ненужных элементов интерфейса (балансировщик нагрузки и т. Д.) Это не так уж и плохо. Спасибо   -  person Poo Bah    schedule 10.10.2018
comment
Итак, чтобы подтвердить, единственное изменение, которое вы внесли, - это поле sourceImage вашего файла app.jinja, верно?   -  person Patrick W    schedule 10.10.2018
comment
При обновлении вы создаете новый шаблон экземпляра или используете то же имя, что и оригинал?   -  person Patrick W    schedule 10.10.2018
comment
Да, Патрик В., единственное изменение - это sourceImage, и нет, я не создаю новый шаблон экземпляра и не меняю имя шаблона экземпляра. Вы увидите, что определены два шаблона экземпляра, и я попытался обновить sourceImage в шаблоне экземпляра, который не использовался группой экземпляров. Идея состоит в том, что в последующем обновлении я бы переключил группу экземпляров на использование обновленного шаблона экземпляра, а затем запустил бы непрерывное обновление.   -  person Poo Bah    schedule 10.10.2018
comment
Я подозреваю, что проблема в этом. После создания шаблоны экземпляров неизменяемы, я подозреваю, что ваше развертывание может взаимодействовать с вычислительным API для обновления шаблона, и вы получаете это сообщение об ошибке.   -  person Patrick W    schedule 11.10.2018
comment
Хорошо, вы говорите, что диспетчер развертывания нельзя использовать для обновления образа, связанного с группой экземпляров? Кажется странным положение дел.   -  person Poo Bah    schedule 11.10.2018
comment
ничто не может быть использовано для обновления шаблонов экземпляров, когда они используются. невозможно обновить существующий шаблон экземпляра или изменить шаблон экземпляра после того, как он был создано.. Вам необходимо создать новый шаблон и развернуть обновленный шаблон   -  person Patrick W    schedule 12.10.2018
comment
Хорошо, теперь я это понимаю. Итак, скажем, я выполняю скользящее обновление, используя командную строку группы управляемых экземпляров для обновления sourceImage, и в результате создается новый шаблон экземпляра. Если я впоследствии захочу обновить свое развертывание до (например), чтобы настроить конфигурацию автомасштабирования, я предполагаю, что DM попытается вернуться к моему предыдущему шаблону, а это не то, что я хочу. И это именно тот дрейф конфигурации, которого я хотел избежать. Еще раз спасибо Патрику за вашу помощь.   -  person Poo Bah    schedule 13.10.2018
comment
да, к сожалению, вы должны либо исключить создание шаблона из DM, либо создать шаблон как отдельный ресурс, таким образом, обновление MIG также не будет пытаться обновить существующий в настоящее время шаблон   -  person Patrick W    schedule 15.10.2018


Ответы (1)


Резюмируя комментарии:

Конфигурация DM включает шаблон экземпляра для группы управляемых экземпляров. Изменение исходного изображения - это попытка изменить изображение, используемое в шаблоне.

К сожалению, шаблоны экземпляров неизменяемы после создания

«Таким образом, невозможно обновить существующий шаблон экземпляра или изменить шаблон экземпляра после того, как он был создан».

Это объясняет возвращаемое сообщение об ошибке. Правильный способ изменить изображение, которое вы хотите использовать для группы управляемых экземпляров, - это создать новый шаблон и выполнить непрерывное обновление группы и с использованием нового шаблона экземпляра.

person Patrick W    schedule 12.10.2018