
我是一名 Web 開發人員,但我也對一些管理任務感興趣。因此,從純粹管理到開發營運的新轉變對我來說很方便。
無論如何,我在將一些東西放入一段關係中時遇到了一些問題。也許沒有,所以我想尋求幫助來澄清。
基本上,我想要聯繫的是四種類型的軟體(根據我的理解)。確切的產品並不重要,您可以放置任何類似的軟體作為替代:
- Vagrant:根據我的理解,是自動化建立和管理虛擬機器:設定、啟動和停止它們。這可以使用本地虛擬機器或遠端虛擬機器(例如雲端平台)來完成。
- Docker:一種“輕量級虛擬機器”,基於一些 Linux 核心概念,可用於隔離運行進程,例如在共用 Web 託管環境中。
- Chef:用於設定和配置作業系統(例如在虛擬機器內)的工具。
- OpenStack:一種允許您建立自己的私有雲的工具,因此可與 AWS 等工具相媲美。
問題#1:我的解釋是否正確,或者我對這些消費中的部分(或全部)的看法是否錯誤?
問題#2:我如何混合使用所有這些工具?這有意義嗎?
在我的想像和理解中,你可以去
- 使用OpenStack建立自己的雲,
- 使用 Vagrant 管理在雲端中運行的虛擬機,
- 使用 Chef 設定這些虛擬機
- 最後使用 Docker 在虛擬機器內運行進程。
它是否正確?如果是這樣,你能給我一個如何開始使用所有這些的建議嗎(同時有很多,我還不知道從哪裡開始)?
答案1
讓我們使用他們各自的網頁來了解所有這些項目的內容。不過,我會更改您列出的順序:
廚師:Chef 是將基礎設施轉換為程式碼的自動化平台。
這是一個設定管理軟體。它們中的大多數都使用相同的範例:它們允許您定義狀態您想要一台機器,在設定檔、安裝的軟體、使用者、群組和許多其他資源類型方面。它們中的大多數還提供將變更推送到特定機器上的功能,該過程通常稱為編排。
流浪漢:建立和配置輕量級、可重複且可移植的開發環境。
它提供了一個可重現的生成方式完全虛擬化的機器以 Oracle 的 VirtualBox 或 VMWare 技術作為提供者。 Vagrant 可以與組態管理軟體協調,在作業系統安裝程式完成後繼續安裝程序。這被稱為供應。
碼頭工人:一個開源項目,用於將任何應用程式打包、運輸和運行為輕量級容器
該軟體的功能與 Vagrant 的功能有些重疊,後者提供了定義作業系統安裝的方法,但用於此目的的技術有很大不同。 Docker 使用Linux容器,它們本身不是虛擬機,而是在隔離檔案系統中執行的隔離進程。 Docker 也可以使用配置管理系統來配置容器。
開放式堆疊:用於建構私有雲和公有雲的開源軟體。
雖然 OpenStack 確實如此可以部署在單機上,這樣的部署純粹是為了概念驗證,由於資源限制可能不太實用。
OpenStack 安裝的主要目標是裸機多節點環境,其中不同的組件可以使用專用硬體來達到更好的效果。
OpenStack 的一個關鍵功能是支援許多虛擬化技術,從完全虛擬化(VirtualBox、VMWare)到半虛擬化(KVM/Qemu)以及容器(LXC)甚至使用者模式 Linux (UML)。
我嘗試將這些產品作為特定架構的元件來呈現。從我的角度來看,首先能夠根據所需的環境(Chef、Puppet、Ansible 等)定義您的需求,然後能夠以受控的方式部署它(Vagrant、Docker),這是有意義的,.. .),最後根據需要將其縮放到全域大小。
您需要多少這些功能應該在您的專案範圍內定義。
另請注意,我對大部分技術解釋都進行了過度簡化。請使用參考連結以取得詳細資訊。
答案2
我認為來自開發人員背景會讓成為「devops」實際上更加棘手,你的問題幾乎已經有 3 年曆史了,所以聽聽你如何找到這段旅程會很有趣,我將從以下角度給出答案系統管理員關於您上面提到的應用程序,希望它能提供一些啟發,或者提供非技術角度,這將在某種程度上解釋為什麼一個人(管理員或開發人員)會開始準確考慮您所要求的內容,例如從開發人員從角度來看,x、y、z 之間的關係是什麼?
我實際上認為系統管理員在這裡佔據上風,您在問題中提到的大多數應用程式都解決了管理“問題”,並這樣做提供了一個更抽象的資料中心環境,而這反過來對於開發人員和新的「 devops的策略(讀策略/團隊,devops不是一個人)。那麼和你提到的應用程式有什麼關係呢?這如何提供 IT 服務的整體方法?
OpenStack:一種允許您建立自己的私有雲的工具,因此可與 AWS 等工具相媲美
它就是這樣,但是它有什麼作用呢? - 最恰當命名的作業系統是 DOS - 它透過抽象 BIOS 來操作磁碟,OpenStack 操作你的資料中心並抽像你的基礎設施(IaaS - 是資料中心作業系統的行話)。現在您的資料中心擁有 API、命令語法和 GUI,OpenStack 可以驅動虛擬機器管理程式、交換器、路由器、防火牆、儲存區域網路、負載平衡器、docker 主機等。或者特定功能可以單獨存在於軟體中,如軟體定義的那樣某物或網路功能虛擬化。在此 OpenStack 和所有其他雲端之上,可以透過讀取您向編排引擎拋出的腳本或根據規則(擴充、縮小等)觸發腳本來編排自己的基礎架構。所以openstack是一個巨大的抽象層,例如我不在乎我有什麼交換機,給我一個網絡這命令,或者,為我建立一個複雜的負載平衡、HA、公開可用、自動縮放、域名註冊、附加存儲東西-用我在網路上找到的這個腳本。
Docker:一種“輕量級虛擬機器”,基於一些 Linux 核心概念,可用於隔離運行進程,例如在共用 Web 託管環境中。
Docker 是另一層抽象,就像雲端是一種顛覆性技術一樣,它正在改變產業,因為它解決了許多操作“問題”,例如軟體依賴性、升級、資料隔離和純粹的可移植性。 Java 之所以流行,是因為它的原始碼可移植性,開發人員無需考慮,運行的 JVM 意味著只要支援 java,他們的程式碼就可以在咖啡機上運行。 Docker解決了類似的問題,要運行我的應用程序,你需要一個docker主機,不是,你需要這個版本的Python,這個內核,這個Linux發行版等等,應用程式當然仍然有這些依賴項,但是底層主機不關心,管理員也不關心你在隔離容器內做什麼(到某一點) 。 Docker 正在改變開發和操作範式,將整個作業系統及其服務視為二進位檔案。我們可以從儲存庫中取得它們、對它們進行版本控制、修改它們、使用參數運行它們等。
Chef:用於設定和配置作業系統(例如在虛擬機器內)的工具。
是的,Chef、puppet、ansible、salt、系統中心營運管理器和該領域的大量其他應用程式不像前兩者那樣具有破壞性,為開發人員和管理員提供了一種對部署、升級和其他操作進行建模的方法(配置變化),似乎沒有任何標準機構來審視這些努力,例如有雲。但我們處理的並不是像基礎設施這樣明確的東西,因此學習這些東西會更痛苦,而且沒有太多東西可以從一種轉移到另一種東西。
Vagrant:根據我的理解,是自動化建立和管理虛擬機器:設定、啟動和停止它們。這可以使用本地虛擬機器或遠端虛擬機器(例如雲端平台)來完成。
這是你提到的應用程式清單中的奇怪的一個,Vagrant是開發人員的工具和管理員的玩具,你可以使用vagrant快速建立一個開發環境,例如我想開發一個android應用程序,從那裡獲取一個IDE vagrant,我覺得很快就會被Docker超越。
你能給我一個關於如何開始使用所有這些的建議嗎(同時有很多,我還不知道從哪裡開始)?
這就是為什麼我認為管理員佔上風,我們必須手動完成大部分工作並知道會出現什麼問題,傀儡清單、雲端運算和Docker 編排對我們來說會變得更容易,開發人員會發現自己採取了很多切線,所以我的對任何潛在開發人員的建議是首先成為管理員。
答案3
我剛剛完成了一個 OpenStack 部署項目,該項目在 Vagrant 實例中使用 Chef 伺服器:https://github.com/bluechiptek/bluechipstack/blob/master/README.md
這樣做的主要問題是每次你想要管理節點時讓 Vagrant 實例使用相同的 IP。如果進行靜態尋址,效果很好。透過 VPN 進行此操作不太理想。
答案4
就我而言,我僅使用 Vagrant 和 Docker 的組合。
我使用 vagrant 來配置機器(有其他雲端提供者但我使用的是內建的 VirtualBox。因為我使用這種方法,外部網路和儲存幾乎是手動的,但是如果您使用類似的方法流浪者AWS您可以透過外掛程式告訴 AWS 為您配置必要的部分。
我使用的設定腳本指向一個安全位置,其中包含 CA 憑證和用於簽署 CSR 的金鑰以及令牌docker swarm join
。此外,我安裝了 docker-engine 並將其配置為加入叢集(如果沒有則初始化)。
一旦解決了,我只需docker stack deploy
從本機電腦或建置箱中執行操作即可部署包含我需要的所有內容的堆疊。
就我而言,我只是放棄了廚師贊成僅使用簡單的安裝後腳本yum
作為apt-get
我的配置腳本。
我也用流浪者觸發器插件在銷毀之前添加額外的腳本(在我的例子中是離開群組)。
使用 Vagrant 進行集中化的好處是,您可以將環境複製到另一個系統或單一電腦上進行開發,只需新增或變更該provider
部分即可。請注意,我還沒有在一台電腦上設定 OpenStack 來管理 VirtualBox。