本文介绍了各种步骤,用于对使用Salt Cloud时可能出现的问题进行故障排除。
您也可以参考在Github上维护的这一份技术资料:Troubleshooting Salt Cloud
Virtual Machines Are Created, But Do Not Respond - 虚机已经创建出来了,但是没有响应
Master服务器上是否打开了TCP端口4505和4506? 这对于新手很容易被忽略。 可以在此处找到有关如何在各种平台上打开防火墙端口的信息。
Generic Troubleshooting Steps - 常规的故障排查步骤
本节描述了一组说明,这些说明对许多情况都有用,并且可能解决大多数出现的问题。
Debug Mode - 使用调试模式
通常,以调试模式运行Salt Cloud会显示有关部署的信息,否则这些信息就不是那么明显:
salt-cloud -p myprofile myinstance -l debug
请记住,将会出现许多消息,这些消息首先看起来像是错误,但实际上是为了向开发人员提供实际信息,以帮助调试。 如果您尚未配置的云平台驱动程序,那么会得到一组相关的消息。 在这种情况下,该消息通常旨在确认未配置它们。
Salt Bootstrap - 更新部署脚本
默认情况下,Salt Cloud使用Salt Bootstrap脚本来部署实例:
该脚本与Salt Cloud打包在一起,但是可以在不更新Salt包的情况下对该脚本进行更新:
salt-cloud -u
The Bootstrap Log - 查看部署日志
如果使用了默认的部署脚本,则/tmp/目录中应该有一个名为bootstrap-salt.log的文件。 该文件包含部署的完整输出,包括可能发生的任何错误。
Keeping Temp Files - 保留临时文件
一旦通过SSH服务可以访问了,Salt Cloud便会将特定于minion的文件上传到实例,然后执行一个部署脚本以将它们分发到正确的位置并安装Salt。 --keep-tmp
选项将指示Salt Cloud完成工作任务不要删除这些文件,以便用户可以检查它们是否存在问题:
salt-cloud -p myprofile myinstance --keep-tmp
默认情况下,Salt Cloud将在目标实例上创建一个名为/tmp/.saltcloud/
的目录。 该目录应该由要执行部署脚本的用户所有,并且应该具有0700的权限。
大多数云主机被配置为使用root作为默认的初始部署用户,因此,该目录及其中的所有文件都应由root用户拥有。
/tmp/.saltcloud/
目录应包含以下文件:
- 一个
deploy.sh
脚本。 该脚本应具有0755
的权限。 - 以minion命名的
.pem
和.pub
密钥。.pem
文件应具有0600
的权限。确保已将.pem
和.pub
文件正确复制到实例的/etc/salt/pki/minion/
目录。 - 一个名为
minion
的文件。 该文件应该已经复制到/etc/salt/
目录中。 - 可选地,一个称为
grains
的文件。 该文件(如果存在)应该已经复制到/etc/salt/
目录中。
Unprivileged Primary Users - 非特权的基础用户
一些云主机(最著名的是EC2)配置了不同的基础用户。 ec2-user
,ubuntu
,fedora
和bitnami
是一些常见的示例。 在这些情况下,/tmp /.saltcloud/
目录及其中的所有文件应归该用户所有。
一些云主机(例如EC2)被配置为在使用sudo命令时不要求这些用户提供密码。 因为要求sudo用户提供密码更安全,所以可以用这种方式配置其他主机。
如果需要此实例提供密码,则需要在Salt Cloud中对其进行配置。 可以将sudo使用的密码添加到驱动程序配置或云主机配置文件中:
sudo_password: mypassword
/tmp/ is Mounted as noexec
使用noexec
选项挂载/tmp/
目录更加安全。 这在大多数云主机上并不常见,但在私有环境中非常普遍。 要查看是否以这种方式挂载/tmp/
目录,请运行以下命令:
mount | grep tmp
如果此命令的输出包含如下所示的行,则/tmp/
目录将挂载为noexec
:
tmpfs on /tmp type tmpfs (rw,noexec)
如果是这种情况,则需要更改deploy_command
才能通过sh命令运行deploy脚本,而不是尝试直接执行它。 这可以在驱动程序或profile配置文件配置中指定:
deploy_command: sh /tmp/.saltcloud/deploy.sh
请注意,默认情况下,Salt Cloud会将其文件放置在名为/tmp/.saltcloud/
的目录中。 也可以在驱动程序或profile配置文件配置中对此进行更改:
tmp_dir: /tmp/.saltcloud/
如果更改了该目录,则也需要更改deploy_command
以反映tmp_dir
配置。
Executing the Deploy Script Manually - 手动执行部署脚本
如果部署所需的所有文件都已成功上传到正确的位置,并且包含正确的权限和所有权,则可以手动执行部署脚本,以检查是否还存在其他问题:
cd /tmp/.saltcloud/
./deploy.sh