系列文章
前言
聊到 Terraform, 必然繞不開 IaC 這個概念?那麼,什麼是 IaC? ?
基本概念
基礎架構即程式碼 (Infrastructure as Code, IaC) 是指透過程式碼而不是手動流程/控制檯點選來管理和配置基礎架構。
這裡有 2 個關鍵詞:
- Infrastructure
- Code
Infrastructure 是被管理物件,在這裡,主要是指公有云(還有私有云、混合雲等).
Code 是管理方式,即像管理程式碼一樣管理公有云資源。那麼管理程式碼最重要的部分: 版本管理是繞不開的。
使用 IaC,建立的配置檔案包含了基礎設施的 spec,這使得編輯和分發配置變得更加容易。IaC 還確保每次都提供相同的環境、相同的資源、相同的配置。透過編輯和記錄配置的 spec,IaC 有助於避免未記錄的、臨時的配置更改(當然,前提是所有人都使用 IaC,而不是還會有人在控制檯點選修改導致配置漂移)。
版本控制是 IaC 的重要組成部分,配置檔案應該像任何其他軟體原始碼檔案一樣受到原始碼控制。
另外,隨著公有云的發展,公有云的標準化的 API 也使得將基礎架構元件模組化 (Terraform 裡叫做 modules) 成為可能,使用者可以像搭積木一樣組合這些基礎的元件。比如:在 AWS 上建個靜態部落格,就可以組合以下元件:
- Route53
- CloudFront
- S3
IaC 的兩種實現方式
有兩種實現 IaC 的方法:宣告式和命令式。
宣告式方法定義了系統的理想狀態,包括需要的資源以及它們應該具有的任何屬性,IaC 工具將自動配置它。
Terraform 就是基於 IaC 宣告式的理念。在 Terraform 流行之前,另一個將宣告式發揚光大的當然是:Kubernetes!
宣告式方法還保留系統物件當前狀態的列表,這使得拆除基礎架構更易於管理。
相反,命令式方法定義了實現所需配置所需的特定命令,然後需要以正確的順序執行這些命令。
典型的就是 Ansible.
IaC 工具通常能夠在兩種方法中執行,但往往更喜歡一種方法而不是另一種方法。
如 Terraform, 它更喜歡宣告式的方法,但是它的 Provider、Modules、函式中仍然殘留不少命令式的方法, 如:local-exec
IaC 的好處
IaC(特別是宣告式的)是隨著公有云而發展起來的。
置備基礎設施歷來是一個耗時且成本高昂的手動過程。現在基礎設施管理已經從資料中心的物理硬體、虛擬化轉移到容器和雲端計算。
藉助雲端計算,基礎設施元件的數量不斷增加,每天都有更多的應用程式釋出到生產環境中,並且基礎設施需要能夠頻繁地啟動、擴充套件和關閉。如果沒有適當的 IaC 實踐,管理當今基礎設施的規模會變得越來越困難。
IaC 可以幫助您的組織管理 IT 基礎設施需求,同時提高一致性並減少錯誤和手動配置。
這, 就是 IaC 的必要性。
好處
- 降低成本
- 提高部署速度
- 減少(手動配置)錯誤
- 提高基礎設施一致性
- 消除配置漂移
Terraform 是 IaC 領域事實上的領導者
毋庸置疑的,Terraform 是 IaC 領域事實上的領導者。
所有主流公有云,私有云,虛擬化,K8s, 容器都有在維護對應的 Terraform Provider 和 Modules.
IaC 工具
IaC 工具有哪些?目前主流的有:
宣告式:
命令式:
為什麼近期流行的都是宣告式的 IaC?
我覺得主要有以下原因:
- Kubernetes 的標杆作用
- 公有云雲資源以及 API 的標準化、規模化
- 具體到雲主機,cloud-init、packer(製作雲映象越來越方便)、不可變基礎設施也是原因之一。
為什麼 IaC 對 DevOps 很重要?
IaC 是實施 DevOps 實踐和 CI/CD 的重要組成部分。DevOps 和 CI/CD 主要是應用和元件層面的, 而 IaC 消除了開發人員的大部分配置工作,開發人員可以執行指令碼讓他們的基礎設施準備就緒。
這樣一來,應用程式部署就不會因等待基礎架構而停止,系統管理員也不需要管理耗時的手動流程。那麼整個開發部署迭代的流程就會越來越快, 越來越快。..
IaC 幫助您協調開發和運維,因為兩個團隊可以在程式碼倉庫中看到基礎架構全貌。
而且每個環境都可以使用相同的部署過程。環境一致性也有保障,開發上測試透過的,生產上出問題的機率也小。
DevOps 最佳實踐也適用於 IaC 中的基礎架構。基礎設施可以透過與應用程式在軟體開發期間相同的 CI/CD 管道,對基礎設施程式碼應用相同的測試和版本控制。將 IaC 的 modules 程式碼也引入 DevOps 理念,快速測試,快速迭代。
總結
IaC 是什麼?基礎架構即程式碼 (Infrastructure as Code, IaC) 是指透過程式碼而不是手動流程/控制檯點選來管理和配置基礎架構。
IaC 有宣告式和命令式兩種實現方式,現在更主流的是宣告式的。
為什麼需要 IaC? 隨著雲端計算帶來的大量基礎設施,IaC 已成必備工具。
IaC 也可以和 DevOps 流程/理念相契合。