Kubernetesin perusteet · Oppitunti

Solmuvalitsimet ja affiniteetti

Hallinnoikaa Podien sijoittamista solmuvalitsimilla sekä ilmaisuvoimaisemmilla solmujen ja Podien affiniteettisäännöillä.

Oppitunti 2/412 vaihetta

Solmuvalitsimet ja affiniteetti on ilmainen Kubernetesin perusteet-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Kubernetesin perusteet-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Kubernetesin perusteet-kurssilla on yhteensä 4 oppituntia.

Määritä, mihin Podit sijoitetaan

Oletusarvoisesti Kubernetes ajoittaa Podit mille tahansa käytettävissä olevalle solmulle. Entä jos tarvitset enemmän hallintaa?

Joskus Podien on suoritettava tietyissä solmuissa. Näissä solmuissa voi esimerkiksi olla erityislaitteistoa tai käyttöoikeuksia, tai ne voivat sijaita tietyillä saatavuusalueilla.

Tässä oppitunnissa tutustutaan siihen, miten Kubernetesin ajoittamista ohjataan Node Selectors- ja Node Affinity -toiminnoilla.

Miksi ajoittamista kannattaa ohjata?

Kuvittele, että sinulla on tietokanta-Pod, jonka on suoritettava solmussa, jossa on tehokkaat SSD-levyt, tai GPU-intensiivinen sovellus, joka tarvitsee tietynlaista laitteistoa.

Voit myös haluta pitää tietyt Podit erillään toisistaan vikasietoisuuden vuoksi tai varmistaa, että ne suoritetaan solmuissa, joissa on tietty käyttöjärjestelmä.

Kubernetes tarjoaa työkaluja näiden ajoitusmieltymysten ilmaisemiseen.

Solmuilla on tunnisteet

Ennen kuin voimme kertoa Podeille, minne niiden tulee sijoittua, solmut tarvitsevat tunnistetiedot! Kubernetes käyttää tunnisteita solmujen ominaisuuksien kuvaamiseen.

  • Tunnisteet ovat avain-arvo-pareja, kuten disk=ssd tai gpu=true.
  • Voit lisätä mukautettuja tunnisteita solmuihin komennolla kubectl label nodes <node-name> <key>=<value>.
  • Näiden tunnisteiden avulla kohdistetaan Podit tiettyihin solmuihin.

Node Selectors: yksinkertainen vastaavuus

Yksinkertaisin tapa rajoittaa Pod tiettyyn solmujoukkoon on käyttää nodeSelector-kenttää.

Se on Podin määrityksessä oleva kenttä, joka sisältää avain-arvo-parien kartan. Pod ajoitetaan vain solmuihin, joissa on kaikki kyseiset tunnisteet.

Se vastaa lausetta: ”Tarvitsen solmun, joka on täsmälleen tällainen.”

Node Selector käytännössä

Oletetaan, että solmuilla on tunniste disk=ssd. Näin saat Podin suoritettavaksi vain näissä solmuissa:

apiVersion: v1
kind: Pod
metadata:
  name: ssd-app
spec:
  containers:
  - name: my-container
    image: nginx
  nodeSelector:
    disk: ssd

Node Affinity: edistynyt vastaavuus

Vaikka nodeSelector on suoraviivainen, se on hyvin tiukka. Entä jos haluat ”ensisijaisia” solmuja tai monimutkaisempia vastaavuussääntöjä?

Node Affinity tarjoaa enemmän joustavuutta. Sen avulla voit ilmaista Podeille ”pehmeitä” tai ”kovia” vaatimuksia sijoittua solmuihin, joissa on tietyt tunnisteet.

Se käyttää tehokkaampaa syntaksia, jossa on esimerkiksi operaattorit In, NotIn, Exists, DoesNotExist, Gt ja Lt.

Pakollinen ja ensisijainen affiniteetti

Node Affinity -toiminnolla on kaksi päätyyppiä:

  • requiredDuringSchedulingIgnoredDuringExecution: Pod on ajoitettava sääntöjä vastaavaan solmuun. Jos sopivaa solmua ei ole, Podia ei ajoiteta.
  • preferredDuringSchedulingIgnoredDuringExecution: ajoittaja yrittää löytää sääntöjä vastaavan solmun, mutta jos sopivia solmuja ei ole, se ajoittaa Podin silti muualle. Tämä on ”parhaan yrityksen” lähestymistapa.

Pakollinen Node Affinity

Tässä on Pod, joka vaatii solmun, jolla on tunniste env=production. Jos tällaista solmua ei ole, Pod jää odottamaan.

apiVersion: v1
kind: Pod
metadata:
  name: prod-app
spec:
  containers:
  - name: my-container
    image: httpd
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: env
            operator: In
            values:
            - production

Pod Affinity: muut Podit vaikuttavat

Entä jos haluat ajoittaa Podit sen perusteella, missä muut Podit suoritetaan?

  • Pod Affinity: ohjaa Podit solmuihin, joissa tietyn tunnisteen omaavat muut Podit ovat jo käynnissä. Tämä on hyödyllistä usein viestivien palvelujen sijoittamisessa samaan paikkaan.
  • Pod Anti-affinity: ohjaa Podit pois solmuista, joissa tietyn tunnisteen omaavia muita Podeja suoritetaan. Tämä sopii replikoiden hajauttamiseen eri solmuihin korkean käytettävyyden saavuttamiseksi.

Pod Anti-affinity käytännössä

Tämä manifesti varmistaa, ettei kahta tunnisteen app=my-web sisältävää podia voida ajoittaa samaan solmuun. Tämä parantaa vikasietoisuutta.

topologyKey määrittää alueen, jolla anti-affinity on voimassa (esimerkiksi solmu tai vyöhyke).

apiVersion: v1
kind: Pod
metadata:
  name: web-app-pod
  labels:
    app: my-web
spec:
  containers:
  - name: web-container
    image: busybox
    command: ["sh", "-c", "echo 'Hello from web-app'; sleep 3600"]
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchLabels:
              app: my-web
          topologyKey: "kubernetes.io/hostname"

Testaa tietosi

Haluat varmistaa, ettei kriittisiä tietokanta-Podeja missään tapauksessa ajoiteta solmuihin, joilla on tunniste zone=dev. Millaista ajoitussääntöä käyttäisit tähän solmujen tunnisteisiin perustuvaan tiukkaan poissulkemiseen?

Kertaus: ajoituksen hallinta

Hienoa! Olet oppinut tehokkaita tapoja hallita sitä, missä Podit suoritetaan:

  • Node Labels: avain-arvo-pareja, jotka kuvaavat solmujen ominaisuuksia.
  • Node Selectors: yksinkertainen ja tiukka vastaavuus Podien ajoittamiseksi tiettyjen tunnisteiden solmuihin.
  • Node Affinity: joustavampia sääntöjä (pakollisia tai ensisijaisia) solmujen valintaan operaattoreiden avulla.
  • Pod Affinity/Anti-affinity: Podien sijoittaminen samaan paikkaan tai erilleen muiden Podien sijainnin perusteella.

Nämä työkalut ovat olennaisia resurssien käytön optimoinnissa, vikasietoisuuden varmistamisessa ja sovellusten erityistarpeiden täyttämisessä.

Aloita maksutta

Opi Kubernetesin perusteet tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Solmuvalitsimet ja affiniteetti” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kubernetesin perusteet-oppimispolun 3 oppituntia, myös oppitunnin “Solmuvalitsimet ja affiniteetti”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Kubernetesin perusteet-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Solmuvalitsimet ja affiniteetti”?

Hallinnoikaa Podien sijoittamista solmuvalitsimilla sekä ilmaisuvoimaisemmilla solmujen ja Podien affiniteettisäännöillä. Harjoittelet Kubernetesin perusteet-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Kubernetesin perusteet-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Kubernetesin perusteet-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Solmuvalitsimet ja affiniteetti”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Kubernetesin perusteet-oppitunnilla?

Kyllä. Jokainen Kubernetesin perusteet-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Resurssipyynnöt ja -rajat
  2. Solmuvalitsimet ja affiniteetti
  3. Taintit ja toleraatiot
  4. Podien prioriteetti ja preemptio
← Takaisin: Kubernetesin perusteet