Vi har lanserat en officiell Terraform-leverantör för att arbeta med Selectel. Denna produkt tillåter användare att fullt ut implementera resurshantering genom metoden Infrastructure-as-code.
Leverantören stöder för närvarande serviceresurshantering "Virtuella privata moln" (nedan kallat VPC). I framtiden planerar vi att lägga till resurshantering för andra tjänster som tillhandahålls av Selectel.
Som du redan vet är VPC-tjänsten byggd på OpenStack. Men på grund av det faktum att OpenStack inte tillhandahåller inbyggda verktyg för att betjäna det offentliga molnet, implementerade vi den saknade funktionaliteten i en uppsättning ytterligare API:er som förenklar hanteringen av komplexa sammansatta objekt och gör arbetet mer bekvämt. En del av de funktioner som finns tillgängliga i OpenStack är stängda från direkt användning, men är tillgängliga via vårt API.
Selectel Terraform-leverantören inkluderar nu möjligheten att hantera följande VPC-resurser:
projekt och deras kvoter;
användare, deras roller och tokens;
offentliga undernät, inklusive tvärregionala och VRRP;
mjukvarulicenser.
Leverantören använder vårt offentliga Go-bibliotek för att arbeta med VPC API. Både biblioteket och själva leverantören är öppen källkod, deras utveckling utförs på Github:
För att hantera andra molnresurser, såsom virtuella maskiner, diskar, Kubernetes-kluster, kan du använda OpenStack Terraform-leverantören. Officiell dokumentation för båda leverantörerna finns på följande länkar:
För att komma igång måste du installera Terraform (instruktioner och länkar till installationspaket finns på officiella hemsida).
För att fungera kräver leverantören en Selectel API-nyckel, som skapas i kontokontrollpaneler.
Manifester för att arbeta med Selectel skapas med Terraform eller med hjälp av en uppsättning färdiga exempel som finns tillgängliga i vårt Github-förråd: terraform-exempel.
Förvaret med exempel är uppdelat i två kataloger:
moduler, som innehåller små återanvändbara moduler som tar en uppsättning parametrar som input och hanterar en liten uppsättning resurser;
exempel, som innehåller exempel på en komplett uppsättning sammankopplade moduler.
Efter att ha installerat Terraform, skapat en Selectel API-nyckel och bekantat dig med exemplen, låt oss gå vidare till praktiska exempel.
Ett exempel på att skapa en server med en lokal disk
I fil vars.tf alla parametrar som kommer att användas vid anrop av moduler beskrivs. Vissa av dem har standardvärden, till exempel kommer servern att skapas i zonen ru-3a med följande konfiguration:
argument ignore_changes låter dig ignorera attributändringar id för bilden som används för att skapa den virtuella maskinen. I VPC-tjänsten uppdateras de flesta offentliga bilder automatiskt en gång i veckan och samtidigt deras id ändras också. Detta beror på särdragen hos OpenStack-komponenten - Glance, där bilder anses vara oföränderliga enheter.
Om du skapar eller modifierar en befintlig server eller disk som har som argument bild-id används id public image, sedan efter att den bilden har uppdaterats kommer att köra Terraform-manifestet igen att återskapa servern eller disken. Använder ett argument ignore_changes gör att du kan undvika en sådan situation.
Obs: argument ignore_changes dök upp i Terraform för ganska länge sedan: pull#2525.
argument ignore_resize_confirmation behövs för att lyckas ändra storlek på lokal disk, kärnor eller serverminne. Sådana ändringar görs genom OpenStack Nova-komponenten med hjälp av en begäran ändra storlek. Standard Nova efter förfrågan ändra storlek sätter servern i status verifiera_ändra storlek och väntar på ytterligare bekräftelse från användaren. Detta beteende kan dock ändras så att Nova inte väntar på ytterligare åtgärder från användaren.
Det angivna argumentet tillåter Terraform att inte vänta på statusen verifiera_ändra storlek för servern och var beredd på att servern är i aktiv status efter att ha ändrat dess parametrar. Argumentet är tillgängligt från version 1.10.0 av OpenStack Terraform-leverantören: pull#422.
Skapa resurser
Innan du kör manifesten, observera att i vårt exempel lanseras två olika leverantörer, och OpenStack-leverantören beror på Selectel-leverantörens resurser, eftersom utan att skapa en användare i projektet är det omöjligt att hantera objekten som hör till den . Tyvärr kan vi av samma anledning inte bara köra kommandot terraform gäller i vårt exempel. Vi måste först göra tillämpa för modul projekt_med_användare och efter det för allt annat.
Obs: Det här problemet är ännu inte löst i Terraform, du kan följa diskussionen på Github på nummer #2430 и nummer #4149.
Resultatet visar att Terraform laddar ner de senaste versionerna av de leverantörer som den använder och kontrollerar alla moduler som beskrivs i exemplet.
Låt oss först tillämpa modulen projekt_med_användare. Detta kräver manuell överföring av värden för variabler som inte har ställts in:
sel_account med ditt Selectel-kontonummer;
sel_token med din nyckel för Selectel API;
användarlösenord med ett lösenord för OpenStack-användaren.
Värdena för de två första variablerna måste tas från kontrollpaneler.
För den sista variabeln kan du komma med vilket lösenord som helst.
För att använda modulen måste du byta ut värdena SEL_ACCOUNT, SEL_TOKEN и ANVÄNDARLÖSENORD kör kommandot:
Efter att ha kört kommandot kommer Terraform att visa vilka resurser den vill skapa och be om bekräftelse:
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
När projektet, användaren och rollen har skapats kan du börja skapa de återstående resurserna:
Du kan arbeta med den skapade virtuella maskinen via SSH med den angivna IP-adressen.
Redigera resurser
Förutom att skapa resurser genom Terraform kan de även modifieras.
Låt oss till exempel öka antalet kärnor och minne för vår server genom att ändra värdena för parametrarna server_vcpus и server_ram_mb i fil exempel/vpc/server_local_root_disk/main.tf:
I vår exempelförråd Du kan också se manifest för att skapa virtuella maskiner med nätverksenheter.
Exempel på att skapa ett Kubernetes-kluster
Innan vi går vidare till nästa exempel kommer vi att rensa upp de resurser vi skapade tidigare. För att göra detta i roten av projektet terraform-examples/examples/vpc/server_local_root_disk Låt oss köra kommandot för att ta bort OpenStack-objekt:
I båda fallen måste du bekräfta raderingen av alla objekt:
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
Det här exemplet skapar ett projekt, en användare med en roll i projektet och skapar ett Kubernetes-kluster. I fil vars.tf du kan se standardvärden, såsom antalet noder, deras egenskaper, Kubernetes-version, etc.
För att skapa resurser som liknar det första exemplet, börjar vi först och främst initiera moduler och skapa modulresurser projekt_med_användareoch skapa sedan allt annat:
Vi kommer att överföra skapandet och hanteringen av Kubernetes-kluster genom OpenStack Magnum-komponenten. Du kan ta reda på mer om hur du arbetar med ett kluster i en av våra tidigare artiklar, såväl som i kunskapsbas.
När du förbereder klustret kommer diskar och virtuella maskiner att skapas och alla nödvändiga komponenter kommer att installeras. Förberedelserna tar cirka 4 minuter, under vilken tid Terraform visar meddelanden som:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
När installationen är klar kommer Terraform att indikera att klustret är klart och visa dess ID:
För att hantera det skapade Kubernetes-klustret genom verktyget kubectl du behöver skaffa klusteråtkomstfilen. För att göra detta, gå till projektet skapat genom Terraform i listan över projekt på ditt konto:
Följ sedan länken som xxxxxx.selvpc.rusom visas under projektnamnet:
För inloggningsinformation, använd användarnamnet och lösenordet som du skapade genom Terraform. Om du inte har fuskat vars.tf eller main.tf för vårt exempel kommer användaren att ha namnet tf_user. Du måste använda variabelns värde som lösenord TF_VAR_user_password, som specificerades vid start terraform gäller tidigare.
Inuti projektet måste du gå till fliken Kubernetes:
Det är här klustret som skapats via Terraform finns. Ladda ner filen för kubectl du kan på fliken "Åtkomst":
Installationsanvisningar finns på samma flik. kubectl och användning av det nedladdade config.yaml.
Efter lanseringen kubectl och ställa in miljövariabeln KUBECONFIG du kan använda Kubernetes:
När antalet noder ändras kommer klustret att förbli tillgängligt. Efter att ha lagt till en nod via Terraform kan du använda den utan ytterligare konfiguration:
$ 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
Slutsats
I den här artikeln har vi bekantat oss med de viktigaste sätten att arbeta med "Virtuella privata moln" via Terraform. Vi blir glada om du använder den officiella Terraform-leverantören Selectel och ger feedback.
Eventuella buggar som hittas i Selectel Terraform-leverantören kan rapporteras via Github-problem.