Используя антиаффинность pod, вы можете убедиться, что pod не совмещен с другими pod с определенными метками.
Так что у вас есть метка "app" со значениями "cassandra", "kafka""," мой-производитель "и" мой-потребитель ".
Поскольку вы хотите, чтобы кассандра, кафка и мой-производитель были на выделенных узлах сами по себе, вы просто настраиваете анти-сродство ко ВСЕМ существующимметки:
(см. https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ для полной схемы)
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- cassandra
- kafka
- my-producer
- my-consumer
Это ресурс "Pod", поэтому вы должны определить это в развертывании (где вытакже определите, сколько реплик) в шаблоне pod.
Поскольку вы хотите, чтобы три экземпляра my-consumer работали на одном и том же узле (или на самом деле, вам все равно, где они запускаются, поскольку к настоящему времени только один узел)слева), вам не нужно ничего определять относительно аффинности или антиаффинности:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-consumer
namespace: default
labels:
app: my-consumer
spec:
selector:
matchLabels:
app: my-consumer
replicas: 3 # here you set the number of replicas that should run
template: # this is the pod template
metadata:
labels:
app: my-consumer # now this is the label you can set an anti-affinity to
spec:
containers:
- image: ${IMAGE}
name: my-consumer
# affinity:
# now here below this you'd put the affinity-settings from above
# for the other deployments