以Chef和Ansible為例快速入門伺服器配置

2021-09-17 18:54:29 字數 3549 閱讀 2849

這篇文章討論了如何在我們的環境中安裝和配置軟體,這個任務通常被稱為伺服器配置(server provisioning)。

\\\\

在開始介紹現代化的工具之前,我們來看看最基本且經過實戰考驗的伺服器配置工具:shell指令碼。在chef、ansible或puppet出現之前,很多運營團隊使用bash來配置伺服器(在windows上則使用powershell指令碼)。

\\ 例如,如果想在執行ubuntu的amazon ec2例項上安裝nginx,可以使用以下指令碼(install-nginx.sh):

\\

\#!/bin/sh\ssh -t ubuntu@$1 sudo apt-get upgrade\ssh -t ubuntu@$1 sudo apt-get -y install nginx
\\

我們可以使用shell指令碼來配置伺服器上的所有東西。據我所知,所有主流的配置工具都使用了基於安全傳輸層(如ssh)的shell命令或powershell(chef可能是個例外)。即使你使用了配置工具,在某些時候也需要用到指令碼。因此,當你開始使用配置工具(如chef或ansible)時,學習如何使用基本的shell指令碼也會為你帶來很多好處。

\\ 你可能會問自己,為什麼在shell指令碼已經可以完成所有工作的同時還要學習配置工具?很多環境已經使用shell指令碼進行伺服器配置,那麼為什麼要使用配置工具代替它們?

\\ 首先,shell指令碼通常使用的是宣告性語法。shell指令碼通過執行命令序列來安裝軟體,而配置工具只需要指定伺服器應該安裝哪些軟體,這樣就可以使用相同的**在不同的作業系統上、使用不同的包管理器以及指定不同的版本來安裝和配置相同的軟體。

\\ 其次,配置工具通常會提供用於組織基礎設施的方式。雖然使用shell指令碼也可以做到這一點,但配置工具通常會提供更簡潔明瞭的方案。因為是行業標準,開發人員可以更輕鬆地找出qa環境中哪些伺服器執行rabbitmq。

\\ 第三,每個主要的配置工具都有乙個蓬勃發展的社群,他們構建可復用的模組來安裝大多數開源軟體。你可以直接在模組配置中指定記憶體限制,而不需要記住postgres配置檔案在**,這樣可以節省很多時間。

\\ 當然,原因還有很多,這裡就不一一例舉了。儘管學習曲線有點陡峭,但學習配置工具仍然是值得的。與shell指令碼相比,配置工具更容易使用,便於思考,也更容易維護

\\\\

學習使用chef(伺服器配置工具)的前幾周給我留下了深刻的印象。入門指南展示了如何建立乙個「recipe」,其中包含安裝或配置軟體的說明,我能夠理解這種比喻背後的含義。recipe必須存在於「cookbook」中,這是有道理的。然後你在「kitchen」裡測試cookbook,但我開始有點懷疑了。

\\ 這種比喻有點令人感到困惑,於是我決定去看一下其他工具,如ansible。ansible文件的第一頁介紹了「playbook」的概念,而playbook包含一系列「play」。

\\ 那麼,這些問題很重要嗎?當然很重要了,因為在學習配置工具之前,你應該知道,它們很有可能會引入大量令人費解的術語。即使是為了完成基本的任務,你也必須重新學習很多術語。如果你是剛開始學習配置工具,我強烈建議你隨時寫下這些術語定義,你還有很多東西要學。

\\ 每個軟體開發人員都會為現有的單詞建立不同的含義,他們甚至還會發明一些單詞,比如「uninitialize」和「unregister」。這已經成為軟體開發的一部分。

\\ 我會盡量用大家熟悉的術語來解釋這些工具。

\\\\

你決定使用花哨的配置工具在遠端伺服器上安裝nginx。在開始設定資料庫備份節點前,一切都很順利。你已經編寫了mysql主伺服器的配置檔案,但是你不太確定如何配置mysql從伺服器的內部dns位址。這個時候配置管理就派上用場了。

\\ 在設定伺服器時,最好可以將應用程式視為由兩部分組成:不可變部分(通常是**或編譯的二進位制檔案)和可變部分(通常是配置檔案或環境變數)。大部分由社群建立的模組預設情況下會安裝二進位制檔案,並提供盡可能合理的配置,而且會為我們暴露出一些屬性,方便對其進行覆蓋。

\\ 這些屬性通常包含特定於使用者環境的值。大多數配置工具都為使用者提供了一種機制,通過模板將特定於環境的值插入到配置檔案中,或直接插入到環境變數中。

\\ 你可以使用配置工具提供的配置管理來配置mysql主伺服器的配置檔案,然後在其中配置從伺服器。

\\\\

這樣就可以解決上述的問題,但後來發現,你必須上傳aws憑證才能讓mysql從伺服器訪問s3。你知道不能直接將這些憑證提交到**庫中,因此這些憑證只能存在於你的機器和nsa伺服器上。

\\ 這個時候你需要的是secret管理。

\\ 與自動化領域的所有東西一樣,你也有很多管理秘鑰的可選項。谷歌提供了一項名為kms的服務,aws也提供了一項名為secret manager的服務,chef提供了加密資料報,hashicorp提供了一款名為vault的產品,ansible也有一款名為vault的產品。除了kms會對字串進行加密之外,所有這些工具都提供了相同的功能:保護對加密秘鑰的訪問(這些秘鑰被用在配置管理中)。

\\ 有好幾次,我不小心將秘鑰提交到了**庫。這類事情一直在發生,而且非常危險。

\\切勿以明文形式儲存api金鑰或憑證

\\可以使用secret管理解決方案來儲存這些資料,然後將其繫結到配置工具中

\\\\

首先需要安裝chef development kit(chefdk)。

\\ 如前所述,我們需要乙個recipe來安裝nginx。出於教學的目的,我們將從頭開始建立它,而不是從社群的cookbook中撈乙個出來。

\\ 我們需要建立乙個cookbook。cookbook通常存在於`cookbooks`目錄中,在專案的根目錄執行以下命令:

\\

\mkdir cookbooks
\\

現在讓我們建立乙個cookbook,用於放置我們的新recipe:

\\

\apt_update\\package 'nginx'\\cookbook_file '/var/www/html/index.html' do\  source 'index.html'\  owner 'www-data'\  group 'www-data'\  mode '0755'\  action :create\end
\\

這個檔案中的前兩個命令將執行你期望的操作:\\

這個檔案還不存在,所以需要建立它。首先要建立`檔案`目錄:

\\

\\u0026lt;html lang=\"en-us\"\u0026gt;\  \u0026lt;head\u0026gt;\    \u0026lt;title\u0026gt;hello, world!\u0026lt;/title\u0026gt;\  \u0026lt;/head\u0026gt;\  \u0026lt;body\u0026gt;\    chef has landed.\  \u0026lt;/body\u0026gt;\\u0026lt;/html\u0026gt;
\\
\{\  \"builders\": [{\    \"type\": \"amazon-ebs\

以Chef和Ansible為例快速入門伺服器配置

這篇文章討論了如何在我們的環境中安裝和配置軟體,這個任務通常被稱為伺服器配置 server provisioning 在開始介紹現代化的工具之前,我們來看看最基本且經過實戰考驗的伺服器配置工具 shell指令碼。在chef ansible或puppet出現之前,很多運營團隊使用bash來配置伺服器 ...

以Chef和Ansible為例快速入門伺服器配置

這篇文章討論了如何在我們的環境中安裝和配置軟體,這個任務通常被稱為伺服器配置 server provisioning 在開始介紹現代化的工具之前,我們來看看最基本且經過實戰考驗的伺服器配置工具 shell指令碼。在chef ansible或puppet出現之前,很多運營團隊使用bash來配置伺服器 ...

prop attr區別和用法,以多選框為例

1.比較 相同點 prop和attr作為jquery的方法都可以獲取屬性值 不同點 1 對於html元素本身就帶有的固有屬性,使用prop方法,attr獲取checkbox的checked屬性時選中的時候可以取到值,值為 checked 但沒選中獲取值就是undefined。jq提供新的方法 pro...