試圖提供一種(泊塢羣或領事)羣集,其中第一初始化羣集發生一個節點上,其產生一些令牌,然後需要通過加入集羣的其他節點可以使用上。關鍵的是節點1和節點2不應嘗試加入羣集,直到節點0生成連接密鑰。
例如,在節點0上,運行docker swarm init ...
將返回一個加入令牌。然後在節點1和2上,您需要將該令牌傳遞給相同的命令,如docker swarm init ${JOIN_TOKEN} ${NODE_0_IP_ADDRESS}:{SOME_PORT}
。和魔法,你已經有了一個整潔的小集羣...
嘗試到目前爲止
嘗試初始化安裝了AWS SDK的所有節點和存儲節點從0 S3的連接鍵,然後在其他節點上獲取該連接密鑰。這是通過一個帶有'remote-exec'提供程序的null_resource完成的。由於Terraform並行執行事情的方式,存在活躍的類型條件,並且可預測的節點1和2經常試圖從S3中獲取尚未存在的密鑰(例如,節點0尚未完成其任務)。
嘗試使用'local-exec'預置程序將SSH連接到節點0並捕獲其連接鍵輸出。這樣做效果不好,或者我喜歡這樣做。
我讀過的文檔。並且堆棧溢出。和Github的問題,如this really long outstanding one。徹底。如果這已在其他地方解決,鏈接表示讚賞!
PS - 這直接關係到,是this question一個較小的子集,但希望重新要求它以重點問題的範圍。
達到了上面闡述的相同結論 - 我認爲terraform更適合於基礎設施組件(僅限於),而更好地將provisioning和bootstrapping-stuff-放在一起,以便更適合處理像Ansible這樣的工具。謝謝! – jiveTurkey