
如何自動化安裝伺服器?哪些基礎設施/系統適合我們的需求?
我們有 10 多台實體伺服器,擁有 100 多台虛擬機,其中大部分是 LAMP。不是太多,但也沒有任何可以自行繼續工作的東西。所有伺服器都有 KVM 虛擬化。我們為客戶託管各種經常修改的客製化應用程式。所以這不是一個需要擴展的單一應用程式。專案團隊直接與客戶和虛擬機器合作,這是一項要求。
我們經常遇到的問題是,重新安裝虛擬機器/機器變得很棘手,因為沒有人控制最近對它們的更改,這會帶來不穩定的風險,人們會盡可能推遲它,並且隨著時間的推移,問題會變得越來越大。
我想至少每 3 個月按需建立一次重新安裝程序。重新安裝應從程式碼儲存庫和備份開始。這不應該是虛擬機器重複。
我們估計,在目前設定中,如果手工完成,每 3 個月將花費約 6 個人月的時間。我們如何才能減少這個時間並提高該過程的可重複性?
問題是什麼軟體可以幫助我們自動完成這項任務。它應該盡可能輕。我們不需要自動節點分配。我們只需要重新安裝盡可能自動化。我們假設每次重新安裝都會受到人工監督。
我們的節點主要是 LAMP,有兩個系統擁有超過 1TB 的結構化資料庫數據,幾個 >200GB 和大約 50 個小型客製化虛擬機器。我們可以輕鬆地安排每個系統的計劃停機時間,因此這不是重裝期間的高可用性問題。
我們只需要盡可能自動化重新安裝。
答案1
您需要一個設定管理框架,例如 Ansible、Saltstack、Puppet 或 Chef。
這是用於管理和應用配置的工具。然而,選擇實際的工具只是該項目的一小部分。
您需要設計和部署流程,其中基礎架構的所有變更都透過此工具進行管理。
這需要:
- 培訓人們使用該工具
- 改變系統架構,如果沒有工具就無法進行更改
- 因應改變人們基本運作模式的阻力
您還應該考慮統一軟體堆疊基礎架構。
如果每個虛擬機器的軟體配置略有不同,您將有
- 不同安裝的組態管理程式碼中有很多重複的程式碼
- 選擇如何應用哪種配置的複雜邏輯
這些因素中的任何一個都會增加大量的維護開銷,最終結果可能會變得像您當前的情況一樣痛苦。
答案2
您的雲端有 API 金鑰嗎?
大多數雲都有一鍵式 LAMP 影像,例如
烏爾特爾:https://www.vultr.com/apps/lamp/
數位海洋:https://marketplace.digitalocean.com/apps/lamp
易諾德:https://www.linode.com/docs/guides/lamp-stack-marketplace-app/
如果沒有,我的絕對首選是 VestaCPhttps://vestacp.com/install/
兩者都增加了 apache 後端、nginx 前端、MySQL/mariadb/postgres 和 php/php-fpm。也是所有可選的。
對於更新,我將建立一個單獨的伺服器,在該單獨的伺服器中放置一個通用的 SSH 公鑰/root/.ssh/authorized_keys
,該金鑰可以自動登入每個伺服器,如下所示:
INSTANCES=(
10.0.0.5
10.0.0.6
10.0.0.7
...
)
for INSTANCE in "${INSTANCES[@]}"; do
ssh root@${INSTANCE} /bin/bash -c "apt update -y && apt upgrade -y"
done
這幾乎是 Terraform、Kubernetes 等 DIY。
另外,在 GitHub 上,還有大量特定於雲端的指南,例如:
另一種數位海洋:https://github.com/ethanbeyer/DigitalOcean-Droplet-Setup
AWS 之一:https://github.com/elionaz/aws-LAMP/blob/master/install_lamp.sh