基礎架構之百變魔方
轉載本文需註明出處:微信公眾號EAWorld,違者必究。
引言:
“基礎架構即程式碼(Infrastructure-as-Code,IaC)”是一種使用新的技術來構建和管理動態基礎設施的方式。它把基礎設施、工具和服務以及對基礎設施的管理本身作為一個軟體系統,採納軟體工程實踐以結構化的安全的方式來管理對系統的變更。
透過第三方調查報告顯,Forrester諮詢公司在一項針對擁有1000多名員工的企業的727名雲技術決策者的全球調查中發現,業務優先順序的轉變正在推動企業採用多雲戰略。根據該研究,絕大多數的受訪者將其當前的雲端計算策略描述為多雲策。
根據該研究,絕大多數的受訪者將其當前的雲端計算策略描述為多雲策略,其效能和創新已超越成本節約成為了成功的最佳衡量標準。此外,60%的企業現在正在遷移或已經將關鍵任務應用程式遷移到公有云上。
如今,大多數企業都採用多雲策略來最佳化效能並實現業務目標。該研究指出,“沒有一個單一的雲平臺可以滿足所有企業工作負載需求。”因此,企業正在利用多個共有云和私有云來處理不同的應用程式工作負載。在將工作負載與雲環境相匹配時,效能是大多數企業的首要考慮因素,甚至超過了合規性與安全性。
接受調查的IT領導者展示了對多雲平臺的各種使用案例,並認為多雲策略可以帶來諸多好處,比如改進的IT基礎架構管理和靈活性(33%),更好的IT成本管理(33%)以及提高安全性和合規性(30%)。此外,該研究還發現,在選擇雲服務供應商時,企業更喜歡能提供更深層次幫助和支援的供應商。
企業更多采用雲服務,讓物理機銷量出現了10年來首次負增長。6月18日,市場研究機構IDC公佈最新資料,2019年第一季度中國市場物理機出貨量下跌0.7%,全球市場物理機銷量下跌5.1%。這背後是企業全面向雲轉移,新舊IT交替出現拐點,雲端計算市場持續強勁增長,平均增幅達40%。雲端計算還可以幫助企業大幅削減IT成本,還具有彈性擴容、按需使用、按量付費、成本低等明顯優勢,已經成為企業數字化轉型的基礎設施。網際網路、政府、電信和金融等行業已經把自己遷移至雲上,不再獨立採購物理伺服器。
“基礎架構即程式碼(Infrastructure-as-Code,IaC)”是一種使用新的技術來構建和管理動態基礎設施的方式。它把基礎設施、工具和服務以及對基礎設施的管理本身作為一個軟體系統,採納軟體工程實踐以結構化的安全的方式來管理對系統的變更。
從開發的角度看提倡一切皆物件,從作業系統的角度看提倡一切皆檔案,那麼在多雲化的時代我們應該提倡把一切資源皆程式碼,透過程式碼的方式編排和管理我們的基礎資源,這樣才能滿足企業業務快速發展的需求。
針對一個複雜的業務系統我們如何藉助雲端的優勢進行部署?
傳統手工的部署方式大致要透過以上8個步驟完成一個應用的部署,如果我們的公有云環境是多個,那麼就意味著以上步驟要重複多次,這還僅僅是一個簡單的web環境,如果我們要部署的是一套業務系統,涉及多個應用系統的建立,我們的基礎平臺交付需要多長時間?顯然透過手工的方式是不現實的。
我們需要透過infrastructure as code的方式來管理我們的基礎架構,構建企業自己的技術中臺。
基礎設施即程式碼四項關鍵原則:
可再生性:環境中的任何元素可以輕鬆複製。
一致性:無論何時,建立的環境各個元素的配置是完全相同的。
快速反饋:能夠頻繁、容易地進行變更,並快速知道變更是否正確。
可見性:所有對環境的變更應該容易理解、可審計、受版本控制。
基礎設施即程式碼的目標:
標準化:以程式碼來定義環境,實現開發環境、測試環境、生產環境的標準化。
自動化:以自動化工具來驅動程式碼準備環境。包括建立環境、更新環境以及銷燬環境。
視覺化:以監控來視覺化環境資訊。環境當前狀態可視、環境變更歷史視覺化、可追溯。
infrastructure as code 的工具有哪些:
Microsoft為使用者提供的IaC工具是:Azure Resource Manager。使用者可以透過Azure Resource Manager(ARM)的不同模板,配置出自己的基礎架構、並處理各種依賴項。可以在模板中使用那些已在JSON中宣告描述了的資源,也可以在同一個ARM模板中宣告多個Azure資源,以構建整體性的專案環境。ARM模板具有冪等性,因此可以無限次數地重複使用相同的模板,並獲得相同的結果。Resource Manager還支援伺服器的例項分組、以及對不同分組的統一管理。
CloudFormation是專為那些在AWS雲中工作的使用者而設計的。目前已經配置了342種AWS資源型別。允許使用JSON或YAML定製各種模板來構建不同複雜程度的基礎架構模型。
(CDM)是基於Google雲平臺的配置檔案(YAML)和模板(JINJA2或PYTHON)的一種自動化執行工具。它允許使用者自行定義和同步部署各種系統資源。Google CDM也支援預覽功能。這意味著:您在不直接提交更改的情況下,便可以直接瞭解到部署和變更所帶來的影響。可以幫助使用者避免出現人為的錯誤,還能夠起到加強與穩定整體基礎架構的作用。
Terraform 是一個IT基礎架構自動化編排工具,可以用程式碼來管理維護 IT 資源。Terraform的命令列介面 (CLI) 提供一種簡單機制,用於將配置檔案部署到任意支援的雲上,並對其進行版本控制。透過配置檔案可以描述雲資源的拓撲基礎架構。
Terraform 支援的服務商眾多
安裝Terraform簡單
Terraform 可以隨意部署在任意的客戶端上,只要可以連通公網即可(Initializing provider plugins and Call Cloud OpenAPI) ,透過下載對應平臺的可執行二進位制包,解壓出來Executable Binary 放指定目錄,配置好相應的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
整個基礎架構的建設只需要terraform init,terraform plan , terraform apply 三步來完成。刪除整個環境只需要terraform destroy一步來完成。
透過一個main.tf檔案(只需要是.tf 檔案)定義了ECS(映象、例項型別)、VPC(CIDR、VPC Name)、OSS資源(ACL、例項Name)資訊,透過Terraform 對資源配置引數做解析,呼叫阿里cloud OpenAPI 進行資源校驗於建立,同時把整個資源建立狀態化到一個.tf.state檔案中,基於該檔案則可以得知資源建立的所有資訊,包括資源數量調整,規格調整,例項變更都依賴這種非常重要的檔案。
terraform 具體使用案例
透過配置main.tf檔案定義各種資源
定義認證資源
} # Configure the Alicloud Provider provider "alicloud" { access_key = "${var.access_key}" secret_key = "${var.secret_key}" region = "${var.region}"
定義雲主機資源
# 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" }
定義輸出結果資訊
# 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 - 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.
執行terraform plan,檢視資源建立計劃
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.
執行terraform apply,在雲端建立資源
$ 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
我們可以將我們的應用系統透過Packer打包成映象儲存到公有云。
結合Terraform 在公有云部署雲主機時拉取自定義映象檔案生成雲主機,並對公有云的資源進行統一的配置和管理。
透過結合Ansible對公有云的應用進行統一的維護和管理。
我們在整個軟體開發生命週期的過程中,其中基礎環境的製備是非常重要的一環,也是從開發到測試再到生產部署最靠近底層的一環,我們可以藉助IaC既能滿足基礎架構的快速部署,又能靈活的使用私有云或公有云資源,充分利用公有云的優勢為企業服務,同時降低企業成本投入,做到真正的按需付費。
將基礎結構部署到多個雲
Terraform適用於多雲方案,將相類似的基礎結構部署到阿里雲、其他雲提供商或者本地資料中心。開發人員能夠使用相同的工具和相似的配置檔案同時管理不同雲提供商的資源。
自動化管理基礎結構
Terraform能夠建立配置檔案的模板,以可重複、可預測的方式定義、預配和配置ECS資源,減少因人為因素導致的部署和管理錯誤。能夠多次部署同一模板,建立相同的開發、測試和生產環境。
基礎架構即程式碼(Infrastructure as Code)
可以用程式碼來管理維護資源。允許儲存基礎設施狀態,從而使您能夠跟蹤對系統(基礎設施即程式碼)中不同元件所做的更改,並與其他人共享這些配置 。
降低開發成本
可以透過按需建立開發和部署環境來降低成本,讓企業真正做到按需付費。
資料來源:Forrester調查報告、財經網、雲有料、部落格園、阿里雲
精選提問:
問1:Terraform能完成不同公有云間的遷移嗎?
答:terraform只做環境管理,不做資料遷移。
問2:有沒有不同公有云遷移的工具推薦?
答:目前各公有云有本地資料中心向公有云遷移到工具,各公有云之間遷移暫時沒有。
問3:能說下Terraform 和 Terragrunt 的區別嗎?
答:terragrunt 是一家諮詢公司寫的軟體在terraform外邊wrap了一層。
問4:Terraform 的status狀態怎麼來管理的?
答:狀態檔案可以存在一個檔案裡,這個檔案可以是本地,也可以是遠端的共享儲存上。terraform主持workspaces,各團隊可以維護自己的狀態檔案。
問5:ansible也可以做基礎設施管理,terraform和它對比的優勢在哪裡?
答:terraform在對接各雲供應商已有成熟的介面,在社群也有成熟的模組,在使用上可以標準化,也可以降低管理和使用的複雜度。
關於EAWorld:微服務,DevOps,資料治理,移動架構原創技術分享。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562043/viewspace-2651799/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL之基礎架構MySql架構
- 銀行IT架構變遷史(金融IT基礎架構)架構
- 融合基礎架構之我見架構
- SOA之(1)——SOA架構基礎概念架構
- MySQL基礎架構MySql架構
- Oracle基礎構架Oracle
- MySQL 基礎架構MySql架構
- IT基礎架構主要經歷了哪些變化呢?架構
- 架構設計之架構的演變架構
- 架構設計之一——基礎架構架構
- 微服務架構基礎之API閘道器微服務架構API
- 微服務架構基礎之輕量級部署微服務架構
- ABP框架之——資料訪問基礎架構框架架構
- redis哨兵架構基礎Redis架構
- MySQL基礎架構分析MySql架構
- 探索ABP基礎架構架構
- 搭建基礎架構-Page架構
- 窺探QQ基礎資料庫架構演變史資料庫架構
- Spring Cloud雲架構-Restful 基礎架構SpringCloud架構REST
- 《架構基礎 從需求到架構》讀書架構
- 微服務架構設計基礎之立方體模型微服務架構模型
- ABP框架之——資料訪問基礎架構(下)框架架構
- spark基礎之spark sql執行原理和架構SparkSQL架構
- 《大前端 基礎元件》系列 CSS基礎架構前端元件CSS架構
- [java基礎]之變數Java變數
- 基礎架構遷雲(一)架構
- 基礎架構遷雲二()架構
- 基礎架構遷雲(三)架構
- 探索ABP基礎架構-下架構
- HotDB 基礎架構詳解架構
- RESTful 架構 基礎講解REST架構
- Mysql實戰:基礎架構MySql架構
- 搭建基礎架構-ResultMsg架構
- ES 架構及基礎 - 1架構
- IT架構的基礎實施架構
- Angular基礎筆記(架構)Angular筆記架構
- 集團資訊基礎架構架構
- SOA之(2)——SOA架構基礎概念與設計框架架構框架