Начиная - я не уверен, что вы имеете в виду, когда диск Azure заканчивается на узле, отличном от того, где назначен модуль - это невозможно, на мой взгляд (для полноты вы можете сделать это на виртуальной машине с помощью функция общих дисков вне AKS, но насколько мне известно, это не поддерживается в AKS для динамических дисков на момент написания). Если вы смотрите на аннотацию volume.kubernetes.io/selected-node
на PVC, я не верю, что она обновилась после первоначального создания.
Вы можете достичь нужной конфигурации, используя набор состояний с антиаффинитетом. Рассмотрим этот набор состояний. Он создает три модуля, которые должны находиться в разных зонах доступности. Я развертываю это в кластере AKS с пулом узлов (nodepool2) с двумя узлами в каждой зоне доступности:
❯ kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{","}{.metadata.labels.topology\.kubernetes\.io\/zone}{"\n"}{end}'
aks-nodepool1-25997496-vmss000000,0
aks-nodepool2-25997496-vmss000000,westus2-1
aks-nodepool2-25997496-vmss000001,westus2-2
aks-nodepool2-25997496-vmss000002,westus2-3
aks-nodepool2-25997496-vmss000003,westus2-1
aks-nodepool2-25997496-vmss000004,westus2-2
aks-nodepool2-25997496-vmss000005,westus2-3
После того, как набор состояний развернут и развернут, вы увидите, что каждый модуль был назначен одному из узлов nodepool2:
❯ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
echo-0 1/1 Running 0 3m42s 10.48.36.102 aks-nodepool2-25997496-vmss000001 <none> <none>
echo-1 1/1 Running 0 3m19s 10.48.36.135 aks-nodepool2-25997496-vmss000002 <none> <none>
echo-2 1/1 Running 0 2m55s 10.48.36.72 aks-nodepool2-25997496-vmss000000 <none> <none>
Каждый модуль создал PVC на основе шаблона:
❯ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
demo-echo-0 Bound pvc-bf6104e0-c05e-43d4-9ec5-fae425998f9d 1Gi RWO managed-premium 25m
demo-echo-1 Bound pvc-9d9fbd5f-617a-4582-abc3-ca34b1b178e4 1Gi RWO managed-premium 25m
demo-echo-2 Bound pvc-d914a745-688f-493b-9b82-21598d4335ca 1Gi RWO managed-premium 24m
Давайте посмотрим на один из созданных клипов:
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.kubernetes.io/bound-by-controller: "yes"
pv.kubernetes.io/provisioned-by: kubernetes.io/azure-disk
volumehelper.VolumeDynamicallyCreatedByKey: azure-disk-dynamic-provisioner
creationTimestamp: "2021-04-05T14:08:12Z"
finalizers:
- kubernetes.io/pv-protection
labels:
failure-domain.beta.kubernetes.io/region: westus2
failure-domain.beta.kubernetes.io/zone: westus2-3
name: pvc-9d9fbd5f-617a-4582-abc3-ca34b1b178e4
resourceVersion: "19275047"
uid: 945ad69a-92cc-4d8d-96f4-bdf0b80f9965
spec:
accessModes:
- ReadWriteOnce
azureDisk:
cachingMode: ReadOnly
diskName: kubernetes-dynamic-pvc-9d9fbd5f-617a-4582-abc3-ca34b1b178e4
diskURI: /subscriptions/02a062c5-366a-4984-9788-d9241055dda2/resourceGroups/rg-sandbox-aks-mc-sandbox0-westus2/providers/Microsoft.Compute/disks/kubernetes-dynamic-pvc-9d9fbd5f-617a-4582-abc3-ca34b1b178e4
fsType: ""
kind: Managed
readOnly: false
capacity:
storage: 1Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: demo-echo-1
namespace: zonetest
resourceVersion: "19275017"
uid: 9d9fbd5f-617a-4582-abc3-ca34b1b178e4
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: failure-domain.beta.kubernetes.io/region
operator: In
values:
- westus2
- key: failure-domain.beta.kubernetes.io/zone
operator: In
values:
- westus2-3
persistentVolumeReclaimPolicy: Delete
storageClassName: managed-premium
volumeMode: Filesystem
status:
phase: Bound
Как видите, у этого PV есть требуемый nodeAffinity
для узлов в failure-domain.beta.kubernetes.io/zone
со значением westus2-3
. Это гарантирует, что модуль, которому принадлежит этот PV, когда-либо будет размещен только на узле в westus2-3
, и что PV будет привязан к узлу, на котором работает диск при запуске модуля.
На этом этапе я удалил все поды, чтобы разместить их на других узлах:
❯ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
echo-0 1/1 Running 0 4m4s 10.48.36.168 aks-nodepool2-25997496-vmss000004 <none> <none>
echo-1 1/1 Running 0 3m30s 10.48.36.202 aks-nodepool2-25997496-vmss000005 <none> <none>
echo-2 1/1 Running 0 2m56s 10.48.36.42 aks-nodepool2-25997496-vmss000003 <none> <none>
Невозможно увидеть его через Kubernetes, но вы можете увидеть через портал Azure, что управляемый диск kubernetes-dynamic-pvc-bf6104e0-c05e-43d4-9ec5-fae425998f9d
, который поддерживает pv pvc-bf6104e0-c05e-43d4-9ec5-fae425998f9d
, который поддерживает PVC zonetest/demo-echo-0
, указан как Managed by: aks-nodepool2-25997496-vmss_4
, поэтому он был удален и назначен узлу, на котором находится модуль. Бег.
Снимок экрана портала, показывающий диск, подключенный к узлу 4
Если бы мне пришлось удалить узлы так, чтобы у меня не было узлов в АЗ 3, я бы не смог запустить под echo-1
, так как он привязан к диску в АЗ 3, который не может быть подключен к узлу, не находящемуся в АЗ 3. АЗ 3.
05.04.2021
emptyDir
StorageClass и никогда не исчерпывать достаточное количество реплик kafka. 02.04.2021