Terraformer - Binesaziya To Code

Terraformer - Binesaziya To Code
Ez dixwazim ji we re li ser amûra CLI ya nû ya ku min nivîsand ji bo çareserkirina pirsgirêkek kevn vebêjim.

pirsgirêka

Terraform demek dirêj di civata Devops / Cloud / IT de standardek e. Tiştek ji bo mijûlbûna bi binesaziyê wekî kod pir hêsan û bikêr e. Di Terraformê de gelek dilşadî hene û her weha gelek çeqilmast, kêrên tûj û rahîn hene.
Bi Terraform re pir hêsan e ku meriv tiştên nû biafirîne û dûv re wan îdare bike, biguhezîne an jê bibe. Yên ku di ewr de binesaziyek mezin heye û bi Terraform ve nehatiye afirandin divê çi bikin? Ji nû ve nivîsandin û ji nû ve afirandina tevahiya ewr bi rengek biha û ne ewle ye.
Min di 2 karan de rastî vê pirsgirêkê hat, mînaka herî hêsan ev e ku hûn dixwazin her tişt di Git-ê de di forma pelên terraform de be, lê 250+ kepçeyên we hene û pir e ku meriv wan bi destan bi terraform binivîsîne.
Ð • n, Nûh * de pirs ji sala 2014an ve li terrafoma ku di sala 2016an de hat girtin bi hêviya ku îthalat hebe.

Bi gelemperî, her tişt wekî wêneyê tenê ji rastê berbi çepê ye

Hişyarî: Nivîskar nîvê jiyana xwe li Rûsyayê namîne û hindik bi rûsî dinivîse. Hay ji xeletiyên rastnivîsînê hebin.

Rûsya

1. Ji bo AWS çareseriyên amade û kevn hene terraforming. Dema ku min hewl da ku ez 250+ kepçeyên xwe bi nav bikim, min fêm kir ku her tişt li wir xirab bû. AWS ev demek dirêj e ku gelek vebijarkên nû destnîşan dike, lê terraforming bi wan nizane û bi gelemperî ew yaqût e. şablon kêm xuya dike. Piştî 2yê êvarê min şand Daxwaza vekişînê ku li wir taybetmendiyên bêtir lê zêde bike û fêm kir ku çareseriyek wusa qet ne guncaw e.
Terraforming çawa dixebite: ew daneyan ji AWS SDK digire û tf û tfstate bi navgîniyek şablonê çêdike.
Li vir 3 pirsgirêk hene:
1. Dê her dem di nûvekirinan de derengiyek hebe
2. pelên tf carinan şikestî derdikevin
3. tfstate ji tf cuda hatiye civandin u her dem nagihe hev
Bi giştî, zehmet e ku encamek ku `plana terraform` tê de dibêje ku tu guhertin tune ne, bi dest bixe

2. `terraform import` di terraformê de fermanek çêkirî ye. Çawa dixebite?
Hûn pelek TF-ya vala bi nav û celebê çavkaniyê dinivîsin, dûv re `terraform import` dimeşînin û nasnameya çavkaniyê derbas dikin. terraform bi pêşkêşkerê re têkilî dike, daneyan distîne û pelek tfstate çêdike.
Li vir 3 pirsgirêk hene:
1. Em tenê pelek tfstate distînin, û tf vala ye, hûn hewce ne ku wê bi destan binivîsin an jî ji tfstate veguherînin
2. Tenê dikare bi çavkaniyek yekcar bixebite û hemî çavkaniyan piştgirî nake. Û divê ez bi 250+ kepçeyan dîsa çi bikim?
3. Hûn hewce ne ku nasnameya çavkaniyan zanibin - ango, hûn hewce ne ku wê di koda ku navnîşa çavkaniyan digire de pêça
Bi gelemperî, encam qismî ye û baş nayê pîvandin

Biryara min

Hewce:
1. Kapasîteya afirandina pelên tf û tfstate ji bo çavkaniyan. Mînakî, hemî kepçeyan / koma ewlehiyê / balansa barkirinê dakêşin û wê `plana terraform` vegerand ku tu guhertin tune
2. Hûn hewceyê 2 ewrên GCP + AWS hene
3. Çareseriya gerdûnî ya ku her carê nûvekirina hêsan e û ji bo 3 rojên xebatê wextê li ser her çavkaniyekê winda nake
4. Bikin Çavkaniya Vekirî - her kes heman pirsgirêk heye

Zimanê Go ev e ku ez jê hez dikim, û pirtûkxaneyek wî heye ji bo afirandina pelên HCL ku di terraformê de têne bikar anîn + gelek kodên di terraformê de ku dikarin bikêr bin

rêya

Hewldana yekem
Min bi guhertoyek hêsan dest pê kir. Ji bo çavkaniya pêwîst bi ewr re bi SDK-ê re têkilî daynin û wê veguherînin zeviyên ji bo terraform. Hewldan tavilê li ser koma ewlehiyê mir ji ber ku min ji 1.5 rojan hez nekir ku tenê koma ewlehiyê veguherînim (û gelek çavkanî hene). Ji bo demek dirêj û paşê zevî dikarin bêne guhertin / zêdekirin

Hewldana duyemîn
Li ser bingeha ramana diyarkirî ye vir. Tenê tfstate bi tf bigirin û veguherînin. Hemî dane hene û zevî jî yek in. Meriv çawa ji bo gelek çavkaniyan tfstate tije bistîne?? Li vê derê fermana `terraform refresh` hat rizgarkirin. terraform hemû çavkaniyan di tfstate de digire û bi ID, daneyan li ser wan derdixe û her tiştî ji tfstate re dinivîse. Ango, tfstatek vala tenê bi nav û nasnameyan biafirînin, `terraform refresh` bimeşînin û paşê em tfstatên tam bistînin. Hooray!
Naha em pornografiya paşverû ya nivîsandina veguherînerek ji bo tfstate bo tf bikin. Ji bo kesên ku qet tfstate nexwendin, ew JSON e, lê taybetî.
Li vir taybetmendiyên wê yên girîng hene

 "attributes": {
                            "id": "default/backend-logging-load-deployment",
                            "metadata.#": "1",
                            "metadata.0.annotations.%": "0",
                            "metadata.0.generate_name": "",
                            "metadata.0.generation": "24",
                            "metadata.0.labels.%": "1",
                            "metadata.0.labels.app": "backend-logging",
                            "metadata.0.name": "backend-logging-load-deployment",
                            "metadata.0.namespace": "default",
                            "metadata.0.resource_version": "109317427",
                            "metadata.0.self_link": "/apis/apps/v1/namespaces/default/deployments/backend-logging-load-deployment",
                            "metadata.0.uid": "300ecda1-4138-11e9-9d5d-42010a8400b5",
                            "spec.#": "1",
                            "spec.0.min_ready_seconds": "0",
                            "spec.0.paused": "false",
                            "spec.0.progress_deadline_seconds": "600",
                            "spec.0.replicas": "1",
                            "spec.0.revision_history_limit": "10",
                            "spec.0.selector.#": "1",

Heye:
1. id - têl
2. metadata - rêzek bi mezinahiya 1 û tê de tiştek bi zeviyên ku li jêr tê vegotin
3. spec - hash ji size 1 û key, nirxa di wê de
Bi kurtasî, formatek kêfê, her tişt dikare çend astên kûr be

                   "spec.#": "1",
                            "spec.0.min_ready_seconds": "0",
                            "spec.0.paused": "false",
                            "spec.0.progress_deadline_seconds": "600",
                            "spec.0.replicas": "1",
                            "spec.0.revision_history_limit": "10",
                            "spec.0.selector.#": "1",
                            "spec.0.selector.0.match_expressions.#": "0",
                            "spec.0.selector.0.match_labels.%": "1",
                            "spec.0.selector.0.match_labels.app": "backend-logging-load",
                            "spec.0.strategy.#": "0",
                            "spec.0.template.#": "1",
                            "spec.0.template.0.metadata.#": "1",
                            "spec.0.template.0.metadata.0.annotations.%": "0",
                            "spec.0.template.0.metadata.0.generate_name": "",
                            "spec.0.template.0.metadata.0.generation": "0",
                            "spec.0.template.0.metadata.0.labels.%": "1",
                            "spec.0.template.0.metadata.0.labels.app": "backend-logging-load",
                            "spec.0.template.0.metadata.0.name": "",
                            "spec.0.template.0.metadata.0.namespace": "",
                            "spec.0.template.0.metadata.0.resource_version": "",
                            "spec.0.template.0.metadata.0.self_link": "",
                            "spec.0.template.0.metadata.0.uid": "",
                            "spec.0.template.0.spec.#": "1",
                            "spec.0.template.0.spec.0.active_deadline_seconds": "0",
                            "spec.0.template.0.spec.0.container.#": "1",
                            "spec.0.template.0.spec.0.container.0.args.#": "3",

Bi gelemperî, heke kesek ji bo hevpeyivînek pirsgirêkek bernamekirinê bixwaze, tenê ji wan bipirse ku ji bo vî karî parsekek binivîsîne :)
Piştî gelek hewildanên ji bo nivîsandina parsekek bê xeletî, min beşek jê di koda terraform de, û beşa herî girîng dît. Û xuya bû ku her tişt baş dixebite

Hewldana sê
Pêşkêşkerên terraform binary in ku kodek bi hemî çavkanî û mantiqê ji bo xebata bi API-ya ewr re vedihewîne. Her ewr dabînkerê xwe heye û terraform bi xwe tenê bi protokola xwe ya RPC di navbera du pêvajoyan de gazî wan dike.
Naha min biryar da ku rasterast bi navgîniya bangên RPC ve bi peydakiroxên terraform re têkilî daynin. Ew xweşik derket û îmkan da ku pêşkêşkerên terraform bi yên nû biguhezînin û bêyî guheztina kodê taybetmendiyên nû bistînin. Di heman demê de derdikeve holê ku ne hemî qadên di tfstate de divê di tf de bin, lê hûn çawa dikarin fêr bibin? Tenê li ser vê yekê ji pêşkêşvanê xwe bipirsin. Dûv re pornografiyek din a paşverû ya berhevkirina vegotinên birêkûpêk dest pê kir, lêgerîna zeviyên di hundurê tfstate de di her astê de bi kûrahî.

Di dawiyê de, me amûrek CLI-ya kêrhatî stend ku ji bo hemî pêşkêşkerên terraform binesaziyek hevpar heye û hûn dikarin bi hêsanî yek nû lê zêde bikin. Di heman demê de, zêdekirina çavkaniyan kodek piçûk digire. Zêdeyî her cûre qenciyên wekî girêdanên di navbera çavkaniyan de. Bê guman, gelek pirsgirêkên cûda hebûn ku ne hemî têne vegotin.
Min navê heywanê kir Terrafomer.

Dawîn

Bi karanîna Terrafomer, me 500-700 hezar rêzikên koda tf + tfstate ji du ewran çêkir. Me karîbû tiştên mîras bi dest bixin û tenê bi terraformê, wekî di binesaziya çêtirîn de wekî ramanên kodê dest pê bikin. Gava ku hûn ewrek mezin hildigirin û wê bi navgîniya tîmek di forma pelên karkerên terraform de digirin, tenê sêrbaz e. Û paşê grep / şûna / git û hwd.

Min ew şuştin û rêz kir, destûr girt. Roja Pêncşemê (02.05.19/XNUMX/XNUMX) ji bo her kesî li GitHub hate berdan. github.com/GoogleCloudPlatform/terraformer
Jixwe 600 stêrk wergirtine, 2 daxwazên vekişînê ji bo zêdekirina piştgirî ji bo openstack û kubernetes. Bersiva baş. Bi gelemperî, proje ji bo mirovan bikêr e
Ez ji her kesê ku dixwaze bi Terraform re dest bi xebatê bike şîret dikim û ji bo vê yekê her tiştî ji nû ve nenivîsîne.
Ez ê kêfxweş bibim ku daxwazan, pirsgirêkan, stêran bikişînim.

Demo
Terraformer - Binesaziya To Code

Source: www.habr.com

Add a comment