Terraformer - Akụrụngwa Iji Koodu

Terraformer - Akụrụngwa Iji Koodu
Ọ ga-amasị m ịgwa gị maka ngwá ọrụ CLI ọhụrụ m dere iji dozie nsogbu ochie.

nsogbu

Terraform abụrụla ọkọlọtọ na obodo Devops/Cloud/IT. Ihe dị nnọọ adaba na bara uru maka ime ihe akụrụngwa dị ka koodu. Enwere ọtụtụ ihe ụtọ na Terraform yana ọtụtụ ndụdụ, mma dị nkọ na rake.
Site na Terraform ọ dị mma ịmepụta ihe ọhụrụ wee jikwaa, gbanwee ma ọ bụ hichapụ ha. Kedu ihe ndị nwere nnukwu akụrụngwa na igwe ojii na-emeghị site na Terraform kwesịrị ime? Ideghari na imeghari igwe ojii dum dị oke ọnụ na enweghị nchekwa.
Enwetara m nsogbu a na ọrụ 2, ihe atụ kachasị mfe bụ mgbe ịchọrọ ka ihe niile dị na Git n'ụdị faịlụ terraform, mana ị nwere bọket 250+ na ọ bụ ọtụtụ ihe iji dee ha na terraform site n'aka.
E nwere nke kemgbe 2014 na terrafom nke mechiri na 2016 na-atụ anya na a ga-ebubata.

N'ozuzu, ihe niile dị ka ọ dị na foto a naanị site n'aka nri gaa n'aka ekpe

Ịdọ aka ná ntị: Onye edemede anaghị ebi na Russia maka ọkara ndụ ya ma dee ntakịrị na Russian. Kpachara anya maka njehie mkpoputa.

Ngwọta

1. Enwere ihe edozi edozi na ochie maka AWS terraforming. Mgbe m nwara ị nweta bọket 250+ m, achọpụtara m na ihe niile adịghị mma n'ebe ahụ. AWS anọwo na-ewebata ọtụtụ nhọrọ ọhụrụ, mana terraforming amaghị banyere ha na n'ozuzu ọ bụ ruby template na-ele anya obere. Mgbe 2 na mgbede m zigara Dọrọ arịrịọ ịgbakwunye atụmatụ ndị ọzọ n'ebe ahụ ma chọpụta na ngwọta dị otú ahụ adịghị mma ma ọlị.
Otu terraforming si arụ ọrụ: ọ na-ewe data sitere na AWS SDK wee wepụta tf na tfstate site na ndebiri.
Enwere nsogbu 3 ebe a:
1. A ga-enwe oge na mmelite mgbe niile
2. tf faịlụ mgbe ụfọdụ na-apụta agbaji
3. A na-anakọta tfstate iche iche site na tf na ọ bụghị mgbe niile na-agbakọta
N'ozuzu, ọ na-esiri ike inweta nsonaazụ nke 'terraform plan' na-ekwu na ọ dịghị mgbanwe ọ bụla

2. 'terraform mbubata' bụ iwu arụnyere na terraform. Kedu ka ọ si arụ ọrụ?
Ị na-ede faịlụ TF efu na aha na ụdị akụrụngwa, wee mee 'terraform import' wee nyefee NJ akụrụngwa. terraform na-akpọtụrụ onye na-eweta ya, nata data ma mee faịlụ tfstate.
Enwere nsogbu 3 ebe a:
1. Anyị na-enweta naanị faịlụ tfstate, na tf bụ ihe efu, ịkwesịrị iji aka dee ya ma ọ bụ gbanwee ya na tfstate.
2. Nwere ike na-arụ ọrụ na otu akụ n'otu oge na ọ dịghị akwado niile akụrụngwa. Kedu ihe m ga-eme ọzọ na bọket 250+?
3. Ịkwesịrị ịmara ID nke ihe onwunwe - ya bụ, ịkwesịrị ịkechie ya na koodu nke na-enweta ndepụta nke ihe onwunwe.
N'ozuzu, ihe na-esi na ya pụta bụ akụkụ na-adịghị mma

Mkpebi m

Ihe choro:
1. Ikike ịmepụta tf na tfstate faịlụ maka akụrụngwa. Dịka ọmụmaatụ, budata bọket niile/otu nchekwa/nchịkọta ibu na 'atụmatụ terraform' weghachiri na enweghị mgbanwe ọ bụla.
2. Ị chọrọ 2 GCP + AWS ígwé ojii
3. Ngwọta zuru ụwa ọnụ nke dị mfe imelite oge ọ bụla ma ghara igbu oge na akụ ọ bụla maka ụbọchị 3 nke ọrụ
4. Mee ya Open Source - onye ọ bụla nwere otu nsogbu

Asụsụ Go bụ ihe mere m ji hụ ya n'anya, ọ nwekwara ọbá akwụkwọ maka ịmepụta faịlụ HCL nke a na-eji na terraform + ọtụtụ koodu na terraform nke nwere ike ịba uru.

ụzọ

Mgbalị mbụ
Ejiri m ụdị dị mfe malite. Ịkpọtụrụ igwe ojii site na SDK maka akụrụngwa achọrọ na ịtụgharị ya ka ọ bụrụ ubi maka terraform. Mgbalị ahụ nwụrụ ozugbo na otu nchekwa n'ihi na enweghị m mmasị na ụbọchị 1.5 iji gbanwee naanị otu nchekwa (na enwere ọtụtụ ihe onwunwe). Ruo ogologo oge na mgbe ahụ enwere ike ịgbanwe / gbakwunye ubi

Mgbalị nke abụọ
Dabere na echiche a kọwara ebe a. Naanị were tụgharịa tfstate ka ọ bụrụ tf. Data niile dị na mpaghara ahụ bụ otu. Kedu ka esi enweta tfstate zuru oke maka ọtụtụ akụrụngwa ?? Nke a bụ ebe iwu 'terraform refresh' bịara napụta. terraform na-ewe ihe niile dị na tfstate na, site na ID, wepụrụ data na ha wee dee ihe niile na tfstate. Ya bụ, mepụta tfstate efu nwere naanị aha na ID, mee 'terraform refresh' wee nweta tfstates zuru ezu. Hooray!
Ugbu a, ka anyị mee ihe na-akpali agụụ mmekọahụ na-emegharị ugboro ugboro nke ide ihe ntụgharị maka tfstate ka tf. Maka ndị na-agụtụbeghị tfstate, ọ bụ JSON, mana ọpụrụiche.
Nke a bụ njirimara akụkụ ya dị mkpa

 "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",

Enwere:
1. id - eriri
2. metadata - nhazi nke nha 1 na n'ime ya ihe nwere ubi nke akọwara n'okpuru
3. spec - hash nke nha 1 na igodo, uru na ya
Na nkenke, usoro ntụrụndụ, ihe niile nwere ike ịbụ ọtụtụ ọkwa dị omimi

                   "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",

N'ozuzu, ọ bụrụ na onye ọ bụla chọrọ nsogbu mmemme maka ajụjụ ọnụ, jụọ ha ka ha dee ihe nzacha maka ọrụ a :)
Mgbe ọtụtụ mbọ iji dee ihe nzacha na-enweghị ahụhụ, achọtara m akụkụ ya na koodu terraform, yana akụkụ kachasị mkpa. Na ihe niile yiri ka ọ na-arụ ọrụ nke ọma

Gbalịa atọ
ndị na-eweta terraform bụ ọnụọgụ abụọ nwere koodu nwere akụrụngwa yana mgbagha maka iji igwe ojii API arụ ọrụ. Igwe ojii ọ bụla nwere onye na-eweta ya yana terraform n'onwe ya na-akpọ ha naanị site na usoro RPC ya n'etiti usoro abụọ.
Ugbu a ekpebiri m ịkpọtụrụ ndị na-eweta terraform ozugbo site na oku RPC. Ọ tụgharịrị mara mma wee mee ka o kwe omume ịgbanwe ndị na-eweta terraform ka ndị ọhụrụ wee nweta atụmatụ ọhụrụ na-agbanweghị koodu. Ọ pụtakwara na ọ bụghị mpaghara niile dị na tfstate kwesịrị ịdị na tf, mana kedu ka ị ga-esi chọpụta? Naanị jụọ onye na-eweta gị maka nke a. Mgbe ahụ, ihe nkiri gba ọtọ ọzọ na-emegharị emegharị nke ịgbakọta okwu mgbe niile malitere, na-achọ ubi n'ime tfstate na ọkwa niile n'ime omimi.

N'ikpeazụ, anyị nwetara ngwá ọrụ CLI bara uru nke nwere akụrụngwa nkịtị maka ndị na-enye terraform niile ma ị nwere ike itinye nke ọhụrụ n'ụzọ dị mfe. Ọzọkwa, ịgbakwunye akụrụngwa na-ewe obere koodu. Na mgbakwunye ụdị ihe ọma niile dị ka njikọ n'etiti akụrụngwa. N’ezie, e nwere ọtụtụ nsogbu dị iche iche a na-apụghị ịkọwacha ha nile.
Akpọrọ m anụmanụ ahụ aha Terrafomer.

Ikpeazụ

Iji Terrafomer, anyị mepụtara 500-700 puku ahịrị tf + tfstate site na igwe ojii abụọ. Anyị nwere ike iwere ihe nketa wee malite imetụ ha aka naanị site na terraform, dịka na akụrụngwa kachasị mma dị ka echiche koodu. Ọ bụ naanị anwansi mgbe ị were nnukwu igwe ojii wee nweta ya site na otu n'ụdị faịlụ ndị ọrụ terraform. Na mgbe ahụ grep / dochie / git na ndị ọzọ.

Akpụchara m ya ma tinye ya n'usoro, nweta ikike. Ewepụtara na GitHub maka onye ọ bụla na Tọzdee (02.05.19/XNUMX/XNUMX). github.com/GoogleCloudPlatform/terraformer
Anatalarị kpakpando 600, arịrịọ 2 dọta maka ịgbakwunye nkwado maka openstack na kubernetes. Nzaghachi dị mma. N'ozuzu, ọrụ ahụ bara uru maka ndị mmadụ
M na-adụ ọdụ onye ọ bụla chọrọ ịmalite ịrụ ọrụ na Terraform ma ghara idegharị ihe niile maka nke a.
Ọ ga-amasị m ịdọrọ arịrịọ, okwu, kpakpando.

Ngosi
Terraformer - Akụrụngwa Iji Koodu

isi: www.habr.com

Tinye a comment