部署管理器-使用网络引用更新 InstanceTemplate 时的循环引用

部署管理器-使用网络引用更新 InstanceTemplate 时的循环引用

我创建了一个简单的 Cloud Deploy 配置来部署网络、InstanceTemplate 和 InstanceGroupManager(见下文)。

部署已成功创建。

然后,我尝试通过重命名 InstanceTemplate 资源用新版本替换 InstanceTemplate 资源。

在更新过程中,Google Deploy Manager 抱怨循环引用错误。但据我所知,没有出现此错误。

如何更新 InstanceTemplate 资源而不出现管理器错误?

以下是初始模板和更新错误。

初始模板

resources:
  - name: t2-vpc-network
    type: gcp-types/compute-v1:networks
    properties:
      name: t2-vpc-network
      routingConfig:
        routingMode: REGIONAL
      autoCreateSubnetworks: false

  - name: t2-vpc-subnetwork-europe-west1
    type: gcp-types/compute-v1:subnetworks
    properties:
      name: t2-vpc-subnetwork
      network: $(ref.t2-vpc-network.selfLink)
      region: europe-west1
      ipCidrRange: 10.10.10.0/24
  - name: t2-esp-hc
    type: gcp-types/compute-v1:healthChecks
    properties:
      type: HTTP
      checkIntervalSec: 10
      timeoutSec: 5
      unhealthyThreshold: 3
      healthyThreshold: 2
      httpHealthCheck:
        port: 8080
        requestPath: /endpoints_status
  - type: gcp-types/compute-v1:instanceTemplates
    name: t2-esp-instance-template-europe-west1-1
    properties:
      properties:
        machineType: f1-micro
        disks:
          - deviceName: boot
            boot: true
            type: PERSISTENT
            autoDelete: true
            mode: READ_WRITE
            initializeParams:
              sourceImage: projects/gce-uefi-images/global/images/cos-stable-80-12739-91-0
        networkInterfaces:
          - network: $(ref.t2-vpc-network.selfLink)
            subnetwork: $(ref.t2-vpc-subnetwork-europe-west1.selfLink)

  - type: gcp-types/compute-v1:regionAutoscalers
    name: t2-esp-group-autoscaler-europe-west1
    properties:
      region: europe-west1
      target: $(ref.t2-esp-group-europe-west1.selfLink)
      autoscalingPolicy:
        coolDownPeriodSec: 120
        cpuUtilization:
          utilizationTarget: 0.8
        minNumReplicas: 1
        maxNumReplicas: 5

  - type: gcp-types/compute-v1:regionInstanceGroupManagers
    name: t2-esp-group-europe-west1
    properties:
      region: europe-west1
      targetSize: 1
      baseInstanceName: t2-esp-instance
      instanceTemplate: $(ref.t2-esp-instance-template-europe-west1-1.selfLink)
      updatePolicy:
        minimalAction: 'REPLACE'
        type: 'PROACTIVE'
      namedPorts:
        - name: http
          port: 80
        - name: https
          port: 443
      autoHealingPolicies:
        - healthCheck: $(ref.t2-esp-hc.selfLink)
          initialDelaySec: 120
          actionType: RECREATE

已更改模板

实例模板的名称不同(删除旧模板并创建新模板)。这是这里唯一的变化。

resources:
  - name: t2-vpc-network
    type: gcp-types/compute-v1:networks
    properties:
      name: t2-vpc-network
      routingConfig:
        routingMode: REGIONAL
      autoCreateSubnetworks: false

  - name: t2-vpc-subnetwork-europe-west1
    type: gcp-types/compute-v1:subnetworks
    properties:
      name: t2-vpc-subnetwork
      network: $(ref.t2-vpc-network.selfLink)
      region: europe-west1
      ipCidrRange: 10.10.10.0/24
  - name: t2-esp-hc
    type: gcp-types/compute-v1:healthChecks
    properties:
      type: HTTP
      checkIntervalSec: 10
      timeoutSec: 5
      unhealthyThreshold: 3
      healthyThreshold: 2
      httpHealthCheck:
        port: 8080
        requestPath: /endpoints_status
  - type: gcp-types/compute-v1:instanceTemplates
    name: t2-esp-instance-template-europe-west1-2
    properties:
      properties:
        machineType: f1-micro
        disks:
          - deviceName: boot
            boot: true
            type: PERSISTENT
            autoDelete: true
            mode: READ_WRITE
            initializeParams:
              sourceImage: projects/gce-uefi-images/global/images/cos-stable-80-12739-91-0
        networkInterfaces:
          - network: $(ref.t2-vpc-network.selfLink)
            subnetwork: $(ref.t2-vpc-subnetwork-europe-west1.selfLink)

  - type: gcp-types/compute-v1:regionAutoscalers
    name: t2-esp-group-autoscaler-europe-west1
    properties:
      region: europe-west1
      target: $(ref.t2-esp-group-europe-west1.selfLink)
      autoscalingPolicy:
        coolDownPeriodSec: 120
        cpuUtilization:
          utilizationTarget: 0.8
        minNumReplicas: 1
        maxNumReplicas: 5

  - type: gcp-types/compute-v1:regionInstanceGroupManagers
    name: t2-esp-group-europe-west1
    properties:
      region: europe-west1
      targetSize: 1
      baseInstanceName: t2-esp-instance
      instanceTemplate: $(ref.t2-esp-instance-template-europe-west1-2.selfLink)
      updatePolicy:
        minimalAction: 'REPLACE'
        type: 'PROACTIVE'
      namedPorts:
        - name: http
          port: 80
        - name: https
          port: 443
      autoHealingPolicies:
        - healthCheck: $(ref.t2-esp-hc.selfLink)
          initialDelaySec: 120
          actionType: RECREATE

错误

code: CYCLIC_REFERENCES
  message: |
    A cycle was found during reference analysis:
    Detected cycle:
    t2-vpc-subnetwork-europe-west1 <- t2-esp-instance-template-europe-west1-1 <- t2-esp-group-europe-west1 <- t2-esp-instance-template-europe-west1-2

答案1

使用 CI/CD 自动化环境时,第一步是将部署配置文件存储在版本控制系统中。然后,您可以按照 Google 的说明执行更新文档

对于您所做的版本更新,CI/CD 自动化环境,您需要使用版本控制系统,例如 Git(最流行)、Subversion 和 Mercurial。版本控制系统是众多系统之一好处将允许您:

  • 恢复到先前已知的良好配置,
  • 提供变更的审计跟踪,
  • 将配置作为持续部署系统的一部分,

版本控制提供了一种逻辑方法来组织文件并协调其创建、控制访问、更新以及跨团队和组织删除。

自动化和持续集成依赖于这些文件来获取自动化本身的源代码,以及要自动化的配置和要分发的数据。

当您更改配置文件时,VCS 将告知更改的内容和更改的位置,以及显示版本的不兼容性等。

这是另一个例子在使用 Git 作为 VCS 的自动化环境中使用部署管理器。这关联展示如何安装 Git。

答案2

错误消息是依赖循环(代码:CYCLIC_REFERENCES)。它表示你的配置存在依赖循环例如,如果资源 A 依赖于资源 B,B 依赖于 C,C 依赖于 A。

您可以看到 Deploy 配置中的循环如下:t2-vpc-subnetwork-europe-west1 <- t2-esp-instance-template-europe-west1-1 <- t2-esp-group-europe-west1 <- t2-esp-instance-template-europe-west1-2

要解决该错误,请更改引用以打破循环。

相关内容