Pehea e hoʻohui ai i nā pūʻulu Kubernetes ma nā kikowaena ʻikepili like ʻole

Pehea e hoʻohui ai i nā pūʻulu Kubernetes ma nā kikowaena ʻikepili like ʻole
Welina mai i kā mākou papahana Kubernetes Quick Start. He kolamu maʻamau kēia me nā nīnau hoihoi loa i loaʻa iā mākou ma ka pūnaewele a ma kā mākou aʻo ʻana. Pane akamai Kubernetes.

ʻO Daniel Polenchik ka loea o kēia lā (Daniele Polencic). Hana ʻo Daniel ma ke ʻano he kumu aʻo a hoʻomohala polokalamu ma Learnk8s.

Inā makemake ʻoe e pane ʻia kāu nīnau ma ka pou aʻe, e leka uila iā mākou ole Twitter: @learnk8s.

Ua hala i nā memo mua? E ʻimi iā lākou ma ʻaneʻi.

Pehea e hoʻohui ai i nā pūʻulu Kubernetes ma nā kikowaena ʻikepili like ʻole?

Ka-pōkole: E hele koke mai ana ʻo Kubefed v2, a ke paipai nei au e heluhelu e pili ana Mea hoʻouna moku и papahana multi-cluster-scheduler.

ʻO ka pinepine, hana hou ʻia ka ʻōnaehana a hoʻohele ʻia ma nā wahi like ʻole, ʻoi aku hoʻi i nā kaiapuni i hoʻomalu ʻia.

Inā ʻaʻole loaʻa kekahi ʻāpana, hoʻohuli ʻia ke kaʻa i kahi ʻē aʻe e pale aku i nā pilikia.

Me nā Kubernetes, hiki iā ʻoe ke hoʻohana i kahi hoʻolālā like a puʻunaue i nā haʻahaʻa hana ma nā wahi like ʻole.

Hiki iā ʻoe ke loaʻa i hoʻokahi a ʻoi aʻe paha nā puʻupuʻu no kēlā me kēia hui, ʻāina, kaiapuni, a i ʻole hui pū ʻana o kēia mau mea.

Hiki ke hoʻokipa ʻia kāu mau puʻupuʻu ma nā ao like ʻole a ma ka hale.

Akā, pehea ʻoe e hoʻolālā ai i nā ʻōnaehana no ia pālahalaha ʻāina?
Pono ʻoe e hana i hoʻokahi puʻupuʻu nui no nā kaiapuni ao ma luna o kahi pūnaewele hoʻokahi?
A i ʻole he nui nā puʻupuʻu liʻiliʻi a loaʻa i kahi ala e hoʻokele a hoʻonohonoho pū iā lākou?

Hoʻokahi pūʻulu alakaʻi

ʻAʻole maʻalahi ka hana ʻana i hoʻokahi puʻupuʻu ma kahi pūnaewele hoʻokahi.

E noʻonoʻo ʻoe he ulia pōpilikia, nalowale ka pilina ma waena o nā ʻāpana cluster.

Inā loaʻa iā ʻoe hoʻokahi kikowaena haku, ʻaʻole hiki i ka hapalua o nā kumuwaiwai ke loaʻa nā kauoha hou no ka mea ʻaʻole hiki iā lākou ke hoʻopili i ka haku.

A i ka manawa like loaʻa iā ʻoe nā papa routing kahiko (kube-proxy ʻAʻole hiki ke hoʻoiho i nā mea hou) a ʻaʻohe pods hou (ʻaʻole hiki i kubelet ke noi i nā mea hou).

ʻOi aku ka maikaʻi, inā ʻaʻole ʻike ʻo Kubernetes i kahi node, hōʻailona ia he keiki makua ʻole a hāʻawi i nā pods i nalowale i nā node e kū nei.

ʻO ka hopena, loaʻa iā ʻoe ka nui o nā pods.

Inā ʻoe e hana i hoʻokahi haku kikowaena no kēlā me kēia wahi, e loaʻa nā pilikia me ka consensus algorithm i ka waihona etcd. (kokoke. ed. - ʻOiaʻiʻo, ʻaʻole pono e loaʻa ka waihona etcd ma nā kikowaena master. Hiki ke holo ma kahi hui o nā kikowaena ma ka ʻāina like. ʻOiaʻiʻo, i ka manawa like e loaʻa ai kahi helu o ka hāʻule ʻole o ka hui. Akā wikiwiki.)

etcd hoʻohana raft algorithme kūkākūkā i ka waiwai ma mua o ke kākau ʻana i ka diski.
ʻO ia hoʻi, ʻo ka hapa nui o nā hihia e pono e hōʻea i ka ʻaelike ma mua o ka hiki ke kākau ʻia ka mokuʻāina iā etcd.

Inā piʻi nui ka latency ma waena o nā manawa etcd, e like me ka hihia me ʻekolu etcd manawa ma nā wahi like ʻole, lōʻihi ka manawa e kūkākūkā ai i kahi waiwai a kākau iā ia i ka disk.
Hōʻike ʻia kēia i nā mea hoʻokele Kubernetes.

Pono ka luna hoʻomalu i ka manawa hou e aʻo ai e pili ana i ka hoʻololi a kākau i ka pane i ka waihona.

A no ka mea, ʻaʻole hoʻokahi mea hoʻoponopono, akā he nui. ka hopena o ke kaulahao a hoʻomaka ka hui holoʻokoʻa e hana mālie loa.

etcd ua maʻalahi loa ia Paipai ʻia ka palapala mana e hoʻohana i nā SSD ma mua o ka paʻakikī maʻamau.

ʻAʻole i kēia manawa nā hiʻohiʻona maikaʻi o kahi pūnaewele nui no kahi hui hoʻokahi.

ʻO ke kumu, ke hoʻāʻo nei ke kaiāulu hoʻomohala a me ka hui SIG-cluster e noʻonoʻo pehea e hoʻolalelale ai i nā puʻupuʻu e like me ke ʻano o Kubernetes orchestrates ipu.

Koho 1: hui hui pū me kubefed

Pane kūhelu mai SIG-cluster - kubefed2, he mana hou o ka mea kūʻai kube federation kumu a me ka mea hoʻohana.

No ka manawa mua, ua hoʻāʻo mākou e hoʻokele i ka hōʻiliʻili o nā puʻupuʻu ma ke ʻano he mea hoʻokahi me ka hoʻohana ʻana i ka mea hana kube federation.

Maikaʻi ka hoʻomaka ʻana, akā i ka hopena ʻaʻole i kaulana ʻo kube federation no ka mea ʻaʻole ia i kākoʻo i nā kumuwaiwai āpau.

Kākoʻo ia i nā hoʻopuka a me nā lawelawe i hui pū ʻia, akā ʻaʻole ʻo StatefulSets, no ka laʻana.
Eia kekahi, ua hoʻouna ʻia ka hoʻonohonoho federation ma ke ʻano o nā annotations a ʻaʻole maʻalahi.

E noʻonoʻo pehea e hiki ai iā ʻoe ke wehewehe i ka hoʻokaʻawale ʻana no kēlā me kēia puʻupuʻu i kahi hui me ka hoʻohana ʻana i nā annotation wale nō.

He haunaele loa.

Ua hana nui ʻo SIG-cluster ma hope o kubefed v1 a hoʻoholo e hoʻokokoke i ka pilikia mai kahi kihi ʻē aʻe.

Ma kahi o nā annotation, ua hoʻoholo lākou e hoʻokuʻu i kahi mea hoʻoponopono i hoʻokomo ʻia ma nā pūʻulu. Hiki ke hoʻopilikino ʻia me ka hoʻohana ʻana i ka Custom Resource Definitions (CRDs).

No kēlā me kēia kumuwaiwai e lilo i ʻāpana o ka hui, loaʻa iā ʻoe kahi wehewehe CRD maʻamau me ʻekolu mau ʻāpana:

  • wehewehe maʻamau o kahi kumuwaiwai, no ka laʻana hoʻolaha;
  • pauku placement, kahi āu e wehewehe ai pehea e puʻunaue ʻia ai ka waiwai i ka hui;
  • pauku override, kahi e hiki ai iā ʻoe ke hoʻopau i ke kaumaha a me nā ʻāpana mai kahi kau.

Eia kekahi laʻana o ka lawe ʻana i hui pū ʻia me ka waiho ʻana a me ka hoʻopau ʻana i nā ʻāpana.

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

E like me kāu e ʻike ai, hāʻawi ʻia ka lako ma nā ʻāpana ʻelua: cluster1 и cluster2.

Hāʻawi ka hui mua i ʻekolu kope, a ʻo ka lua i hoʻonohonoho ʻia i 5.

Inā makemake ʻoe i ka mana hou aʻe i ka helu o nā replicas, hāʻawi ʻo kubefed2 i kahi mea ReplicaSchedulingPreference hou kahi e hiki ke kaupaona ʻia nā kope:

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

ʻAʻole mākaukau loa ka ʻōnaehana CRD a me API, a ke hoʻomaka nei ka hana ikaika ma ka waihona o ka papahana.

E makaʻala i ka kubefed2, akā e hoʻomanaʻo ʻaʻole kūpono ia no ka hana ʻana.

E aʻo hou e pili ana i kubefed2 mai 'atikala kūhelu e pili ana i kubefed2 ma ka blog e pili ana i nā Kubernetes a ma waihona kūhelu o ka papahana kubefed.

Koho 2: hoʻohui i nā pūʻulu ma ke ʻano Booking.com

ʻAʻole i hana nā mea hoʻomohala o Booking.com ma kubefed v2, akā ua hele mai lākou me Shipper - kahi mea hoʻohana no ka lawe ʻana ma nā ʻāpana he nui, ma nā wahi a me nā ao.

Mea hoʻouna moku ʻano like me kubefed2.

Hāʻawi nā mea hana ʻelua iā ʻoe e hana i kāu hoʻolālā hoʻolālā multi-cluster (ʻo ia nā pūʻulu i hoʻohana ʻia a me ka nui o nā replicas).

aka, ʻO ka pahuhopu o Shipper e hōʻemi i ka pilikia o nā hewa i ka wā o ka lawe ʻana.

Ma Shipper, hiki iā ʻoe ke wehewehe i ke ʻano o nā ʻanuʻu e wehewehe i ka mahele o nā replicas ma waena o ka hoʻolaha mua a me kēia manawa a me ka nui o nā kaʻa e hiki mai ana.

Ke hoʻokuʻu ʻoe i kahi kumuwaiwai i kahi puʻupuʻu, ʻo ka mea hoʻokele Shipper e hoʻololi i kēlā hoʻololi ma nā hui āpau i hui pū ʻia.

Eia kekahi, palena loa ʻo Shipper.

No kekahi laʻana, ʻae ia i nā palapala hoʻokele ma ke ʻano he hoʻokomo ʻaʻole kākoʻo i nā kumuwaiwai vanilla.
Ma nā ʻōlelo maʻamau, hana ʻo Shipper e like me kēia.

Ma kahi o ka hoʻouna maʻamau, pono ʻoe e hana i kahi kumuwaiwai noi e loaʻa kahi pakuhi 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

He koho maikaʻi ʻo Shipper no ka hoʻokele ʻana i nā puʻupuʻu lehulehu, akā ʻo kona pilina pili me Helm wale nō ke hele i ke ala.

Pehea inā e hoʻololi mākou a pau mai Helm i hoʻopilikino ai ole ia, kapena?

E ʻike hou aʻe e pili ana iā Shipper a me kāna ʻatikala ma kēia hoʻolaha paʻi kūhelu.

Inā makemake ʻoe e ʻeli i loko o ke code, poʻo i ka waihona pāhana mana.

Koho 3: hui pū ʻia "magic".

Hana ʻo Kubefed v2 a me Shipper me ka hui pūʻulu, e hāʻawi ana i nā kumuwaiwai hou i nā pūʻulu ma o ka wehewehe kumu waiwai maʻamau.

Akā pehea inā ʻaʻole ʻoe makemake e kākau hou i nā hoʻopuka āpau, StatefulSets, DaemonSets, etc. e hui?

Pehea e hoʻokomo ai i kahi pūʻulu i loko o kahi hui me ka ʻole e hoʻololi i ka YAML?

multi-cluster-scheduler he papahana Admirality, e pili ana i ka hoʻonohonoho ʻana i nā haʻawina hana ma nā pūʻulu.

Akā ma kahi o ka hele ʻana mai me kahi ala hou e launa pū ai me ka puʻupuʻu a hoʻopili i nā kumuwaiwai i nā wehewehe maʻamau, ua hoʻokomo ʻia ka multi-cluster-scheduler i loko o ke ola holoʻokoʻa Kubernetes maʻamau a kāpae i nā kelepona āpau e hana i nā pods.

Hoʻololi koke ʻia kēlā me kēia pod i hana ʻia me kahi dummy.

hoʻohana multi-cluster-scheduler webhooks no ka hoʻololi ʻanae hoʻopaʻa i ke kelepona a hana i kahi pahu dummy hana ʻole.

E hele ana ka pod mua ma kahi pōʻai hoʻolālā ʻē aʻe, ma hope o ke koho balota ʻana i ka hui holoʻokoʻa, hoʻoholo ʻia kahi hoʻoholo.

ʻO ka hope, hāʻawi ʻia ka pod i ka puʻupuʻu pahuhopu.

ʻO ka hopena, loaʻa iā ʻoe kahi pod keu i hana ʻole, lawe wale i kahi.

ʻO ka pōmaikaʻi, ʻaʻole pono ʻoe e kākau i nā kumuwaiwai hou e hoʻohui i nā lako.

ʻO kēlā me kēia kumuwaiwai e hana i kahi pod ua mākaukau e hoʻohui ʻia.

He mea hoihoi kēia, no ka mea, ua hāʻawi koke ʻoe i nā lako i hāʻawi ʻia ma nā wahi he nui, a ʻaʻole ʻoe i ʻike. Eia naʻe, pilikia loa kēia, no ka mea, aia nā mea a pau ma ke kilokilo.

Akā ʻoiai ke hoʻāʻo nei ʻo Shipper e hoʻēmi i ka hopena o ka hoʻopuka ʻana, lawelawe ʻo multi-cluster-scheduler i nā hana maʻamau a ʻoi aku paha ka maikaʻi no nā hana batch.

ʻAʻole loaʻa iā ia kahi mīkini hoʻouna lohi mālie.

Hiki ke loaʻa nā mea hou aʻe e pili ana i ka multi-cluster-scheduler ma ʻaoʻao waihona kūhelu.

Inā makemake ʻoe e heluhelu e pili ana i ka multi-cluster-scheduler i ka hana, loaʻa iā Admiralty ka hihia hoʻohana hoihoi me Argo — nā kahe hana, nā hanana, CI a me CD Kubernetes.

Nā mea hana ʻē aʻe a me nā hoʻonā

He hana paʻakikī ka hoʻohui ʻana a me ka hoʻokele ʻana i nā pūʻulu lehulehu, a ʻaʻohe hopena ākea.

Inā makemake ʻoe e ʻimi hou aku i kēia kumuhana, eia kekahi mau kumuwaiwai:

ʻO ia wale nō no kēia lā

Mahalo iā ʻoe no ka heluhelu ʻana a hiki i ka hopena!

Inā ʻike ʻoe pehea e hoʻopili pono ai i nā pūʻulu lehulehu, e hai mai ia makou.

E hoʻohui mākou i kāu ala i nā loulou.

Mahalo nui iā Chris Nesbitt-Smith (Chris Nesbitt-Smith) a me Vincent de Sme (Vincent De Smet) (ʻenekinia hilinaʻi ma swatmobile.io) no ka heluhelu ʻana i ka ʻatikala a kaʻana like i ka ʻike e pili ana i ka hana ʻana o ka hui.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka