Terraform — это инструмент, с помощью которого можно описать серверную инфраструктуру в виде кода.
К примеру для создания определенного количества виртуальных машин и других объектов в облачной инфраструктуре не нужно каждый раз вручную создавать инстансы или писать плейбуки для Ansible или какие-то обертки над API, достаточно просто в человекочитаемом виде записать как будет представлена инфраструктура и в случае чего ее можно легко развернуть.
В заметке я опишу, как с помощью Terraform можно создать инстанс в Google Compute Engine.
Документация доступна тут.
Terraform распространяется в виде бинарного файла, поэтому проблем с его установкой нет никаких:
# apt install wget unzip -y
# wget https://releases.hashicorp.com/terraform/0.11.7/terraform_0.11.7_linux_amd64.zip
# unzip terraform_0.11.7_linux_amd64.zip && rm -f terraform_0.11.7_linux_amd64.zip
# mv terraform /usr/local/bin/
# terraform -v
Terraform установили, далее создаем сервисный акканут в Google Cloud Platform в разделе IAM с ролью Compute Admin, сохраняем сгенерированный приватный ключ в формате json на сервер, например в файл .tf-gcp-account.json
Создаем описание доступов и переменных для гуглового проекта:
# vim provider.tf
variable "project_name" {
default = "project-name" # gcloud projects list
}
variable "region" {
default = "europe-west1-d" # gcloud compute zones list
}
provider "google" {
credentials = "${file(".tf-gcp-account.json")}"
project = "${var.project_name}"
region = "${var.region}"
}
В этом файле создаем описание нашего инстанса:
# vim compute.tf
resource "google_compute_instance" "k8s-master" {
name = "k8s-master"
machine_type = "n1-standard-1" # gcloud compute machine-types list
zone = "${var.region}"
boot_disk {
initialize_params {
image = "ubuntu-1604-xenial-v20180405" # gcloud compute images list
size = "30"
}
}
network_interface {
network = "default"
access_config {}
}
}
В этом конфиге мы описали, что необходимо создать виртуалку с именем k8s-master в зоне europe-west1-d, на основе образа ubuntu-16.04 с диском размером 30GB.
Инициализируем Terraform:
# terraform init
Перед тем как создавать инстанс, проверим все ли в порядке на предмет ошибок:
# terraform plan
Если все в порядке, то применяем конфигурацию:
# terraform apply
...
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Проверим, создался ли наш инстанс:
# gcloud compute instances list --filter=k8s
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
k8s-master europe-west1-d n1-standard-1 10.240.0.5 35.195.82.203 RUNNING
Далее мы можем например по SSH подключиться к созданному инстансу:
# gcloud compute ssh k8s-master
Для того чтобы удалить инстанс есть команда destroy:
# terraform destroy
Destroy complete! Resources: 1 destroyed.
# gcloud compute instances list --filter=k8s
Listed 0 items.
Вот таким образом можно описать создание необходимой инфраструктуры в виде кода, что является очень удобным нежели чем городить мануалы по созданию серверов в облаке.
К примеру для создания определенного количества виртуальных машин и других объектов в облачной инфраструктуре не нужно каждый раз вручную создавать инстансы или писать плейбуки для Ansible или какие-то обертки над API, достаточно просто в человекочитаемом виде записать как будет представлена инфраструктура и в случае чего ее можно легко развернуть.
В заметке я опишу, как с помощью Terraform можно создать инстанс в Google Compute Engine.
Документация доступна тут.
Terraform распространяется в виде бинарного файла, поэтому проблем с его установкой нет никаких:
# apt install wget unzip -y
# wget https://releases.hashicorp.com/terraform/0.11.7/terraform_0.11.7_linux_amd64.zip
# unzip terraform_0.11.7_linux_amd64.zip && rm -f terraform_0.11.7_linux_amd64.zip
# mv terraform /usr/local/bin/
# terraform -v
Terraform установили, далее создаем сервисный акканут в Google Cloud Platform в разделе IAM с ролью Compute Admin, сохраняем сгенерированный приватный ключ в формате json на сервер, например в файл .tf-gcp-account.json
Создаем описание доступов и переменных для гуглового проекта:
# vim provider.tf
variable "project_name" {
default = "project-name" # gcloud projects list
}
variable "region" {
default = "europe-west1-d" # gcloud compute zones list
}
provider "google" {
credentials = "${file(".tf-gcp-account.json")}"
project = "${var.project_name}"
region = "${var.region}"
}
В этом файле создаем описание нашего инстанса:
# vim compute.tf
resource "google_compute_instance" "k8s-master" {
name = "k8s-master"
machine_type = "n1-standard-1" # gcloud compute machine-types list
zone = "${var.region}"
boot_disk {
initialize_params {
image = "ubuntu-1604-xenial-v20180405" # gcloud compute images list
size = "30"
}
}
network_interface {
network = "default"
access_config {}
}
}
В этом конфиге мы описали, что необходимо создать виртуалку с именем k8s-master в зоне europe-west1-d, на основе образа ubuntu-16.04 с диском размером 30GB.
Инициализируем Terraform:
# terraform init
Перед тем как создавать инстанс, проверим все ли в порядке на предмет ошибок:
# terraform plan
Если все в порядке, то применяем конфигурацию:
# terraform apply
...
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Проверим, создался ли наш инстанс:
# gcloud compute instances list --filter=k8s
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
k8s-master europe-west1-d n1-standard-1 10.240.0.5 35.195.82.203 RUNNING
Далее мы можем например по SSH подключиться к созданному инстансу:
# gcloud compute ssh k8s-master
Для того чтобы удалить инстанс есть команда destroy:
# terraform destroy
Destroy complete! Resources: 1 destroyed.
# gcloud compute instances list --filter=k8s
Listed 0 items.
Вот таким образом можно описать создание необходимой инфраструктуры в виде кода, что является очень удобным нежели чем городить мануалы по созданию серверов в облаке.
Лучше при создании provider.tf назвать переменную "project_id", так как используется именно ID проекта, а не его название.
ОтветитьУдалить