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ş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.
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:
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.
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.
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:
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:
В нашем ö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:
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
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:
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:
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:
Daha sonra aşağıdaki gibi bağlantıyı takip edin xxxxxx.selvpc.ruproje adının altında görünen:
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 aracılığıyla oluşturulan Cluster'ın bulunduğu yerdir. Şunun için dosya indir: Kubectl “Erişim” sekmesinde şunları yapabilirsiniz:
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:
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ı.