繁体   English   中英

GCP部署实例因Ansible脚本而失败

[英]GCP deploy instance fails from ansible script

一年多以前,我一直在通过ansible脚本在GCP中部署集群,但是突然之间,我的一个脚本一直在给我这个错误:

libcloud.common.google.GoogleBaseError:u \\“区域'projects / [project] / zones / europe-west1-d'没有足够的资源来满足请求。请尝试其他区域,或稍后再试。

显而易见的原因是我没有足够的资源,但是并没有改变很多,而且配额看起来不错: 配额

ansible脚本本身并不需要太多。 我正在使用100GB SSD创建3个n1-standard-4实例。 请参见下面的脚本片段:

tasks:
    - name: create boot disks
      gce_pd:
          disk_type: pd-ssd
          image: "debian-9-stretch-v20171025"
          name: "{{ item.node }}-disk"
          size_gb: 100
          state: present
          zone: "europe-west1-d"
          service_account_email: "{{ service_account_email }}"          
          credentials_file: "{{ credentials_file }}"
          project_id: "{{ project_id }}"          
      with_items: "{{nodes}}"
      async: 3600
      poll: 2

    - name: create instances
      gce:        
        instance_names: "{{item.node}}"
        zone: "europe-west1-d"
        machine_type: "n1-standard-4"        
        preemptible: "{{ false if item.num == '0' else true }}"        
        disk_auto_delete: true
        disks:
          - name: "{{ item.node }}-disk"
            mode: READ_WRITE
        state: present
        service_account_email: "{{ service_account_email }}"
        service_account_permissions: "compute-rw"
        credentials_file: "{{ credentials_file }}"
        project_id: "{{ project_id }}"
        tags: "elasticsearch"        
      register: gce_raw_results
      with_items: "{{nodes}}"
      async: 3600
      poll: 2

更新1:

  • 服务帐户是整个项目的编辑器。 因此,正确的问题似乎不太可能。
  • 它开始发生在2018年3月24日。此后每天晚上。 因此,如果这是一个“脱销”问题,那将是非常偶然的,对吧? 此外,到目前为止,我整天都在运行此脚本,并且大多数时候它都失败了(有关成功,请参见下文)。
  • 我已经测试了几次,这可能与实例上的“ preemptible”标志有关。 (我启动了3个节点,但至少第一个必须保持工作状态)=>可preemptible: "{{ false if item.num == '0' else true }}"如果我关闭了可抢占(false)然后运行顺利。 “解决方法”似乎只是不使用可抢占的实例,但这曾经工作了一年而没有失败一次。 有什么变化吗? GCP的API是否更改? ansible gce是否未实施这些更改?

完整的错误是:

任务[聚会事实] ************************************************* ************************************************** ************************************************** ************************************************** ************************************************** ************************************************* 好:[本地主机]

任务[创建启动盘] ************************************************ ************************************************** ************************************************** ************************************************** ************************************************** ****************************************************已更改: [localhost] =>(item = {u'node':u'elasticsearch-link-0',u'ip_field':u'private_ip',u'zone':u'europe-west1-d',u'cluster_name ':u'elasticsearch-link',u'num':u'0',u'machine_type':u'n1-standard-4',u'project_id':u'[projectid]'})更改为:[本地主机] =>(item = {u'node':u'elasticsearch-link-1',u'ip_field':u'private_ip',u'zone':u'europe-west1-d',u'cluster_name': u'elasticsearch-link',u'num':u'1',u'machine_type':u'n1-standard-4',u'project_id':u'[projectid]'})好:[localhost] = >(item = {u'node':u'elasticsearch-link-2',u'ip_field':u'private_ip',u'zone':u'europe-west1-d',u'cluster_name':u' elasticsearch-link',u'num':u'2',u'machine_type':u'n1-standa rd-4',u'project_id':u'[projectid]'})

任务[创建实例] ************************************************* ************************************************** ************************************************** ************************************************** ************************************************** ****************************************************已更改: [localhost] =>(item = {u'node':u'elasticsearch-link-0',u'ip_field':u'private_ip',u'zone':u'europe-west1-d',u'cluster_name ':u'elasticsearch-link',u'num':u'0',u'machine_type':u'n1-standard-4',u'project_id':u'[projectid]'})更改为:[本地主机] =>(item = {u'node':u'elasticsearch-link-1',u'ip_field':u'private_ip',u'zone':u'europe-west1-d',u'cluster_name': u'elasticsearch-link',u'num':u'1',u'machine_type':u'n1-standard-4',u'project_id':u'[projectid]'})失败:[localhost]( item = {u'node':u'elasticsearch-link-2',u'ip_field':u'private_ip',u'zone':u'europe-west1-d',u'cluster_name':u'elasticsearch- link',u'num':u'2',u'machine_type':u'n1-stand ard-4',u'project_id':u'[projectid]'})=> {“ ansible_job_id”:“ 371957735383.2688”,“ changed”:false,“ cmd”:“ /tmp/.ansible-airflow/ansible- tmp-1522742180.0-71790706749341 / gce.py“,” data“:”“,” failed“:1,” finished“:1,” item“:{” cluster_name“:” elasticsearch-link“,” ip_field“:” private_ip”,“ machine_type”:“ n1-standard-4”,“ node”:“ elasticsearch-link-2”,“ num”:“ 2”,“ project_id”:“ [projectid]”,“ zone”:“ europe-west1-d“},” msg“:”追踪(最近一次通话最近):\\ n文件\\“ / tmp / .ansible-airflow / ansible-tmp-1522742180.0-71790706749341 / async_wrapper.py \\”,第158行,在_run_module \\ n(filtered_outdata,json_warnings)= _filter_non_json_lines(outdata)\\ n文件\\“ / tmp / .ansible-airflow / ansible-tmp-1522742180.0-71790706749341 / async_wrapper.py \\”中,第99行,在_filter_non_json_lines \\ n中ValueError('找不到json字符的开始')\\ nValueError:找不到json字符的开始\\ n“,” stderr“:”追踪(最近一次调用是最近的):\\ n File \\“ / tmp / ansible_OnIK1e / ansible_module_gce.py \\“,第750行,位于\\ n main()\\ n中 文件\\“ / tmp / ansible_OnIK1e / ansible_module_gce.py \\”,行712,在主\\ n模块中,gce,inames,数字)\\ n文件\\“ / tmp / ansible_OnIK1e / ansible_module_gce.py \\”,行524,在create_instances中\\ n实例,lc_machine_type,lc_image(),** gce_args \\ n文件\\“ / usr / local / lib / python2.7 / dist-packages / libcloud / compute / drivers / gce.py \\”,行3874,位于create_node中\\ n self.connection.async_request(请求,方法=“ POST”,数据= node_data)\\ n文件\\“ / usr / local / lib / python2.7 / dist-packages / libcloud / common / base.py \\”,第784行,位于async_request \\ n response = request(** kwargs)\\ n文件\\“ / usr / local / lib / python2.7 / dist-packages / libcloud / compute / drivers / gce.py \\”,第121行,在请求中\\ n response = super(GCEConnection,self).request(* args,** kwargs)\\ n文件\\“ / usr / local / lib / python2.7 / dist-packages / libcloud / common / google.py \\ “,位于请求的第806行\\ n * args,** kwargs)\\ n文件\\“ / usr / local / lib / python2.7 / dist-packages / libcloud / common / base.py \\”,位于第641行request \\ n response = responseCls(** kwargs)\\ n文件\\“ / usr / local / lib / python2 .7 / dist-packages / libcloud / common / base.py \\“,第163行, init \\ n self.object = self.parse_body()\\ n File \\” / usr / local / lib / python2.7 / dist -packages / libcloud / common / google.py \\“,行268,位于parse_body \\ n中,引发GoogleBaseError(消息,self.status,代码)\\ nlibcloud.common.google.GoogleBaseError:u \\”区域'projects / [projectid ] / zones / europe-west1-d'没有足够的资源来满足请求。 尝试使用其他区域,或稍后再试。\\“ \\ n”,“ stderr_lines”:[“追踪(最近一次通话最近):”,“ File \\” / tmp / ansible_OnIK1e / ansible_module_gce.py \\“,第750行,在“,“ main()”,“ File \\” / tmp / ansible_OnIK1e / ansible_module_gce.py \\”,“ main”中的第712行中,
module,gce,inames,number)“,” File \\“ / tmp / ansible_OnIK1e / ansible_module_gce.py \\”,行524,在create_instances中“,” instance,lc_machine_type,lc_image(),** gce_args“,” File \\“ /usr/local/lib/python2.7/dist-packages/libcloud/compute/drivers/gce.py \\“,第3874行,位于create_node中,”,“
self.connection.async_request(request,method ='POST',data = node_data)“,” File \\“ / usr / local / lib / python2.7 / dist-packages / libcloud / common / base.py \\”,行784,在async_request中”,“ response = request(** kwargs)”,“ File \\” / usr / local / lib / python2.7 / dist-packages / libcloud / compute / drivers / gce.py \\”,第121行,在请求中”,“ response = super(GCEConnection,self).request(* args,** kwargs)”,“ File \\” / usr / local / lib / python2.7 / dist-packages / libcloud / common / google .py \\”,第806行,在请求中”,“ * args,** kwargs)”,“ File \\” / usr / local / lib / python2.7 / dist-packages / libcloud / common / base.py \\” ,第641行,在请求中”,“ response = responseCls(** kwargs)”,“ File \\” / usr / local / lib / python2.7 / dist-packages / libcloud / common / base.py \\”,第163行,在init的 “”,“ self.object = self.parse_body()”,“ File \\” / usr / local / lib / python2.7 / dist-packages / libcloud / common / google.py \\”的第268行中parse_body“,”引发GoogleBaseError(消息,self.status,代码)“,” libcloud.common.google.GoogleBaseError:u \\“区域'projects / [projectid ] / zones / europe-west1-d'没有足够的资源来满足请求。 尝试使用其他区域,或稍后再试。\\“”]}重试,请使用:--limit @ / usr / local / airflow / ansible / playbooks / elasticsearch-link-cluster-create.retry

错误消息没有显示配额错误,而是区域资源问题,我建议您尝试一个新区域。

引用文档

即使您具有区域配额,也可能在特定区域中资源不可用。 例如,您可能在区域us-central1中有配额来创建VM实例,但是如果该区域已耗尽,则可能无法在区域us-central1-a中创建VM实例。 在这种情况下,请尝试在另一个区域(例如us-central1-f)中创建相同的资源。

因此,在创建脚本时,即使这种情况并不常见,也应考虑到这种可能性。

对于容易出现的实例,此问题更加重要,因为:

可抢占的实例是有限的Compute Engine资源,因此它们可能并不总是可用。 这些实例,如果它需要访问这些资源来执行其他任务。 可抢占实例是Compute Engine的多余容量,因此其可用性随使用情况而变化。

UPDATE

要再次确认我在说什么,您可以尝试保留preentible标志并更改区域,以确保脚本正常运行并且在晚上发生断货(而且在白天,应该是这种情况) 。

  • 如果问题确实在于可用性-| 您可能会考虑启动可能的实例,如果不可用,则捕获错误,然后依靠普通实例或其他区域|-

UPDATE2

正如我所承诺的代表您创建功能请求一样,您可以在公共跟踪器上关注更新。 我建议您启动它,以便通过电子邮件接收更新:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM