Kumaha nyambungkeun klaster Kubernetes di pusat data anu béda

Kumaha nyambungkeun klaster Kubernetes di pusat data anu béda
Wilujeng sumping di séri Kubernetes Quick Start kami. Ieu kolom biasa sareng patarosan anu paling pikaresepeun anu kami tampi online sareng dina palatihan kami. waleran ahli Kubernetes.

Ahli ayeuna nyaéta Daniel Polenchik (Daniele Polencic). Daniel jalan salaku instruktur sarta pamekar software di Diajark8s.

Upami anjeun hoyong patarosan anjeun diwaler dina postingan salajengna, ngahubungan kami ku email atawa Twitter: @learnk8s.

Kantun postingan sateuacana? Panggihan aranjeunna di dieu.

Kumaha nyambungkeun klaster Kubernetes di pusat data anu béda?

Sakeudeung: Kubefed v2 datang pas, sarta kuring ogé nyarankeun maca ngeunaan Pangirim и proyék multi-cluster-scheduler.

Rada sering, infrastruktur ditiron sarta disebarkeun sakuliah wewengkon béda, utamana dina lingkungan dikawasa.

Upami hiji daérah henteu sayogi, lalu lintas dialihkeun ka daérah sanés pikeun ngahindarkeun gangguan.

Kalayan Kubernetes, anjeun tiasa nganggo strategi anu sami sareng nyebarkeun beban kerja ka daérah anu béda.

Anjeun tiasa gaduh hiji atanapi langkung klaster per tim, wilayah, lingkungan, atanapi kombinasi elemen ieu.

Kluster anjeun tiasa di-host dina awan anu béda sareng di tempat.

Tapi kumaha anjeun ngarencanakeun infrastruktur pikeun panyebaran geografis sapertos kitu?
Naha anjeun kedah nyiptakeun hiji klaster ageung pikeun sababaraha lingkungan awan dina hiji jaringan?
Atawa boga loba klaster leutik sarta manggihan cara pikeun ngadalikeun sarta nyingkronkeun aranjeunna?

Hiji klaster kapamimpinan

Nyiptakeun hiji klaster dina jaringan tunggal henteu gampang pisan.

Bayangkeun anjeun kacilakaan, konektipitas antara bagéan klaster leungit.

Upami Anjeun gaduh hiji server master, satengah sumberdaya moal bisa nampa paréntah anyar sabab moal bisa ngahubungan master.

Sareng dina waktos anu sami anjeun gaduh tabel rute anu lami (kube-proxy teu bisa ngundeur nu anyar) jeung euweuh pods tambahan (kubelet teu bisa menta apdet).

Anu langkung parah, upami Kubernetes henteu ningali titik, éta nandaan éta yatim sareng nyebarkeun pod anu leungit ka titik anu aya.

Hasilna, anjeun gaduh dua kali saloba pods.

Upami anjeun ngadamel hiji server master pikeun tiap daérah, bakal aya masalah sareng algoritma konsensus dina database etcd. (kira-kira. ed. - Kanyataanna, database etcd teu merta kudu ayana dina server master. Éta tiasa dijalankeun dina grup server anu misah di daérah anu sami. Leres, dina waktos anu sami kéngingkeun titik gagal klaster. Tapi gancang.)

pamakéan jsb algoritma rakitpikeun negotiate nilai saméméh nulis ka disk.
Hartina, seuseueurna instansi kedah ngahontal konsensus sateuacan nagara tiasa diserat ka etcd.

Lamun latency antara instansi etcd naek nyirorot, sakumaha dina kasus tilu instansi jsb di wewengkon béda, waktu nu diperlukeun lila negotiate hiji nilai jeung nulis ka disk.
Ieu reflected dina controllers Kubernetes.

Manajer controller peryogi langkung waktos pikeun diajar ngeunaan parobahan sareng nyerat réspon kana pangkalan data.

Sarta saprak aya teu hiji controller, tapi sababaraha, hasil réaksi ranté sarta sakabéh klaster mimiti dianggo lambat pisan.

etcd sensitip pisan latency éta Dokuméntasi resmi nyarankeun ngagunakeun SSD tinimbang hard drive biasa.

Aya ayeuna euweuh conto alus ngeunaan jaringan badag pikeun klaster tunggal.

Dasarna, komunitas pamekar sareng grup SIG-cluster narékahan pikeun terang kumaha cara ngatur klaster dina cara anu sami Kubernetes ngatur wadah.

Pilihan 1: federasi klaster kalawan kubefed

Tanggapan resmi ti SIG-cluster - kubefed2, versi anyar tina klien federasi kube aslina tur operator.

Pikeun kahiji kalina, urang nyoba ngatur kumpulan klaster salaku obyék tunggal ngagunakeun alat federasi kube.

Mimitina saé, tapi tungtungna kube federasi henteu kantos janten populer sabab henteu ngadukung sadaya sumber.

Éta ngadukung pangiriman sareng jasa federasi, tapi sanés StatefulSets, contona.
Ogé, konfigurasi federasi dikirimkeun dina bentuk anotasi sareng henteu fleksibel.

Bayangkeun kumaha anjeun tiasa ngajelaskeun partisi réplika pikeun tiap klaster dina federasi ngan ukur nganggo annotations.

Ieu mess lengkep.

SIG-cluster tuh loba karya sanggeus kubefed v1 sarta mutuskeun pikeun ngadeukeutan masalah ti sudut nu beda.

Gantina annotations, aranjeunna mutuskeun pikeun ngaleupaskeun controller anu dipasang dina klaster. Éta tiasa disaluyukeun nganggo Definisi Sumber Daya Adat (CRD).

Pikeun unggal sumberdaya anu bakal janten bagian tina federasi, anjeun gaduh definisi CRD khusus sareng tilu bagian:

  • harti baku sumberdaya a, contona deployment;
  • bagean placement, dimana anjeun nangtukeun kumaha sumberdaya bakal disebarkeun di federasi;
  • bagean override, dimana pikeun sumberdaya husus Anjeun bisa override beurat jeung parameter tina panempatan.

Ieu conto pangiriman gabungan sareng bagian panempatan sareng override.

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

Sakumaha anjeun tiasa tingali, suplai disebarkeun dina dua klaster: cluster1 и cluster2.

Kluster kahiji nyayogikeun tilu réplika, sareng anu kadua disetel ka 5.

Upami anjeun peryogi langkung seueur kontrol kana jumlah réplika, kubefed2 nyayogikeun obyék ReplicaSchedulingPreference énggal dimana réplika tiasa ditimbang:

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

Struktur CRD sareng API henteu acan siap, sareng padamelan aktip dijalankeun dina gudang proyék resmi.

Tetep panon on kubefed2, tapi inget yen eta teu acan cocog pikeun produksi.

Diajar langkung seueur ngeunaan kubefed2 ti artikel resmi ngeunaan kubefed2 dina blog ngeunaan Kubernetes jeung di gudang resmi proyék kubefed.

Pilihan 2: ngagabungkeun klaster dina gaya Booking.com

Pamekar tina Booking.com teu dianggo dina kubefed v2, tapi aranjeunna datang nepi ka Shipper - operator pikeun pangiriman on sababaraha klaster, di sababaraha wewengkon sarta di sababaraha awan.

Pangirim rada sarupa jeung kubefed2.

Kadua alat ngamungkinkeun anjeun ngarobih strategi panyebaran multi-cluster anjeun (kluster mana anu dianggo sareng sabaraha réplika anu dipibanda).

tapi Tujuan Shipper nyaéta pikeun ngirangan résiko kasalahan nalika pangiriman.

Dina Shipper, anjeun tiasa nangtukeun runtuyan léngkah anu ngajelaskeun division réplika antara deployment saméméhna jeung ayeuna jeung volume lalulintas asup.

Lamun anjeun nyorong sumberdaya pikeun klaster a, Shipper controller incrementally gulung kaluar parobahan dina sakabéh klaster ngagabung.

Ogé, Shipper terbatas pisan.

Contona, éta narima grafik Helm salaku input tur teu ngarojong sumberdaya vanili.
Sacara umum, Shipper jalan sapertos kieu.

Gantina pangiriman standar, anjeun kedah nyiptakeun sumber daya aplikasi anu kalebet bagan Helm:

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 mangrupikeun pilihan anu saé pikeun ngatur sababaraha klaster, tapi hubungan anu caket sareng Helm ngan ukur ngahalangan.

Kumaha lamun urang sadayana pindah ti Helm ka ngaropéa atawa kaptén?

Pilarian langkung seueur ngeunaan Shipper sareng filosofi na di siaran pers resmi ieu.

Upami anjeun hoyong ngagali kana kode, sirah ka Repository proyék resmi.

Pilihan 3: "magic" klaster ngahiji

Kubefed v2 sareng Shipper damel sareng federasi klaster, nyayogikeun sumber daya énggal pikeun klaster ngalangkungan definisi sumberdaya khusus.

Tapi kumaha upami anjeun henteu hoyong nyerat sadaya kiriman, StatefulSets, DaemonSets, jsb pikeun ngahiji?

Kumaha carana ngalebetkeun klaster anu aya dina federasi tanpa ngarobih YAML?

multi-cluster-scheduler mangrupa proyék Admirality, nu ngurus scheduling workloads on klaster.

Tapi tinimbang nyieun cara anyar pikeun berinteraksi sareng kluster sareng ngabungkus sumber dina definisi khusus, multi-cluster-scheduler dipasang dina siklus hirup Kubernetes standar sareng nyegat sadaya telepon anu nyiptakeun pods.

Unggal pod dijieun langsung diganti ku dummy a.

multi-cluster-scheduler ngagunakeun webhooks pikeun modifikasi akséspikeun nyegat telepon sareng nyiptakeun pod dummy anu dianggurkeun.

The pod aslina ngaliwatan siklus tata sejen dimana, sanggeus polling sakabéh federasi, kaputusan panempatan dijieun.

Tungtungna, pod dikirimkeun ka kluster target.

Hasilna, anjeun gaduh pod tambahan nu teu nanaon, ngan butuh nepi spasi.

Kauntungannana nyaéta anjeun henteu kedah nyerat sumber daya énggal pikeun ngagabungkeun suplai.

Unggal sumberdaya anu nyiptakeun pod sacara otomatis siap dihijikeun.

Ieu metot, sabab ujug-ujug anjeun boga suplai disebarkeun sakuliah sababaraha wewengkon, jeung anjeun malah teu aya bewara. Sanajan kitu, ieu rada picilakaeun, sabab sagalana di dieu rests on magic.

Tapi bari Shipper nyobian lolobana mitigate dampak deliveries, multi-cluster-scheduler handles tugas leuwih umum jeung sugan hadé cocog pikeun jobs bets.

Teu boga mékanisme pangiriman bertahap canggih.

Langkung seueur ngeunaan multi-cluster-scheduler tiasa dipendakan di kaca gudang resmi.

Upami anjeun hoyong maca ngeunaan multi-cluster-scheduler dina aksi, Admiralty boga kasus pamakéan metot kalawan Argo - workflows, acara, CI jeung CD Kubernetes.

Alat sareng solusi anu sanés

Nyambungkeun sareng ngatur sababaraha klaster mangrupikeun tugas anu rumit, sareng teu aya solusi universal.

Upami anjeun hoyong ngajalajah topik ieu langkung jauh, ieu sababaraha sumber:

Sakitu wae kanggo dinten ieu

Hatur nuhun pikeun maca nepi ka ahir!

Upami anjeun terang kumaha nyambungkeun sababaraha klaster langkung éfisién, ngabejaan urang.

Kami bakal nambihan metode anjeun kana tautan.

Hatur nuhun khusus ka Chris Nesbitt-Smith (Chris Nesbitt-Smith) jeung Vincent de Sme (Vincent De Smet) (insinyur réliabilitas di swatmobile.io) pikeun maca artikel jeung babagi informasi mangpaat ngeunaan kumaha federasi jalan.

sumber: www.habr.com

Tambahkeun komentar