这是我的设置:
我的问题:我不希望同一个应用程序/版本的2个pod在同一节点上运行。这可以通过AntiAffinity完成,但是当我部署新版本时,它会尝试添加第3个pod(浪涌吊舱),但由于AntiAffinity设置而失败,因为只有2个节点。
问题:我可以微调AntiAffinity以允许相同应用但不同版本的pod在同一节点上运行吗?
以下是反映我的设置的规范。
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2
minReadySeconds: 10
strategy:
rollingUpdate:
maxUnavailable: 0
maxSurge: 1
template:
metadata:
labels:
app: my-app
...
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- my-app
topologyKey: "kubernetes.io/hostname"
答案 0 :(得分:0)
您可以,但它需要修改标签作为“新版本”的一部分:
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
pod-version-anti-affinity: my-app-v1
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
pod-version-anti-affinity: my-app-v1
topologyKey: kubernetes.io/hostname
这意味着部署的选择器仅查看“my-app”,它将在您的应用程序的所有“版本”中保持一致。
但是,pod本身还包含另一个特定于其“版本”的标签。这意味着反关联性规则可以仅针对该特定标签,这将允许同一应用程序的不同版本在滚动升级期间共同位于节点上。
您只需要知道在部署新版本时,您需要修改模板中的标签。亲和力(例如“-v2”)。