Hyppää sisältöön

Docs CSC now features an automatic Finnish translation. Click here for more information.

Warning!

Puhti and Mahti are being decommissioned in stages, and their storage areas will become fully unavailable from 15 October 2026. Clean up unnecessary files and move any data you need to keep by 31 August 2026. See the Roihu data migration guide for instructions on transferring your data to Roihu.

Puhti computing services have been decommissioned and no new jobs are accepted or executed on its compute nodes. Puhti login nodes and storage services are planned to remain available until 15 October 2026.

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.

Labels

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äävien WeightedPodAffinityTerm-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 avaimella vastaa minkä tahansa sellaisen solmun arvoa, jolla jokin tähän joukkoon kuuluva podi on käynnissä

Lisätietoja ja lisää esimerkkejä löytyy osoitteesta:

https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta