У меня проблема, когда я пытаюсь ограничить развертывание работой над избегайте определенного пула узлов, а nodeAffinity и nodeAntiAffinity, похоже, не работают.
- Мы используем DOKS (Digital Ocean Managed Kubernetes) v1.19.3
- У нас есть два пула узлов: инфра и клиенты, причем узлы на обоих помечены как таковые.
- В этом случае мы хотели бы избежать развертывания на узлах, помеченных как инфраструктура.
По какой-то причине кажется, что независимо от того, какую конфигурацию я использую, Kubernetes, кажется, случайным образом составляет расписание для обоих пулов узлов.
См. Конфигурацию ниже и результаты планирования.
фрагмент deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
namespace: "test"
labels:
app: wordpress
client: "test"
product: hosted-wordpress
version: v1
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
selector:
matchLabels:
app: wordpress
client: "test"
template:
metadata:
labels:
app: wordpress
client: "test"
product: hosted-wordpress
version: v1
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: doks.digitalocean.com/node-pool
operator: NotIn
values:
- infra
фрагмент описания узла обратите внимание на метку doks.digitalocean.com/node-pool=infra
kubectl describe node infra-3dmga
Name: infra-3dmga
Roles: <none>
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/instance-type=s-2vcpu-4gb
beta.kubernetes.io/os=linux
doks.digitalocean.com/node-id=67d84a52-8d08-4b19-87fe-1d837ba46eb6
doks.digitalocean.com/node-pool=infra
doks.digitalocean.com/node-pool-id=2e0f2a1d-fbfa-47e9-9136-c897e51c014a
doks.digitalocean.com/version=1.19.3-do.2
failure-domain.beta.kubernetes.io/region=tor1
kubernetes.io/arch=amd64
kubernetes.io/hostname=infra-3dmga
kubernetes.io/os=linux
node.kubernetes.io/instance-type=s-2vcpu-4gb
region=tor1
topology.kubernetes.io/region=tor1
Annotations: alpha.kubernetes.io/provided-node-ip: 10.137.0.230
csi.volume.kubernetes.io/nodeid: {"dobs.csi.digitalocean.com":"222551559"}
io.cilium.network.ipv4-cilium-host: 10.244.0.139
io.cilium.network.ipv4-health-ip: 10.244.0.209
io.cilium.network.ipv4-pod-cidr: 10.244.0.128/25
node.alpha.kubernetes.io/ttl: 0
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Sun, 20 Dec 2020 20:17:20 -0800
Taints: <none>
Unschedulable: false
Lease:
HolderIdentity: infra-3dmga
AcquireTime: <unset>
RenewTime: Fri, 12 Feb 2021 08:04:09 -0800
иногда приводит к
kubectl get po -n test -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wordpress-5bfcb6f44b-2j7kv 5/5 Running 0 1h 10.244.0.107 infra-3dmga <none> <none>
в других случаях:
kubectl get po -n test -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wordpress-5bfcb6f44b-b42wj 5/5 Running 0 5m 10.244.0.107 clients-3dmem <none> <none>
Я пробовал использовать nodeAntiAffinity для аналогичного эффекта.
И, наконец, я даже попытался создать тестовые метки вместо использования встроенных этикеток из Digital Ocean, и у меня такой же эффект (Affinity, похоже, вообще не работает для меня).
Я надеюсь, что кто-то может помочь мне решить или даже указать на глупую ошибку в моей конфигурации, потому что эта проблема сводила меня с ума, пытаясь ее решить (и это также полезная функция, когда она работает).
Спасибо,