本文介紹了各種步驟,用於對使用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