1. 程式人生 > >網易雲terraform實踐

網易雲terraform實踐

此文已由作者王慎為授權網易雲社群釋出。

歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。


一、terraform介紹

隨著應用上雲的常態化,資源棧動態管理的需求對使用者也變得更加急切。資源編排(Resource Orchestration Service, ROS)能夠簡化雲端計算資源管理和自動化運維,達到基礎設施即程式碼的目標(Infrastructure as Code, IaC)。使用資源編排,通過一個資源模版管理資源棧方式對使用者而言,提升了資源棧的建立、更新和刪除了效率。

terraform是業界流行的資源編排工具。通過實現雲平臺相關的terraform provider外掛,terraform支援多雲平臺下的資源編排。

NCE組目前實現了網易雲terraform provider外掛,初步支援以下資源的編排能力

  • 雲主機、雲硬碟、硬碟繫結

  • vpc、子網

  • 路由表,安全組


二、使用示例

註冊網易雲賬號,  https://www.163yun.com/  

註冊完成後,登陸控制檯,在使用者中心建立Access Key。記錄AccessKey 和Access Secret 用於後續api訪問認證。   b486a784-abfb-474a-8bdd-00635bd6912e

 

安裝terraform

訪問terraform官網下載terraform安裝包 https://www.terraform.io/downloads.htm

下載得到zip包 terraform_0.11.6_darwin_amd64.zip,解壓該zip檔案後得到terraform可執行檔案

根據實際規劃拷貝terraform到相應目錄,並配置PATH 環境變數  


編寫資源模版

1.建立一個目錄,用於資源編排的工作目錄 

2.在workspace目錄下建立並編寫資源模版  vi  example.tf    (資源描述模版檔案以.tf為字尾)

在模版檔案中編寫以下內容:

                    

provider "neteasecloud" {
    access_key = “your access key"
    access_secret = “your access secret"
}resource "neteasecloud_nvm" "tf_nvm"{
    instance_name = "mynvm"
    description = "simple nvm"
    image_id =  "aec95c0c-29ff-4172-a8fa-5641163e13a0"
    spec_type = "nvm.n2.small4"
    keypairs = [
     {
     name = “your key pair name"
     fingerprint = “your key pair finger print"
       }
        ]
         vpc_id        =  "d6d0777e-9748-4eea-b44e-4d6291799473"
    subnet_id     =  "a572a392-3630-449a-90fd-8d9884ea2fce"
    security_group_ids = ["4712b273-4a56-4a29-81d6-0db07be5e20d"]
     associate_public_ip_address = true
    internet_max_bandwidth = 20
    network_charge_type = "TRAFFIC"
    personalities = [
        {
            path = "/terraform.txt"
                     contents = "terraform injected"
        }
    ]
}

以上模版檔案中 provider語句塊定義了訪問網易雲相關認證資訊,access_key 和 access_secret更加使用者實際情況填入。

 resource 語句塊定義了一個資源,neteasecloud_nvm 為資源型別,這裡表示網易雲主機,tf_nvm為模版中唯一的資源id。resource語句內部定義了資源的相關屬性。這裡定義了雲主機名稱、映象、規格、網路資源等基本資訊,併為其分配的公網ip,指定了公網頻寬和計費型別,最後向主機注入一條使用者自定義資料。


執行資源編排流程

1.初始化工作空間

下載網易雲terrraform provider外掛,下載得到外掛terraform-provider-neteasecloud

將terraform-provider-neteasecloud 放置在一個公共目錄,如 /usr/local/bin/terraform-providers

在workspace下執行 terraform init -plugin-dir /usr/local/bin/terraform-providers 初始化工作空間

79f4dc36-0b39-4ed9-9bf6-7b6439bc95fc?imageView&thumbnail=980x0

2.建立資源

執行 terraform apply 進行資源建立。terraform會輸出執行計劃,確認無誤後輸入yes,開始執行

1a5ab616-14b9-42c3-b24e-eb4a1499e095?imageView&thumbnail=980x0     

74d33cb6-8251-4a32-a29f-a51e41924a58?imageView&thumbnail=980x0

terraform會互動式建立資源,等待建立完成後,terraform輸出簡單的統計資訊。在網易雲控制檯檢視已經建立好的雲主機。

1e450c62-a59b-472e-bead-7fcc690b7d5f?imageView&thumbnail=980x0

3.更新資源

3.1 修改已有資源:更新雲主機規格,將剛才建立的主機規格從4核變更成2核

修改模版中spec_type = “nvm.n2.small4" 為 spec_type = “nvm.n2.small2" 後儲存,再次執行terraform apply 完成雲主機規格變更

47d27a77-1411-426f-ab5e-5e8b39eaa040?imageView&thumbnail=980x0

變配中

e04723ca-0efe-4d87-b80b-3c8fd74ded64?imageView&thumbnail=980x0

規格變配完成

f0dc3703-a3dd-40ab-b855-ed82fb2c4ceb?imageView&thumbnail=980x0

 

3.2 動態新增/刪除資源 :增加一塊雲硬碟並繫結到之前到雲主機

在模版中增加以下內容並儲存:

resource "neteasecloud_ncv" "tf_ncv"{
    name = "mydisk"
    capacity = 30
    }
    resource "neteasecloud_nvm_disk_attachment" "tf_attach" {
    instance_id = "${neteasecloud_nvm.tf_nvm.id}"
    disk_id = "${neteasecloud_ncv.tf_ncv.id}"
}

以上模版表示建立兩個資源,一是雲硬碟,二是主機硬碟繫結關係,在建立主機硬碟繫結關係中,使用terraform變數引用分別引用了主機和硬碟的id。

再次支援terraform apply, 做資源棧更新

 a77988ba-e4ff-45b2-bda8-12d01cf1fb44?imageView&thumbnail=980x0

執行完成後,可以在網易雲控制檯檢視,新建立了一塊硬碟,並繫結到之前到雲主機上。

ee0f0a2b-e269-449f-b05d-afcba269c320?imageView&thumbnail=980x0

 

4.銷燬資源

當資源棧使用完成後,執行 terrafrom destroy 銷燬整個資源棧,所有資源將被刪除

 c024e2a8-f75a-4b0c-8381-53157888f819?imageView&thumbnail=980x0

以上步驟演示了一個資源棧基本的生命週期流程。


三、說明

網易雲terraform provider目前完成了雲主機、雲硬碟、vpc等IasS資源的編排能力,後續還會根據需要和OpenApi能力逐步提供其他資源和服務的編排能力。

有關網易雲terraform provider下載和使用、目前支援的資源詳細說明可以參考以下wiki



網易雲免費體驗館,0成本體驗20+款雲產品! 

更多網易技術、產品、運營經驗分享請點選


相關文章:
【推薦】 Gradletask
【推薦】 初識Continuation
【推薦】 用雙十一的故事串起碎片的網路協議(中)