liusheng / liusheng.github.io

Liusheng's blog
http://liusheng.github.io
5 stars 1 forks source link

nodepool 介绍 #1

Open liusheng opened 6 years ago

liusheng commented 6 years ago

nodepool依赖于diskimage-builder来制作镜像,使用shade组件来调用OpenStack接口启动虚拟机来作为资源池(nodepool)提供给CI测试任务使用。

nodepool主要包含以下两个服务:

nodepool配置

nodepool的配置是以yaml的形式存放在默认/etc/nodepool/nodepool.yaml的位置。

加载配置,在下述两个主要服务启动的时候,都会加载配置文件,该配置文件定义了nodepool的provider信息,以及镜像信息等。

首先根据clouds.yaml加载OpenStackclient的配置,主要包括OpenStack的认证信息,可以配置多个,具体使用哪个,在nodepool的配置文件中指定,然后初始化一个shade的client。

其次是nodepool的配置,主要包括:

nodepool-luancher

nodepool-luancher服务在启动的时候会有一个死循环,在循环内部,启动多个线程来完成不同的任务。

默认情况下,nodepool会启动一个webapp,监听8005端口,用于获取image list或者dib image list。

nodepool-builder

首先在服务启动之初,也是跟上述nodepool-luancher的流程调用相同的接口,加载nodepool.yaml的配置文件,用于获取镜像相关的配置。

在nodepool-builder的主流程中,主要启动三种类型的workers来完成镜像build和上传的过程:

Q&A

  1. upload id是什么 ?
  2. 镜像如果在下面直接删除会怎么样? 目前看来这种情况,nodepool不会做处理,并且当下面的镜像被删除以后,在node消耗掉以后创建node的时候,可能会去尝试获取该镜像,并报404错误,由此看来,nodepool只会根据zookeeper中记录的镜像id去获取镜像来创建node,而不回去校验底层镜像是否应被删掉了。
  3. 配置多个provider ? 可以在/etc/nodepoo/nodepoo.yaml中的providers section配置多个provider,只需要name区别开来即可,其他均重复。在配置完多个provider以后,重启nodepool-lunchernodepool-builder进程以后,nodepool会分别为各个provider中定义的image信息build出来一个image,然后会使用各个provider的镜像来创建node,经过测试发现,nodepool会平均低创建node到不同的provider,只到一种镜像的node的数量满足镜像的min-ready定义的数量为止。
  4. elements是否可以定义执行的动作 ? nodepool-builder 实际上只是去调用disk-image-create的一个封装,下面是一个例子:
    disk-image-create -x -t qcow2 --checksum --no-tmpfs --qemu-img-options 'compat=0.10' \
    -o image-name ubuntu vm simple-init'