Csomópont-tárolók használata az Azure Arc-fürt által engedélyezett AKS-ben
A következőkre vonatkozik: Azure Local, 23H2-es verzió
Ez a cikk azt ismerteti, hogyan használhat csomópont-tárolókat egy AKS-fürtben.
Áttekintés
Az AKS ütemezési mechanizmusa felelős a podok csomópontokra való elhelyezéséért, és a felsőbb rétegbeli Kubernetes ütemezőn, a kube-scheduleren alapul. A podok adott csomópontokon való futtatását korlátozhatja úgy, hogy utasítja a csomópontot, hogy utasítsa el a podok egy csoportját csomópont-fertőzöttek használatával, amelyek az AKS-ütemezővel működnek együtt.
A csomópontok sérülései úgy működnek, hogy megjelölnek egy csomópontot, hogy az ütemező ne helyezzen el bizonyos podokat a megjelölt csomópontokon. Tűréseket helyezhet el egy podon, hogy az ütemező ütemezze a podot egy csomóponton egyező fertőzöttséggel. A taints és a tolerations együtt segít szabályozni, hogy az ütemező hogyan helyezi el a podokat a csomópontokra. További információkért lásd a aintások és a toleranciák példahasználati eseteit.
A taints kulcs-érték párok effektussal. Az effektusmezőnek három értéke van a csomóponthálózatok használatakor: NoExecute
, NoSchedule
és PreferNoSchedule
.
NoExecute
: A csomóponton már futó podok azonnal törlődnek, ha nem rendelkeznek megfelelő tűréssel. Ha egy pod megfelelő tűréssel rendelkezik, a rendszer kizárhatja, hatolerationSeconds
meg van adva.NoSchedule
: Ezen a csomóponton csak a megfelelő tűrésű podok vannak elhelyezve. A meglévő podok nem lesznek kiürítve.PreferNoSchedule
: Az ütemező nem helyez el olyan podokat, amelyek nem rendelkeznek megfelelő tűréssel.
Mielőtt elkezdené
- Ez a cikk feltételezi, hogy van egy meglévő AKS-fürtje. Ha AKS-fürtre van szüksége, létrehozhat egyet az Azure CLI, az Azure PowerShell vagy az Azure Portal használatával.
- Csomópontkészlet létrehozásakor hozzáadhat hozzá fertőzötteket. Ha fertőzöttet ad hozzá, az adott csomópontkészlet összes csomópontja is megkapja ezt a fertőzést.
Fontos
A teljes csomópontkészlet csomópontjaihoz szúrjon be hibákat vagy címkéket a használatával az aksarc nodepool
. Nem javasoljuk kubectl
, hogy használjon szennyezettségeket vagy címkéket a csomópontkészlet egyes csomópontjaira.
Csomópontkészlet-tárolók beállítása
Hozzon létre egy csomópontkészletet egy fertőzöttel a az aksarc nodepool add
parancs használatával. Adja meg a nevet taintnp
, és használja a --node-taints
paramétert a fertőzöttség megadásához sku=gpu:NoSchedule
:
az aksarc nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name taintnp \
--node-count 1 \
--node-taints sku=gpu:NoSchedule \
--no-wait
Ellenőrizze a csomópontkészlet állapotát a az aksarc nodepool list
következő paranccsal:
az aksarc nodepool list -g myResourceGroup --cluster-name myAKSCluster
Az alábbi példakimenet azt mutatja, hogy a taintnp
csomópontkészlet a megadott nodeTaints
csomópontokkal hoz létre csomópontokat:
[
{
...
"count": 1,
...
"name": "taintnp",
...
"provisioningState": "Succeeded",
...
"nodeTaints": [
"sku=gpu:NoSchedule"
],
...
},
...
]
A kubernetesben látható a fertőzöttségi információ a csomópontok ütemezési szabályainak kezeléséhez. A Kubernetes ütemezője a aints és a tolerations használatával korlátozhatja, hogy mely számítási feladatok futtathatók a csomópontokon.
- A rendszer egy olyan csomópontra alkalmaz egy fertőzést , amely azt jelzi, hogy csak bizonyos podok ütemezhetők rajtuk.
- Ezután egy tűrést alkalmazunk egy podra, amely lehetővé teszi számukra, hogy "elviseljék" a csomópontok szennyezettségét.
Csomópontkészlet-tűrések beállítása
Az előző lépésben alkalmazta a fertőzöttet a sku=gpu:NoSchedule
csomópontkészlet létrehozásakor. Az alábbi példa YAML-jegyzék egy tolerancia használatával teszi lehetővé a Kubernetes-ütemező számára, hogy NGINX-podot futtasson az adott csomópontkészlet egyik csomópontján:
Hozzon létre egy nginx-toleration.yaml nevű fájlt, és másolja/illessze be a következő YAML-példát:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- image: mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine
name: mypod
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 1
memory: 2G
tolerations:
- key: "sku"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"
Ütemezze a podot a kubectl apply
következő paranccsal:
kubectl apply -f nginx-toleration.yaml
A pod ütemezése és az NGINX-rendszerkép lekérése néhány másodpercet vesz igénybe.
Ellenőrizze az állapotot a kubectl describe pod
következő paranccsal:
kubectl describe pod mypod
Az alábbi sűrített példakimenet azt mutatja, hogy a rendszer alkalmazza a sku=gpu:NoSchedule
tűrést. Az Események szakaszban az ütemező hozzárendelte a podot a moc-lbeof1gn6x3
csomóponthoz:
[...]
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
sku=gpu:NoSchedule
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 54s default-scheduler Successfully assigned default/mypod to moc-lbeof1gn6x3
Normal Pulling 53s kubelet Pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
Normal Pulled 48s kubelet Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine" in 3.025148695s (3.025157609s including waiting)
Normal Created 48s kubelet Created container
Normal Started 48s kubelet Started container
A csomópontokon taintnp
csak azok a podok ütemezhetők, amelyeknél ez a toleranciát alkalmazzák. Minden más pod ütemezve van a nodepool1 csomópontkészletben. Ha több csomópontkészletet hoz létre, a aints és a tolerations használatával korlátozhatja, hogy mely podok ütemezhetők ezeken a csomópont-erőforrásokon.
Fürtcsomópontkészlet frissítése csomópont-fertőzöttség hozzáadásához
Frissítsen egy fürtöt csomópont-fertőzöttség hozzáadásához a az aksarc update
parancs és a --node-taints
paraméter használatával, amely sku=gpu:NoSchedule
megadja a fertőzöttet. A rendszer az összes meglévő fertőzöttet lecseréli az új értékekre. A régi fertőzöttek törlődnek:
az aksarc update -g myResourceGroup --cluster-name myAKSCluster --name taintnp --node-taints "sku=gpu:NoSchedule"