在你的樹莓派家庭實驗室中使用 Cloud-init
Cloud-init(可以說)是一個標準,雲提供商用它來為雲實例提供初始化和配置數據。它最常用於新實例的首次啟動,以自動完成網路設置、賬戶創建和 SSH 密鑰安裝等使新系統上線所需的任何事情,以便用戶可以訪問它。
在之前的一篇文章《修改磁碟鏡像來創建基於樹莓派的家庭實驗室》中,我展示了如何為像樹莓派這樣的單板計算機定製操作系統鏡像以實現類似的目標。有了 Cloud-init,就不需要向鏡像中添加自定義數據。一旦在鏡像中啟用了它,你的虛擬機、物理伺服器,甚至是小小的樹莓派都可以表現得像你自己的 「家庭私有雲」 中的雲計算實例。新機器只需插入、打開,就可以自動成為你的家庭實驗室的一部分。
說實話,Cloud-init 的設計並沒有考慮到家庭實驗室。正如我所提到的,你可以很容易地修改給定的一套系統磁碟鏡像,以啟用 SSH 訪問並在第一次啟動後對它們進行配置。Cloud-init 是為大規模的雲提供商設計的,這些提供商需要容納許多客戶,維護一組小的鏡像,並為這些客戶提供訪問實例的機制,而無需為每個客戶定製一個鏡像。擁有單個管理員的家庭實驗室則不會面臨同樣的挑戰。
不過,Cloud-init 在家庭實驗室中也不是沒有可取之處。教育是我的家庭私有雲項目的目標之一,而為你的家庭實驗室設置 Cloud-init 是一個很好的方式,可以獲得大大小小的雲提供商大量使用的技術的經驗。Cloud-init 也是其他初始配置選項的替代方案之一。與其為家庭實驗室中的每台設備定製每個鏡像、ISO 等,並在你要進行更改時面臨繁瑣的更新,不如直接啟用 Cloud-init。這減少了技術債務 —— 還有什麼比個人技術債務更糟糕的嗎?最後,在你的家庭實驗室中使用 Cloud-init 可以讓你的私有雲實例與你擁有的或將來可能擁有的任何公有雲實例表現相同 —— 這是真正的混合雲。
關於 Cloud-init
當為 Cloud-init 配置的實例啟動並且服務開始運行時(實際上是 systemd 中的四個服務,以處理啟動過程中的依賴關係),它會檢查其配置中的數據源,以確定其運行在什麼類型的雲中。每個主要的雲提供商都有一個數據源配置,告訴實例在哪裡以及如何檢索配置信息。然後,實例使用數據源信息檢索雲提供商提供的配置信息(如網路信息和實例識別信息)和客戶提供的配置數據(如要複製的授權密鑰、要創建的用戶賬戶以及許多其他可能的任務)。
檢索數據後,Cloud-init 再對實例進行配置:設置網路、複製授權密鑰等,最後完成啟動過程。然後,遠程用戶就可以訪問它,準備好使用 Ansible 或 Puppet 等工具進行進一步的配置,或者準備好接收工作負載並開始分配任務。
配置數據
如上所述,Cloud-init 使用的配置數據來自兩個潛在來源:雲提供商和實例用戶。在家庭實驗室中,你扮演著這兩種角色:作為雲提供商提供網路和實例信息,作為用戶提供配置信息。
雲提供商元數據文件
在你的雲提供商角色中,你的家庭實驗室數據源將為你的私有雲實例提供一個元數據文件。這個元數據文件包含實例 ID、雲類型、Python 版本(Cloud-init 用 Python 編寫並使用 Python)或要分配給主機的 SSH 公鑰等信息。如果你不使用 DHCP(或 Cloud-init 支持的其他機制,如鏡像中的配置文件或內核參數),元數據文件還可能包含網路信息。
用戶提供的用戶數據文件
Cloud-init 的真正價值在於用戶數據文件。用戶數據文件由用戶提供給雲提供商,並包含在數據源中,它將實例從一台普通的機器變成了用戶艦隊的一員。用戶數據文件可以以可執行腳本的形式出現,與正常情況下腳本的工作方式相同;也可以以雲服務配置 YAML 文件的形式出現,利用 Cloud-init 的模塊 來執行配置任務。
數據源
數據源是由雲提供商提供的服務,它為實例提供了元數據和用戶數據文件。實例鏡像或 ISO 被配置為告知實例正在使用什麼數據源。
例如,亞馬遜 AWS 提供了一個 link-local 文件,它將用實例的自定義數據來響應實例的 HTTP 請求。其他雲提供商也有自己的機制。幸運的是,對於家庭私有雲項目來說,也有 NoCloud 數據源。
NoCloud 數據源允許通過內核命令以鍵值對的形式提供配置信息,或通過掛載的 ISO 文件系統以用戶數據和元數據文件的形式提供。這些對於虛擬機來說很有用,尤其是與自動化搭配來創建虛擬機。
還有一個 NoCloudNet 數據源,它的行為類似於 AWS EC2 數據源,提供一個 IP 地址或 DNS 名稱,通過 HTTP 從這裡檢索用戶數據和元數據。這對於你的家庭實驗室中的物理機器來說是最有幫助的,比如樹莓派、NUC 或多餘的伺服器設備。雖然 NoCloud 可以工作,但它需要更多的人工關注 —— 這是雲實例的反模式。
家庭實驗室的 Cloud-init
我希望這能讓你了解到 Cloud-init 是什麼,以及它對你的家庭實驗室有何幫助。它是一個令人難以置信的工具,被主要的雲提供商所接受,在家裡使用它可以是為了教育和樂趣,並幫助你自動向實驗室添加新的物理或虛擬伺服器。之後的文章將詳細介紹如何創建簡單的靜態和更複雜的動態 Cloud-init 服務,並指導你將它們納入你的家庭私有雲。
via: https://opensource.com/article/20/5/cloud-init-raspberry-pi-homelab
作者:Chris Collins 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive