Ndị na-arụ ọrụ maka Kubernetes: otu esi eme ngwa steeti

Nsogbu nke ngwa steeti na Kubernetes

Nhazi, mmalite na n'ihu n'ịkọba ngwa na ọrụ dị mfe ma a bịa n'ihe gbasara nkewa dị ka ndị na-enweghị obodo, ya bụ. na-enweghị echekwa data. Ọ dị mma iji rụọ ọrụ ndị dị otú ahụ na Kubernetes site na iji API ọkọlọtọ ya, n'ihi na ihe niile na-eme site na igbe: dịka nhazi ọkọlọtọ, na-etinyeghị nkọwa ọ bụla na anwansi.

N'ikwu ya n'ụzọ dị mfe, iji mee ihe ise ọzọ nke PHP/Ruby/Python backend na ụyọkọ sitere na arịa, naanị ị ga-ebuli ihe nkesa ọhụrụ ugboro 5 ma detuo isi mmalite. Ebe ọ bụ na koodu isi mmalite na script init dị na onyonyo a, ịkacha ngwa na-enweghị obodo na-aghọ nke mbụ. Dị ka ndị hụrụ arịa na microservice architectures maara nke ọma, ihe isi ike na-amalite maka ngwa ngwa, i.e. na nnọgidesi ike nke data dị ka ọdụ data na caches (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra…). Nke a na-emetụta ma ngwanro abụọ nke na-arụ ọrụ ụyọkọ quorum n'onwe ya (dịka ọmụmaatụ, Percona XtraDB na Cassandra), yana ngwanro chọrọ ngwa njikwa dị iche (dịka Redis, MySQL, PostgreSQL ...).

Ihe isi ike na-ebilite n'ihi na koodu isi na mmalite nke ọrụ ezughị - ịkwesịrị ịme ụfọdụ omume. Opekempe, detuo data na/ma ọ bụ sonye na ụyọkọ ahụ. Iji mee nke ọma karị, ọrụ ndị a chọrọ nghọta ka esi abawanye, melite na ịhazigharị ha na-enweghị mfu data na enweghị nwa oge. A na-akpọ akaụntụ maka mkpa ndị a "ihe ọmụma ọrụ" (ihe ọmụma ọrụ).

Ndị ọrụ CoreOS

Iji "mmemme" ihe ọmụma arụmọrụ, na njedebe nke afọ gara aga, ọrụ CoreOS webatara "Klas sọftụwia ọhụrụ" maka ikpo okwu Kubernetes - Ndị na-arụ ọrụ (Ndị na-arụ ọrụ, site na Bekee "ọrụ", i.e. "ọrụ").

Ndị na-arụ ọrụ, na-eji na ịgbasa ikike bụ isi nke Kubernetes (gụnyere. StatefulSets, lee n'okpuru maka ọdịiche) kwe ka DevOps tinye ihe ọmụma arụmọrụ na koodu ngwa.

Ebumnuche nke Onye Ọrụ - nye onye ọrụ API nke na-enye gị ohere ijikwa ọtụtụ ụlọ ọrụ nke ngwa dị mma na ụyọkọ Kubernetes na-echeghị ihe dị n'okpuru mkpuchi (ihe data na ihe ị ga-eme ya, iwu ndị a ka ga-emerịrị iji dobe ụyọkọ). N'ezie, e mere onye ọrụ iji mee ka ọrụ ahụ dị mfe na ngwa n'ime ụyọkọ ahụ dịka o kwere mee, na-eme ka arụ ọrụ arụ ọrụ nke ekwesịrị iji aka dozie ya na mbụ.

Ka ndị ọrụ na-arụ ọrụ

Ntugharị oyiri Kubernetes na-enye gị ohere ịkọwapụta nọmba achọrọ nke pọd na-agba ọsọ, na ndị na-ahụ maka njikwa hụ na edobere nọmba ha (site na imepụta na ihichapụ pọd). N'otu aka ahụ, onye na-arụ ọrụ na-arụ ọrụ site n'ịgbakwunye usoro ihe ọmụma arụmọrụ na ọkọlọtọ Kubernetes akụ na njikwa, na-enye gị ohere ime ihe ndị ọzọ iji nọgide na-enwe ọnụ ọgụgụ nke ngwa ngwa.

Kedu ka nke a si dị iche StatefulSetsmaka ngwa chọrọ ụyọkọ iji nye ha akụrụngwa steeti dị ka nchekwa data ma ọ bụ IP static? Maka ngwa ndị dị otú ahụ, Ndị ọrụ nwere ike iji StatefulSets (kama Ntugharị oyiri) dị ka ihe ndabere, onyinye ọzọ akpaaka: rụọ ọrụ ndị dị mkpa n'ihe gbasara mkpọka, mee nkwado ndabere, melite nhazi, wdg.

Ya mere, kedu ka ihe niile si arụ ọrụ? Onye ọrụ bụ daemon njikwa na:

  1. debanyere aha na API mmemme na Kubernetes;
  2. na-enweta site na ya data gbasara sistemụ (banyere ya Ntugharị oyiri, pods, Services were gabazie.);
  3. na-enweta ozi gbasara Akụrụngwa nke atọ (lee ihe atụ n'okpuru);
  4. na-emeghachi omume na ọdịdị / mgbanwe Akụrụngwa nke atọ (dịka ọmụmaatụ, ịmegharị nha, gbanwee ụdị, na ihe ndị ọzọ);
  5. na-anabata mgbanwe na steeti sistemụ (banyere ya Ntugharị oyiri, pods, Services were gabazie.);
  6. nke kacha mkpa:
    1. nweta Kubernetes API iji mepụta ihe niile ịchọrọ (ọzọ, nke gị Ntugharị oyiri, pods, Services...),
    2. na-eme anwansi ụfọdụ (ị nwere ike, maka ịdị mfe, chere na onye ọrụ na-abanye na pọd n'onwe ya wee kpọọ iwu, dịka ọmụmaatụ, ịbanye na ụyọkọ ma ọ bụ kwalite usoro data mgbe ị na-emelite ụdị).

Ndị na-arụ ọrụ maka Kubernetes: otu esi eme ngwa steeti
N'ezie, dịka ị na-ahụ na foto a, a na-agbakwunye ngwa dị iche na Kubernetes (nke a na-emekarị Ịnye ọrụ с Nhazi oyiri), nke a na-akpọ Operator. Ọ na-ebi na pod nkịtị (na-abụkarị otu) na, dị ka a na-achị, ọ bụ naanị maka onwe ya Oghere Aha. Ngwa onye ọrụ a na-arụ ọrụ API ya - agbanyeghị, ọ bụghị ozugbo, kama site na Akụrụngwa nke atọ na Kubernetes.

Ya mere, mgbe anyị kere Oghere Aha Onye ọrụ, anyị nwere ike ịgbakwunye ya Akụrụngwa nke atọ.

Ọmụmaatụ maka wdgd (lee nkọwa n'okpuru):

apiVersion: etcd.coreos.com/v1beta1
kind: Cluster
metadata:
  name: example-etcd-cluster
spec:
  size: 3
  version: 3.1.0

Ọmụmaatụ maka Elasticsearch:

apiVersion: enterprises.upmc.com/v1
kind: ElasticsearchCluster
metadata:
  name: example-es-cluster
spec:
  client-node-replicas: 3
  master-node-replicas: 2
  data-node-replicas: 3
  zones:
  - us-east-1c
  - us-east-1d
  - us-east-1e
  data-volume-size: 10Gi
  java-options: "-Xms1024m -Xmx1024m"
  snapshot:
    scheduler-enabled: true
    bucket-name: elasticsnapshots99
    cron-schedule: "@every 2m"
  storage:
    type: gp2
    storage-class-provisioner: kubernetes.io/aws-ebs

Ihe achọrọ maka ndị ọrụ

CoreOS chepụtara ụkpụrụ bụ isi nke ndị injinia nwetara mgbe ha na-arụ ọrụ na Ndị Ọrụ. N'agbanyeghị eziokwu na ndị ọrụ niile bụ ndị mmadụ n'otu n'otu (a na-emepụta ha maka ngwa ngwa nwere njirimara na mkpa ha), ihe okike ha ga-adabere n'ụdị usoro nke na-etinye ihe ndị a:

  1. Ekwesịrị ime nwụnye site na otu Ịnye ọrụ: kubectl mepụta -f SAME_OPERATOR_URL/deployment.yaml - na achọghị ihe mgbakwunye.
  2. Ịwụnye onye ọrụ na Kubernetes kwesịrị ịmepụta ụdị mba ọzọ ọhụrụ (Nke atọPartyResource). Iji malite ihe atụ ngwa (ụkpụrụ ụyọkọ) wee jikwaa ha ọzọ (melite ụdịdị, megharịa nha, wdg), onye ọrụ ga-eji ụdị a.
  3. Mgbe ọ bụla enwere ike, ekwesịrị iji Kubernetes arụnyere primitives, dị ka Services и Ntugharị oyiriiji koodu a nwalere nke ọma na nghọta.
  4. Achọrọ ndakọrịta azụ nke ndị na-arụ ọrụ yana nkwado maka ụdị akụrụngwa emepụtara ochie nke onye ọrụ mepụtara.
  5. Mgbe ewepụrụ onye ọrụ, ngwa n'onwe ya kwesịrị ịga n'ihu na-arụ ọrụ na-enweghị mgbanwe.
  6. Ndị ọrụ kwesịrị inwe ike ikpebi ụdị ngwa a chọrọ yana nhazi mmelite ụdị ngwa. Enweghị mmelite ngwanrọ bụ isi mmalite arụ ọrụ yana nsogbu nchekwa, ndị ọrụ ga-enyere ndị ọrụ aka n'okwu a.
  7. Ekwesịrị ịnwale ndị ọrụ site na ngwa dị ka Chaos Monkey, nke na-achọpụta ọdịda nwere ike ịdị na pọd, nhazi na netwọkụ.

etcd Onye ọrụ

Ihe atụ mmejuputa onye ọrụ - etcd onye ọrụ, kwadebere ruo ụbọchị nke nkwupụta nke echiche a. Nhazi ụyọkọ wdg nwere ike ịdị mgbagwoju anya n'ihi mkpa idobe quorum, mkpa ịhazigharị otu ụyọkọ, mepụta nkwado ndabere na mpaghara, na ihe ndị ọzọ. Dịka ọmụmaatụ, iji aka na-akpụ ụyọkọ wdgd pụtara ịmepụta aha DNS maka onye otu ụyọkọ ọhụrụ, malite ihe ọhụrụ etcd, na-eme ka ụyọkọ ahụ mara banyere onye ọhụrụ ahụ (etcdctl otu tinye). N'ihe banyere Onye ọrụ, ọ ga-ezuru onye ọrụ ịgbanwe nha nke ụyọkọ - ihe ọ bụla ọzọ ga-eme na-akpaghị aka.

Ebe ọ bụ na e mekwara etcd na CoreOS, ọ bụ ihe ezi uche dị na ya ịhụ ọdịdị nke Onye Ọrụ ya. Kedu ka ọ si arụ ọrụ? etcd Onye ọrụ Logic kọwapụtara site na akụkụ atọ:

  1. Nlebanya. Onye ọrụ na-enyocha ọnọdụ ụyọkọ ahụ site na iji Kubernetes API.
  2. Nyocha (nyochaa). Na-achọta ihe dị iche n'etiti ọnọdụ dị ugbu a na nke achọrọ (akọwapụtara site na nhazi onye ọrụ).
  3. Omume (Iwu). Na-ewepụ ndịiche achọpụtara site na iji wdgd na/ma ọ bụ Kubernetes API ọrụ.

Ndị na-arụ ọrụ maka Kubernetes: otu esi eme ngwa steeti

Iji mejuputa mgbagha a, Onye ọrụ akwadola ọrụ Mepụta/bibie (mepụta ma wepụ ndị otu ụyọkọ wdgd) na Gbanyụọ (mgbanwe na ọnụ ọgụgụ ndị otu ụyọkọ). A na-enyocha izi ezi nke arụmọrụ ya site na iji ngwa emepụtara n'ụdị Chaos Monkey sitere na Netflix, ya bụ. na-egbu wdgd pọd na-enweghị usoro.

Maka ọrụ zuru ezu nke etcd, onye ọrụ na-enye atụmatụ ndị ọzọ: ndabere (akpaka na enweghị ike ime ka ndị ọrụ mepụta nkwado ndabere na mpaghara - na nhazi ọ ga-ezuru iji chọpụta ugboro ole a ga-eme ha na ole ha ga-echekwa - na mgbake data na-esote ha) na upgrade (na-emelite nrụnye wdgd na-enweghị oge nkwụsịtụ).

Kedu ka ọ dị ka ịrụ ọrụ na Onye Ọrụ?

$ kubectl create -f https://coreos.com/operators/etcd/latest/deployment.yaml
$ kubectl create -f https://coreos.com/operators/etcd/latest/example-etcd-cluster.yaml
$ kubectl get pods
NAME                             READY     STATUS    RESTARTS   AGE
etcd-cluster-0000                1/1       Running   0          23s
etcd-cluster-0001                1/1       Running   0          16s
etcd-cluster-0002                1/1       Running   0          8s
etcd-cluster-backup-tool-rhygq   1/1       Running   0          18s

Ọnọdụ ugbu a nke etcd Operator bụ ụdị beta nke chọrọ Kubernetes 1.5.3+ na wdgd 3.0+ ka ọ na-agba. Koodu isi mmalite na akwụkwọ (gụnyere ntuziaka maka ojiji) dị na GitHub.

Emepụta ihe atụ mmejuputa ọzọ sitere na CoreOS - Onye ọrụ Prometheus, ma ọ ka dị na alfa (ọ bụghị atụmatụ niile akwadoro ka emejuputa atumatu).

Ọnọdụ na atụmanya

Ọ bụ ọnwa 5 kemgbe ọkwa ọkwa nke ndị ọrụ Kubernetes. Naanị mmemme abụọ ka dị na ebe nchekwa CoreOS gọọmentị (maka wdgd na Prometheus). Ha abụọ erubeghị ụdị nke ha kwụsiri ike, mana a na-eme ha kwa ụbọchị.

Ndị mmepe na-atụ anya "ọdịnihu ebe ndị ọrụ na-etinye ndị ọrụ Postgres, ndị ọrụ Cassandra, ma ọ bụ ndị ọrụ Redis na ụyọkọ Kubernetes ha na-arụ ọrụ na ụlọ ọrụ nwere ike ime ngwa ngwa ndị ahụ ngwa ngwa dị ka ibuga ụdị ngwa na-enweghị obodo maka webụ taa." Mbụ Ndị na-arụ ọrụ nke atọ n'ezie malitere igosi elu.

Na nnukwu ogbako sọftụwia European efu FOSDEM, nke mere na February 2017 na Brussels, Josh Wood sitere na CoreOS kwupụtara ndị ọrụ na mkpesa (video dị na njikọ ahụ!) Nke kwesịrị inye aka na uto nke echiche a na-ewu ewu na obodo mepere emepe Open Source.

PS Daalụ maka mmasị gị na akụkọ ahụ! Debanye aha na oghere anyị, ka ị ghara ịhapụ ihe ọhụrụ na ntụziaka na DevOps na GNU / Linux usoro nchịkwa - anyị ga-ebipụta ha mgbe niile!

isi: www.habr.com

Tinye a comment