Nou te lanse yon founisè ofisyèl Terraform pou travay avèk Selectel. Pwodui sa a pèmèt itilizatè yo aplike totalman jesyon resous atravè metodoloji Enfrastrikti kòm kòd.
Founisè a sipòte kounye a jesyon resous sèvis yo "Nwaj prive vityèl" (ki refere yo kòm VPC). Nan lavni, nou planifye pou ajoute jesyon resous pou lòt sèvis Selectel ofri.
Kòm ou deja konnen, sèvis VPC a bati sou OpenStack. Sepandan, akòz lefèt ke OpenStack pa bay zouti natif natal pou sèvi nwaj piblik la, nou aplike fonksyonalite ki manke a nan yon seri API adisyonèl ki senplifye jesyon an nan objè konpoze konplèks epi fè travay la pi pratik. Gen kèk nan fonksyonalite ki disponib nan OpenStack fèmen nan itilizasyon dirèk, men yo disponib nan API nou an.
Founisè Selectel Terraform genyen kounye a kapasite pou jere resous VPC sa yo:
pwojè ak kota yo;
itilizatè yo, wòl yo ak marqueur yo;
sous-rezo piblik, ki gen ladan kwa-rejyonal ak VRRP;
lisans lojisyèl.
Founisè a sèvi ak bibliyotèk Go piblik nou an pou travay avèk API VPC. Tou de bibliyotèk la ak founisè a li menm se sous louvri, devlopman yo fèt sou Github:
Pou jere lòt resous nwaj yo, tankou machin vityèl, disk, grap Kubernetes, ou ka itilize founisè OpenStack Terraform la. Dokiman ofisyèl pou tou de founisè yo disponib nan lyen sa yo:
Pou kòmanse, ou bezwen enstale Terraform (enstriksyon ak lyen ki mennen nan pakè enstalasyon yo ka jwenn nan ofisyèl sou sit wèb).
Pou fonksyone, founisè a mande pou yon kle API Selectel, ki kreye nan panno kontwòl kont.
Manifest pou travay ak Selectel yo kreye lè l sèvi avèk Terraform oswa lè l sèvi avèk yon seri egzanp ki pare ki disponib nan depo Github nou an: terraform-egzanp.
Repozitwa a ak egzanp divize an de repèrtwar:
modil, ki gen ti modil ki kapab itilize ankò ki pran yon seri paramèt kòm opinyon epi jere yon ti seri resous;
egzanp, ki gen egzanp yon seri konplè modil ki konekte.
Apre enstale Terraform, kreye yon kle API Selectel ak familyarize w ak egzanp yo, ann ale nan egzanp pratik.
Nan dosye vars.tf tout paramèt ki pral itilize lè w ap rele modil yo dekri. Kèk nan yo gen valè default, pou egzanp, sèvè a pral kreye nan zòn nan ru-3a ak konfigirasyon sa a:
Agiman inyore_chanjman pèmèt ou inyore chanjman nan atribi yo id pou imaj la itilize pou kreye machin vityèl la. Nan sèvis VPC a, pifò imaj piblik yo mete ajou otomatikman yon fwa pa semèn e an menm tan yo id tou chanje. Sa a se akòz sengularite yo nan eleman nan OpenStack - Glance, nan ki imaj yo konsidere kòm antite imuiabl.
Si w ap kreye oswa modifye yon sèvè ki egziste deja oswa disk ki gen kòm yon agiman image_id se itilize id imaj piblik la, Lè sa a, apre imaj sa a mete ajou, kouri manifest Terraform la ankò pral rkree sèvè a oswa disk la. Sèvi ak yon agiman inyore_chanjman pèmèt ou evite yon sitiyasyon konsa.
Nòt: agiman inyore_chanjman te parèt nan Terraform sa gen anpil tan: rale#2525.
Agiman ignore_resize_confirmation bezwen redimansyonman avèk siksè disk lokal, nwayo, oswa memwa sèvè. Chanjman sa yo fèt atravè eleman OpenStack Nova lè l sèvi avèk yon demann rdimansyonman. Default Nova apre demann rdimansyonman mete sèvè a nan estati verifye_resize epi tann konfimasyon adisyonèl nan men itilizatè a. Sepandan, konpòtman sa a ka chanje pou Nova pa tann pou aksyon adisyonèl nan men itilizatè a.
Agiman espesifye a pèmèt Terraform pa tann estati a verifye_resize pou sèvè a epi prepare pou sèvè a nan yon estati aktif apre li fin chanje paramèt li yo. Agiman an disponib nan vèsyon 1.10.0 nan founisè a OpenStack Terraform: rale#422.
Kreye Resous
Anvan ou kouri manifeste yo, tanpri sonje ke nan egzanp nou an, de founisè diferan yo te lanse, ak founisè a OpenStack depann sou resous yo nan founisè a Selectel, paske san yo pa kreye yon itilizatè nan pwojè a, li enposib jere objè yo ki fè pati li. . Malerezman, pou menm rezon an nou pa ka jis kouri lòd la terraform aplike anndan egzanp nou an. Premye nou bezwen fè aplike pou modil pwojè_avèk_itilizatè epi apre sa pou tout lòt bagay.
Remak: Pwoblèm sa a poko rezoud nan Terraform, ou ka swiv diskisyon an sou Github nan pwoblèm #2430 и pwoblèm #4149.
Apre yo fin kouri lòd la, Terraform pral montre ki resous li vle kreye epi mande pou konfimasyon:
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
Yon fwa ke pwojè a, itilizatè a ak wòl yo te kreye, ou ka kòmanse kreye resous ki rete yo:
Ou ka travay avèk machin vityèl kreye atravè SSH lè l sèvi avèk IP espesifye a.
Editing Resous
Anplis de sa nan kreye resous atravè Terraform, yo kapab tou modifye.
Pou egzanp, ann ogmante kantite nwayo ak memwa pou sèvè nou an pa chanje valè yo pou paramèt yo. server_vcpus и server_ram_mb nan dosye egzanp/vpc/server_local_root_disk/main.tf:
Nan nou an depo egzanp Ou ka wè tou manifeste pou kreye machin vityèl ak kondui rezo.
Egzanp pou kreye yon gwoup Kubernetes
Anvan nou ale nan pwochen egzanp lan, nou pral netwaye resous nou te kreye pi bonè yo. Pou fè sa nan rasin lan nan pwojè a terraform-egzanp/egzanp/vpc/server_local_root_disk Ann kouri lòd pou efase objè OpenStack:
Nan de ka yo, w ap bezwen konfime sipresyon tout objè yo:
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
Egzanp sa a kreye yon pwojè, yon itilizatè ki gen yon wòl nan pwojè a, epi ogmante yon gwoup Kubernetes. Nan dosye vars.tf ou ka wè valè default, tankou kantite nœuds, karakteristik yo, vèsyon Kubernetes, elatriye.
Pou kreye resous ki sanble ak premye egzanp lan, anvan tout bagay nou pral kòmanse inisyalize modil ak kreye resous modil pwojè_avèk_itilizatèak Lè sa a, kreye tout lòt bagay:
Nou pral transfere kreyasyon ak jesyon gwoup Kubernetes atravè eleman OpenStack Magnum la. Ou ka jwenn plis enfòmasyon sou fason pou travay avèk yon gwoup nan youn nan nou yo atik anvan yoosi byen ke baz konesans.
Lè w ap prepare gwoup la, yo pral kreye disk ak machin vityèl epi yo pral enstale tout eleman ki nesesè yo. Preparasyon an pran apeprè 4 minit, pandan tan sa a Terraform ap montre mesaj tankou:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Yon fwa enstalasyon an fini, Terraform pral endike ke gwoup la pare epi montre ID li yo:
Pou jere gwoup Kubernetes kreye atravè sèvis piblik la kubectl ou bezwen jwenn dosye aksè gwoup la. Pou fè sa, ale nan pwojè a ki te kreye atravè Terraform nan lis la nan pwojè nan kont ou:
Apre sa, swiv link lan like xxxxxx.selvpc.ruki parèt anba non pwojè a:
Pou enfòmasyon konekte, sèvi ak non itilizatè ak modpas ou te kreye atravè Terraform. Si ou pa janm twonpe vars.tf oswa prensipal.tf pou egzanp nou an, itilizatè a pral gen non an tf_user. Ou dwe itilize valè varyab la kòm modpas la TF_VAR_user_password, ki te espesifye nan demaraj terraform aplike pi bonè.
Anndan pwojè a ou bezwen ale nan tab la Kubernetes:
Sa a se kote gwoup la te kreye atravè Terraform sitiye. Telechaje fichye pou kubectl ou kapab sou tab la "Aksè":
Enstriksyon enstalasyon yo sitiye sou menm tab la. kubectl ak itilizasyon telechaje a config.yaml.
Apre lansman kubectl epi mete varyab anviwònman an KUBECONFIG ou ka itilize Kubernetes:
Lè kantite nœuds chanje, gwoup la ap rete disponib. Apre ou fin ajoute yon ne via Terraform, ou ka itilize li san konfigirasyon adisyonèl:
$ 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
Konklizyon
Nan atik sa a nou te fè konesans ak fason prensipal yo travay avèk yo "Nwaj prive vityèl" atravè Terraform. N ap kontan si w itilize founisè ofisyèl Selectel Terraform la epi w bay fidbak.
Nenpòt ensèk yo jwenn nan founisè a Selectel Terraform ka rapòte atravè Pwoblèm Github.