-
Keskitaso
-
Podien (anti)affiniteetti
Keskitaso
Tämä opas käyttää OKD:n komentorivikäyttöliittymätyökalua oc
Kubernetes-ympäristön tuntemus on tarpeen
Podien affiniteetti ja anti-affiniteetti
Podien affiniteetin ja anti-affiniteetin avulla voit määrittää rajoitteita sille, mille solmuille Podisi ajoitetaan, perustuen kyseisellä solmulla jo käynnissä olevien Podien labeleihin. Tätä yleistä periaatetta voidaan käyttää myös tiettyjen solmujen valintaan (tai välttämiseen), jos niissä on tiettyjä laitteistokokoonpanoja, kuten GPU.
Tämä on hyödyllistä, koska joskus (affiniteetti) on tärkeää varmistaa, että kaksi Podia jakaa saman liitetyn taltion ja välttää verkon synkronointiongelmia, tai päinvastoin (anti-affiniteetti) varmistaa, että kaksi Podia ei jaa samaa palvelinta, mikä parantaa sovelluksen käytettävyyttä.
Tässä deployment-esimerkissä haluamme, että wes-deployment-deploymentin Podit ajetaan samalla solmulla kuin celery-worker-Podit, jotta ne voivat molemmat liittää saman tallennustaltion (joka voidaan liittää vain yhteen fyysiseen solmuun).
diff --git a/charts/wes/templates/wes/wes-deployment.yaml b/charts/wes/templates/wes/wes-deployment.yaml
index 93ca230..e64349b 100644
--- a/charts/wes/templates/wes/wes-deployment.yaml
+++ b/charts/wes/templates/wes/wes-deployment.yaml
@@ -12,6 +12,16 @@ spec:
labels:
app: {{ .Values.wes.appName }}
spec:
+ affinity:
+ podAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ - labelSelector:
+ matchExpressions:
+ - key: app
+ operator: In
+ values:
+ - celery-worker
+ topologyKey: "kubernetes.io/hostname"
initContainers:
affinity-lohkon tulee olla spec-osion alla. Jos tätä sovelletaan toiseen deploymentiin, tarvitsee muuttaa vain value ja mahdollisesti key, jotta se vastaa yhtä Labels-osion key- ja value-paria siinä Podissa, johon haluamme affiniteetin. Podin Labels-tiedot voi nähdä komentoriviltä tai selainkäyttöliittymän kautta.

Ja komentoriviltä:
$ oc describe pods celery-worker-6777488df4-s9tc7
Name: celery-worker-6777488df4-s9tc7
Namespace: wes
Priority: 0
Node: rahti-comp-io-s25-d/192.168.54.13
Start Time: Wed, 17 Jan 2024 14:55:57 +0200
Labels: app=celery-worker
deployment=celery-worker-57
(...)
Kun affinity-lohko lisätään tähän deploymentiin, ajastin käynnistää (uudelleen) wes-deployment-deploymentia vastaavat Podit samalle solmulle, jolla celery-worker on käynnissä. Koska käytetty käytäntö on requiredDuringSchedulingIgnoredDuringExecution, deployment ei onnistu, jos valitulla solmulla ei ole tilaa. Toinen käytäntö on preferredDuringSchedulingIgnoredDuringExecution, mikä tarkoittaa, että ajoitus ei epäonnistu, vaikka valitulla solmulla ei olisi tilaa, vaan Podit ajoitetaan toiselle solmulle.
Podien anti-affiniteetin osalta syntaksi on hieman erilainen. Tässä on esimerkki:
diff --git a/charts/wes/templates/wes/wes-deployment.yaml b/charts/wes/templates/wes/wes-deployment.yaml
index 93ca230..e64349b 100644
--- a/charts/wes/templates/wes/wes-deployment.yaml
+++ b/charts/wes/templates/wes/wes-deployment.yaml
@@ -12,6 +12,16 @@ spec:
labels:
app: {{ .Values.wes.appName }}
spec:
+ affinity:
+ podAntiAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ - weight: 100
+ podAffinityTerm:
+ labelSelector:
+ matchExpressions:
+ - key: app
+ operator: In
+ values:
+ - celery-worker
+ topologyKey: "kubernetes.io/hostname"
initContainers:
Anti-affiniteettia varten tarvitaan kaksi uutta avainta:
-
weight(välillä 1–100): Ajastin pyrkii ajoittamaan podit solmuille, jotka täyttävät anti-affiniteettilausekkeet. Eniten suosittu solmu on se, jolla on suurin painojen summa. Käytännössä jokaiselle solmulle, joka täyttää kaikki ajoitusvaatimukset (resurssipyyntö,requiredDuringScheduling-anti-affiniteettilausekkeet jne.), lasketaan summa käymällä tämän kentän alkiot läpi ja lisäämällä"weight"summaan, jos solmulla on podeja, jotka vastaavat kyseistäpodAffinityTerm-määrittelyä. Solmu tai solmut, joilla on korkein summa, ovat suosituimpia. Kaikkien täsmäävienWeightedPodAffinityTerm-kenttien painot lasketaan yhteen solmukohtaisesti suosituimman solmun tai suosituimpien solmujen löytämiseksi. -
podAffinityTerm: Määrittää joukon podeja, joiden kanssa tämän podin ei tulisi sijaita samalla alueella (anti-affiniteetti), missä samalla alueella sijaitseminen tarkoittaa ajoa solmulla, jonka labelin arvo avaimellavastaa minkä tahansa sellaisen solmun arvoa, jolla jokin tähän joukkoon kuuluva podi on käynnissä
Lisätietoja ja lisää esimerkkejä löytyy osoitteesta: