We hebben een officiële Terraform-provider gelanceerd om met Selectel te werken. Met dit product kunnen gebruikers resource management volledig implementeren via de Infrastructure-as-code-methodologie.
De provider ondersteunt momenteel serviceresourcebeheer "Virtuele privécloud" (hierna VPC genoemd). In de toekomst zijn we van plan om resource management toe te voegen voor andere diensten van Selectel.
Zoals u al weet, is de VPC-service gebouwd op OpenStack. Omdat OpenStack echter geen native tools biedt voor het bedienen van de publieke cloud, hebben we de ontbrekende functionaliteit geïmplementeerd in een reeks aanvullende API's die het beheer van complexe samengestelde objecten vereenvoudigen en het werk gemakkelijker maken. Een deel van de functionaliteit die beschikbaar is in OpenStack is gesloten voor direct gebruik, maar is wel beschikbaar via onze API.
De Selectel Terraform-provider biedt nu de mogelijkheid om de volgende VPC-bronnen te beheren:
projecten en hun quota;
gebruikers, hun rollen en tokens;
openbare subnetten, inclusief interregionaal en VRRP;
softwarelicenties.
De provider gebruikt onze openbare Go-bibliotheek om met de VPC API te werken. Zowel de bibliotheek als de aanbieder zelf zijn open-source, hun ontwikkeling vindt plaats op Github:
Voor het beheren van andere cloudbronnen, zoals virtuele machines, schijven en Kubernetes-clusters, kunt u de OpenStack Terraform-provider gebruiken. Officiële documentatie voor beide providers is beschikbaar via de volgende links:
Om te beginnen moet je Terraform installeren (instructies en links naar installatiepakketten zijn te vinden op de officiële website).
Om te kunnen werken heeft de provider een Selectel API-sleutel nodig, die is aangemaakt in accountcontrolepanelen.
Manifesten voor het werken met Selectel worden gemaakt met Terraform of met behulp van een set kant-en-klare voorbeelden die beschikbaar zijn in onze Github-repository: terraform-voorbeelden.
De repository met voorbeelden is verdeeld in twee mappen:
modules, met kleine herbruikbare modules die een reeks parameters als invoer gebruiken en een kleine reeks bronnen beheren;
voorbeelden, met voorbeelden van een complete set onderling verbonden modules.
Nadat we Terraform hebben geïnstalleerd, een Selectel API-sleutel hebben aangemaakt en vertrouwd zijn geraakt met de voorbeelden, gaan we verder met praktische voorbeelden.
Een voorbeeld van het maken van een server met een lokale schijf
In bestand vars.tf alle parameters die zullen worden gebruikt bij het aanroepen van modules worden beschreven. Sommigen van hen hebben standaardwaarden, de server wordt bijvoorbeeld in de zone gemaakt ru-3a met de volgende configuratie:
Indien nodig kunt u een andere openbare sleutel opgeven. De sleutel hoeft niet als bestandspad te worden opgegeven; u kunt de waarde ook als string toevoegen.
Verderop in dit bestand worden de modules gelanceerd project_met_gebruiker и server_local_root_disk, die de benodigde middelen beheren.
argument negeer_wijzigingen Hiermee kunt u attribuutwijzigingen negeren id voor de afbeelding die is gebruikt om de virtuele machine te maken. In de VPC-service worden de meeste openbare afbeeldingen één keer per week automatisch bijgewerkt en tegelijkertijd hun id verandert ook. Dit komt door de eigenaardigheden van de OpenStack-component - Glance, waarin afbeeldingen als onveranderlijke entiteiten worden beschouwd.
Als u een bestaande server of schijf maakt of wijzigt met als argument afbeelding_id gebruikt id public image, waarna, nadat die image is bijgewerkt, het Terraform-manifest opnieuw wordt uitgevoerd, de server of schijf opnieuw wordt gemaakt. Een argument gebruiken negeer_wijzigingen kunt u een dergelijke situatie vermijden.
Let op: betoog negeer_wijzigingen verscheen een hele tijd geleden in Terraform: trek#2525.
argument negeer_resize_confirmation nodig om de grootte van de lokale schijf, kernen of servergeheugen succesvol te wijzigen. Dergelijke wijzigingen worden via de OpenStack Nova-component aangebracht met behulp van een verzoek vergroten of verkleinen. Standaard Nova na aanvraag vergroten of verkleinen zet de server in status verifieer_resize en wacht op aanvullende bevestiging van de gebruiker. Dit gedrag kan echter worden gewijzigd, zodat Nova niet wacht op aanvullende acties van de gebruiker.
Met het opgegeven argument kan Terraform niet wachten op de status verifieer_resize voor de server en wees erop voorbereid dat de server een actieve status heeft nadat de parameters zijn gewijzigd. Het argument is beschikbaar vanaf versie 1.10.0 van de OpenStack Terraform-provider: trek#422.
Hulpbronnen creëren
Voordat u de manifesten uitvoert, moet u er rekening mee houden dat in ons voorbeeld twee verschillende providers worden gelanceerd en dat de OpenStack-provider afhankelijk is van de bronnen van de Selectel-provider, omdat het zonder het aanmaken van een gebruiker in het project onmogelijk is om de bijbehorende objecten te beheren . Helaas kunnen we om dezelfde reden de opdracht niet zomaar uitvoeren terraform van toepassing binnen ons voorbeeld. Wij moeten eerst doen dit toepassen voor moduul project_met_gebruiker en daarna voor al het andere.
Opmerking: dit probleem is nog niet opgelost in Terraform, je kunt de discussie op Github volgen op probleem #2430 и probleem #4149.
We initialiseren de modules met behulp van de opdracht:
$ terraform init
Uit de uitvoer blijkt dat Terraform de nieuwste versies downloadt van de providers die het gebruikt en alle modules controleert die in het voorbeeld worden beschreven.
Laten we eerst de module toepassen project_met_gebruiker. Dit vereist het handmatig doorgeven van waarden voor variabelen die niet zijn ingesteld:
sel_account met uw Selectel-rekeningnummer;
sel_token met uw sleutel voor Selectel API;
gebruikerswachtwoord met een wachtwoord voor de OpenStack-gebruiker.
De waarden voor de eerste twee variabelen moeten worden overgenomen controle panelen.
Voor de laatste variabele kunt u elk wachtwoord bedenken.
Om de module te gebruiken, moet u de waarden vervangen SEL_ACCOUNT, SEL_TOKEN и GEBRUIKERSWACHTWOORD het commando uitvoeren:
Na het uitvoeren van de opdracht zal Terraform laten zien welke bronnen het wil aanmaken en om bevestiging vragen:
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
Zodra het project, de gebruiker en de rol zijn aangemaakt, kunt u beginnen met het maken van de resterende resources:
U kunt via SSH met de aangemaakte virtuele machine werken met behulp van het opgegeven IP-adres.
Bronnen bewerken
Naast het maken van bronnen via Terraform, kunnen ze ook worden gewijzigd.
Laten we bijvoorbeeld het aantal kernen en geheugen voor onze server vergroten door de waarden voor de parameters te wijzigen server_vcpus и server_ram_mb in bestand voorbeelden/vpc/server_local_root_disk/main.tf:
In onze voorbeeld opslagplaatsen U kunt ook manifesten bekijken voor het maken van virtuele machines met netwerkstations.
Voorbeeld van het maken van een Kubernetes-cluster
Voordat we naar het volgende voorbeeld gaan, ruimen we de bronnen op die we eerder hebben gemaakt. Om dit in de root van het project te doen terraform-examples/examples/vpc/server_local_root_disk Laten we de opdracht uitvoeren om OpenStack-objecten te verwijderen:
In beide gevallen moet u het verwijderen van alle objecten bevestigen:
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
In dit voorbeeld wordt een project gemaakt, een gebruiker met een rol in het project, en wordt één Kubernetes-cluster geactiveerd. In bestand vars.tf u kunt standaardwaarden zien, zoals het aantal knooppunten, hun kenmerken, de Kubernetes-versie, enz.
Om bronnen te creëren die vergelijkbaar zijn met het eerste voorbeeld, zullen we eerst beginnen met het initialiseren van modules en het maken van modulebronnen project_met_gebruikeren dan al het andere maken:
We zullen de creatie en het beheer van Kubernetes-clusters overdragen via de OpenStack Magnum-component. Meer over het werken met een cluster leest u in één van onze eerdere artikelen, en zo in kennis basis.
Bij het voorbereiden van het cluster worden schijven en virtuele machines aangemaakt en worden alle benodigde componenten geïnstalleerd. De voorbereiding duurt ongeveer 4 minuten, gedurende welke tijd zal Terraform berichten weergeven zoals:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Zodra de installatie is voltooid, geeft Terraform aan dat het cluster gereed is en wordt de ID ervan weergegeven:
Om het gemaakte Kubernetes-cluster te beheren via het hulpprogramma kubectl u moet het clustertoegangsbestand ophalen. Ga hiervoor naar het project dat via Terraform is aangemaakt in de lijst met projecten in uw account:
Volg vervolgens de link zoals xxxxxx.selvpc.rudie onder de projectnaam verschijnt:
Voor inloggegevens gebruikt u de gebruikersnaam en het wachtwoord die u via Terraform heeft aangemaakt. Als je niet hebt vals gespeeld vars.tf of hoofd.tf in ons voorbeeld heeft de gebruiker de naam tf_gebruiker. U moet de waarde van de variabele als wachtwoord gebruiken TF_VAR_user_password, die bij het opstarten is opgegeven terraform van toepassing eerder.
Binnen het project moet je naar het tabblad gaan Kubernetes:
Dit is waar het cluster dat via Terraform is gemaakt, zich bevindt. Bestand downloaden voor kubectl Op het tabblad ‘Toegang’ kunt u het volgende doen:
Installatie-instructies bevinden zich op hetzelfde tabblad. kubectl en gebruik van de gedownloade bestanden config.yaml.
Nadat de kubectl en het instellen van de omgevingsvariabele KUBECONFIG u kunt Kubernetes gebruiken:
Wanneer het aantal knooppunten verandert, blijft het cluster beschikbaar. Nadat u een knooppunt via Terraform heeft toegevoegd, kunt u het zonder aanvullende configuratie gebruiken:
$ 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
Conclusie
In dit artikel maakten we kennis met de belangrijkste manieren om mee te werken "Virtuele privécloud" via Terraform. Wij zullen blij zijn als u de officiële Selectel Terraform-aanbieder gebruikt en feedback geeft.
Eventuele gevonden bugs in de Selectel Terraform-provider kunnen worden gerapporteerd via Github-problemen.