Kā savienot Kubernetes klasterus dažādos datu centros

Kā savienot Kubernetes klasterus dažādos datu centros
Laipni lÅ«dzam mÅ«su Kubernetes Quick Start sērijā. Å Ä« ir regulāra sleja ar interesantākajiem jautājumiem, ko saņemam tieÅ”saistē un mÅ«su apmācÄ«bās. Kubernetes eksperts atbild.

Šodienas eksperts ir Daniels Polenčiks (Daniele Polečiča). Daniels strādā par instruktoru un programmatūras izstrādātāju Learnk8s.

Ja vēlaties saņemt atbildi uz savu jautājumu nākamajā ierakstā, sazinieties ar mums pa e-pastu vai Twitter: @learnk8s.

Vai palaidāt garām iepriekŔējos ierakstus? Atrodiet tos Å”eit.

Kā savienot Kubernetes klasterus dažādos datu centros?

ÄŖsumā: DrÄ«zumā bÅ«s pieejams Kubefed v2, un es arÄ« iesaku lasÄ«t par NosÅ«tÄ«tājs Šø vairāku klasteru plānotāja projekts.

Diezgan bieži infrastruktÅ«ra tiek replicēta un izplatÄ«ta dažādos reÄ£ionos, Ä«paÅ”i kontrolētā vidē.

Ja viens reģions nav pieejams, satiksme tiek novirzīta uz citu, lai izvairītos no traucējumiem.

Izmantojot Kubernetes, varat izmantot līdzīgu stratēģiju un sadalīt darba slodzi dažādos reģionos.

Katrai komandai, reģionam, videi vai Ŕo elementu kombinācijai var būt viena vai vairākas kopas.

Jūsu kopas var tikt mitinātas dažādos mākoņos un lokālos.

Bet kā jūs plānojat infrastruktūru Ŕādai ģeogrāfiskai izplatībai?
Vai jums ir jāizveido viens liels klasteris vairākām mākoņa vidēm vienā tīklā?
Vai arī jums ir daudz mazu kopu un atrodiet veidu, kā tos kontrolēt un sinhronizēt?

Viens līderu klasteris

Viena klastera izveide vienā tīklā nav tik vienkārŔa.

Iedomājieties, ka jums ir noticis negadījums, savienojums starp klastera segmentiem tiek zaudēts.

Ja jums ir viens galvenais serveris, puse resursu nevarēs saņemt jaunas komandas, jo viņi nevarēs sazināties ar galveno serveri.

Un tajā paŔā laikā jums ir vecas marÅ”rutÄ“Å”anas tabulas (kube-proxy nevar lejupielādēt jaunus) un nekādu papildu aplikumu (kubelet nevar pieprasÄ«t atjauninājumus).

Lai padarÄ«tu situāciju vēl ļaunāku, ja Kubernetes neredz mezglu, tas atzÄ«mē to kā bāreņu un izdala trÅ«kstoÅ”os mezglus esoÅ”ajiem mezgliem.

Tā rezultātā jums ir divreiz vairāk pākstīm.

Ja katram reÄ£ionam izveidosit vienu galveno serveri, radÄ«sies problēmas ar konsensa algoritmu etcd datu bāzē. (apm. ed. ā€” Faktiski etcd datubāzei nav obligāti jāatrodas galvenajos serveros. To var palaist atseviŔķā serveru grupā tajā paŔā reÄ£ionā. Tiesa, tajā paŔā laikā iegÅ«stot klastera neveiksmes punktu. Bet ātri.)

etcd lietojumi plostu algoritmslai vienotos par vērtÄ«bu pirms tās ierakstÄ«Å”anas diskā.
Tas nozīmē, ka lielākajai daļai gadījumu ir jāpanāk vienprātība, pirms valsti var rakstīt uz etcd.

Ja latentums starp etcd gadÄ«jumiem dramatiski palielinās, kā tas notiek ar trim etcd gadÄ«jumiem dažādos reÄ£ionos, ir nepiecieÅ”ams ilgs laiks, lai vienotos par vērtÄ«bu un ierakstÄ«tu to diskā.
Tas ir atspoguļots Kubernetes kontrolieros.

Kontroliera pārvaldniekam ir nepiecieÅ”ams vairāk laika, lai uzzinātu par izmaiņām un uzrakstÄ«tu atbildi datu bāzē.

Un tā kā kontrolieris nav viens, bet vairāki, rodas ķēdes reakcija, un viss klasteris sāk darboties ļoti lēni.

etcd ir tik jutīgs pret latentumu, ka Oficiālā dokumentācija iesaka izmantot SSD, nevis parastos cietos diskus.

PaÅ”laik nav labu piemēru lielam tÄ«klam vienam klasterim.

BÅ«tÄ«bā izstrādātāju kopiena un SIG klasteru grupa cenÅ”as izdomāt, kā orÄ·estrēt klasterus tāpat kā Kubernetes orÄ·estrē konteinerus.

1. iespēja: klasteru federācija ar kubefed

Oficiālā atbilde no SIG klastera - kubefed2, sākotnējā kube federācijas klienta un operatora jauna versija.

Pirmo reizi mēs mēģinājām pārvaldīt klasteru kolekciju kā vienu objektu, izmantojot kube federācijas rīku.

Sākums bija labs, bet beigās kube federācija nekad nekļuva populāra, jo neatbalstīja visus resursus.

Tas atbalstīja apvienotās piegādes un pakalpojumus, bet ne, piemēram, StatefulSets.
Arī federācijas konfigurācija tika pārsūtīta anotāciju veidā un nebija elastīga.

Iedomājieties, kā jÅ«s varētu aprakstÄ«t katra federācijas klastera replikas sadalÄ«Å”anu, izmantojot tikai anotācijas.

Tas bija pilnīgs bardaks.

SIG klasteris paveica daudz darba pēc kubefed v1 un nolēma pievērsties problēmai no cita leņķa.

Anotāciju vietā viņi nolēma atbrīvot kontrolieri, kas ir instalēts klasteros. To var pielāgot, izmantojot pielāgotās resursu definīcijas (CRD).

Katram resursam, kas būs daļa no federācijas, jums ir pielāgota CRD definīcija ar trim sadaļām:

  • standarta resursa definÄ«cija, piemēram, izvietoÅ”ana;
  • daļa placement, kur jÅ«s definējat, kā resurss tiks izplatÄ«ts federācijā;
  • daļa override, kur konkrētam resursam varat ignorēt svaru un parametrus no izvietojuma.

Å eit ir piemērs kombinētai piegādei ar izvietoÅ”anas un ignorÄ“Å”anas sadaļām.

apiVersion: types.federation.k8s.io/v1alpha1
kind: FederatedDeployment
metadata:
  name: test-deployment
  namespace: test-namespace
spec:
  template:
    metadata:
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
            - image: nginx
              name: nginx
  placement:
    clusterNames:
      - cluster2
      - cluster1
  overrides:
    - clusterName: cluster2
      clusterOverrides:
        - path: spec.replicas
          value: 5

Kā redzat, piedāvājums ir sadalÄ«ts divās kopās: cluster1 Šø cluster2.

Pirmais klasteris nodroŔina trīs kopijas, bet otrais ir iestatīts uz 5.

Ja jums ir nepiecieÅ”ama lielāka kontrole pār reprodukciju skaitu, kubefed2 nodroÅ”ina jaunu ReplicaSchedulingPreference objektu, kurā var svērt replikas:

apiVersion: scheduling.federation.k8s.io/v1alpha1
kind: ReplicaSchedulingPreference
metadata:
  name: test-deployment
  namespace: test-ns
spec:
  targetKind: FederatedDeployment
  totalReplicas: 9
  clusters:
    A:
      weight: 1
    B:
      weight: 2

CRD struktūra un API vēl nav gluži gatava, un oficiālajā projektu repozitorijā notiek aktīvs darbs.

Sekojiet lÄ«dzi kubefed2, taču atcerieties, ka tas vēl nav piemērots ražoÅ”anai.

Uzziniet vairāk par kubefed2 no oficiālais raksts par kubefed2 blogā par Kubernetes un in kubefed projekta oficiālā repozitorija.

2. iespēja: kopu apvienoÅ”ana vietnē Booking.com

Vietnes Booking.com izstrādātāji nestrādāja pie kubefed v2, bet viņi nāca klajā ar Shipper - operatoru piegādei vairākos klasteros, vairākos reģionos un vairākos mākoņos.

Nosūtītājs nedaudz līdzīgs kubefed2.

Abi rÄ«ki ļauj pielāgot vairāku klasteru izvietoÅ”anas stratēģiju (kuras kopas tiek izmantotas un cik reprodukciju tām ir).

Bet Nosūtītāja mērķis ir samazināt kļūdu risku piegādes laikā.

Programmā NosÅ«tÄ«tājs varat definēt darbÄ«bu virkni, kas apraksta repliku sadalÄ«jumu starp iepriekŔējo un paÅ”reizējo izvietoÅ”anu un ienākoŔās trafika apjomu.

Nospiežot resursu klasterim, nosÅ«tÄ«tāja kontrolleris pakāpeniski izlaiž Ŕīs izmaiņas visos pievienotajos klasteros.

Arī nosūtītājs ir ļoti ierobežots.

Tā, piemēram, tas pieņem stūres diagrammas kā ievadi un neatbalsta vaniļas resursus.
Kopumā Shipper darbojas Ŕādi.

Standarta piegādes vietā jums ir jāizveido lietojumprogrammas resurss, kas ietver Helm diagrammu:

apiVersion: shipper.booking.com/v1alpha1
kind: Application
metadata:
  name: super-server
spec:
  revisionHistoryLimit: 3
  template:
    chart:
      name: nginx
      repoUrl: https://storage.googleapis.com/shipper-demo
      version: 0.0.1
    clusterRequirements:
      regions:
        - name: local
    strategy:
      steps:
        - capacity:
            contender: 1
            incumbent: 100
          name: staging
          traffic:
            contender: 0
            incumbent: 100
        - capacity:
            contender: 100
            incumbent: 0
          name: full on
          traffic:
            contender: 100
            incumbent: 0
    values:
      replicaCount: 3

NosÅ«tÄ«tājs ir labs risinājums vairāku klasteru pārvaldÄ«bai, taču tā cieŔās attiecÄ«bas ar Helm tikai traucē.

Ko darīt, ja mēs visi pārslēgtos no Helmas uz pielāgot vai kapitāns?

Uzziniet vairāk par Shipper un tā filozofiju vietnē Å”o oficiālo paziņojumu presei.

Ja vēlaties iedziļināties kodā, dodieties uz oficiālo projektu repozitoriju.

3. iespēja: ā€œburvjuā€ kopu apvienoÅ”ana

Kubefed v2 un nosūtītājs strādā ar klasteru federāciju, nodroŔinot klasteriem jaunus resursus, izmantojot pielāgotu resursu definīciju.

Bet ko darīt, ja nevēlaties pārrakstīt visas piegādes, StatefulSets, DaemonSets utt., lai apvienotu?

Kā iekļaut esoŔu klasteru federācijā, nemainot YAML?

multi-cluster-scheduler ir Admiralitātes projekts, kas attiecas uz klasteru darba slodzes plānoŔanu.

Taču tā vietā, lai izstrādātu jaunu veidu, kā mijiedarboties ar kopu un iekļaut resursus pielāgotās definīcijās, vairāku klasteru plānotājs ir iegults standarta Kubernetes dzīves ciklā un pārtver visus zvanus, kas rada aplikumus.

Katrs izveidots pods nekavējoties tiek aizstāts ar manekenu.

vairāku klasteru plānotāju lietojumi tÄ«mekļa aizÄ·eres piekļuves modificÄ“Å”anailai pārtvertu zvanu un izveidotu dÄ«kstāves manekenu.

Sākotnējais pods iziet citu plānoÅ”anas ciklu, kurā pēc visas federācijas aptaujas tiek pieņemts lēmums par izvietojumu.

Visbeidzot, pods tiek piegādāts mērķa klasterim.

Rezultātā jums ir papildu pods, kas neko nedara, tikai aizņem vietu.

PriekŔrocība ir tāda, ka jums nebija jāraksta jauni resursi, lai apvienotu piegādes.

Katrs resurss, kas izveido aplikumu, ir automātiski gatavs sapludināŔanai.

Tas ir interesanti, jo pēkŔņi jums ir piegādes, kas ir sadalÄ«tas vairākos reÄ£ionos, un jÅ«s pat nepamanÄ«jāt. Tomēr tas ir diezgan riskanti, jo Å”eit viss balstās uz maÄ£iju.

Taču, lai gan Shipper cenÅ”as galvenokārt mazināt piegāžu ietekmi, vairāku klasteru plānotājs apstrādā vispārÄ«gākus uzdevumus un, iespējams, ir labāk piemērots pakeÅ”u darbiem.

Tam nav uzlabota pakāpeniskas piegādes mehānisma.

Vairāk par vairāku klasteru plānotāju var atrast vietnē oficiālā repozitorija lapa.

Ja vēlaties lasÄ«t par vairāku klasteru plānotāju darbÄ«bu, Admiralitāte to ir izdarÄ«jusi interesants lietoÅ”anas gadÄ«jums ar Argo ā€” darbplÅ«smas, notikumi, CI un CD Kubernetes.

Citi instrumenti un risinājumi

Vairāku klasteru savienoŔana un pārvaldība ir sarežģīts uzdevums, un nav universāla risinājuma.

Ja vēlaties izpētÄ«t Å”o tēmu sÄ«kāk, Å”eit ir daži resursi:

Tas Ŕodienai viss

Paldies, ka lasījāt līdz galam!

Ja zināt, kā efektīvāk savienot vairākus klasterus, Pastāsti mums.

Mēs pievienosim saitēm jūsu metodi.

ÄŖpaÅ”s paldies Krisam Nesbitam-Smitam (Kriss Nesbits-Smits) un Vincents de Smē (Vincents De Smets) (uzticamÄ«bas inženieris swatmobile.io), lai izlasÄ«tu rakstu un padalÄ«tos ar noderÄ«gu informāciju par federācijas darbÄ«bu.

Avots: www.habr.com

Pievieno komentāru