春節前夕,一款名為《Palworld》的遊戲火了起來,幾天內銷量就達到了數百萬,半個月內玩家就達到了數千萬。 為了提公升使用者體驗,阿里雲、華為雲、騰訊雲等國內雲廠商紛紛推出幻獸帕盧伺服器,玩家可以在幾分鐘內快速搭建開箱即用的幻獸帕盧伺服器。
在快速構建雲伺服器時,很多時候,DevOps 人員可以通過手動單擊控制台來快速建立它們。 但是在雲原生時代,有IAC(Infrastructure as the Basics)技術,DevOps人不需要手動做,只需要通過自動化建立一些雲資源即可。
例如,在騰訊雲上,彈性雲伺服器具有以下引數:
如果從 IAC 的角度來看,它實際上看起來像這樣:
## instance inforesource "tencentcloud_instance" "cvm_almalinux" security_groups = [ "$" ] vpc_id = "$" subnet_id = "$" internet_max_bandwidth_out = 10 count = 1}## security groupresource "tencentcloud_security_group" "sg_bj" resource "tencentcloud_security_group_rule" "sg_bj_1" " type = "ingress" cidr_ip = "0.0.0.0/0" ip_protocol = "tcp" port_range = "22,80,443" policy = "accept"}## vpc inforesource "tencentcloud_vpc" "vpc_bj" ## route table inforesource "tencentcloud_route_table" "rtb_vpc_bj" ## subnet inforesource "tencentcloud_subnet" "subnet_bj_01" " route_table_id = "$"}此資訊基於TF 格式。 也就是說,它以 terrafrom 格式儲存。
對於 Terraform,Terraform 將託管雲基礎結構和配置的狀態儲存為檔案。 Terraform 將此狀態與物理世界中的實際資源對映,並跟蹤這些資源的元資料。 一般來說,狀態檔案是用 terrafrom 命名的tfstate 形式轉換為本地形式。 但是,為了更好的儲存檔案,做好版本控制、加密等工作,官方建議將此檔案儲存到雲端。
極狐GitLab可以儲存這個檔案。 Terrafrom 允許您配置後端以將狀態檔案儲存在相應的後端。 除了儲存 Terraform 檔案外,極狐 GitLab 還可以實現以下功能:
terraform 狀態檔案的版本控制。
加密狀態檔案。
鎖定狀態以解鎖。
使用 GitLab CI 遠端執行 Terraform Plan 和 Terraform Apply 命令。
如果需要使用此功能,需要確保極狐 GitLab 已經設定了 Terraform 狀態儲存的配置。 通過專案設定 --常規 --可見性、專案功能、許可權 --基礎結構進行設定。
要將 GitLab 配置為 Terraform State 的後端,您需要在檔案中配置以下配置:
terraform }以騰訊雲為例,可以使用提供商tf 檔案中寫入了以下配置:
provider "tencentcloud" terraform }backend "http" {}您需要做的就是執行 Terraform Init。 在初始化之前,你需要在極狐 Gitlab 上建立乙個專案來儲存狀態檔案。 可以在極狐 GitLab 主頁上建立專案
您可以使用 Omnibus 安裝私有 GitLab 例項,安裝詳情可參見極狐 GitLab 官網。
建立完成後,您可以在專案中檢視儲存在專案中的 terraform 狀態檔案 -- 運維
如您所見,terraform 狀態檔案未儲存在新專案中。 您可以使用介面提示的 Copy terraform init 命令完成初始化並將狀態檔案儲存到此專案中。 該命令內容如下:
terraform init \ backend-config="address=" \ backend-config="lock_address=/lock" \ backend-config="unlock_address=/lock" \ backend-config="username=majinghe" \ backend-config="password=$gitlab_access_token" \ backend-config="lock_method=post" \ backend-config="unlock_method=delete" \ backend-config="retry_wait_min=5"有兩個環境變數,TF 狀態名稱和 GitLab 訪問令牌。 第乙個是 Terraform State 檔案的名稱,第二個是極狐 Gitlab 的訪問令牌。 將 terraform 狀態檔案的名稱設定為 jh-gitlab。
在極狐首頁,單擊頭像--編輯個人資料--訪問令牌,建立個人訪問令牌。
獲取訪問令牌的值並將其匯入為環境變數:
export gitlab_access_token="您的個人訪問令牌"export tf_state_name="jh-gitlab"然後執行上面的 terrform init xxxx 命令
terraform init \ backend-config="address=" \ backend-config="lock_address=/lock" \ backend-config="unlock_address=/lock" \ backend-config="username=majinghe" \ backend-config="password=$gitlab_access_token" \ backend-config="lock_method=post" \ backend-config="unlock_method=delete" \ backend-config="retry_wait_min=5"initializing the backend...successfully configured the backend "http"! terraform will automaticallyuse this backend unless the backend configuration changes.initializing provider plugins...finding tencentcloudstack/tencentcloud versions matching "1.81.70"...installing tencentcloudstack/tencentcloud v1.81.70...installed tencentcloudstack/tencentcloud v1.81.70 (verified checksum)terraform has created a lock file .terraform.lock.hcl to record the providerselections it made above. include this file in your version control repositoryso that terraform can guarantee to make the same selections by default whenyou run "terraform init" in the future.╷│warning: incomplete lock file information for providers││ due to your customized provider installation methods, terraform was forced to calculate lock file checksums locally│ for the following providers:│ tencentcloudstack/tencentcloud││ the current .terraform.lock.hcl file only includes checksums for linux_amd64, so terraform running on another│ platform will fail to install these providers.││to calculate additional checksums for another platform, run:│ terraform providers lock -platform=linux_amd64│ (where linux_amd64 is the platform to generate)╵terraform has been successfully initialized!you may now begin working with terraform. try running "terraform plan" to seeany changes that are required for your infrastructure. all terraform commandsshould now work.if you ever set or change modules or backend configuration for terraform,rerun this command to reinitialize your working directory. if you forget, othercommands will detect it and remind you to do so if necessary.至此,可以看到 terraform 初始化已經初始化成功!
接下來,執行 terraform 計畫:
terraform planterraform used the selected providers to generate the following execution plan. resource actions are indicated withthe following symbols: +createterraform will perform the following actions: # tencentcloud_vpc.vpc_xiaoamge will be created + resource "tencentcloud_vpc" "vpc_xiaoamge" plan: 1 to add, 0 to change, 0 to destroy.──note: you didn't use the -out option to s**e this plan, so terraform can't guarantee to take exactly these actions ifyou run "terraform apply" now.然後你可以看到之前建立的專案下對應的狀態檔案 jh-gitlab。
當然,在DevOps最佳實踐中,所有的Terraform檔案也可以儲存在極狐GitLab專案中,用於版本控制,Terraform命令的執行也可以與極狐GitLab CI CD整合。
將 Terraform 相關檔案儲存在極狐 GitLab 專案中,例如 Providertf、variable.tf、cvm.TF等
然後在專案的根目錄中建立乙個 ..gitlab-ci.YML 檔案,其中包含以下內容:
variables: tf_dir: $tf_state_name: "jh-gitlab" address: ""# stages of the pipelinestages: -validate - plan# image which will use in each stageimage: name: hashicorp/terraform:light entrypoint: [""]# script to be executed before each stage default: tags: -terraform before_script: -terraform --version - export gitlab_access_token=$jh_access_token - cd $ cp .terraformrc ~/ - terraform init -reconfigure -backend-config="address=" -backend-config="lock_address=/lock" -backend-config="unlock_address=/lock" -backend-config="username=majinghe" -backend-config="password=$gitlab_access_token" -backend-config="lock_method=post" -backend-config="unlock_method=delete" -backend-config="retry_wait_min=5" # to validate terraform files configurationvalidate: stage: validate script: -terraform validate# to check the plan of the infrastructureplan: stage: plan script: -terraform plan dependencies: -validate您需要將提供商要求的三個敏感資訊:secret-id、secret-key、極狐ACESS token以環境變數的形式儲存在極狐上
觸發 CI CD 管道,您可以看到管道生成的結果:
驗證階段的構建日誌如下:
其中,計畫階段的構建日期如下:
其他步驟如apply and destory也可以直接寫在CI CD流水線中,因為這一步會直接建立對應的雲資源或者刪除對應的雲資源,所以這裡就不一一演示了,但原理是一樣的。
使用 Terraform 實現 IAC,可以通過操作建立和配置雲計算資源,全流程可以進行版本控制更改,方便安全審計,使用者無需直接操作雲計算資源,許可權管理變得更加安全輕鬆。
使用以上方法快速建立幻獸帕魯遊戲伺服器,您將體驗到幻獸帕盧遊戲帶來的酸味體驗。