首页 文章

GCP部署实例从ansible脚本失败

提问于
浏览
0

我已经通过ansible脚本在GCP中部署集群已有一年多了,但突然之间我的一个脚本不断给我这个错误:

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

显而易见的原因是我没有足够的资源,但并没有很多变化,配额看起来很好:
quotas

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

Update 1:

  • 服务帐户是整个项目的编辑者 . 所以正确的问题似乎不大

  • 它开始于2018年3月24日发生 . 从那时起每晚都有 . 那么,如果它'缺货'问题那将是非常巧合的,对吗?此外,到目前为止,我一直在运行此脚本,并且大部分时间都会失败(请参阅下面的“成功”) .
    实例上有

  • I 've tested a few times and it might have something to do with the ' preemptible'标志 . (我开始3个节点,但至少第一个节点必须保持至少工作)=> preemptible: "{{ false if item.num == '0' else true }}" 如果我关闭可抢占(假),那么它运行没有故障 . 'workaround'似乎只是改变了API的变化? ansible gce没有实现这些变化吗?


完整的错误是:

任务[收集事实] ******************************************** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ok:[localhost]任务[创建启动盘] ************************************* ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** 改变了:[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':你'[projectid]'} )更改:[localhost] =>(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':你' [projectid]'})ok:[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-standard-4',u'project_id':u'[projectid ]'})TASK [创建实例] ***************************************** ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** 更改:[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':你'[projectid]'})更改:[localhost] =>(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':你'[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 -standard-4',u'project_id':你'[projectid]'})=> {“ansible_job_id”:“371957735383.2688”,“已更改”: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”:“Traceback(最近一次调用最后一次):\ n File \”/ tmp / .ansible-airflow / ansible-tmp-1522742180.0-71790706749341 / async_wrapper.py \“,line 158,在_run_module \ n(filtered_outdata,json_warnings)= _f ilter_non_json_lines(outdata)\ n文件\“/ tmp / .ansible-airflow / ansible-tmp-1522742180.0-71790706749341 / async_wrapper.py \”,第99行,在_filter_non_json_lines \ n引发ValueError('没有找到json char的开头')\ nValueError:没有json的开头char找到\ n“,”stderr“:”Traceback(最近一次调用最后一次):\ n File \“/ tmp / ansible_OnIK1e / ansible_module_gce.py \”,第750行,位于\ n main()\ n文件\“/ tmp / ansible_OnIK1e / ansible_module_gce.py \“,第712行,在主\ n模块中,gce,inames,number)\ n File \”/ tmp / ansible_OnIK1e / ansible_module_gce.py \“,第524行,在create_instances \ n实例中, lc_machine_type,lc_image(), gce_args \ n File \“/ usr / local / lib / python2.7 / dist-packages / libcloud / compute / drivers / gce.py \”,第3874行,在create_node \ n self中 . connection.async_request(request,method ='POST',data = node_data)\ n File \“/ usr / local / lib / python2.7 / dist-packages / libcloud / common / base.py \”,第784行,in async_request \ n response = request( kwargs)\ n File \“/ usr / local / lib / python2.7 / dist-packages / libcloud / compute / drivers / gce.py \”,第121行,在请求中\ n RESP onse = super(GCEConnection,self).request( args,** kwargs)\ n File \“/ usr / local / lib / python2.7 / dist-packages / libcloud / common / google.py \”,第806行,在request \ n * args,** kwargs)\ n File \“/ usr / local / lib / python2.7 / dist-packages / libcloud / common / base.py \”,第641行,在request \ n响应中= responseCls(** kwargs)\ n File \“/ usr / local / lib / python2.7 / dist-packages / libcloud / common / base.py \”,第163行,在init \ n self.object = self中 . parse_body()\ n文件\“/ usr / local / lib / python2.7 / dist-packages / libcloud / common / google.py \”,第268行,在parse_body \ n中引发GoogleBaseError(message,self.status,code )\ nlibcloud.common.google.GoogleBaseError:u \“区域'projects / [projectid] / zones / europe-west1-d'没有足够的资源来满足请求 . 尝试使用其他区域,或稍后再试 . \“\ n”,“stderr_lines”:[“Traceback(最近一次调用最后一次):”,“File \”/ tmp / ansible_OnIK1e / ansible_module_gce.py \“,第750行,在“,”main()“,”File \“/ tmp / ansible_OnIK1e / ansible_module_gce.py \”,第712行,在主“,”模块,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-包/ libcloud /普通/ google.py \ “,第806行,请求”,“* args,** kwargs)”,“文件”/ 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

1 回答

  • 1

    错误消息未显示配额错误,而是区域资源的问题,我建议您尝试新区域 .

    引自documentation

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

    因此,在创建脚本时,您应该考虑这种可能性,即使它不常见 .

    preentible实例的情况下,此问题更加突出,因为:

    可抢占的实例是有限的计算引擎资源,因此它们可能并不总是可用 . [...]这些实例如果需要访问这些资源以执行其他任务 . 可抢占的实例是多余的计算引擎容量,因此其可用性因使用情况而异 .

    UPDATE

    要仔细检查我所说的你可以尝试保留禁用标志并更改区域以确保脚本正常工作并且它是在晚上发生的缺货(并且因为它在白天工作应该是这种情况) .

    • 如果问题确实是可用性 - |您可能会考虑启动可执行的实例,如果不可用,请捕获错误然后依赖于正常的或不同的区域| -

    UPDATE2

    正如我所承诺的那样,我代表您创建了功能请求,您可以按照公共跟踪器上的更新进行操作 . 我建议你启动它以便收到电子邮件的更新:

相关问题