Terraform 系列-什么是 IaC?
系列文章
? Terraform 系列文章
前言
聊到 Terraform, 必然繞不開(kāi) IaC 這個(gè)概念?那么,什么是 IaC? ?
基本概念
基礎(chǔ)架構(gòu)即代碼 (Infrastructure as Code, IaC) 是指通過(guò)代碼而不是手動(dòng)流程/控制臺(tái)點(diǎn)擊來(lái)管理和配置基礎(chǔ)架構(gòu)。
這里有 2 個(gè)關(guān)鍵詞:
- Infrastructure
- Code
Infrastructure 是被管理對(duì)象,在這里,主要是指公有云(還有私有云、混合云等). Code 是管理方式,即像管理代碼一樣管理公有云資源。那么管理代碼最重要的部分: 版本管理是繞不開(kāi)的。
使用 IaC,創(chuàng)建的配置文件包含了基礎(chǔ)設(shè)施的 spec,這使得編輯和分發(fā)配置變得更加容易。IaC 還確保每次都提供相同的環(huán)境、相同的資源、相同的配置。通過(guò)編輯和記錄配置的 spec,IaC 有助于避免未記錄的、臨時(shí)的配置更改(當(dāng)然,前提是所有人都使用 IaC,而不是還會(huì)有人在控制臺(tái)點(diǎn)擊修改導(dǎo)致配置漂移)。
版本控制是 IaC 的重要組成部分,配置文件應(yīng)該像任何其他軟件源代碼文件一樣受到源代碼控制。 另外,隨著公有云的發(fā)展,公有云的標(biāo)準(zhǔn)化的 API 也使得將基礎(chǔ)架構(gòu)組件模塊化 (Terraform 里叫做 modules) 成為可能,使用者可以像搭積木一樣組合這些基礎(chǔ)的組件。比如:在 AWS 上建個(gè)靜態(tài)博客,就可以組合以下組件:
- Route53
- CloudFront
- S3
IaC 的兩種實(shí)現(xiàn)方式
有兩種實(shí)現(xiàn) IaC 的方法:聲明式和命令式。
聲明式方法定義了系統(tǒng)的理想狀態(tài),包括需要的資源以及它們應(yīng)該具有的任何屬性,IaC 工具將自動(dòng)配置它。
Terraform 就是基于 IaC 聲明式的理念。在 Terraform 流行之前,另一個(gè)將聲明式發(fā)揚(yáng)光大的當(dāng)然是:Kubernetes!
聲明式方法還保留系統(tǒng)對(duì)象當(dāng)前狀態(tài)的列表,這使得拆除基礎(chǔ)架構(gòu)更易于管理。
相反,命令式方法定義了實(shí)現(xiàn)所需配置所需的特定命令,然后需要以正確的順序執(zhí)行這些命令。
典型的就是 Ansible.
IaC 工具通常能夠在兩種方法中運(yùn)行,但往往更喜歡一種方法而不是另一種方法。
如 Terraform, 它更喜歡聲明式的方法,但是它的 Provider、Modules、函數(shù)中仍然殘留不少命令式的方法, 如:local-exec
IaC 的好處
IaC(特別是聲明式的)是隨著公有云而發(fā)展起來(lái)的。
置備基礎(chǔ)設(shè)施歷來(lái)是一個(gè)耗時(shí)且成本高昂的手動(dòng)過(guò)程。現(xiàn)在基礎(chǔ)設(shè)施管理已經(jīng)從數(shù)據(jù)中心的物理硬件、虛擬化轉(zhuǎn)移到容器和云計(jì)算。
借助云計(jì)算,基礎(chǔ)設(shè)施組件的數(shù)量不斷增加,每天都有更多的應(yīng)用程序發(fā)布到生產(chǎn)環(huán)境中,并且基礎(chǔ)設(shè)施需要能夠頻繁地啟動(dòng)、擴(kuò)展和關(guān)閉。如果沒(méi)有適當(dāng)?shù)?IaC 實(shí)踐,管理當(dāng)今基礎(chǔ)設(shè)施的規(guī)模會(huì)變得越來(lái)越困難。
IaC 可以幫助您的組織管理 IT 基礎(chǔ)設(shè)施需求,同時(shí)提高一致性并減少錯(cuò)誤和手動(dòng)配置。
這, 就是 IaC 的必要性。
好處
- 降低成本
- 提高部署速度
- 減少(手動(dòng)配置)錯(cuò)誤
- 提高基礎(chǔ)設(shè)施一致性
- 消除配置漂移
Terraform 是 IaC 領(lǐng)域事實(shí)上的領(lǐng)導(dǎo)者
毋庸置疑的,Terraform 是 IaC 領(lǐng)域事實(shí)上的領(lǐng)導(dǎo)者。
所有主流公有云,私有云,虛擬化,K8s, 容器都有在維護(hù)對(duì)應(yīng)的 Terraform Provider 和 Modules.

IaC 工具
IaC 工具有哪些?目前主流的有:
聲明式:
- Terraform
- AWS CloudFormation(?: 綁定 AWS)
- Pulumi
- CrossPlane
命令式:
- Puppet
- Chef
- Ansible
- SaltStack
為什么近期流行的都是聲明式的 IaC?
我覺(jué)得主要有以下原因:
- Kubernetes 的標(biāo)桿作用
- 公有云云資源以及 API 的標(biāo)準(zhǔn)化、規(guī)?;?/li>
- 具體到云主機(jī),cloud-init、packer(制作云鏡像越來(lái)越方便)、不可變基礎(chǔ)設(shè)施也是原因之一。
為什么 IaC 對(duì) DevOps 很重要?
IaC 是實(shí)施 DevOps 實(shí)踐和 CI/CD 的重要組成部分。DevOps 和 CI/CD 主要是應(yīng)用和組件層面的, 而 IaC 消除了開(kāi)發(fā)人員的大部分配置工作,開(kāi)發(fā)人員可以執(zhí)行腳本讓他們的基礎(chǔ)設(shè)施準(zhǔn)備就緒。
這樣一來(lái),應(yīng)用程序部署就不會(huì)因等待基礎(chǔ)架構(gòu)而停止,系統(tǒng)管理員也不需要管理耗時(shí)的手動(dòng)流程。那么整個(gè)開(kāi)發(fā)部署迭代的流程就會(huì)越來(lái)越快, 越來(lái)越快。..
IaC 幫助您協(xié)調(diào)開(kāi)發(fā)和運(yùn)維,因?yàn)閮蓚€(gè)團(tuán)隊(duì)可以在代碼倉(cāng)庫(kù)中看到基礎(chǔ)架構(gòu)全貌。
而且每個(gè)環(huán)境都可以使用相同的部署過(guò)程。環(huán)境一致性也有保障,開(kāi)發(fā)上測(cè)試通過(guò)的,生產(chǎn)上出問(wèn)題的概率也小。
DevOps 最佳實(shí)踐也適用于 IaC 中的基礎(chǔ)架構(gòu)。基礎(chǔ)設(shè)施可以通過(guò)與應(yīng)用程序在軟件開(kāi)發(fā)期間相同的 CI/CD 管道,對(duì)基礎(chǔ)設(shè)施代碼應(yīng)用相同的測(cè)試和版本控制。將 IaC 的 modules 代碼也引入 DevOps 理念,快速測(cè)試,快速迭代。
總結(jié)
IaC 是什么?基礎(chǔ)架構(gòu)即代碼 (Infrastructure as Code, IaC) 是指通過(guò)代碼而不是手動(dòng)流程/控制臺(tái)點(diǎn)擊來(lái)管理和配置基礎(chǔ)架構(gòu)。
IaC 有聲明式和命令式兩種實(shí)現(xiàn)方式,現(xiàn)在更主流的是聲明式的。
為什么需要 IaC? 隨著云計(jì)算帶來(lái)的大量基礎(chǔ)設(shè)施,IaC 已成必備工具。
IaC 也可以和 DevOps 流程/理念相契合。
參考資料
- 什么是 Terraform 的基礎(chǔ)設(shè)施即代碼?
- What is Infrastructure as Code (IaC)? | RedHat
三人行, 必有我?guī)? 知識(shí)共享, 天下為公. 本文由東風(fēng)微鳴技術(shù)博客 EWhisper.cn 編寫(xiě).
本文僅代表作者觀點(diǎn),版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請(qǐng)?jiān)谖闹凶⒚鱽?lái)源及作者名字。
免責(zé)聲明:本文系轉(zhuǎn)載編輯文章,僅作分享之用。如分享內(nèi)容、圖片侵犯到您的版權(quán)或非授權(quán)發(fā)布,請(qǐng)及時(shí)與我們聯(lián)系進(jìn)行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com





