我想知道这是默认行为还是我的设置有问题。
我在 kubernetes 上运行了 150 个工作程序。
我使用 nodeSelector 让一组 kubernetes 工作进程(10 个工作进程)仅运行特定的部署,并为其创建了一个服务(type=LoadBalancer),当创建负载均衡器时,Kubernetes 的所有 150 个工作进程都注册到了负载均衡器,而我原本期望只看到此部署/服务的这一组工作进程(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 个节点仅运行此部署的 pod,并且没有其他工作节点正在运行此服务,我也没有其他服务或容器使用端口 8080
答案1
这是正常的。当 kubernetes 配置负载均衡器时,它会将所有节点配置为后端服务的一部分。负载均衡器不知道或不关心哪些节点正在运行哪些 pod。您可以将其视为将流量路由到簇(作为一个整体)而不是特定的工作负载。一旦流量到达集群,它就能够根据集群及其工作负载的当前状态智能地路由到正确的 pod。