在現代 IT 環境中,虛擬機器的生命週期管理涉及許多重複性任務,例如建立、修改、除役等。透過 Terraform 作為基礎設施即程式碼工具,搭配 SaltStack 或 Azure DevOps,可以有效自動化這些流程。本文將說明如何結合這些工具,實作 VM 生命週期管理的自動化,並整合 ServiceNow 處理請求與通知。首先,利用 Terraform 建立和管理 VM,並使用 SaltStack 進行組態管理,確保 VM 符合組織規範。接著,探討如何透過 Terraform Provisioners 觸發 SaltStack Minion 安裝,並將其註冊到 SaltStack Master,自動應用所需的狀態設定。此外,也涵蓋如何利用 Terraform 自動化 VM 的除役流程,包含從監控系統移除、執行最終備份、釋放防火牆埠口等預先任務,以及最後移除 VM 資源並釋放 IP 地址。對於修改 VM 組態的需求,則說明如何透過 Terraform 模組實作自動化變更,並整合 ServiceNow 進行請求提交、審核和通知。最後,本文也介紹了 Terraform 與 Azure DevOps 的整合,包含使用 Azure Repos 進行版本控制,以及 Azure Pipelines 建立 CI/CD Pipeline,自動化執行 Terraform 的 plan 和 apply 命令,並結合 SaltStack 主控節點進行 VM 內部和應用程式的變更管理。
使用 Terraform 和 SaltStack 自動化虛擬機器管理
在 IT 操作中,許多工是重複性的。IT 基礎設施管理員每天都會接到以下樣本請求:
- 建立虛擬伺服器
- 取消佈署虛擬伺服器
- 變更虛擬伺服器大小
- 為虛擬伺服器新增磁碟
- 擴充套件虛擬伺服器現有磁碟
- 為虛擬伺服器新增網路介面
這些都是常見的基礎設施需求,而 Terraform 和 SaltStack 這類別工具可以幫助我們自動化這些工作。以下我們將詳細探討這些常見使用案例。
虛擬伺服器:建立
建立虛擬機器是管理員每天都需要處理的最常見任務之一。這個過程通常非常複雜,因為管理員需要處理多種依賴關係、遵循大量後續佈署流程、安裝工具、組態機器等。然而,透過 Terraform 和 SaltStack 等基礎設施自動化和組態管理工具,我們可以實作從頭到尾的自動化佈署,無需手動介入。
自動化建立虛擬機器的工作流程
此圖示展示了自動化 VM 建立的工作流程:
工作流程詳細說明
端使用者提交ServiceNow請求: 使用者可以在 ServiceNow 中提交一個目錄專案來建立 VM。目錄提供自助服務,使用者只需提供詳細資訊,如 VM 大小、儲存和網路需求。他們還可以選擇備份和監控策略、安全性和防火牆埠,以便與其他基礎設施佈署進行互動。
請求資源佈署: 提交的需求將被對映到 Terraform 模組,以在目標平台上佈署資源。這些平台可以是任何被 Terraform 支援的平台。
Terraform計劃並尋求核准: Terraform 可以執行計劃並尋求基礎設施管理員的核準。管理員可以驗證所需容量、成本和 VM 要求,然後批准 Terraform 的佈署。Terraform Enterprise 和 Terraform Cloud 版本提供了核准工作流程的整合。請注意,這是一個可選步驟,因為我們可以組態 Terraform 請求為「自動核准」,並在該情況下直接在目標平台上佈署資源。
安裝SaltStack Minion: Terraform 可以透過 Terraform Provisioners 呼叫 SaltStack Minion 安裝。SaltStack 是 VM 組態管理所必需的。請注意,有多種方式進行組態管理,例如在雲端應用 VM 政策等。使用專門的組態管理工具(如 SaltStack)可以使管理員更容易管理資源的完整生命週期。
Minion註冊至SaltStack Master: Terraform 可以透過傳遞 Minion 鑰匙並呼叫主伺服器上的接受請求來將 Minion 與 SaltStack Master 註冊。我們將在本章節的實作練習中更詳細說明此過程。
應用SaltStack狀態: 一旦 SaltStack Minion 被接受,SaltStack Master 就可以觸發 VM 的狀態檔案。意即管理員可以定義 SaltStack 狀態以將常見組織政策應用到環境中佈署的所有資源上。例如,所有 VM 必須加入域;其他範例包括應用最新補丁、強制執行安全標準、使用備份代理等。SaltStack 狀態可以確保這些工具正確安裝在新 VM 上並正確組態。
SaltStack Master確認狀態應用成功: 一旦 SaltStack 狀態成功應用,SaltStack Master 就可以向 ServiceNow 提供確認資訊,表示 VM 已符合所需狀態並準備好供端使用者使用。
ServiceNow通知端使用者完成: ServiceNow 則可以向端使用者確認並完成 VM 建立請求工作流程。這個工作流程可以幫助自動化端使用者每天提交的 VM 建立請求,減輕了管理員的負擔,讓他們能夠專注於基礎設施改進而非重複性任務。
虛擬伺服器:取消佈署
取消佈署虛擬機器是另一個耗時且冗長的任務。因為管理員需要遵循正確的過程來取消佈署 VM。以下是典型 IT 環境中的範例任務:
- 從監控中移除伺服器。
- 按照所需保留期限對伺服器進行最後一次備份。
- 刪除可能與 VM IP 地址相關聯的防火牆規則。
- 離開 IP 地址。
- 摧毀所有與該虛擬機器相關聯的資源。
取消佈署是資源生命週期管理的一部分。這個過程可以使用 Terraform 和 Terraform Provisioners 全面自動化。
自動化取消佈署虛擬機器
自動化取消佈署流程
工作流程詳細說明
端使用者提交ServiceNow請求: 使用者在 ServiceNow 中提交一個目錄專案來取消佈署 VM。他們只需提供詳細資訊以便於取消佈署操作。
Terraform計劃並移除監控: 提交的需求將被對映到 Terraform 模組來移除監控專案。
Terraform執行備份: 按照所需保留期限對伺服器進行最後一次備份。
Terraform刪除防火牆規則: 則刪除可能與 VM IP 地址相關聯的防火牆規則。
Terraform釋放IP地址: 離開 IP 地址以供其他使用。
Terraform摧毀相關資源: 摧毀所有與該虛擬機器相關聯的資源。
透過使用這些技術和方法,我們可以有效地自動化 VM 的建立和取消佈署工作流程,從而提高效率並減少人為錯誤。
透過 Terraform 管理與自動化 VM 生命週期
在現代雲端運算環境中,虛擬機器(VM)的管理與生命週期自動化是一項關鍵任務。Terraform 作為一款強大的基礎設施即程式碼(Infrastructure as Code, IaC)工具,能夠幫助我們有效地管理和自動化 VM 的各個階段。本文將探討如何利用 Terraform 來管理 VM 的生命週期,特別是焦點將放在 VM 的除役(decommission)與修改(modification)流程上。
VM 除役流程
VM 除役是指將不再需要的 VM 從系統中完全移除,這包括從監控系統、備份系統以及其他相關服務中解除繫結。以下是一個典型的 VM 除役流程:
提交請求
首先,端使用者需要在票務系統(例如 ServiceNow)中提交一個除役請求。這個請求需要包含所有必要的資訊,如 VM 的詳細資料、最終備份保留時間等。這些資訊將用於後續的自動化流程中。
匯入現有資源
如果該 VM 尚未被 Terraform 管理,則需要先將其匯入 Terraform。這個過程涉及生成當前時刻的組態檔案,這樣可以避免依賴 Terraform 的狀態檔案。成功匯入後,VM 將完全受到 Terraform 的控制。
呼叫 Terraform 模組
在成功匯入 VM 後,Terraform 的除役模組會根據 ServiceNow 中的資訊被呼叫。這個模組會執行一系列的任務來準備 VM 的除役。
調整計畫並取得批准
Terraform 可以生成調整計畫並向基礎設施管理員尋求批准。管理員可以檢查調整計畫並批准或拒絕除役請求。這個步驟可以選擇性地設定為自動批准,這樣 Terraform 可以直接在目的平台上進行除役。
執行預先任務
在真正開始除役之前,Terraform 可以呼叫各種預先任務,例如:
- 從中央監控工具中移除 VM
- 透過備份平台的 REST API 做最終備份
- 釋放先前在防火牆中組態的埠口
執行除役
當所有預先任務完成後,Terraform 會進行真正的除役操作,完全移除與 VM 相關的所有資源。最後,Terraform 會釋放與該 VM 相關的 IP 地址。
傳回狀態並關閉請求
Terraform 會向服務請求系統傳回除役狀態,ServiceNow 則會通知端使用者並關閉該服務請求。
此圖示展示了完整的 VM 除役流程。每一步都由 Terraform 自動化完成,從而減少了人為干預的需求。
內容解密:
- 端使用者提交請求:端使用者透過 ServiceNow 提交除役請求,包含所有必要的資訊。
- 確認資源匯入:如果 VM 沒有被 Terraform 控制,則需要先進行資源匯入。
- 呼叫 Terraform 模組:根據 ServiceNow 中的資訊呼叫 Terraform 的除役模組。
- 調整計畫並取得批准:Terraform 生成調整計畫並向管理員尋求批准。
- 執行預先任務:包括從監控工具移除、做最終備份、釋放防火牆埠口等。
- 執行除役:完成所有預先任務後進行真正的資源移除。
- 傳回狀態並關閉請求:Terraform 傳回狀態給 ServiceNow,ServiceNow 再通知端使用者並關閉請求。
VM 修改流程
除了除役之外,VM 的修改也是一項常見的操作。這些修改可能包括變更 VM 組態、增加新的資源(如磁碟或網路卡)或修改現有資源(如增加 vCPU 或記憶體)。以下是一個典型的 VM 修改流程:
此圖示展示了完整的 VM 修改流程。每一步都由 Terraform 自動化完成,從而減少了人為干預的需求。
內容解密:
- 端使用者提交修改請求:端使用者透過 ServiceNow 提交修改請求,提供詳細的修改需求。
- 確認資源匯入:如果 VM 沒有被 Terraform 控制,則需要先進行資源匯入。
- 呼叫 Terraform 模組:根據 ServiceNow 中的資訊呼叫 Terraform 的修改模組。
- 調整計畫並取得批准:Terraform 生成調整計畫並向管理員尋求批准。
- 執行修改:完成所有預先任務後進行真正的資源變更。
- 傳回狀態並關閉請求:Terraform 傳回狀態給 ServiceNow,ServiceNow 再通知端使用者並關閉請求。
推薦措施與觀察
在實際應用中,我們發現以下幾點值得注意:
- 自動化程度:高度自動化能夠大幅降低人為錯誤和操作時間。
- 安全性考量:在每個步驟中都需要嚴格的安全檢查和授權機制。
- 監控與報告:每個操作步驟都應該有詳細的監控和報告機制,以便及時發現和處理問題。
透過以上流程和技術手段,我們可以有效地管理和自動化 VM 的生命週期,從而提高維運效率和降低風險。
Terraform 與 DevOps 整合流程
Terraform 是一個開源的基礎設施即程式碼(Infrastructure as Code, IaC)工具,能夠幫助開發者管理和組態雲端資源。當與 DevOps 流程整合時,Terraform 能夠顯著提升基礎設施管理的自動化程度,並縮短軟體開發生命週期。以下是玄貓對於 Terraform 與 Azure DevOps 整合的詳細說明。
1. 需求收集與準備
首先,需要收集並準備好所有的需求資訊。這些需求通常包括虛擬機器(VM)大小、額外儲存空間和網路需求等。這些資訊由終端使用者提交至服務請求系統。
在這個階段,如果某個 VM 尚未受到 Terraform 管理,可以在工作流程中加入匯入邏輯,將現有資源匯入到 Terraform 管理中。這樣可以生成時間點的組態檔案,從而移除對 Terraform 狀態檔案的依賴。新的匯入邏輯能夠確保與 Terraform 管理下的自動化的一致性和效率。成功匯入後,VM 就會受到 Terraform 的控制。
2. 對映需求至 Terraform 模組
一旦需求被提交,就可以將它們對映到所需的 Terraform 模組,以進行現有資源在目標平台上的修改。這些平台可以是任何被 Terraform 支援的平台。
3. 執行計劃與取得批准
Terraform 能夠執行計劃並向基礎設施管理員尋求批准。管理員可以驗證所需的容量、成本以及 VM 的修改計劃,然後透過 Terraform 推動變更。Terraform Enterprise 和 Terraform Cloud 版本提供了由基礎設施管理員進行批准工作流程的整合。請注意,這是一個可選步驟,因為我們也可以在 Terraform 中組態自動批准請求,這樣 Terraform 就會直接在目標平台上佈署資源。
4. 基礎設施修改
當 Terraform 在基礎設施上完成所需的修改後,控制權可以交給 SaltStack 主控節點,進一步處理並在 VM 主機作業系統上進行所需的修改(如果需要)。由於 SaltStack 是一個組態管理工具,因此對於在虛擬機器內部及應用程式上的變更具有更好的控制能力。
5. 工作流程結束
當 SaltStack 主控節點完成使用者所需的變更後,可以向 ServiceNow 請求目錄發回確認,該目錄會追蹤整個工作流程。ServiceNow 確認流程已完成後,VM 修改請求工作流程結束。
此圖示展示了 Terraform 與 DevOps 的整合流程
Azure Repos 與 Azure Pipelines
Azure Repos
Azure Repos 是一個版本控制工具,用於追蹤開發過程中程式碼的變更。例如,Terraform 組態檔案(main.tf)可以儲存在 Azure Repos 中,任何對該檔案的變更都可以透過版本控制來追蹤。
Azure Pipelines
Azure Pipelines 提供持續交付和持續整合功能,能夠對程式碼進行測試並將其佈署到指定目標。Pipelines 支援多種程式語言,包括 Python、PHP、C/C++ 等。
整合流程
以下是Terraform 與 Azure DevOps 整合的步驟:
生成組態檔案
第一步需要生成一個組態檔案。這個檔案可以透過反向工程邏輯生成,或者由使用者每次新建。
編寫和測試程式碼
將組態檔案推播到 Azure Repos 中進行版本控制。 在 Azure Pipelines 中設定 CI/CD Pipeline,執行測試並將程式碼佈署到目標環境。
執行計劃
在 Pipelines 中執行 Terraform 的 plan 命令,生成執行計劃並等待批准。
應用變更
取得批准後,執行 apply 命令應用變更。
驗證和反饋
完成後透過 SaltStack 主控節點進行進一步處理並確認變更。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Terraform 與 SaltStack/Azure DevOps 自動化 VM 生命週期管理
package "Kubernetes Cluster" {
package "Control Plane" {
component [API Server] as api
component [Controller Manager] as cm
component [Scheduler] as sched
database [etcd] as etcd
}
package "Worker Nodes" {
component [Kubelet] as kubelet
component [Kube-proxy] as proxy
package "Pods" {
component [Container 1] as c1
component [Container 2] as c2
}
}
}
api --> etcd : 儲存狀態
api --> cm : 控制迴圈
api --> sched : 調度決策
api --> kubelet : 指令下達
kubelet --> c1
kubelet --> c2
proxy --> c1 : 網路代理
proxy --> c2
note right of api
核心 API 入口
所有操作經由此處
end note
@enduml
內容解密:
此圖示展示了Terraform 與Azure DevOps整合之流程圖。
- 生成組態檔案:開始於生成Terraform 的組態檔案。
- 推播到 Azure Repos:將組態檔案推播至Azure Repos進行版本控制。
- CI/CD Pipeline:使用Azure Pipelines進行持續整合與持續交付。
- Terraform Plan:在Pipelines中執行Terraform 的
plan命令。 - Terraform Apply:取得批准後執行
apply命令應用變更。 - SaltStack 主控節點處理:透過SaltStack 主控節點完成進一步處理並確認變更。
摘要
透過以上步驟,玄貓詳細說明瞭Terraform 與 Azure DevOps 的整合流程。這種整合能夠顯著提升基礎設施管理的自動化程度,縮短軟體開發生命週期。希望這篇文章能夠幫助讀者更好地理解和實踐Terraform 與 DevOps 的整合。