我們已經啟動了官方 Terraform 提供程序來與 Selectel 合作。 該產品允許用戶通過基礎設施即代碼方法論(基礎設施即代碼)全面實施資源管理。
提供商目前支持服務資源管理
如您所知,VPC 服務構建在 OpenStack 之上。 然而,由於 OpenStack 不提供用於服務公共雲的原生工具,我們在一組附加 API 中實現了缺失的功能,以簡化複雜複合對象的管理並使工作更加方便。 OpenStack 中可用的部分功能無法直接使用,但可以通過
Selectel Terraform 提供商現在能夠管理以下 VPC 資源:
- 項目及其配額;
- 用戶、他們的角色和代幣;
- 公有子網,包括跨區域和VRRP;
- 軟件許可證。
提供商使用我們的公共 Go 庫來與 VPC API 配合使用。 庫和提供程序本身都是開源的,它們正在 Github 上開發:
- 圖書館知識庫
去自助PC客戶端 , - 提供者存儲庫
Terraform 提供商 Selectel .
要管理其餘的雲資源,例如虛擬機、磁盤、Kubernetes 集群,您可以使用 OpenStack Terraform 提供程序。 兩個提供商的官方文檔可通過以下鏈接獲取:
- Selectel 資源文檔:
Terraform 提供商 Selectel , - OpenStack資源文檔:
Terraform 提供商 OpenStack .
入門
首先,您需要安裝 Terraform(可以在以下位置找到安裝包的說明和鏈接)
為了工作,提供商需要一個 Selectel API 密鑰,該密鑰是在
使用 Terraform 或使用我們的 Github 存儲庫中提供的一組現成示例來創建使用 Selectel 的清單:
包含示例的存儲庫分為兩個目錄:
- 模塊,包含小型可重用模塊,這些模塊將一組參數作為輸入並管理一小組資源;
- 例子,包含完整的互連模塊集的示例。
安裝 Terraform、創建 Selectel API 密鑰並查看示例後,讓我們繼續討論實際示例。
使用本地磁盤創建服務器示例
考慮一個創建項目、具有角色的用戶和具有本地磁盤的虛擬機的示例:
在文件中 變量.tf 描述了調用模塊時將使用的所有參數。 其中一些有默認值,例如,服務器將在區域中創建 en-3a 具有以下配置:
variable "server_vcpus" {
default = 4
}
variable "server_ram_mb" {
default = 8192
}
variable "server_root_disk_gb" {
default = 8
}
variable "server_image_name" {
default = "Ubuntu 18.04 LTS 64-bit"
}
在文件中 主.tf Selectel 提供程序已初始化:
provider "selectel" {
token = "${var.sel_token}"
}
此文件還包含將安裝在服務器上的 SSH 密鑰的默認值:
module "server_local_root_disk" {
...
server_ssh_key = "${file("~/.ssh/id_rsa.pub")}"
}
如有必要,您可以指定不同的公鑰。 鍵不需要指定為文件的路徑,您也可以將值添加為字符串。
進一步在此文件中啟動模塊 項目用戶 и 服務器本地根磁盤,管理必要的資源。
讓我們仔細看看這些模塊。
創建一個項目和一個具有角色的用戶
第一個模塊創建一個項目和在該項目中具有角色的用戶:
創建的用戶將能夠登錄 OpenStack 並管理其資源。 該模塊很簡單,只管理三個實體:
- selectel_vpc_project_v2,
- 選擇_vpc_user_v2,
- selectel_vpc_role_v2。
使用本地磁盤創建虛擬服務器
第二個模塊涉及管理創建具有本地磁盤的服務器所需的 OpenStack 對象。
您應該注意此模塊中為資源指定的一些參數 openstack_compute_instance_v2:
resource "openstack_compute_instance_v2" "instance_1" {
...
lifecycle {
ignore_changes = ["image_id"]
}
vendor_options {
ignore_resize_confirmation = true
}
}
爭論 忽略更改 允許忽略屬性更改 id 用於創建虛擬機的映像。 在VPC服務中,大部分公共鏡像每周自動更新一次,同時 id 也發生變化。 這是由於 OpenStack 組件 Glance 操作的特殊性造成的,其中圖像被認為是不可變的實體。
如果您創建或修改具有參數的現有服務器或磁盤 圖片編號 使用 id 公共映像,然後在更新該映像後,再次運行 Terraform 清單將重新創建服務器或磁盤。 使用參數 忽略更改 避免了這樣的情況。
注:論證 忽略更改 很久以前就出現在 Terraform 中:
爭論 忽略調整大小確認 成功調整服務器的本地磁盤、核心或內存大小所需的。 此類更改是通過 OpenStack Nova 組件使用請求進行的 調整。 根據要求默認 Nova 調整 將服務器置於狀態 驗證調整大小 並等待用戶的進一步確認。 但是,可以更改此行為,以便 Nova 不必等待用戶採取其他操作。
指定的參數允許 Terraform 不等待狀態 驗證調整大小 為服務器做好準備,更改參數後服務器將處於活動狀態。 該參數自 OpenStack Terraform 提供程序 1.10.0 版本起可用:
創造資源
在啟動清單之前,需要注意的是,在我們的示例中啟動了兩個不同的提供程序,並且OpenStack 提供程序依賴於Selectel 提供程序的資源,因為如果不在項目中創建用戶,則無法管理屬於他的對象。 不幸的是,出於同樣的原因,我們不能簡單地運行命令 地形應用 在我們的例子中。 我們需要首先做 申請 對於模塊 項目用戶 然後是其他一切。
注意:報告的問題在 Terraform 中尚未解決,您可以關注 Github 上的討論:
要創建資源,請轉到目錄
$ ls
README.md main.tf vars.tf
我們使用以下命令初始化模塊:
$ terraform init
輸出顯示 Terraform 下載其使用的提供程序的最新版本並檢查示例中描述的所有模塊。
首先應用模塊 項目用戶。 這需要手動為尚未設置的變量傳遞值:
- sel_帳戶 以及您的 Selectel 帳號;
- sel_token 使用您的 Selectel API 密鑰;
- 用戶密碼 以及 OpenStack 用戶的密碼。
前兩個變量的值必須取自
對於最後一個變量,您可以想出任何密碼。
要使用該模塊,您需要替換這些值 SEL_帳戶, SEL_TOKEN и 用戶密碼 通過運行命令:
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform apply -target=module.project_with_user
運行命令後,Terraform 將顯示它想要創建哪些資源並需要確認:
Plan: 3 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
創建項目、用戶和角色後,您可以開始創建其餘資源:
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform apply
創建資源時,請注意 Terraform 輸出以及可訪問所創建服務器的外部 IP 地址:
module.server_local_root_disk.openstack_networking_floatingip_associate_v2.association_1: Creating...
floating_ip: "" => "x.x.x.x"
您可以使用指定的 IP 通過 SSH 使用創建的虛擬機。
編輯資源
除了通過 Terraform 創建資源之外,還可以修改它們。
例如,讓我們通過更改參數值來增加服務器的核心數和內存數 服務器_vcpu и 服務器內存MB 在文件中 示例/vpc/server_local_root_disk/main.tf:
- server_vcpus = "${var.server_vcpus}"
- server_ram_mb = "${var.server_ram_mb}"
+ server_vcpus = 8
+ server_ram_mb = 10240
之後,我們使用以下命令檢查這將導致什麼變化:
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform plan
因此,Terraform 進行了資源更改 openstack_compute_instance_v2 и openstack_compute_flavor_v2.
請注意,這將需要重新啟動創建的虛擬機。
要應用新的虛擬機配置,請使用以下命令 地形應用,我們之前已經推出了。
所有創建的對象將顯示在
在我們的
創建 Kubernetes 集群的示例
在繼續下一個示例之前,我們將清理之前創建的資源。 為此,請在項目的根目錄中
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform destroy -target=module.server_local_root_disk
然後運行命令清除 Selectel VPC API 對象:
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform destroy -target=module.project_with_user
在這兩種情況下,您都需要確認刪除所有對象:
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
下面的例子是在目錄中
此示例創建一個項目、一名在該項目中具有角色的用戶,並引發一個 Kubernetes 集群。 在文件中 變量.tf 您可以看到默認值,例如節點數量、節點特徵、Kubernetes 版本等。
創建資源,和第一個例子類似,首先我們開始模塊的初始化以及模塊資源的創建 項目用戶然後創建其他所有內容:
$ terraform init
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform apply -target=module.project_with_user
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform apply
讓我們通過 OpenStack Magnum 組件來轉移 Kubernetes 集群的創建和管理。 您可以在我們的其中一個中了解有關如何使用集群的更多信息
準備集群時,將創建磁盤、虛擬機並安裝所有必需的組件。 準備工作大約需要 4 分鐘,在此期間 Terraform 將顯示如下消息:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
安裝完成後,Terraform 將報告集群已就緒並顯示其 ID:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Creation complete after 4m20s (ID: 3c8...)
Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
通過實用程序管理創建的 Kubernetes 集群 Kubectl 您需要獲取集群訪問文件。 為此,請轉到您帳戶中的項目列表中通過 Terraform 創建的項目:
接下來點擊鏈接
使用通過 Terraform 創建的用戶名和密碼作為登錄信息。 如果你還沒有改變 變量.tf 或 主.tf 對於我們的示例,用戶的名稱為 tf_用戶。 變量的值必須用作密碼 TF_VAR_用戶_密碼,在啟動時指定 地形應用 較早。
在項目內部,您需要轉到選項卡 Kubernetes:
這是通過 Terraform 創建的集群。 下載文件為 Kubectl 您可以在“訪問”選項卡上:
該選項卡包含安裝說明。 Kubectl 並使用下載的 配置.yaml.
發射後 Kubectl 並設置環境變量 庫貝配置 你可以使用 Kubernetes:
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-9578f5c87-g6bjf 1/1 Running 0 8m
kube-system coredns-9578f5c87-rvkgd 1/1 Running 0 6m
kube-system heapster-866fcbc879-b6998 1/1 Running 0 8m
kube-system kube-dns-autoscaler-689688988f-8cxhf 1/1 Running 0 8m
kube-system kubernetes-dashboard-7bdb5d4cd7-jcjq9 1/1 Running 0 8m
kube-system monitoring-grafana-84c97bb64d-tc64b 1/1 Running 0 8m
kube-system monitoring-influxdb-7c8ccc75c6-dzk5f 1/1 Running 0 8m
kube-system node-exporter-tf-cluster-rz6nggvs4va7-minion-0 1/1 Running 0 8m
kube-system node-exporter-tf-cluster-rz6nggvs4va7-minion-1 1/1 Running 0 8m
kube-system openstack-cloud-controller-manager-8vrmp 1/1 Running 3 8m
prometeus-monitoring grafana-76bcb7ffb8-4tm7t 1/1 Running 0 8m
prometeus-monitoring prometheus-75cdd77c5c-w29gb 1/1 Running 0 8m
通過 Terraform 可以輕鬆更改集群節點的數量。
在文件中 主.tf 給出以下值:
cluster_node_count = "${var.cluster_node_count}"
該值替換自 變量.tf:
variable "cluster_node_count" {
default = 2
}
您可以更改其中的默認值 變量.tf,或者直接在中指定所需的值 主.tf:
- cluster_node_count = "${var.cluster_node_count}"
+ cluster_node_count = 3
要應用更改(如第一個示例所示),請使用命令 地形應用:
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform apply
如果節點數量發生變化,集群將保持可用。 通過 Terraform 添加節點後,無需額外配置即可使用:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
tf-cluster-rz6nggvs4va7-master-0 Ready,SchedulingDisabled master 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-0 Ready <none> 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-1 Ready <none> 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-2 Ready <none> 3m v1.12.4
結論
在本文中,我們了解了使用的主要方法
所有發現的 Selectel Terraform 提供商的錯誤都可以通過以下方式報告
來源: www.habr.com