您好,登錄后才能下訂單哦!
轉(zhuǎn)載本文需注明出處:微信公眾號EAWorld,違者必究。
引言:
“基礎(chǔ)架構(gòu)即代碼(Infrastructure-as-Code,IaC)”是一種使用新的技術(shù)來構(gòu)建和管理動(dòng)態(tài)基礎(chǔ)設(shè)施的方式。它把基礎(chǔ)設(shè)施、工具和服務(wù)以及對基礎(chǔ)設(shè)施的管理本身作為一個(gè)軟件系統(tǒng),采納軟件工程實(shí)踐以結(jié)構(gòu)化的安全的方式來管理對系統(tǒng)的變更。
通過第三方調(diào)查報(bào)告顯,F(xiàn)orrester咨詢公司在一項(xiàng)針對擁有1000多名員工的企業(yè)的727名云技術(shù)決策者的全球調(diào)查中發(fā)現(xiàn),業(yè)務(wù)優(yōu)先級的轉(zhuǎn)變正在推動(dòng)企業(yè)采用多云戰(zhàn)略。根據(jù)該研究,絕大多數(shù)的受訪者將其當(dāng)前的云計(jì)算策略描述為多云策。
根據(jù)該研究,絕大多數(shù)的受訪者將其當(dāng)前的云計(jì)算策略描述為多云策略,其性能和創(chuàng)新已超越成本節(jié)約成為了成功的最佳衡量標(biāo)準(zhǔn)。此外,60%的企業(yè)現(xiàn)在正在遷移或已經(jīng)將關(guān)鍵任務(wù)應(yīng)用程序遷移到公有云上。
如今,大多數(shù)企業(yè)都采用多云策略來優(yōu)化性能并實(shí)現(xiàn)業(yè)務(wù)目標(biāo)。該研究指出,“沒有一個(gè)單一的云平臺(tái)可以滿足所有企業(yè)工作負(fù)載需求?!币虼?,企業(yè)正在利用多個(gè)共有云和私有云來處理不同的應(yīng)用程序工作負(fù)載。在將工作負(fù)載與云環(huán)境相匹配時(shí),性能是大多數(shù)企業(yè)的首要考慮因素,甚至超過了合規(guī)性與安全性。
接受調(diào)查的IT領(lǐng)導(dǎo)者展示了對多云平臺(tái)的各種使用案例,并認(rèn)為多云策略可以帶來諸多好處,比如改進(jìn)的IT基礎(chǔ)架構(gòu)管理和靈活性(33%),更好的IT成本管理(33%)以及提高安全性和合規(guī)性(30%)。此外,該研究還發(fā)現(xiàn),在選擇云服務(wù)供應(yīng)商時(shí),企業(yè)更喜歡能提供更深層次幫助和支持的供應(yīng)商。
企業(yè)更多采用云服務(wù),讓物理機(jī)銷量出現(xiàn)了10年來首次負(fù)增長。6月18日,市場研究機(jī)構(gòu)IDC公布最新數(shù)據(jù),2019年第一季度中國市場物理機(jī)出貨量下跌0.7%,全球市場物理機(jī)銷量下跌5.1%。這背后是企業(yè)全面向云轉(zhuǎn)移,新舊IT交替出現(xiàn)拐點(diǎn),云計(jì)算市場持續(xù)強(qiáng)勁增長,平均增幅達(dá)40%。云計(jì)算還可以幫助企業(yè)大幅削減IT成本,還具有彈性擴(kuò)容、按需使用、按量付費(fèi)、成本低等明顯優(yōu)勢,已經(jīng)成為企業(yè)數(shù)字化轉(zhuǎn)型的基礎(chǔ)設(shè)施?;ヂ?lián)網(wǎng)、政府、電信和金融等行業(yè)已經(jīng)把自己遷移至云上,不再獨(dú)立采購物理服務(wù)器。
“基礎(chǔ)架構(gòu)即代碼(Infrastructure-as-Code,IaC)”是一種使用新的技術(shù)來構(gòu)建和管理動(dòng)態(tài)基礎(chǔ)設(shè)施的方式。它把基礎(chǔ)設(shè)施、工具和服務(wù)以及對基礎(chǔ)設(shè)施的管理本身作為一個(gè)軟件系統(tǒng),采納軟件工程實(shí)踐以結(jié)構(gòu)化的安全的方式來管理對系統(tǒng)的變更。
從開發(fā)的角度看提倡一切皆對象,從操作系統(tǒng)的角度看提倡一切皆文件,那么在多云化的時(shí)代我們應(yīng)該提倡把一切資源皆代碼,通過代碼的方式編排和管理我們的基礎(chǔ)資源,這樣才能滿足企業(yè)業(yè)務(wù)快速發(fā)展的需求。
針對一個(gè)復(fù)雜的業(yè)務(wù)系統(tǒng)我們?nèi)绾谓柚贫说膬?yōu)勢進(jìn)行部署?
傳統(tǒng)手工的部署方式大致要通過以上8個(gè)步驟完成一個(gè)應(yīng)用的部署,如果我們的公有云環(huán)境是多個(gè),那么就意味著以上步驟要重復(fù)多次,這還僅僅是一個(gè)簡單的web環(huán)境,如果我們要部署的是一套業(yè)務(wù)系統(tǒng),涉及多個(gè)應(yīng)用系統(tǒng)的創(chuàng)建,我們的基礎(chǔ)平臺(tái)交付需要多長時(shí)間?顯然通過手工的方式是不現(xiàn)實(shí)的。
我們需要通過infrastructure as code的方式來管理我們的基礎(chǔ)架構(gòu),構(gòu)建企業(yè)自己的技術(shù)中臺(tái)。
基礎(chǔ)設(shè)施即代碼四項(xiàng)關(guān)鍵原則:
可再生性:環(huán)境中的任何元素可以輕松復(fù)制。
一致性:無論何時(shí),創(chuàng)建的環(huán)境各個(gè)元素的配置是完全相同的。
快速反饋:能夠頻繁、容易地進(jìn)行變更,并快速知道變更是否正確。
可見性:所有對環(huán)境的變更應(yīng)該容易理解、可審計(jì)、受版本控制。
基礎(chǔ)設(shè)施即代碼的目標(biāo):
標(biāo)準(zhǔn)化:以代碼來定義環(huán)境,實(shí)現(xiàn)開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境的標(biāo)準(zhǔn)化。
自動(dòng)化:以自動(dòng)化工具來驅(qū)動(dòng)代碼準(zhǔn)備環(huán)境。包括創(chuàng)建環(huán)境、更新環(huán)境以及銷毀環(huán)境。
可視化:以監(jiān)控來可視化環(huán)境信息。環(huán)境當(dāng)前狀態(tài)可視、環(huán)境變更歷史可視化、可追溯。
infrastructure as code 的工具有哪些:
Microsoft為用戶提供的IaC工具是:Azure Resource Manager。用戶可以通過Azure Resource Manager(ARM)的不同模板,配置出自己的基礎(chǔ)架構(gòu)、并處理各種依賴項(xiàng)??梢栽谀0逯惺褂媚切┮言贘SON中聲明描述了的資源,也可以在同一個(gè)ARM模板中聲明多個(gè)Azure資源,以構(gòu)建整體性的項(xiàng)目環(huán)境。ARM模板具有冪等性,因此可以無限次數(shù)地重復(fù)使用相同的模板,并獲得相同的結(jié)果。Resource Manager還支持服務(wù)器的實(shí)例分組、以及對不同分組的統(tǒng)一管理。
CloudFormation是專為那些在AWS云中工作的用戶而設(shè)計(jì)的。目前已經(jīng)配置了342種AWS資源類型。允許使用JSON或YAML定制各種模板來構(gòu)建不同復(fù)雜程度的基礎(chǔ)架構(gòu)模型。
(CDM)是基于Google云平臺(tái)的配置文件(YAML)和模板(JINJA2或PYTHON)的一種自動(dòng)化執(zhí)行工具。它允許用戶自行定義和同步部署各種系統(tǒng)資源。Google CDM也支持預(yù)覽功能。這意味著:您在不直接提交更改的情況下,便可以直接了解到部署和變更所帶來的影響??梢詭椭脩舯苊獬霈F(xiàn)人為的錯(cuò)誤,還能夠起到加強(qiáng)與穩(wěn)定整體基礎(chǔ)架構(gòu)的作用。
Terraform 是一個(gè)IT基礎(chǔ)架構(gòu)自動(dòng)化編排工具,可以用代碼來管理維護(hù) IT 資源。Terraform的命令行接口 (CLI) 提供一種簡單機(jī)制,用于將配置文件部署到任意支持的云上,并對其進(jìn)行版本控制。通過配置文件可以描述云資源的拓?fù)浠A(chǔ)架構(gòu)。
Terraform 支持的服務(wù)商眾多
安裝Terraform簡單
Terraform 可以隨意部署在任意的客戶端上,只要可以連通公網(wǎng)即可(Initializing provider plugins and Call Cloud OpenAPI) ,通過http://1t.click/vND下載對應(yīng)平臺(tái)的可執(zhí)行二進(jìn)制包,解壓出來Executable Binary 放指定目錄,配置好相應(yīng)的PATH則可使用terraform 指令。
$ terraform Usage: terraform [--version] [--help] <command> [args] Common commands: apply Builds or changes infrastructure console Interactive console for Terraform interpolations destroy Destroy Terraform-managed infrastructure fmt Rewrites config files to canonical format get Download and install modules for the configuration graph Create a visual graph of Terraform resources import Import existing infrastructure into Terraform init Initialize a new or existing Terraform configuration output Read an output from a state file plan Generate and show an execution plan providers Prints a tree of the providers used in the configuration push Upload this Terraform module to Terraform Enterprise to run refresh Update local state file against real resources show Inspect Terraform state or plan taint Manually mark a resource for recreation untaint Manually unmark a resource as tainted validate Validates the Terraform files version Prints the Terraform version workspace Workspace management
整個(gè)基礎(chǔ)架構(gòu)的建設(shè)只需要terraform init,terraform plan , terraform apply 三步來完成。刪除整個(gè)環(huán)境只需要terraform destroy一步來完成。
通過一個(gè)main.tf文件(只需要是.tf 文件)定義了ECS(鏡像、實(shí)例類型)、VPC(CIDR、VPC Name)、OSS資源(ACL、實(shí)例Name)信息,通過Terraform 對資源配置參數(shù)做解析,調(diào)用阿里cloud OpenAPI 進(jìn)行資源校驗(yàn)于創(chuàng)建,同時(shí)把整個(gè)資源創(chuàng)建狀態(tài)化到一個(gè).tf.state文件中,基于該文件則可以得知資源創(chuàng)建的所有信息,包括資源數(shù)量調(diào)整,規(guī)格調(diào)整,實(shí)例變更都依賴這種非常重要的文件。
terraform 具體使用案例
通過配置main.tf文件定義各種資源
定義認(rèn)證資源
} # Configure the Alicloud Provider provider "alicloud" { access_key = "${var.access_key}" secret_key = "${var.secret_key}" region = "${var.region}"
定義云主機(jī)資源
# Create a web server resource "alicloud_instance" "web" { # cn-beijing provider = "alicloud" availability_zone = "cn-beijing-a" image_id = "ubuntu_140405_32_40G_cloudinit_20161115.vhd" internet_charge_type = "PayByBandwidth" instance_type = "ecs.n1.medium" io_optimized = "optimized" system_disk_category = "cloud_efficiency" security_groups = ["${alicloud_security_group.default.id}"] instance_name = "web" }
定義安全組資源
# Create security group resource "alicloud_security_group" "default" { name = "default" provider = "alicloud" description = "default" } resource "alicloud_security_group_rule" "allow_all_tcp" { type = "ingress" ip_protocol = "tcp" nic_type = "intranet" policy = "accept" port_range = "1/65535" priority = 1 security_group_id = "${alicloud_security_group.default.id}" cidr_ip = "0.0.0.0/0" }
定義輸出結(jié)果信息
# Output message output "ecs instance name" { value = "${alicloud_instance.web.instance_name}" } output "ecs private ip" { value = "${alicloud_instance.web.private_ip}" }
terraform init
$ terraform init Initializing provider plugins... - Checking for available provider plugins on https://releases.hashicorp.com... - Downloading plugin for provider "alicloud" (0.1.0)... The following providers do not have any version constraints in configuration, so the latest version was installed. To prevent automatic upgrades to new major versions that may contain breaking changes, it is recommended to add version = "..." constraints to the corresponding provider blocks in configuration, with the constraint strings suggested below. * provider.alicloud: version = "~> 0.1" Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work.
執(zhí)行terraform plan,查看資源創(chuàng)建計(jì)劃
An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: + alicloud_instance.web id: <computed> allocate_public_ip: "false" availability_zone: "cn-beijing-a" host_name: <computed> image_id: "ubuntu_140405_32_40G_cloudinit_20161115.vhd" instance_name: "web" instance_type: "ecs.n1.medium" internet_charge_type: "PayByBandwidth" io_optimized: "optimized" private_ip: <computed> public_ip: <computed> security_groups.#: <computed> status: <computed> subnet_id: <computed> system_disk_category: "cloud_efficiency" system_disk_size: <computed> + alicloud_security_group.default id: <computed> description: "default" name: "default" Plan: 2 to add, 0 to change, 0 to destroy.
執(zhí)行terraform apply,在云端創(chuàng)建資源
$ terraform apply alicloud_security_group.default: Creating... description: "" => "default" name: "" => "default" alicloud_security_group.default: Creation complete after 1s (ID: sg-2zec9v8aq2hgb244qrqf) alicloud_instance.web: Creating... allocate_public_ip: "" => "false" availability_zone: "" => "cn-beijing-a" host_name: "" => "<computed>" image_id: "" => "ubuntu_140405_32_40G_cloudinit_20161115.vhd" instance_name: "" => "web" instance_type: "" => "ecs.n1.medium" internet_charge_type: "" => "PayByBandwidth" io_optimized: "" => "optimized" private_ip: "" => "<computed>" public_ip: "" => "<computed>" security_groups.#: "" => "1" security_groups.2344301974: "" => "sg-2zec9v8aq2hgb244qrqf" status: "" => "<computed>" subnet_id: "" => "<computed>" system_disk_category: "" => "cloud_efficiency" system_disk_size: "" => "<computed>" alicloud_instance.web: Still creating... (10s elapsed) alicloud_instance.web: Still creating... (20s elapsed) alicloud_instance.web: Creation complete after 51s (ID: i-2zedvfowy4m39sg1xdig) Apply complete! Resources: 2 added, 0 changed, 0 destroyed. Outputs: ecs instance name = web ecs private ip = 10.31.28.93
我們可以將我們的應(yīng)用系統(tǒng)通過Packer打包成鏡像存儲(chǔ)到公有云。
結(jié)合Terraform 在公有云部署云主機(jī)時(shí)拉取自定義鏡像文件生成云主機(jī),并對公有云的資源進(jìn)行統(tǒng)一的配置和管理。
通過結(jié)合Ansible對公有云的應(yīng)用進(jìn)行統(tǒng)一的維護(hù)和管理。
我們在整個(gè)軟件開發(fā)生命周期的過程中,其中基礎(chǔ)環(huán)境的制備是非常重要的一環(huán),也是從開發(fā)到測試再到生產(chǎn)部署最靠近底層的一環(huán),我們可以借助IaC既能滿足基礎(chǔ)架構(gòu)的快速部署,又能靈活的使用私有云或公有云資源,充分利用公有云的優(yōu)勢為企業(yè)服務(wù),同時(shí)降低企業(yè)成本投入,做到真正的按需付費(fèi)。
將基礎(chǔ)結(jié)構(gòu)部署到多個(gè)云
Terraform適用于多云方案,將相類似的基礎(chǔ)結(jié)構(gòu)部署到阿里云、其他云提供商或者本地?cái)?shù)據(jù)中心。開發(fā)人員能夠使用相同的工具和相似的配置文件同時(shí)管理不同云提供商的資源。
自動(dòng)化管理基礎(chǔ)結(jié)構(gòu)
Terraform能夠創(chuàng)建配置文件的模板,以可重復(fù)、可預(yù)測的方式定義、預(yù)配和配置ECS資源,減少因人為因素導(dǎo)致的部署和管理錯(cuò)誤。能夠多次部署同一模板,創(chuàng)建相同的開發(fā)、測試和生產(chǎn)環(huán)境。
基礎(chǔ)架構(gòu)即代碼(Infrastructure as Code)
可以用代碼來管理維護(hù)資源。允許保存基礎(chǔ)設(shè)施狀態(tài),從而使您能夠跟蹤對系統(tǒng)(基礎(chǔ)設(shè)施即代碼)中不同組件所做的更改,并與其他人共享這些配置 。
降低開發(fā)成本
可以通過按需創(chuàng)建開發(fā)和部署環(huán)境來降低成本,讓企業(yè)真正做到按需付費(fèi)。
資料來源:Forrester調(diào)查報(bào)告、財(cái)經(jīng)網(wǎng)、云有料、博客園、阿里云
精選提問:
問1:Terraform能完成不同公有云間的遷移嗎?
答:terraform只做環(huán)境管理,不做數(shù)據(jù)遷移。
問2:有沒有不同公有云遷移的工具推薦?
答:目前各公有云有本地?cái)?shù)據(jù)中心向公有云遷移到工具,各公有云之間遷移暫時(shí)沒有。
問3:能說下Terraform 和 Terragrunt 的區(qū)別嗎?
答:terragrunt 是一家咨詢公司寫的軟件在terraform外邊wrap了一層。
問4:Terraform 的status狀態(tài)怎么來管理的?
答:狀態(tài)文件可以存在一個(gè)文件里,這個(gè)文件可以是本地,也可以是遠(yuǎn)程的共享存儲(chǔ)上。terraform主持workspaces,各團(tuán)隊(duì)可以維護(hù)自己的狀態(tài)文件。
問5:ansible也可以做基礎(chǔ)設(shè)施管理,terraform和它對比的優(yōu)勢在哪里?
答:terraform在對接各云供應(yīng)商已有成熟的接口,在社區(qū)也有成熟的模塊,在使用上可以標(biāo)準(zhǔn)化,也可以降低管理和使用的復(fù)雜度。
關(guān)于EAWorld:微服務(wù),DevOps,數(shù)據(jù)治理,移動(dòng)架構(gòu)原創(chuàng)技術(shù)分享。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。