Uruchomiliśmy oficjalnego dostawcę Terraform do współpracy z Selectel. Produkt ten umożliwia użytkownikom pełne wdrożenie zarządzania zasobami poprzez metodologię infrastruktury jako kodu.
Dostawca aktualnie wspiera zarządzanie zasobami usługi „Wirtualna chmura prywatna” (zwane dalej VPC). W przyszłości planujemy dodać zarządzanie zasobami dla innych usług świadczonych przez Selectel.
Jak już wiesz, usługa VPC zbudowana jest na OpenStack. Jednak w związku z tym, że OpenStack nie udostępnia natywnych narzędzi do obsługi chmury publicznej, brakującą funkcjonalność zaimplementowaliśmy w zestawie dodatkowych API, które upraszczają zarządzanie złożonymi obiektami złożonymi i czynią pracę wygodniejszą. Niektóre funkcje dostępne w OpenStack są niedostępne do bezpośredniego użycia, ale są dostępne za pośrednictwem w API.
Dostawca Selectel Terraform umożliwia teraz zarządzanie następującymi zasobami VPC:
projekty i ich kwoty;
użytkownicy, ich role i tokeny;
podsieci publiczne, w tym międzyregionalne i VRRP;
licencje na oprogramowanie.
Dostawca korzysta z naszej publicznej biblioteki Go do współpracy z API VPC. Zarówno biblioteka, jak i sam dostawca są open source, ich rozwój odbywa się na Githubie:
Do zarządzania innymi zasobami chmurowymi, takimi jak maszyny wirtualne, dyski, klastry Kubernetes, można skorzystać z dostawcy OpenStack Terraform. Oficjalna dokumentacja obu dostawców jest dostępna pod następującymi linkami:
Aby rozpocząć, musisz zainstalować Terraform (instrukcje i linki do pakietów instalacyjnych znajdziesz na stronie Oficjalna strona).
Do działania dostawca wymaga klucza API Selectel, który jest tworzony w panele kontrolne konta.
Manifesty do pracy z Selectelem tworzymy przy pomocy Terraforma lub z wykorzystaniem zestawu gotowych przykładów, które są dostępne w naszym repozytorium Github: przykłady terraform.
Repozytorium z przykładami podzielone jest na dwa katalogi:
Moduły, zawierający małe moduły wielokrotnego użytku, które pobierają zestaw parametrów jako dane wejściowe i zarządzają niewielkim zestawem zasobów;
W pliku vars.tf opisano wszystkie parametry, które będą wykorzystywane podczas wywoływania modułów. Część z nich ma wartości domyślne, np. serwer zostanie utworzony w strefie ru-3a z następującą konfiguracją:
Jeśli to konieczne, możesz określić inny klucz publiczny. Klucz nie musi być określony jako ścieżka pliku; możesz także dodać wartość jako ciąg znaków.
W dalszej części tego pliku uruchamiane są moduły projekt_z_użytkownikiem и serwer_lokalny_dysk_główny_serwera, które zarządzają niezbędnymi zasobami.
argument ignorować_zmiany pozwala zignorować zmiany atrybutów id dla obrazu użytego do utworzenia maszyny wirtualnej. W usłudze VPC większość zdjęć publicznych jest aktualizowana automatycznie raz w tygodniu i jednocześnie ich id również się zmienia. Wynika to ze specyfiki komponentu OpenStack - Glance, w którym obrazy są uważane za niezmienne byty.
Jeśli tworzysz lub modyfikujesz istniejący serwer lub dysk, który ma jako argument identyfikator_obrazu używany id publiczny obraz, a po zaktualizowaniu tego obrazu ponowne uruchomienie manifestu Terraform spowoduje odtworzenie serwera lub dysku. Używanie argumentu ignorować_zmiany pozwala uniknąć takiej sytuacji.
Uwaga: argument ignorować_zmiany pojawił się w Terraformie dość dawno temu: pociągnij#2525.
argument ignorowanie_resize_confirmation potrzebne do pomyślnej zmiany rozmiaru dysku lokalnego, rdzeni lub pamięci serwera. Takie zmiany wprowadzane są poprzez komponent OpenStack Nova za pomocą żądania rozmiar. Domyślna Nova na żądanie rozmiar ustawia serwer w stan zweryfikować_zmianę rozmiaru i czeka na dodatkowe potwierdzenie od użytkownika. Można jednak to zachowanie zmienić tak, aby Nova nie czekała na dodatkowe działania ze strony użytkownika.
Podany argument pozwala Terraformowi nie czekać na status zweryfikować_zmianę rozmiaru dla serwera i bądź przygotowany na to, że serwer będzie w stanie aktywnym po zmianie jego parametrów. Argument jest dostępny od wersji 1.10.0 dostawcy OpenStack Terraform: pociągnij#422.
Tworzenie zasobów
Przed uruchomieniem manifestów należy zwrócić uwagę, że w naszym przykładzie uruchamianych jest dwóch różnych dostawców, a dostawca OpenStack jest zależny od zasobów dostawcy Selectel, gdyż bez utworzenia użytkownika w projekcie nie da się zarządzać należącymi do niego obiektami . Niestety z tego samego powodu nie możemy po prostu uruchomić polecenia zastosowanie ma terraform wewnątrz naszego przykładu. Najpierw musimy zrobić zastosować dla modułu projekt_z_użytkownikiem a potem na wszystko inne.
Uwaga: ten problem nie został jeszcze rozwiązany w Terraform. Możesz śledzić dyskusję na Githubie pod adresem numer 2430 и numer 4149.
Po uruchomieniu polecenia Terraform pokaże, jakie zasoby chce utworzyć i poprosi o potwierdzenie:
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
Po utworzeniu projektu, użytkownika i roli możesz rozpocząć tworzenie pozostałych zasobów:
Możesz pracować z utworzoną maszyną wirtualną poprzez SSH przy użyciu określonego adresu IP.
Edytowanie zasobów
Oprócz tworzenia zasobów poprzez Terraform, można je również modyfikować.
Przykładowo zwiększmy ilość rdzeni i pamięci dla naszego serwera zmieniając wartości parametrów serwer_vcpus и serwer_ram_mb w pliku przykłady/vpc/server_local_root_disk/main.tf:
В нашем przykładowe repozytoria Możesz także zobaczyć manifesty do tworzenia maszyn wirtualnych z dyskami sieciowymi.
Przykład tworzenia klastra Kubernetes
Zanim przejdziemy do następnego przykładu, wyczyścimy zasoby, które utworzyliśmy wcześniej. Aby to zrobić w katalogu głównym projektu terraform-examples/examples/vpc/server_local_root_disk Uruchommy polecenie, aby usunąć obiekty OpenStack:
W obu przypadkach konieczne będzie potwierdzenie usunięcia wszystkich obiektów:
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
Ten przykład tworzy projekt, użytkownika z rolą w projekcie i wywołuje jeden klaster Kubernetes. W pliku vars.tf możesz zobaczyć wartości domyślne, takie jak liczba węzłów, ich charakterystyka, wersja Kubernetesa itp.
Aby utworzyć zasoby podobnie jak w pierwszym przykładzie, najpierw zajmiemy się inicjowaniem modułów i tworzeniem zasobów modułów projekt_z_użytkownikiema następnie tworzenie wszystkiego innego:
Przeniesiemy tworzenie i zarządzanie klastrami Kubernetes poprzez komponent OpenStack Magnum. Więcej o pracy z klastrem możesz dowiedzieć się w jednym z naszych poprzednie artykuły, jak również w baza wiedzy.
Podczas przygotowywania klastra zostaną utworzone dyski i maszyny wirtualne oraz zainstalowane zostaną wszystkie niezbędne komponenty. Przygotowanie trwa około 4 minut, w tym czasie Terraform wyświetli komunikaty typu:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Po zakończeniu instalacji Terraform wskaże, że klaster jest gotowy i wyświetli jego identyfikator:
Aby zarządzać utworzonym klastrem Kubernetes za pomocą narzędzia kubectl musisz uzyskać plik dostępu do klastra. Aby to zrobić, przejdź do projektu utworzonego za pomocą Terraform na liście projektów na swoim koncie:
Następnie kliknij link jak xxxxxx.selvpc.ruktóry pojawia się pod nazwą projektu:
Aby uzyskać dane logowania, użyj nazwy użytkownika i hasła utworzonego w Terraform. Jeśli nie oszukałeś vars.tf lub główna.tf w naszym przykładzie użytkownik będzie miał nazwę użytkownik tf. Jako hasła należy użyć wartości zmiennej TF_VAR_hasło_użytkownika, który został określony przy uruchomieniu zastosowanie ma terraform wcześniej.
Wewnątrz projektu musisz przejść do zakładki Kubernetes:
Tutaj znajduje się klaster utworzony za pomocą Terraform. Pobierz plik dla kubectl możesz na karcie „Dostęp”:
Instrukcje instalacji znajdują się na tej samej karcie. kubectl i korzystanie z pobranych konfiguracja.yaml.
Po odpaleniu kubectl i ustawienie zmiennej środowiskowej KUBECOFIG możesz użyć Kubernetesa:
Gdy liczba węzłów ulegnie zmianie, klaster pozostanie dostępny. Po dodaniu węzła poprzez Terraform można z niego korzystać bez dodatkowej konfiguracji:
$ 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
wniosek
W tym artykule zapoznaliśmy się z głównymi sposobami pracy „Wirtualna chmura prywatna” za pośrednictwem Terraformu. Będzie nam miło, jeśli skorzystasz z oficjalnego dostawcy Selectel Terraform i przekażesz nam swoją opinię.
Wszelkie błędy znalezione w dostawcy Selectel Terraform można zgłaszać za pośrednictwem Problemy z Githubem.