Wéi verbënnt Kubernetes Cluster a verschiddenen Datenzenteren

Wéi verbënnt Kubernetes Cluster a verschiddenen Datenzenteren
Wëllkomm op eiser Kubernetes Quick Start Serie. Dëst ass eng regulär Kolonn mat den interessantsten Froen déi mir online an an eisen Trainingen kréien. Kubernetes Expert Äntwerten.

Den Expert vun haut ass den Daniel Polenchik (Daniele Polencic). Daniel schafft als Instruktor a Software Entwéckler bei Léiert 8s.

Wann Dir Är Fro am nächste Post beäntwert wëllt, kontaktéiert eis per E-Mail oder Twitter: @learnk8s.

virdrun Posts verpasst? Fannt se hei.

Wéi verbannen Kubernetes Cluster a verschiddenen Datenzenteren?

Kuerz gefrot: Kubefed v2 kënnt geschwënn, an ech recommandéieren och liesen iwwer Expéditeur и Multi-Cluster Scheduler Projet.

Zimlech dacks gëtt Infrastruktur replizéiert a verdeelt iwwer verschidde Regiounen, besonnesch a kontrolléiert Ëmfeld.

Wann eng Regioun net verfügbar ass, gëtt de Traffic op eng aner ëmgeleet fir Ënnerbriechungen ze vermeiden.

Mat Kubernetes kënnt Dir eng ähnlech Strategie benotzen an Aarbechtslaascht iwwer verschidde Regiounen verdeelen.

Dir kënnt een oder méi Cluster pro Team, Regioun, Ëmfeld oder eng Kombinatioun vun dësen Elementer hunn.

Är Cluster kënnen a verschiddene Wolleken an op der Plaz gehost ginn.

Awer wéi plangt Dir Infrastruktur fir sou geographesch Verbreedung?
Braucht Dir e grousse Stärekoup fir verschidde Cloud-Ëmfeld iwwer engem eenzegen Netz ze kreéieren?
Oder hu vill kleng Stärekéip an e Wee fannen fir se ze kontrolléieren an ze synchroniséieren?

Ee Leadership Cluster

Ee Cluster iwwer engem eenzegen Netzwierk erstellen ass net sou einfach.

Stellt Iech vir datt Dir en Accident hutt, d'Konnektivitéit tëscht Cluster Segmenter ass verluer.

Wann Dir e Master-Server hutt, kënnen d'Halschent vun de Ressourcen net nei Kommandoen kréien, well se net fäeg sinn de Master ze kontaktéieren.

A gläichzäiteg hutt Dir al Routingtabellen (kube-proxy kann net nei eroflueden) a keng zousätzlech Pods (kubelet kann net Updates ufroen).

Fir d'Saache méi schlëmm ze maachen, wann de Kubernetes keen Node gesäit, markéiert se et als verwaist a verdeelt déi fehlend Pods op existent Noden.

Als Resultat hutt Dir duebel sou vill Pods.

Wann Dir e Master-Server fir all Regioun maacht, gëtt et Problemer mam Konsens Algorithmus an der etcd Datebank. (ca. ed. - Tatsächlech muss d'etcd Datebank net onbedéngt op de Masterserver sinn. Et kann op enger separater Grupp vu Serveren an der selwechter Regioun lafen. True, gläichzäiteg e Punkt vum Echec vum Cluster ze kréien. Awer séier.)

etcd benotzt Flott Algorithmusfir de Wäert ze verhandelen ier se op Disk schreift.
Dat ass, eng Majoritéit vun Instanzen muss Konsens erreechen, ier de Staat op etcd geschriwwe ka ginn.

Wann d'Latenz tëscht etcd Instanzen dramatesch eropgeet, wéi de Fall mat dräi etcd Instanzen a verschiddene Regiounen ass, dauert et laang Zäit fir e Wäert ze verhandelen an op Scheif ze schreiwen.
Dëst gëtt a Kubernetes Controller reflektéiert.

De Controller Manager brauch méi Zäit fir iwwer d'Ännerung ze léieren an d'Äntwert op d'Datebank ze schreiwen.

A well et net ee Controller ass, mee e puer, eng Kettenreaktioun entsteet an de ganze Stärekoup fänkt ganz lues un.

etcd ass sou latency sensibel datt Déi offiziell Dokumentatioun recommandéiert SSDs ze benotzen anstatt normale Festplazen.

Et gi momentan keng gutt Beispiller vun engem grousse Netzwierk fir een eenzege Cluster.

Prinzipiell probéieren d'Entwécklergemeinschaft an de SIG-Cluster-Grupp erauszefannen, wéi een Cluster orchestréiert wéi Kubernetes Container orchestréiert.

Optioun 1: Cluster Federatioun mat kubefed

Offiziell Äntwert vum SIG-Cluster - kubefed2, eng nei Versioun vum ursprénglechen Kube Federation Client a Bedreiwer.

Fir déi éischte Kéier hu mir probéiert eng Sammlung vu Stärekéip als eenzegen Objet ze verwalten mat dem Kube Federatiounsinstrument.

Den Ufank war gutt, awer um Enn gouf d'Kubefederatioun ni populär well se net all Ressourcen ënnerstëtzt huet.

Et ënnerstëtzt federéiert Liwwerungen a Servicer, awer net StatefulSets, zum Beispill.
Och d'Federatiounskonfiguratioun gouf a Form vun Annotatiounen iwwerdroen a war net flexibel.

Stellt Iech vir wéi Dir d'Replique-Partitionéierung fir all Stärekoup an enger Federatioun beschreiwe kënnt mat just Annotatiounen.

Et war e komplette Mess.

SIG-Cluster huet vill Aarbecht no kubefed v1 an decidéiert de Problem aus engem anere Wénkel ze Approche.

Amplaz vun Annotatiounen, hu se decidéiert e Controller ze verëffentlechen deen op Cluster installéiert ass. Et kann personaliséiert ginn mat Custom Ressource Definitions (CRDs).

Fir all Ressource déi Deel vun der Federatioun wäert sinn, hutt Dir eng personaliséiert CRD Definitioun mat dräi Sektiounen:

  • Standard Definitioun vun enger Ressource, zum Beispill Deployment;
  • Sektioun placement, wou Dir definéiert wéi d'Ressource an der Federatioun verdeelt gëtt;
  • Sektioun override, Wou fir eng spezifesch Ressource kënnt Dir d'Gewiicht an d'Parameter vun der Placement iwwerschreiden.

Hei ass e Beispill vun enger kombinéierter Liwwerung mat Placement- an Iwwerschreiden Sektiounen.

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

Wéi Dir kënnt gesinn, ass d'Versuergung iwwer zwee Cluster verdeelt: cluster1 и cluster2.

Den éischte Stärekoup liwwert dräi Repliken, an déi zweet ass op 5 gesat.

Wann Dir méi Kontroll iwwer d'Zuel vun de Repliken braucht, bitt kubefed2 en neien ReplicaSchedulingPreference-Objekt wou Repliken gewiicht kënne ginn:

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

D'CRD Struktur an d'API sinn nach net ganz fäerdeg, an aktiv Aarbecht ass am offiziellen Projet Repository amgaang.

Halen en Aa op kubefed2, mee erënneren, datt et nach net gëeegent fir Produktioun ass.

Léiere méi iwwer kubefed2 aus offiziellen Artikel iwwer kubefed2 am Blog iwwer Kubernetes an an offiziellen Repository vum kubefed Projet.

Optioun 2: Kombinéiere vu Cluster am Booking.com-Stil

D'Entwéckler vu Booking.com hunn net op kubefed v2 geschafft, awer si koumen mam Shipper - e Bedreiwer fir d'Liwwerung op verschidde Cluster, a verschiddene Regiounen an a verschiddene Wolleken.

Expéditeur e bësse ähnlech wéi kubefed2.

Béid Tools erlaaben Iech Är Multi-Cluster-Deploymentstrategie ze personaliséieren (wéi eng Cluster gi benotzt a wéi vill Repliken se hunn).

D'Ziel vum Shipper ass de Risiko vu Feeler während der Liwwerung ze reduzéieren.

Am Shipper kënnt Dir eng Serie vu Schrëtt definéieren, déi d'Divisioun vun de Repliken tëscht der viregter an der aktueller Détachement an dem Volume vum erakommende Verkéier beschreiwen.

Wann Dir eng Ressource an e Stärekoup dréckt, rullt de Shipper Controller inkrementell dës Ännerung iwwer all verbonne Cluster aus.

Och de Shipper ass ganz limitéiert.

Zum Beispill, et akzeptéiert Helm Charts als Input an ënnerstëtzt net Vanill Ressourcen.
Am Allgemengen, Shipper funktionnéiert esou.

Amplaz Standard Liwwerung, musst Dir eng Applikatiounsressource erstellen déi e Helm Chart enthält:

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

Shipper ass eng gutt Optioun fir verschidde Cluster ze managen, awer seng enk Relatioun mam Helm ass nëmmen am Wee.

Wat wa mir all vun Helm schalt op personaliséiere oder Kapitän?

Fannt méi iwwer Shipper a seng Philosophie bei dës offiziell Pressematdeelung.

Wann Dir wëllt an de Code gräifen, Kapp op den offiziellen Projet Repository.

Optioun 3: "Magie" Cluster Fusioun

Kubefed v2 a Shipper schaffen mat Cluster Federatioun, liwweren nei Ressourcen fir Cluster duerch personaliséiert Ressourcedefinitioun.

Awer wat wann Dir net all Liwwerungen, StatefulSets, DaemonSets, asw wëllt iwwerschreiwe fir ze fusionéieren?

Wéi en existente Cluster an enger Federatioun opzehuelen ouni YAML z'änneren?

Multi-Cluster-Scheduler ass en Admirality Projet, déi sech mat der Zäitplang vun Aarbechtslaascht op Cluster beschäftegt.

Awer amplaz mat engem neie Wee ze kommen fir mam Cluster ze interagéieren an d'Ressourcen a personaliséiert Definitiounen ze wéckelen, ass Multi-Cluster-Scheduler am Standard Kubernetes Liewenszyklus agebonnen an interceptéiert all Uruff déi Pods erstellen.

All erstallt Pod gëtt direkt mat engem Dummy ersat.

Multi-Cluster-Scheduler benotzt webhooks fir Zougang Modifikatiounden Uruff z'ënnerfangen an en Idle Dummy Pod ze kreéieren.

Den urspréngleche Pod geet duerch en anere Planungszyklus, wou no der Ëmfro vun der ganzer Federatioun eng Placement-Decisioun geholl gëtt.

Schlussendlech gëtt de Pod an den Zilcluster geliwwert.

Als Resultat hutt Dir en extra Pod deen näischt mécht, just Plaz ophëlt.

De Virdeel ass datt Dir keng nei Ressourcen musst schreiwen fir d'Versuergung ze kombinéieren.

All Ressource déi e Pod erstellt ass automatesch prett fir ze fusionéieren.

Dëst ass interessant, well op eemol hutt Dir Versuergung iwwer verschidde Regiounen verdeelt, an Dir hutt net emol gemierkt. Dëst ass awer zimlech riskant, well alles hei op Magie hänkt.

Awer wärend de Shipper probéiert meeschtens den Impakt vun de Liwwerungen ze reduzéieren, handhabt de Multi-Cluster-Scheduler méi allgemeng Aufgaben an ass vläicht besser gëeegent fir Batchjobs.

Et huet keen fortgeschratt graduelle Liwwerungsmechanismus.

Méi iwwer Multi-Cluster-Scheduler fannt Dir op offiziell Repository Säit.

Wann Dir wëllt iwwer Multi-Cluster-Scheduler an Aktioun liesen, Admiralitéit huet interessant Benotzungsfall mat Argo - Workflows, Eventer, CI an CD Kubernetes.

Aner Tools a Léisungen

Multiple Cluster verbannen a managen ass eng komplex Aufgab, an et gëtt keng universell Léisung.

Wann Dir dëst Thema weider wëllt entdecken, hei sinn e puer Ressourcen:

Dat ass alles fir haut

Merci fir d'Liesen bis zum Schluss!

Wann Dir wësst wéi Dir méi Cluster méi effizient verbënnt, erziel eis.

Mir addéieren Är Method op d'Links.

E spezielle Merci un Chris Nesbitt-Smith (Chris Nesbitt-Smith) und Vincent de Sme (Vincent De Smet) (Reliability Engineer in swatmobile.io) fir den Artikel ze liesen an nëtzlech Informatiounen ze deelen iwwer wéi d'Federatioun funktionnéiert.

Source: will.com

Setzt e Commentaire