华为云CCE集群纳管GPU裸金属服务器由于CloudInit导致纳管失败的解决方案
问题现象
创建出3台GPU裸金属服务器,使用A节点制作镜像,用于在CCE纳管裸金属服务器时,使用该镜像,但是纳管后发现服务器A纳管失败,剩下两台服务器纳管成功。
原因分析
在CCE纳管过程中,需要通过cloudinit userdata机制拉取cce-agent,但是在服务器上查看没有拉cce-agent的动作,理论上该动作是cloudinit中的脚本在创建时自动执行的,可能是由于安装脚本没有注入userdata或者注入了但未执行。
经查看是由于userdata未执行,可能原因为服务器A制作镜像时没有清理残留目录导致,即:
镜像里面“/var/lib/cloud/instances”残留了制作镜像机器(后面称模板机)的实例ID信息,如果制作镜像不清理“/var/lib/cloud/*”就会导致用该镜像再重装模板机时,cloud-init根据残留目录(含实例ID)判断已经执行过一次,进而不会再执行user-data里面的脚本。
而使用该镜像的服务器B和C,由于实例ID信息和镜像中残留的服务器A实例ID不同,就会执行user-data,所以CCE能纳管成功。
处理方法
制作镜像前,清理“/var/lib/cloud/”目录下的所有信息,请参考清理临时文件步骤对文件进行清理,然后再制作镜像。CCE重新纳管服务器A时, 使用最新制作的镜像即可。