Terraform sağlayıcısı Selectel

Terraform sağlayıcısı Selectel

Selectel ile çalışacak resmi bir Terraform sağlayıcısını başlattık. Bu ürün, kullanıcıların kod olarak altyapı metodolojisi aracılığıyla kaynak yönetimini tam olarak uygulamasına olanak tanır.

Sağlayıcı şu anda hizmet kaynağı yönetimini destekliyor "Sanal özel bulut" (bundan böyle VPC olarak anılacaktır). Gelecekte Selectel tarafından sağlanan diğer hizmetler için kaynak yönetimini eklemeyi planlıyoruz.

Bildiğiniz gibi VPC hizmeti OpenStack üzerine kuruludur. Ancak OpenStack'in genel buluta hizmet vermek için yerel araçlar sağlamaması nedeniyle, eksik işlevselliği, karmaşık kompozit nesnelerin yönetimini basitleştiren ve işi daha kolay hale getiren bir dizi ek API'de uyguladık. OpenStack'te bulunan bazı işlevler doğrudan kullanıma kapalıdır ancak şu adresten kullanılabilir: API'miz.

Selectel Terraform sağlayıcısı artık aşağıdaki VPC kaynaklarını yönetme olanağına sahiptir:

  • projeler ve kotaları;
  • kullanıcılar, rolleri ve belirteçleri;
  • bölgeler arası ve VRRP dahil genel alt ağlar;
  • yazılım lisansları.

Sağlayıcı, VPC API ile çalışmak için herkese açık Go kitaplığımızı kullanır. Hem kütüphane hem de sağlayıcının kendisi açık kaynaklıdır, geliştirmeleri Github'da gerçekleştirilmektedir:

Sanal makineler, diskler, Kubernetes kümeleri gibi diğer bulut kaynaklarını yönetmek için OpenStack Terraform sağlayıcısını kullanabilirsiniz. Her iki sağlayıcının resmi belgelerine aşağıdaki bağlantılardan ulaşılabilir:

Başlarken

Başlamak için Terraform'u yüklemeniz gerekir (kurulum paketlerine ilişkin talimatlar ve bağlantılar şu adreste bulunabilir: resmi sitesi).

Çalıştırmak için sağlayıcının, içinde oluşturulan bir Selectel API anahtarına ihtiyacı vardır. hesap kontrol panelleri.

Selectel ile çalışmaya yönelik bildirimler, Terraform kullanılarak veya Github depomuzda bulunan bir dizi hazır örnek kullanılarak oluşturulur: terraform örnekleri.

Örneklerin bulunduğu depo iki dizine ayrılmıştır:

  • modüllerbir dizi parametreyi girdi olarak alan ve küçük bir kaynak kümesini yöneten küçük, yeniden kullanılabilir modüller içeren;
  • örnekler, birbirine bağlı modüllerin eksiksiz bir setinin örneklerini içerir.

Terraform'u kurduktan, Selectel API anahtarı oluşturup örneklere alıştıktan sonra pratik örneklere geçelim.

Yerel diskle sunucu oluşturma örneği

Bir proje, role sahip bir kullanıcı ve yerel diske sahip bir sanal makine oluşturma örneğine bakalım: terraform-örnekler/örnekler/vpc/server_local_root_disk.

Dosyada vars.tf modülleri çağırırken kullanılacak tüm parametreler açıklanmıştır. Bazılarının varsayılan değerleri vardır; örneğin, bölgede sunucu oluşturulacaktır. ru-3a aşağıdaki konfigürasyonla:

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"
}

Dosyada ana.tf Selectel sağlayıcısı başlatıldı:

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

Bu dosya aynı zamanda sunucuya yüklenecek SSH anahtarının varsayılan değerini de içerir:

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

Gerekirse farklı bir ortak anahtar belirleyebilirsiniz. Anahtarın dosya yolu olarak belirtilmesine gerek yoktur; değeri dize olarak da ekleyebilirsiniz.

Bu dosyanın ilerleyen kısımlarında modüller başlatılır project_with_user и sunucu_local_root_disk, gerekli kaynakları yöneten.

Bu modüllere daha detaylı bakalım.

Bir proje ve role sahip bir kullanıcı oluşturma

İlk modül bir proje ve bu projede rolü olan bir kullanıcı oluşturur: terraform-examples/modules/vpc/project_with_user.

Oluşturulan kullanıcı OpenStack'e giriş yapabilecek ve kaynaklarını yönetebilecek. Modül basittir ve yalnızca üç varlığı yönetir:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Yerel disk ile sanal sunucu oluşturma

İkinci modül, yerel diskli bir sunucu oluşturmak için gerekli olan OpenStack nesnelerinin yönetimiyle ilgilidir.

Bu modülde kaynak için belirtilen bazı argümanlara dikkat etmelisiniz. openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

tartışma görmezden_değişiklikler özellik değişikliklerini göz ardı etmenize olanak tanır id sanal makineyi oluşturmak için kullanılan görüntü için. VPC hizmetinde, herkese açık görsellerin çoğu haftada bir kez otomatik olarak güncellenir ve aynı zamanda bunların görüntüleri de güncellenir. id da değişir. Bunun nedeni, görüntülerin değişmez varlıklar olarak kabul edildiği OpenStack bileşeni - Glance'ın özelliklerinden kaynaklanmaktadır.

Bağımsız değişken olarak mevcut bir sunucu veya diski oluşturuyorsanız veya değiştiriyorsanız resim_kimliği kullanılmış id genel görüntü, ardından bu görüntü güncellendikten sonra Terraform bildiriminin yeniden çalıştırılması sunucuyu veya diski yeniden oluşturacaktır. Bir argüman kullanma görmezden_değişiklikler böyle bir durumun önüne geçmenizi sağlar.

Not: argüman görmezden_değişiklikler Terraform'da oldukça uzun zaman önce ortaya çıktı: çekme#2525.

tartışma görmezden_resize_confirmation Yerel diski, çekirdekleri veya sunucu belleğini başarıyla yeniden boyutlandırmak için gereklidir. Bu tür değişiklikler OpenStack Nova bileşeni aracılığıyla bir istek kullanılarak yapılır. yeniden boyutlandırmak. Talepten sonra varsayılan Nova yeniden boyutlandırmak sunucuyu duruma getirir doğrulama_resize ve kullanıcıdan ek onay bekler. Ancak bu davranış, Nova'nın kullanıcıdan ek eylemler beklememesini sağlayacak şekilde değiştirilebilir.

Belirtilen argüman Terraform'un durumu beklememesini sağlar doğrulama_resize sunucu için ve parametreleri değiştirildikten sonra sunucunun aktif durumda olması için hazırlıklı olun. Argüman OpenStack Terraform sağlayıcısının 1.10.0 sürümünden edinilebilir: çekme#422.

Kaynak Oluşturma

Manifestleri çalıştırmadan önce lütfen örneğimizde iki farklı sağlayıcının başlatıldığını ve OpenStack sağlayıcısının Selectel sağlayıcısının kaynaklarına bağlı olduğunu unutmayın, çünkü projede bir kullanıcı oluşturmadan ona ait nesneleri yönetmek imkansızdır. . Ne yazık ki aynı sebepten dolayı komutu çalıştıramıyoruz uygulama örneğimizin içinde. İlk önce yapmamız gereken uygulamak modül için project_with_user ve bundan sonra diğer her şey için.

Not: Bu sorun henüz Terraform'da çözülmedi, tartışmayı Github adresinden takip edebilirsiniz. sayı#2430 и sayı#4149.

Kaynak oluşturmak için dizine gidin terraform-örnekler/örnekler/vpc/server_local_root_diskiçeriği şu şekilde olmalıdır:

$ ls
README.md	   main.tf		vars.tf

Modülleri şu komutu kullanarak başlatıyoruz:

$ terraform init

Çıktı, Terraform'un kullandığı sağlayıcıların en son sürümlerini indirdiğini ve örnekte açıklanan tüm modülleri kontrol ettiğini gösterir.

Öncelikle modülü uygulayalım project_with_user. Bu, ayarlanmamış değişkenler için değerlerin manuel olarak iletilmesini gerektirir:

  • sel_account Selectel hesap numaranız ile;
  • sel_token Selectel API anahtarınızla;
  • Kullanıcı şifresi OpenStack kullanıcısı için bir şifre ile.

İlk iki değişkenin değerleri şuradan alınmalıdır: Kontrol panelleri.

Son değişken için herhangi bir şifre oluşturabilirsiniz.

Modülü kullanmak için değerleri değiştirmeniz gerekir SEL_ACCOUNT, SEL_TOKEN и KULLANICI ŞİFRESİ komutu çalıştırıyorum:

$ 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

Komutu çalıştırdıktan sonra Terraform hangi kaynakları oluşturmak istediğini gösterecek ve onay isteyecektir:

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

Proje, kullanıcı ve rol oluşturulduktan sonra kalan kaynakları oluşturmaya başlayabilirsiniz:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply

Kaynak oluştururken, oluşturulan sunucunun erişilebilir olacağı harici IP adresiyle Terraform çıktısına dikkat edin:

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

Oluşturulan sanal makine ile belirtilen IP'yi kullanarak SSH üzerinden çalışabilirsiniz.

Kaynakları Düzenleme

Terraform aracılığıyla kaynak oluşturmanın yanı sıra, bunlar da değiştirilebilir.

Örneğin parametrelerin değerlerini değiştirerek sunucumuzun çekirdek sayısını ve hafızasını artıralım. sunucu_vcpus и sunucu_ram_mb dosyada örnekler/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

Bundan sonra, aşağıdaki komutu kullanarak bunun hangi değişikliklere yol açacağını kontrol ediyoruz:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform plan

Sonuç olarak Terraform bir kaynak değişikliği yaptı openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Bunun, oluşturulan sanal makinenin yeniden başlatılmasını gerektireceğini lütfen unutmayın.

Yeni sanal makine yapılandırmasını uygulamak için şu komutu kullanın: uygulamabunu daha önce başlatmıştık.

Oluşturulan tüm nesneler şu şekilde görüntülenecektir: VPC kontrol panelleri:

Terraform sağlayıcısı Selectel

В нашем örnek depolar Ayrıca ağ sürücülerine sahip sanal makineler oluşturmaya yönelik bildirimleri de görebilirsiniz.

Kubernetes kümesi oluşturma örneği

Bir sonraki örneğe geçmeden önce daha önce oluşturduğumuz kaynakları temizleyeceğiz. Bunu projenin kökünde yapmak için terraform-örnekler/örnekler/vpc/server_local_root_disk OpenStack nesnelerini silmek için komutu çalıştıralım:

$ 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

Ardından Selectel VPC API nesnelerini temizlemek için komutu çalıştırın:

$ 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

Her iki durumda da tüm nesnelerin silinmesini onaylamanız gerekecektir:

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

Aşağıdaki örnek dizindedir terraform-örnekler/örnekler/vpc/kubernetes_cluster.

Bu örnek, projede rolü olan bir kullanıcı olan bir proje oluşturur ve bir Kubernetes kümesi oluşturur. Dosyada vars.tf düğüm sayısı, özellikleri, Kubernetes sürümü vb. gibi varsayılan değerleri görebilirsiniz.

İlk örneğe benzer kaynaklar oluşturmak için öncelikle modülleri başlatmaya ve modül kaynakları oluşturmaya başlayacağız. project_with_userve sonra diğer her şeyi yaratıyoruz:

$ 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 kümelerinin oluşturulmasını ve yönetimini OpenStack Magnum bileşeni aracılığıyla aktaracağız. Bir kümeyle nasıl çalışılacağı hakkında daha fazla bilgiyi şu adreslerden birinde bulabilirsiniz: önceki makalelerve benzeri bilgi tabanı.

Cluster hazırlanırken diskler ve sanal makineler oluşturulacak ve gerekli tüm bileşenler kurulacaktır. Hazırlık yaklaşık 4 dakika sürer ve bu süre zarfında Terraform aşağıdaki gibi mesajları görüntüler:

module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)

Kurulum tamamlandıktan sonra Terraform kümenin hazır olduğunu gösterecek ve kimliğini gösterecektir:

module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Creation complete after 4m20s (ID: 3c8...)

Apply complete! Resources: 6 added, 0 changed, 0 destroyed.

Oluşturulan Kubernetes kümesini yardımcı program aracılığıyla yönetmek için Kubectl küme erişim dosyasını almanız gerekir. Bunu yapmak için hesabınızdaki projeler listesinde Terraform aracılığıyla oluşturulan projeye gidin:

Terraform sağlayıcısı Selectel

Daha sonra aşağıdaki gibi bağlantıyı takip edin xxxxxx.selvpc.ruproje adının altında görünen:

Terraform sağlayıcısı Selectel

Giriş bilgileri için Terraform aracılığıyla oluşturduğunuz kullanıcı adı ve şifreyi kullanın. Eğer aldatmadıysan vars.tf veya ana.tf örneğimizde kullanıcı şu isme sahip olacaktır: tf_user. Değişkenin değerini şifre olarak kullanmalısınız TF_VAR_user_passwordBaşlangıçta belirtilen uygulama Daha önce.

Projenin içinde sekmeye gitmeniz gerekiyor Kubernetes:

Terraform sağlayıcısı Selectel

Terraform aracılığıyla oluşturulan Cluster'ın bulunduğu yerdir. Şunun için dosya indir: Kubectl “Erişim” sekmesinde şunları yapabilirsiniz:

Terraform sağlayıcısı Selectel

Kurulum talimatları aynı sekmede bulunur. Kubectl ve indirilenlerin kullanımı yapılandırma.yaml.

Lansmandan sonra Kubectl ve ortam değişkenini ayarlama KUBECONFIG Kubernetes'i kullanabilirsiniz:

$ 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

Küme düğümlerinin sayısı Terraform aracılığıyla kolayca değiştirilebilir.
Dosyada ana.tf aşağıdaki değer belirtilmiştir:

cluster_node_count = "${var.cluster_node_count}"

Bu değer yerine vars.tf:

variable "cluster_node_count" {
default = 2
}

Varsayılan değeri değiştirebilirsiniz. vars.tfveya gerekli değeri doğrudan ana.tf:

-  cluster_node_count = "${var.cluster_node_count}"
+  cluster_node_count = 3

İlk örnekte olduğu gibi değişiklikleri uygulamak için şu komutu kullanın: uygulama:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply

Düğüm sayısı değiştiğinde küme kullanılabilir durumda kalacaktır. Terraform aracılığıyla bir düğüm ekledikten sonra ek yapılandırmaya gerek kalmadan kullanabilirsiniz:

$ 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

Sonuç

Bu yazıda çalışmanın ana yollarını öğrendik "Sanal özel bulut" Terraform aracılığıyla. Resmi Terraform sağlayıcısı Selectel'i kullanıp geri bildirimde bulunursanız seviniriz.

Selectel Terraform sağlayıcısında bulunan herhangi bir hata şu adresten bildirilebilir: Github Sorunları.

Kaynak: habr.com

Yorum ekle