Podek Kubernetes çawa navnîşek IP-ê digire?

Not. werger.: Ev gotara ku ji hêla endezyarek SRE ve ji LinkedIn ve hatî nivîsandin, bi hûrgulî li ser sêrbaziya hundurîn a Kubernetes - bi rastî, pêwendiya CRI, CNI û kube-apiserver - diqewime dema ku pêdivî ye ku podê din navnîşek IP-yê were veqetandin.

Yek ji pêdiviyên bingehîn Modela torê ya Kubernetes ev e ku divê her pod navnîşana IP-ya xwe hebe û her podek din a di komê de divê bikaribe bi wê navnîşanê re têkilî dayne. Gelek "pêşkêşkerên" torê hene (Flannel, Calico, Canal, hwd.) ku alîkariya pêkanîna vê modela torê dikin.

Gava ku min yekemcar dest bi xebata bi Kubernetes re kir, ji min re bi tevahî ne diyar bû ka pod çawa bi rastî navnîşanên IP-ya xwe digirin. Tewra bi têgihîştina pêkhateyên takekesî re jî, dijwar bû ku meriv wan bi hev re bixebite. Mînakî, min dizanibû ku pêvekên CNI ji bo çi ne, lê min nizanibû ku ew bi rastî çawa hatine gazî kirin. Ji ber vê yekê, min biryar da ku ez vê gotarê binivîsim da ku zanyariyan di derheqê pêkhateyên cûda yên torê de parve bikim û ka ew çawa di komek Kubernetes de bi hev re dixebitin, ku dihêle her pod navnîşana IP-ya xweya yekta bistîne.

Ji bo organîzekirina torê li Kubernetes awayên cûda hene, mîna ku ji bo konteyneran vebijarkên cihêreng ên dema xebitandinê hene. Ev weşan dê bikar bînin Flannel ji bo organîzekirina torgilokekê di komekê de, û wekî jîngehek bikêrhatî - Containerd. Ez di heman demê de texmîn dikim ku hûn dizanin ka tora di navbera konteyneran de çawa dixebite, ji ber vê yekê ez ê bi kurtasî, tenê ji bo çarçovê, li ser wê bisekinim.

Hin têgehên bingehîn

Konteynirên û Tora: Kurtîyek

Li ser Înternetê gelek weşanên hêja hene ku rave dikin ka konteynir çawa li ser torê bi hevûdu re têkilî daynin. Ji ber vê yekê, ez ê tenê nihêrînek giştî li ser têgînên bingehîn bidim û xwe bi yek nêzîkatiyê ve bisînor bikim, ku tê de çêkirina pirek Linux û pakêtên vegirtinê pêk tîne. Hûragahiyan ji holê hatine rakirin, ji ber ku mijara tora konteynerê bixwe gotarek cihêreng heq dike. Zencîreyên hin weşanên bi taybetî jîr û perwerdehî dê li jêr werin peyda kirin.

Konteynirên li ser yek mêvandar

Yek rê ji bo organîzekirina ragihandinê bi navnîşanên IP-yê di navbera konteyneran de ku li ser heman mêvandarê dixebitin, çêkirina pirek Linux-ê ye. Ji bo vê armancê, amûrên virtual li Kubernetes (û Docker) têne afirandin. veth (ethernet virtual). Yek dawiya cîhaza veth bi qada navên torê ya konteynerê ve girêdide, ya din bi pira Linux li ser tora mêvandar.

Hemî konteynerên li ser heman mêvandarê yek dawiya vethê bi pirekê ve girêdayî ye ku tê de ew dikarin bi navnîşanên IP-yê bi hev re têkilî daynin. Pira Linux-ê di heman demê de navnîşanek IP-yê jî heye û wekî dergehek ji bo seyrûsefera derketinê ya ji podên ku ji bo girêkên din têne armanc kirin tevdigere.

Podek Kubernetes çawa navnîşek IP-ê digire?

Konteynirên li ser mêvandarên cûda

Veguheztina pakêtê yek rêbazek e ku dihêle konteynerên li ser girêkên cihêreng bi karanîna navnîşanên IP-yê bi hevûdu re têkilî daynin. Li Flannel, teknolojî ji vê derfetê berpirsiyar e. vxlan, ku pakêta orîjînal di pakêtek UDP de "pakêt" dike û dûv re wê dişîne cihê xwe.

Di komek Kubernetes de, Flannel amûrek vxlan diafirîne û tabloya rêwîtiyê li ser her girêkek li gorî wê nûve dike. Her pakêtek ku ji bo konteynirek li ser mêvandarek cihêreng hatî armanc kirin di cîhaza vxlan re derbas dibe û di pakêtek UDP de tête girtin. Li meqsedê, pakêta hêlînkirî tê derxistin û ber bi podê xwestinê ve tê şandin.

Podek Kubernetes çawa navnîşek IP-ê digire?
Nîşe: Ev tenê rêyek e ku meriv pêwendiya torê di navbera konteyneran de organîze bike.

CRI çi ye?

CRI (Navenda Runtime Container) pêvekek e ku dihêle kubelet hawîrdorên cihêreng ên dema xebitandinê yên konteyneran bikar bîne. CRI API di nav demên xebitandinê yên cihêreng de hatî çêkirin, ji ber vê yekê bikarhêner dikarin dema bijartina xwe hilbijêrin.

CNI çi ye?

Projeya CNI ye specification ji bo konteynerên Linux-ê çareseriyek torê ya gerdûnî organîze bikin. Ji bilî vê, ew dihewîne pêvekên, dema sazkirina tora pod ji fonksiyonên cihêreng berpirsiyar e. Pêveka CNI pelek birêkûpêk e ku bi taybetmendiyê re tevdigere (em ê li jêr hin pêvekan nîqaş bikin).

Veqetandina jêrtoran ji bo nodan ji bo veqetandina navnîşanên IP-yê li ser podan

Ji ber ku her podek di komekê de divê navnîşek IP-yê hebe, girîng e ku meriv pê ewle bibe ku ev navnîş yekta ye. Ev yek bi destnîşankirina her girêkek jêrtorokek yekta pêk tê, ku ji wê pêvekên li ser wê nodê dûv re navnîşanên IP-yê têne destnîşan kirin.

Node IPAM Controller

Dema ku nodeipam wekî pîvanek ala derbas kirin --controllers kube-kontroller-rêveber, ew ji koma CIDR (ango, rêza navnîşanên IP-yê ji bo tora komê) ji her girêkek veqetandek (podCIDR) veqetîne. Ji ber ku ev podCIDR li hev nakin, mimkun dibe ku her pod navnîşek IP-ya yekta were veqetandin.

Nodek Kubernetes gava ku ew di destpêkê de bi komê re tê qeyd kirin podCIDR tê veqetandin. Ji bo guheztina podCIDR-ya girêkan, hûn hewce ne ku wan qeyd bikin û dûv re wan ji nû ve qeyd bikin, di navberê de di veavakirina qata kontrolê ya Kubernetes de guheztinên guncan bikin. Hûn dikarin podCIDR-ya girêkek bi karanîna fermana jêrîn nîşan bidin:

$ kubectl get no <nodeName> -o json | jq '.spec.podCIDR'
10.244.0.0/24

Kubelet, dema xebitandina konteyneran û pêvekên CNI: ew hemî çawa dixebite

Plansazkirina podek ji bo her nodek gelek gavên amadekariyê vedigire. Di vê beşê de, ez ê tenê li ser yên ku rasterast bi sazkirina torgilokek pod re têkildar in bisekinin.

Plansazkirina podek li ser girêkek diyar zincîra bûyerên jêrîn vedigire:

Podek Kubernetes çawa navnîşek IP-ê digire?

Alîkarî: Mîmariya pêvekên Containerd CRI.

Têkiliya di navbera dema xebitandina konteynerê û pêvekên CNI de

Her pêşkêşvanê torê pêveka xweya CNI heye. Dema xebitandina konteynerê wê dimeşîne da ku torê ji bo pod gava ku dest pê dike mîheng bike. Di doza konteynerê de, pêveka CNI ji hêla pêvekê ve tê destpêkirin Containerd CRI.

Digel vê yekê, her pêşkêşker xwediyê nûnerê xwe ye. Ew li ser hemî girêkên Kubernetes tête saz kirin û ji veavakirina torê ya pods berpirsiyar e. Ev ajan an bi veavakirina CNI-yê re tê de heye an jî wê bi rengek serbixwe li ser nodê diafirîne. Vesazkirin ji pêveka CRI re dibe alîkar ku pêveka CNI-yê ku gazî bike destnîşan bike.

Cihê veavakirina CNI dikare were xweş kirin; bi xweber ew tê de ye /etc/cni/net.d/<config-file>. Rêvebirên Cluster di heman demê de ji sazkirina pêvekên CNI-yê li ser her girêkek komê berpirsiyar in. Cihê wan jî xweşbar e; pelrêça xwerû - /opt/cni/bin.

Dema ku konteyneran bikar tînin, rêyên ji bo veavakirina pêvekê û binaryan dikarin di beşê de werin danîn [plugins.«io.containerd.grpc.v1.cri».cni] в pelê veavakirina konteynir.

Ji ber ku em Flannel wekî pêşkêşvanê torê bikar tînin, bila em hinekî li ser sazkirina wê biaxivin:

  • Flanneld (Daemonê Flannel) bi gelemperî di komek wekî DaemonSet de tê saz kirin. install-cni dema konteynera destpêkê.
  • Install-cni diafirîne pelê veavakirina CNI (/etc/cni/net.d/10-flannel.conflist) li ser her girêkekê.
  • Flanneld amûrek vxlan diafirîne, metadata torê ji servera API-ê vedigire, û nûvekirinên pod dişopîne. Gava ku ew têne afirandin, ew li seranserê komê rê li hemî podan belav dike.
  • Van rêgezan dihêle ku pod bi navnîşanên IP-yê bi hevûdu re têkilî daynin.

Ji bo agahdariya berfirehtir di derbarê xebata Flannel de, ez pêşniyar dikim ku girêdanên di dawiya gotarê de bikar bînin.

Li vir diyagramek pêwendiya di navbera pêveka Containerd CRI û pêvekên CNI de heye:

Podek Kubernetes çawa navnîşek IP-ê digire?

Wekî ku hûn li jor dibînin, kubelet gazî pêveka Containerd CRI dike ku podek çêbike, ku dûv re gazî pêveka CNI dike ku tora pod-ê mîheng bike. Bi kirina vê yekê, pêveka CNI ya peydakerê torê gazî pêvekên din ên bingehîn ên CNI dike ku aliyên cihêreng ên torê mîheng bikin.

Têkiliya di navbera pêvekên CNI de

Pêvekên CNI yên cihêreng hene ku karê wan ev e ku bibin alîkar ku pêwendiya torê di navbera konteynerên li ser mêvandar de saz bikin. Ev gotar dê sê ji wan nîqaş bike.

Pêveka CNI Flannel

Dema ku Flannel wekî peydakerek torê bikar tînin, pêkhateya Containerd CRI bang dike Pêveka CNI Flannelpelê veavakirina CNI bikar bînin /etc/cni/net.d/10-flannel.conflist.

$ cat /etc/cni/net.d/10-flannel.conflist
{
  "name": "cni0",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
         "ipMasq": false,
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    }
  ]
}

Pêveka Flannel CNI bi Flanneld re bi hev re dixebite. Di dema destpêkirinê de, Flanneld podCIDR û hûrguliyên din ên girêdayî torê ji servera API-yê vedigire û wan di pelek de hilîne. /run/flannel/subnet.env.

FLANNEL_NETWORK=10.244.0.0/16 
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450 
FLANNEL_IPMASQ=false

Pêveka Flannel CNI daneyên ji bikar tîne /run/flannel/subnet.env ku pêveka pira CNI mîheng bikin û bang bikin.

CNI plugin Bridge

Vê pêvekê bi veavakirina jêrîn tê gotin:

{
  "name": "cni0",
  "type": "bridge",
  "mtu": 1450,
  "ipMasq": false,
  "isGateway": true,
  "ipam": {
    "type": "host-local",
    "subnet": "10.244.0.0/24"
  }
}

Dema ku ji bo cara yekem tê gazî kirin, ew bi pirek Linux re diafirîne «name»: «cni0», ku di mîhengê de tê destnîşan kirin. Dûv re ji bo her podek cotek veth tê afirandin. Yek dawiya wê bi cîhê navên torê yên konteynerê ve girêdayî ye, ya din jî di pira Linux ya li ser tora mêvandar de ye. CNI plugin Bridge hemî konteynerên mêvandar bi pirek Linux-ê ya li ser tora mêvandar ve girêdide.

Piştî ku sazkirina cotê veth qedand, pêveka Bridge gazî pêveka IPAM CNI ya mêvandar-herêmî dike. Tîpa pêveka IPAM-ê dikare di veavakirina CNI de ku pêveka CRI bikar tîne ji bo gazîkirina pêveka Flannel CNI-ê bikar tîne were mîheng kirin.

Pêvekên IPAM CNI yên mêvandar-herêmî

Pira CNI bang dike pêveka IPAM-a mêvandar-herêmî CNI bi veavakirina jêrîn:

{
  "name": "cni0",
  "ipam": {
    "type": "host-local",
    "subnet": "10.244.0.0/24",
    "dataDir": "/var/lib/cni/networks"
  }
}

Pêveka IPAM-a mêvandar-herêmî (IP Address Mrêvebirin - Rêvebiriya navnîşana IP-yê) navnîşana IP-ya konteynerê ji jêrtorê vedigerîne û IP-ya hatî veqetandin li ser mêvandar di pelrêça ku di beşê de hatî destnîşan kirin de hilîne. dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Di vê pelê de nasnameya konteynera ku ev navnîşana IP-yê jê re hatî veqetandin dihewîne.

Dema ku gazî pêveka IPAM-ya mêvandar-herêmî dike, ew daneyên jêrîn vedigerîne:

{
  "ip4": {
    "ip": "10.244.4.2",
    "gateway": "10.244.4.3"
  },
  "dns": {}
}

Nîqaş

Kube-kontroller-rêveber ji her nodê re podCIDRek destnîşan dike. Podên her girêk navnîşanên IP-ê ji cîhê navnîşanê ya di qada podCIDR ya veqetandî de digirin. Ji ber ku podCIDR-yên girêkan li hev nayên, hemî pod navnîşanên IP-ya yekta distînin.

Rêvebirê komê Kubernetes kubelet, dema xebitandina konteyneran, nûnerê peydakerê torê mîheng dike û saz dike, û pêvekên CNI li her girêkê kopî dike. Di dema destpêkirinê de, karmendê peydakerê torê mîhengek CNI çêdike. Dema ku podek ji bo nodekek tê plansaz kirin, kubelet gazî pêveka CRI dike ku wê biafirîne. Dûv re, heke konteynir were bikar anîn, pêveka Containerd CRI gazî pêveka CNI-ya ku di veavakirina CNI de hatî destnîşan kirin gazî dike da ku tora pod-ê mîheng bike. Wekî encamek, pod navnîşek IP-ê distîne.

Demek dem girt ku ez hemî hûrgulî û hûrguliyên van hemî têkiliyan fam bikim. Ez hêvî dikim ku ev ezmûn dê ji we re bibe alîkar ku hûn çêtir fam bikin ka Kubernetes çawa dixebite. Ger ez di tiştek de xelet im, ji kerema xwe bi min re têkilî daynin Twitter an jî li navnîşanê [email parastî]. Ger hûn dixwazin li ser aliyên vê gotarê an jî tiştek din nîqaş bikin, xwe bi xwe bigihînin. Ez dixwazim bi te re sohbet bikim!

references

Konteynirên û tora

Flannel çawa dixebite?

CRI û CNI

PS ji wergêr

Li ser bloga me jî bixwînin:

Source: www.habr.com

Add a comment