Я хочу знать, является ли это поведением по умолчанию или что-то не так с моей настройкой.
У меня на кубернетах работает 150 рабочих.
Я заставил набор рабочих kubernetes (10 рабочих) запускать только определенное развертывание с помощью nodeSelector, я создал для него службу (type = LoadBalancer), когда был создан Load Balancer, все 150 рабочих Kubernetes были зарегистрированы в Load Balancer, в то время как я ожидал увидеть только этот набор рабочих (10 рабочих) этого развертывания / службы.
Он вел себя так же с alb-ingress-controller
и AWS NLB
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- port: 8080
type: LoadBalancer
и развертывание
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
selector:
matchLabels:
app: my-app
replicas: 10
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: master-api
image: private/my-app:prod
resources:
requests:
memory: 8000Mi
ports:
- containerPort: 8080
nodeSelector:
role: api
Я уже пометил 10 рабочих узлов меткой role=api
10 модулей только для запуска этого развертывания, и никакой другой работник не запускает эту службу, у меня также нет другой службы или контейнера, использующего порт 8080
Это нормально. Когда kubernetes настраивает балансировщик нагрузки, он настраивает все узлы, чтобы они были частью серверной службы. Балансировщик нагрузки не знает и не заботится о том, какие узлы на каких подах работают. Вы можете думать об этом как о маршрутизации трафика к кластер (в целом), а не для конкретных рабочих нагрузок. После того, как трафик поступает в кластер, он может быть разумно направлен в нужные модули в зависимости от текущего состояния кластера и его рабочих нагрузок.