我有4个节点:一个是系统(System),一个是开发(Dev),一个是测试(Qa),一个是用户验收测试(UAT)。
我的亲和性设置如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: auth
namespace: dev
labels:
app: auth
environment: dev
app-role: api
tier: backend
spec:
replicas: 1
selector:
matchLabels:
app: auth
template:
metadata:
labels:
app: auth
environment: dev
app-role: api
tier: backend
annotations:
build: _{Tag}_
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- auth
topologyKey: kubernetes.io/hostname
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: environment
operator: In
values:
- dev
containers:
- name: companyauth
image: company.azurecr.io/auth:_{Tag}_
imagePullPolicy: Always
env:
- name: ConnectionStrings__DevAuth
value: dev
ports:
- containerPort: 80
imagePullSecrets:
- name: ips
我的意图是确保在我的生产集群上,有3个节点位于3个不同的可用区。所有的pod都将被调度到不同的节点/可用区。然而,如果我已经在一个节点上安排了pod,那么当我进行部署时,它不会覆盖已经存在的pod。
0/4个节点可用:1个节点与pod偏好设置/反偏好设置不匹配,3个节点与节点选择器不匹配。
然而,如果我删除podAffinity,它就能正常工作,并使用部署中的新pod覆盖当前节点。正确的方法是什么,以确保我的生产集群上的部署始终在不同的节点和不同的可用区上安排pod并更新现有节点?