我对K8S吊舱反亲和力规则有疑问。我有什么和我需要什么。
我有2个跨数据中心的K8S集群。例如,在每个DC中有5个节点。我有一个Pod部署,它在所有10个节点中的10个副本中运行。每个节点有1个Pod副本。 我想设置一个案例规则,如果一个DC将崩溃,则不要将5个副本从崩溃的DC迁移到运行状况DC。
我发现,可以通过“反亲和力”规则来做到这一点,但是在这种情况下我找不到任何示例。你有例子吗?
答案 0 :(得分:2)
从文档中 https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
您需要在部署中设置选择器,并在“反亲和力”部分中指出要匹配的值并使反亲和力为true:
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-cache
spec:
selector:
matchLabels:
app: store
replicas: 3
template:
metadata:
labels:
app: store
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- store
topologyKey: "kubernetes.io/hostname"
containers:
- name: redis-server
image: redis:3.2-alpine
您可以看到它正在使用标签选择器来尝试查找具有值app
的键store
,这意味着如果节点已经具有带有该标签的Pod,并且值kubernetes将应用-亲和力。
答案 1 :(得分:1)
查看DaemonSet。它将在每个节点上部署一个副本。 如果一个DC崩溃了,那么吊舱将不会重新部署到其他DC。
答案 2 :(得分:0)
谢谢你们,提供了很好的例子。正是我所需要的!