我已经通过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:
preemptible: "{{ false if item.num == '0' else true }}"
如果我关闭可抢占(假),那么它会毫无障碍地运行。
'解决方法'似乎只是没有使用可抢占的实例,但这曾经工作了一年而没有失败过一次。有什么变化吗?
GCP的API有变化吗? ansible gce没有实现这些变化吗? 完整错误是:
任务[收集事实] ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ********************************************确定:[localhost] < / p>
任务[创建启动盘] ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** ******************************************已更改:[localhost] =&gt; (item = {u&#39; node&#39 ;: u&#39; elasticsearch-link-0&#39;, 你&#39; ip_field&#39;:你&#39; private_ip&#39;,你&#39;区&#39;:你&#39; europe-west1-d&#39;, 你&#39; cluster_name&#39;:你&#39; elasticsearch-link&#39;,你&#39;:你&#39; 0&#39;,你&#39; machine_type&#39;: u&#39; n1-standard-4&#39;,u&#39; project_id&#39;:u&#39; [projectid]&#39;})已更改:[localhost] =&GT; (item = {u&#39; node&#39 ;: u&#39; elasticsearch-link-1&#39;,u&#39; ip_field&#39;:u&#39; private_ip&#39;,u&#39; zone&# 39;:你&#39; europe-west1-d&#39;,u&#39; cluster_name&#39;: 你有&#39; elasticsearch-link&#39;,你&#39;:你&#39; 1&#39;,你&#39; machine_type&#39;: 你好&nbsp;标准4&#39;,你&#39; project_id&#39;:你&#39; [projectid]&#39;})ok:[localhost] =&gt; (item = {u&#39; node&#39 ;: u&#39; elasticsearch-link-2&#39;,u&#39; ip_field&#39;:u&#39; private_ip&#39;, 你&#39;:&#39; europe-west1-d&#39;,u&#39; cluster_name&#39 ;: u&#39; elasticsearch-link&#39;, 你&#39;:你&#39; 2&#39;,你&#39; machine_type&#39;:你&#39; n1-standard-4&#39;,你&#39; project_id&#39;: U&#39; [专案编号]&#39;})
任务[创建实例] ************************************************** ************************************************** ************************************************** ************************************************** ************************************************** *******************************************已更改:[localhost] =&gt ; (item = {u&#39; node&#39 ;: u&#39; elasticsearch-link-0&#39;, 你&#39; ip_field&#39;:你&#39; private_ip&#39;,你&#39;区&#39;:你&#39; europe-west1-d&#39;, 你&#39; cluster_name&#39;:你&#39; elasticsearch-link&#39;,你&#39;:你&#39; 0&#39;,你&#39; machine_type&#39;: u&#39; n1-standard-4&#39;,u&#39; project_id&#39;:u&#39; [projectid]&#39;})已更改:[localhost] =&GT; (item = {u&#39; node&#39 ;: u&#39; elasticsearch-link-1&#39;,u&#39; ip_field&#39;:u&#39; private_ip&#39;,u&#39; zone&# 39;:你&#39; europe-west1-d&#39;,u&#39; cluster_name&#39;: 你有&#39; elasticsearch-link&#39;,你&#39;:你&#39; 1&#39;,你&#39; machine_type&#39;: 你&n;标准4&#39;,你&#39; project_id&#39;:你&#39; [projectid]&#39;})失败:[localhost] (item = {u&#39; node&#39 ;: u&#39; elasticsearch-link-2&#39;,u&#39; ip_field&#39;:u&#39; private_ip&#39;, 你&#39;:&#39; europe-west1-d&#39;,u&#39; cluster_name&#39 ;: u&#39; elasticsearch-link&#39;, 你&#39;:你&#39; 2&#39;,你&#39; machine_type&#39;:你&#39; n1-standard-4&#39;,你&#39; project_id&#39;: 你&#39; [projectid]&#39;})=&gt; {&#34; ansible_job_id&#34;:&#34; 371957735383.2688&#34;, &#34;更改&#34;:false,&#34; cmd&#34;: &#34; /tmp/.ansible-airflow/ansible-tmp-1522742180.0-71790706749341/gce.py" ;, &#34;数据&#34;:&#34;&#34;,&#34;失败&#34;:1,&#34;完成&#34;:1,&#34; item&#34;:{ &#34;群集名&#34 ;: &#34; elasticsearch-link&#34;,&#34; ip_field&#34;:&#34; private_ip&#34;,&#34; machine_type&#34;: &#34; n1-standard-4&#34;,&#34;节点&#34;:&#34; elasticsearch-link-2&#34;,&#34; num&#34;:&#34; 2&# 34 ;, &#34; project_id&#34;:&#34; [projectid]&#34;,&#34; zone&#34;:&#34; europe-west1-d&#34;},&#34; msg&# 34 ;: &#34; Traceback(最近一次调用最后一次):\ n文件 \&#34; /tmp/.ansible-airflow/ansible-tmp-1522742180.0-71790706749341/async_wrapper.py \&#34 ;, 第158行,在_run_module \ n(filtered_outdata,json_warnings)= _filter_non_json_lines(outdata)\ n文件\&#34; /tmp/.ansible-airflow/ansible-tmp-1522742180.0-71790706749341/async_wrapper.py \&#34;, 第99行,在_filter_non_json_lines \ n中引发ValueError(&#39;没有开始 json char发现&#39;)\ n \ nValueError:找不到json char的开头\ n&#34;, &#34; stderr&#34;:&#34; Traceback(最近一次呼叫最后一次):\ n文件 \&#34; /tmp/ansible_OnIK1e/ansible_module_gce.py \&#34;,第750行,\ n \ n main()\ n File \&#34; /tmp/ansible_OnIK1e/ansible_module_gce.py \&#34;,line 712,在主\ n模块中,gce,inames,number)\ n文件 \&#34; /tmp/ansible_OnIK1e/ansible_module_gce.py \&#34;,第524行,在 create_instances \ n instance,lc_machine_type,lc_image(), ** gce_args \ n File \&#34; /usr/local/lib/python2.7/dist-packages/libcloud/compute/drivers/gce.py \&#34;, 第3874行,在create_node \ n self.connection.async_request(request, method =&#39; POST&#39;,data = node_data)\ n文件 \&#34; /usr/local/lib/python2.7/dist-packages/libcloud/common/base.py \&#34 ;, 第784行,在async_request \ n response = request(** kwargs)\ n文件中 \&#34; /usr/local/lib/python2.7/dist-packages/libcloud/compute/drivers/gce.py \&#34 ;, 第121行,在请求\ n响应=超级(GCEConnection, 自我).request(* args,** kwargs)\ n文件 \&#34; /usr/local/lib/python2.7/dist-packages/libcloud/common/google.py \&#34 ;, 第806行,请求\ n * args,** kwargs)\ n文件 \&#34; /usr/local/lib/python2.7/dist-packages/libcloud/common/base.py \&#34 ;, 第641行,在request \ n response = responseCls(** kwargs)\ n文件中 \&#34; /usr/local/lib/python2.7/dist-packages/libcloud/common/base.py \&#34 ;, 第163行,在 init \ n self.object = self.parse_body()\ n文件 \&#34; /usr/local/lib/python2.7/dist-packages/libcloud/common/google.py \&#34 ;, 第268行,在parse_body \ n中引发GoogleBaseError(消息, self.status,code)\ nlibcloud.common.google.GoogleBaseError:u \&#34; The zone&#39; projects / [projectid] / zones / europe-west1-d&#39;没有足够的 可用于满足请求的资源。尝试不同的区域,或 稍后再试。\&#34; \ n&#34;,&#34; stderr_lines&#34;:[&#34; Traceback(最近一次通话) 最后):&#34;,&#34;文件\&#34; /tmp/ansible_OnIK1e/ansible_module_gce.py \&#34;,行 750,in&#34;,&#34; main()&#34;,&#34;文件 \&#34; /tmp/ansible_OnIK1e/ansible_module_gce.py \&#34;,第712行,在主&#34;,&#34;
module,gce,inames,number)&#34;,&#34;文件 \&#34; /tmp/ansible_OnIK1e/ansible_module_gce.py \&#34;,第524行,在 create_instances&#34;,&#34; instance,lc_machine_type,lc_image(), ** gce_args&#34;,&#34; File \&#34; /usr/local/lib/python2.7/dist-packages/libcloud/compute/drivers/gce.py \&#34;, 第3874行,在create_node&#34;,&#34;
self.connection.async_request(request,method =&#39; POST&#39;, data = node_data)&#34;,&#34;文件 \&#34; /usr/local/lib/python2.7/dist-packages/libcloud/common/base.py \&#34 ;, 第784行,在async_request&#34;,&#34; response = request(** kwargs)&#34;,&#34; 文件 \&#34; /usr/local/lib/python2.7/dist-packages/libcloud/compute/drivers/gce.py \&#34 ;, 第121行,请求&#34;,&#34;响应=超级(GCEConnection, 自我).request(* args,** kwargs)&#34;,&#34;文件 \&#34; /usr/local/lib/python2.7/dist-packages/libcloud/common/google.py \&#34 ;, 第806行,请求&#34;,&#34; * args,** kwargs)&#34;,&#34;文件 \&#34; /usr/local/lib/python2.7/dist-packages/libcloud/common/base.py \&#34 ;, 第641行,请求&#34;,&#34; response = responseCls(** kwargs)&#34;,&#34;文件 \&#34; /usr/local/lib/python2.7/dist-packages/libcloud/common/base.py \&#34 ;, 第163行,在 init &#34;,&#34; self.object = self.parse_body()&#34;,&#34;文件 \&#34; /usr/local/lib/python2.7/dist-packages/libcloud/common/google.py \&#34 ;, 第268行,在parse_body&#34;,&#34;提出GoogleBaseError(消息, self.status,code)&#34;,&#34; libcloud.common.google.GoogleBaseError:u \&#34; The zone&#39; projects / [projectid] / zones / europe-west1-d&#39;没有足够的 可用于满足请求的资源。尝试不同的区域,或 稍后再试。\&#34;&#34;]} 重试,使用: - limit @ / usr / local / airflow / ansible / playbooks / elasticsearch-link-cluster-create.retry
答案 0 :(得分:1)
错误消息未显示配额错误,而是区域资源出现问题,我建议您尝试新区域。
即使您有区域配额,也可能是某个资源可能在特定区域中不可用。例如,您可能在区域us-central1中有配额来创建VM实例,但如果区域耗尽,则可能无法在区域us-central1-a中创建VM实例。在这种情况下,尝试在另一个区域中创建相同的资源,例如us-central1-f。
因此,在创建脚本时,您应该考虑到这种可能性,即使它不常见。
自preentible个实例以来,这个问题更加突出:
可抢占的实例是有限的计算引擎资源,因此它们可能并不总是可用。 [...]这些实例如果需要访问这些资源以执行其他任务。可抢占的实例是超出计算引擎容量,因此它们的可用性随使用情况而变化。
<强>更新强>
要仔细检查我所说的你可以尝试保留禁用标志并更改区域以确保脚本正常工作并且它是在晚上发生的缺货(并且因为它在白天工作时应该是案件)。
正如我所承诺的,我代表您创建了功能请求,您可以关注公共跟踪器上的更新。 我建议您启动它以便通过电子邮件接收更新: