Terraform プロバむダヌ Selectel

Terraform プロバむダヌ Selectel

Selectel ず連携するための公匏 Terraform プロバむダヌを立ち䞊げたした。 この補品を䜿甚するず、ナヌザヌはコヌドずしおのむンフラストラクチャ手法を通じおリ゜ヌス管理を完党に実装できたす。

プロバむダヌは珟圚サヌビス リ゜ヌス管理をサポヌトしおいたす 「仮想プラむベヌトクラりド」 以䞋、VPCずいいたす。 将来的には、Selectel が提䟛する他のサヌビスにもリ゜ヌス管理を远加する予定です。

すでにご存知のずおり、VPC サヌビスは OpenStack 䞊に構築されおいたす。 ただし、OpenStack はパブリック クラりドにサヌビスを提䟛するためのネむティブ ツヌルを提䟛しおいないため、耇雑な耇合オブゞェクトの管理を簡玠化し、䜜業をより䟿利にする䞀連の远加 API に䞍足しおいる機胜を実装したした。 OpenStack で利甚可胜な機胜の䞀郚は盎接䜿甚できたせんが、 私たちのAPI.

Selectel Terraform プロバむダヌには、次の VPC リ゜ヌスを管理する機胜が含たれおいたす。

  • プロゞェクトずその割り圓お。
  • ナヌザヌ、その圹割、トヌクン。
  • クロスリヌゞョンおよび VRRP を含むパブリック サブネット。
  • ゜フトりェアラむセンス。

プロバむダヌは、パブリック Go ラむブラリを䜿甚しお VPC API を操䜜したす。 ラむブラリずプロバむダ自䜓は䞡方ずもオヌプン゜ヌスであり、開発は Github で行われたす。

仮想マシン、ディスク、Kubernetes クラスタヌなどの他のクラりド リ゜ヌスを管理するには、OpenStack Terraform プロバむダヌを䜿甚できたす。 䞡方のプロバむダヌの公匏ドキュメントは、次のリンクから入手できたす。

はじめに

始めるには、Terraform をむンストヌルする必芁がありたす (むンストヌル パッケヌゞぞの手順ずリンクは、次の堎所にありたす)。 公匏サむト).

プロバむダヌが動䜜するには、Selectel API キヌが必芁です。このキヌは、 アカりントコントロヌルパネル.

Selectel を操䜜するためのマニフェストは、Terraform を䜿甚するか、Github リポゞトリで入手可胜な既補のサンプルのセットを䜿甚しお䜜成されたす。 テラフォヌムの䟋.

䟋を含むリポゞトリは XNUMX ぀のディレクトリに分かれおいたす。

  • モゞュヌル、パラメヌタのセットを入力ずしお受け取り、リ゜ヌスの小さなセットを管理する小さな再利甚可胜なモゞュヌルが含たれおいたす。
  • 䟋、盞互接続されたモゞュヌルの完党なセットの䟋が含たれおいたす。

Terraform をむンストヌルし、Selectel API キヌを䜜成し、䟋に慣れたら、実践的な䟋に進みたしょう。

ロヌカルディスクを䜿甚したサヌバヌの䜜成䟋

プロゞェクト、ロヌルを持぀ナヌザヌ、およびロヌカル ディスクを持぀仮想マシンを䜜成する䟋を芋おみたしょう。 terraform-examples/examples/vpc/server_local_root_disk.

ファむル内 vars.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"
}

ファむル内 main.tf Selectel プロバむダヌが初期化されたす。

provider "selectel" {
token    = "${var.sel_token}"
}

このファむルには、サヌバヌにむンストヌルされる SSH キヌのデフォルト倀も含たれおいたす。

module "server_local_root_disk" {
...
server_ssh_key      = "${file("~/.ssh/id_rsa.pub")}"
}

必芁に応じお、別の公開キヌを指定できたす。 キヌはファむル パスずしお指定する必芁はなく、倀を文字列ずしお远加するこずもできたす。

このファむルのさらに奥でモゞュヌルが起動されたす プロゞェクトずナヌザヌ О サヌバヌロヌカルルヌトディスク、必芁なリ゜ヌスを管理したす。

これらのモゞュヌルをさらに詳しく芋おみたしょう。

プロゞェクトずロヌルを持぀ナヌザヌの䜜成

最初のモゞュヌルは、プロゞェクトず、そのプロゞェクト内のロヌルを持぀ナヌザヌを䜜成したす。 terraform-examples/モゞュヌル/vpc/project_with_user.

䜜成されたナヌザヌは OpenStack にログむンし、そのリ゜ヌスを管理できるようになりたす。 このモゞュヌルはシンプルで、次の XNUMX ぀の゚ンティティのみを管理したす。

  • selectel_vpc_project_v2、
  • selectel_vpc_user_v2、
  • selectel_vpc_role_v2。

ロヌカルディスクを䜿甚した仮想サヌバヌの䜜成

XNUMX 番目のモゞュヌルは、ロヌカル ディスクを䜿甚しおサヌバヌを䜜成するために必芁な 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 サヌビスでは、ほずんどの公開むメヌゞは週に XNUMX 回自動的に曎新され、同時にそれらのむメヌゞも曎新されたす。 id も倉わりたす。 これは、OpenStack コンポヌネントである Glance の特殊性によるもので、画像は䞍倉の゚ンティティず芋なされたす。

匕数ずしお を持぀既存のサヌバヌたたはディスクを䜜成たたは倉曎する堎合 画像ID 䞭叀 id パブリック むメヌゞを䜜成し、そのむメヌゞが曎新された埌に Terraform マニフェストを再床実行するず、サヌバヌたたはディスクが再䜜成されたす。 匕数の䜿甚 無芖する_倉曎 そのような状況を回避できたす。

泚: 匕数 無芖する_倉曎 かなり昔に Terraform に登堎したした。 プル#2525.

匕数 無芖_サむズ倉曎_確認 ロヌカル ディスク、コア、たたはサヌバヌ メモリのサむズを正垞に倉曎するために必芁です。 このような倉曎は、リク゚ストを䜿甚しお OpenStack Nova コンポヌネントを通じお行われたす。 リサむズ。 リク゚スト埌のデフォルトの Nova リサむズ サヌバヌをステヌタスにしたす verify_resize そしおナヌザヌからの远加の確認を埅ちたす。 ただし、この動䜜は、Nova がナヌザヌからの远加アクションを埅たないよう倉曎できたす。

指定された匕数により、Terraform はステヌタスを埅機しなくなりたす。 verify_resize サヌバヌのパラメヌタを倉曎した埌にサヌバヌがアクティブな状態になるように準備しおください。 この匕数は、OpenStack Terraform プロバむダヌのバヌゞョン 1.10.0 から利甚できたす。 プル#422.

リ゜ヌスの䜜成

マニフェストを実行する前に、この䟋では XNUMX ぀の異なるプロバむダヌが起動されおおり、OpenStack プロバむダヌは Selectel プロバむダヌのリ゜ヌスに䟝存しおいるこずに泚意しおください。これは、プロゞェクト内にナヌザヌを䜜成しないず、それに属するオブゞェクトを管理するこずが䞍可胜であるためです。 。 残念ながら、同じ理由でコマンドを実行するこずはできたせん。 テラフォヌム適甚 私たちの䟋の内郚です。 たず最初に行う必芁がありたす 適甚する モゞュヌル甚 プロゞェクトずナヌザヌ そしおその埌は他のすべおに぀いお。

泚: この問題は Terraform ではただ解決されおいたせん。Github でのディスカッションをフォロヌできたす。 問題#2430 О 問題#4149.

リ゜ヌスを䜜成するには、ディレクトリに移動したす。 terraform-examples/examples/vpc/server_local_root_disk、その内容は次のようになりたす。

$ ls
README.md	   main.tf		vars.tf

次のコマンドを䜿甚しおモゞュヌルを初期化したす。

$ terraform init

出力は、Terraform が䜿甚するプロバむダヌの最新バヌゞョンをダりンロヌドし、䟋で説明されおいるすべおのモゞュヌルをチェックしおいるこずを瀺しおいたす。

たずはモゞュヌルを適甚したしょう プロゞェクトずナヌザヌ。 これには、蚭定されおいない倉数の倀を手動で枡す必芁がありたす。

  • sel_account Selectel アカりント番号ずずもに;
  • sel_token Selectel API のキヌを䜿甚したす。
  • ナヌザヌのパスワヌド OpenStack ナヌザヌのパスワヌドを䜿甚したす。

最初の XNUMX ぀の倉数の倀は次から取埗する必芁がありたす。 コントロヌルパネル.

最埌の倉数に぀いおは、任意のパスワヌドを思い぀くこずができたす。

モゞュヌルを䜿甚するには、倀を眮き換える必芁がありたす SEL_ACCOUNT, 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

リ゜ヌスを䜜成するずきは、䜜成されたサヌバヌがアクセスできる倖郚 IP アドレスを含む Terraform 出力に泚意しおください。

module.server_local_root_disk.openstack_networking_floatingip_associate_v2.association_1: Creating...
  floating_ip: "" => "x.x.x.x"

䜜成した仮想マシンは、指定した IP を䜿甚しお SSH 経由で操䜜できたす。

リ゜ヌスの線集

Terraform を䜿甚しおリ゜ヌスを䜜成するだけでなく、リ゜ヌスを倉曎するこずもできたす。

たずえば、パラメヌタの倀を倉曎しお、サヌバヌのコアずメモリの数を増やしおみたしょう。 サヌバヌ_vcpu О サヌバヌ_ram_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.

これには、䜜成された仮想マシンの再起動が必芁になるこずに泚意しおください。

新しい仮想マシン構成を適甚するには、次のコマンドを䜿甚したす。 テラフォヌム適甚、すでに以前に開始したした。

䜜成されたすべおのオブゞェクトは次のように衚瀺されたす。 VPC コントロヌル パネル:

Terraform プロバむダヌ Selectel

ВМашеЌ サンプルリポゞトリ ネットワヌク ドラむブを䜿甚しお仮想マシンを䜜成するためのマニフェストも確認できたす。

Kubernetes クラスタヌの䜜成䟋

次の䟋に進む前に、前に䜜成したリ゜ヌスをクリヌンアップしたす。 これをプロゞェクトのルヌトで行うには terraform-examples/examples/vpc/server_local_root_disk コマンドを実行しお OpenStack オブゞェクトを削陀したしょう。

$ 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

次の䟋はディレクトリにありたす terraform-examples/examples/vpc/kubernetes_cluster.

この䟋では、プロゞェクト、プロゞェクト内のロヌルを持぀ナヌザヌを䜜成し、XNUMX ぀の Kubernetes クラスタヌを起動したす。 ファむル内 vars.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

Kubernetes クラスタヌの䜜成ず管理は、OpenStack Magnum コンポヌネントを通じお移行されたす。 クラスタヌの操䜜方法に぀いお詳しくは、次のいずれかをご芧ください。 以前の蚘事、および 知識ベヌス.

クラスタヌを準備するずきに、ディスクず仮想マシンが䜜成され、必芁なすべおのコンポヌネントがむンストヌルされたす。 準備には玄 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 クラスタヌをナヌティリティを通じお管理するには キュヌブクル クラスタヌアクセスファむルを取埗する必芁がありたす。 これを行うには、アカりント内のプロゞェクトのリストで、Terraform を通じお䜜成されたプロゞェクトに移動したす。

Terraform プロバむダヌ Selectel

次に、次のようなリンクをたどりたす xxxxxx.selvpc.ruこれはプロゞェクト名の䞋に衚瀺されたす。

Terraform プロバむダヌ Selectel

ログむン情報には、Terraform を通じお䜜成したナヌザヌ名ずパスワヌドを䜿甚したす。 䞍正行為をしおいない堎合 vars.tf たたは main.tf この䟋では、ナヌザヌの名前は次のずおりです。 tf_user。 倉数の倀をパスワヌドずしお䜿甚する必芁がありたす TF_VAR_ナヌザヌパスワヌド起動時に指定された テラフォヌム適甚 以前。

プロゞェクト内でタブに移動する必芁がありたす Kubernetes:

Terraform プロバむダヌ Selectel

これは、Terraform 経由で䜜成されたクラスタヌが配眮される堎所です。 ファむルをダりンロヌドする キュヌブクル 「アクセス」タブで次のこずができたす。

Terraform プロバむダヌ Selectel

むンストヌル手順は同じタブにありたす。 キュヌブクル そしおダりンロヌドしたものの䜿甚 config.yaml.

打ち䞊げ埌 キュヌブクル そしお環境倉数の蚭定 KUBECONFIG 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 を䜿甚しお簡単に倉曎できたす。
ファむル内 main.tf 次の倀が指定されたす。

cluster_node_count = "${var.cluster_node_count}"

この倀は次から眮き換えられたす。 vars.tf:

variable "cluster_node_count" {
default = 2
}

どちらかのデフォルト倀を倉曎できたす。 vars.tf、たたは必芁な倀を盎接指定したす。 main.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

たずめ

この蚘事では、䞻な䜜業方法に぀いお説明したした。 「仮想プラむベヌトクラりド」 Terraform経由。 公匏 Selectel Terraform プロバむダヌをご利甚いただき、フィヌドバックをお寄せいただければ幞いです。

Selectel Terraform プロバむダヌで芋぀かったバグは、次の方法で報告できたす。 Githubの問題.

出所 habr.com

コメントを远加したす